Documentation
¶
Index ¶
- type ActivityResponse
- type ActivitySchema
- type ActivitySchemaData
- type AddNoteRequest
- type AddNoteResponse
- type ApproveTickResponse
- type BlockerDetail
- type ClientMessage
- type CloseTickRequest
- type CloseTickResponse
- type ConnectedMessage
- type CreateTickRequest
- type CreateTickResponse
- type EpicInfo
- type ErrorMessage
- type GetTickResponse
- type HeartbeatMessage
- type HeartbeatResponseMessage
- type InfoResponse
- type ListTicksResponse
- type LocalStatusMessage
- type Note
- type RejectTickRequest
- type RejectTickResponse
- type RunEventData
- type RunEventMessage
- type RunEventMetrics
- type RunEventSource
- type RunEventTool
- type RunEventType
- type ServerMessage
- type StateFullMessage
- type StateFullMessageTicks
- type SyncFullMessage
- type SyncFullMessageTicks
- type TickAwaiting
- type TickColumn
- type TickCreateRequest
- type TickCreatedMessage
- type TickDeleteRequest
- type TickDeletedMessage
- type TickOperationRequest
- type TickOperationRequestPayload
- type TickOperationResponse
- type TickOperationType
- type TickRequires
- type TickResponse
- type TickRole
- type TickSchema
- type TickSchema_1
- type TickStatus
- type TickType
- type TickUpdateRequest
- type TickUpdatedMessage
- type TickVerdict
- type UpdateTickRequest
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActivityResponse ¶
type ActivityResponse struct {
// List of activity entries
Activities []ActivitySchema `json:"activities" yaml:"activities" mapstructure:"activities"`
}
Response from GET /api/activity
type ActivitySchema ¶
type ActivitySchema struct {
// Type of action (create, update, close, approve, reject, etc.)
Action string `json:"action" yaml:"action" mapstructure:"action"`
// Who performed the action (user name or agent)
Actor string `json:"actor" yaml:"actor" mapstructure:"actor"`
// Additional action-specific data
Data ActivitySchemaData `json:"data,omitempty,omitzero" yaml:"data,omitempty" mapstructure:"data,omitempty"`
// Parent epic ID if the tick belongs to an epic
Epic *string `json:"epic,omitempty,omitzero" yaml:"epic,omitempty" mapstructure:"epic,omitempty"`
// ID of the tick this activity is about
Tick string `json:"tick" yaml:"tick" mapstructure:"tick"`
// ISO timestamp when the activity occurred
Ts time.Time `json:"ts" yaml:"ts" mapstructure:"ts"`
}
Activity log entry tracking changes to ticks
type ActivitySchemaData ¶
type ActivitySchemaData map[string]interface{}
Additional action-specific data
type AddNoteRequest ¶
type AddNoteRequest struct {
// Note content to add
Message string `json:"message" yaml:"message" mapstructure:"message"`
}
Request body for POST /api/ticks/:id/note
type AddNoteResponse ¶
type AddNoteResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Updated parsed notes
NotesList []Note `json:"notesList" yaml:"notesList" mapstructure:"notesList"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Response from POST /api/ticks/:id/note
type ApproveTickResponse ¶
type ApproveTickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// Whether the tick was closed as a result of approval
Closed bool `json:"closed" yaml:"closed" mapstructure:"closed"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Response from POST /api/ticks/:id/approve
type BlockerDetail ¶
type BlockerDetail struct {
// Blocker tick ID
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Blocker tick status
Status string `json:"status" yaml:"status" mapstructure:"status"`
// Blocker tick title
Title string `json:"title" yaml:"title" mapstructure:"title"`
}
Details about a blocking tick
type ClientMessage ¶
type ClientMessage interface{}
Union of all messages sent from clients to server/DO
type CloseTickRequest ¶
type CloseTickRequest struct {
// Reason for closing
Reason *string `json:"reason,omitempty,omitzero" yaml:"reason,omitempty" mapstructure:"reason,omitempty"`
}
Request body for POST /api/ticks/:id/close
type CloseTickResponse ¶
type CloseTickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Response from POST /api/ticks/:id/close
type ConnectedMessage ¶
type ConnectedMessage struct {
// ConnectionId corresponds to the JSON schema field "connectionId".
ConnectionId string `json:"connectionId" yaml:"connectionId" mapstructure:"connectionId"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Server confirms WebSocket connection
type CreateTickRequest ¶
type CreateTickRequest struct {
// Detailed description
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// Parent epic ID
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (defaults to 2)
Priority *int `json:"priority,omitempty,omitzero" yaml:"priority,omitempty" mapstructure:"priority,omitempty"`
// Pre-declared gate for closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Title of the new tick
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type of tick (defaults to task)
Type *TickType `json:"type,omitempty,omitzero" yaml:"type,omitempty" mapstructure:"type,omitempty"`
}
Request body for POST /api/ticks
type CreateTickResponse ¶
type CreateTickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Response from POST /api/ticks
type EpicInfo ¶
type EpicInfo struct {
// Epic ID
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Epic title
Title string `json:"title" yaml:"title" mapstructure:"title"`
}
Summary info about an epic for dropdown lists
type ErrorMessage ¶
type ErrorMessage struct {
// Message corresponds to the JSON schema field "message".
Message string `json:"message" yaml:"message" mapstructure:"message"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Error notification
type GetTickResponse ¶
type GetTickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// Details about blocking ticks
BlockerDetails []BlockerDetail `json:"blockerDetails" yaml:"blockerDetails" mapstructure:"blockerDetails"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Parsed notes from tick.notes
NotesList []Note `json:"notesList" yaml:"notesList" mapstructure:"notesList"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Detailed tick response with parsed notes and blocker details
type HeartbeatMessage ¶
type HeartbeatMessage struct {
// Token corresponds to the JSON schema field "token".
Token *string `json:"token,omitempty,omitzero" yaml:"token,omitempty" mapstructure:"token,omitempty"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Heartbeat ping
type HeartbeatResponseMessage ¶
type HeartbeatResponseMessage struct {
// Unix timestamp when session expires
ExpiresAt int `json:"expiresAt" yaml:"expiresAt" mapstructure:"expiresAt"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Heartbeat pong
type InfoResponse ¶
type InfoResponse struct {
// List of epics for dropdown
Epics []EpicInfo `json:"epics" yaml:"epics" mapstructure:"epics"`
// Full repository name (owner/repo[:worktree])
RepoName string `json:"repoName" yaml:"repoName" mapstructure:"repoName"`
}
Response from GET /api/info
type ListTicksResponse ¶
type ListTicksResponse struct {
// List of ticks matching the query
Ticks []TickResponse `json:"ticks" yaml:"ticks" mapstructure:"ticks"`
}
Response from GET /api/ticks
type LocalStatusMessage ¶
type LocalStatusMessage struct {
// Connected corresponds to the JSON schema field "connected".
Connected bool `json:"connected" yaml:"connected" mapstructure:"connected"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Local agent online/offline status
type Note ¶
type Note struct {
// Note author (human or agent)
Author *string `json:"author,omitempty,omitzero" yaml:"author,omitempty" mapstructure:"author,omitempty"`
// Note content
Text string `json:"text" yaml:"text" mapstructure:"text"`
// Timestamp portion (YYYY-MM-DD HH:MM)
Timestamp *string `json:"timestamp,omitempty,omitzero" yaml:"timestamp,omitempty" mapstructure:"timestamp,omitempty"`
}
Parsed note entry from tick.notes
type RejectTickRequest ¶
type RejectTickRequest struct {
// Feedback explaining why the tick was rejected
Feedback *string `json:"feedback,omitempty,omitzero" yaml:"feedback,omitempty" mapstructure:"feedback,omitempty"`
}
Request body for POST /api/ticks/:id/reject
type RejectTickResponse ¶
type RejectTickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// Whether the tick was closed as a result of rejection
Closed bool `json:"closed" yaml:"closed" mapstructure:"closed"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Response from POST /api/ticks/:id/reject
type RunEventData ¶
type RunEventData struct {
// ActiveTool corresponds to the JSON schema field "activeTool".
ActiveTool *RunEventTool `json:"activeTool,omitempty,omitzero" yaml:"activeTool,omitempty" mapstructure:"activeTool,omitempty"`
// Iteration corresponds to the JSON schema field "iteration".
Iteration *int `json:"iteration,omitempty,omitzero" yaml:"iteration,omitempty" mapstructure:"iteration,omitempty"`
// Human-readable message
Message *string `json:"message,omitempty,omitzero" yaml:"message,omitempty" mapstructure:"message,omitempty"`
// Metrics corresponds to the JSON schema field "metrics".
Metrics *RunEventMetrics `json:"metrics,omitempty,omitzero" yaml:"metrics,omitempty" mapstructure:"metrics,omitempty"`
// Number of API turns
NumTurns *int `json:"numTurns,omitempty,omitzero" yaml:"numTurns,omitempty" mapstructure:"numTurns,omitempty"`
// Current output text
Output *string `json:"output,omitempty,omitzero" yaml:"output,omitempty" mapstructure:"output,omitempty"`
// Status text
Status *string `json:"status,omitempty,omitzero" yaml:"status,omitempty" mapstructure:"status,omitempty"`
// Success corresponds to the JSON schema field "success".
Success *bool `json:"success,omitempty,omitzero" yaml:"success,omitempty" mapstructure:"success,omitempty"`
// Number of tasks (context events)
TaskCount *int `json:"taskCount,omitempty,omitzero" yaml:"taskCount,omitempty" mapstructure:"taskCount,omitempty"`
// Timestamp corresponds to the JSON schema field "timestamp".
Timestamp time.Time `json:"timestamp" yaml:"timestamp" mapstructure:"timestamp"`
// Token count (context events)
TokenCount *int `json:"tokenCount,omitempty,omitzero" yaml:"tokenCount,omitempty" mapstructure:"tokenCount,omitempty"`
// Type corresponds to the JSON schema field "type".
Type RunEventType `json:"type" yaml:"type" mapstructure:"type"`
}
Run event payload data
type RunEventMessage ¶
type RunEventMessage struct {
// Epic being worked on
EpicId string `json:"epicId" yaml:"epicId" mapstructure:"epicId"`
// Event corresponds to the JSON schema field "event".
Event RunEventData `json:"event" yaml:"event" mapstructure:"event"`
// Source corresponds to the JSON schema field "source".
Source RunEventSource `json:"source" yaml:"source" mapstructure:"source"`
// Task ID (if task-level event)
TaskId *string `json:"taskId,omitempty,omitzero" yaml:"taskId,omitempty" mapstructure:"taskId,omitempty"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Live run output event from local agent
type RunEventMetrics ¶
type RunEventMetrics struct {
// CacheCreationTokens corresponds to the JSON schema field "cacheCreationTokens".
CacheCreationTokens *int `` /* 127-byte string literal not displayed */
// CacheReadTokens corresponds to the JSON schema field "cacheReadTokens".
CacheReadTokens *int `json:"cacheReadTokens,omitempty,omitzero" yaml:"cacheReadTokens,omitempty" mapstructure:"cacheReadTokens,omitempty"`
// CostUsd corresponds to the JSON schema field "costUsd".
CostUsd *float64 `json:"costUsd,omitempty,omitzero" yaml:"costUsd,omitempty" mapstructure:"costUsd,omitempty"`
// DurationMs corresponds to the JSON schema field "durationMs".
DurationMs *int `json:"durationMs,omitempty,omitzero" yaml:"durationMs,omitempty" mapstructure:"durationMs,omitempty"`
// InputTokens corresponds to the JSON schema field "inputTokens".
InputTokens *int `json:"inputTokens,omitempty,omitzero" yaml:"inputTokens,omitempty" mapstructure:"inputTokens,omitempty"`
// OutputTokens corresponds to the JSON schema field "outputTokens".
OutputTokens *int `json:"outputTokens,omitempty,omitzero" yaml:"outputTokens,omitempty" mapstructure:"outputTokens,omitempty"`
}
Token and cost metrics during run
type RunEventSource ¶
type RunEventSource string
const RunEventSourceRalph RunEventSource = "ralph"
const RunEventSourceSwarmOrchestrator RunEventSource = "swarm-orchestrator"
const RunEventSourceSwarmSubagent RunEventSource = "swarm-subagent"
type RunEventTool ¶
type RunEventTool struct {
// Duration corresponds to the JSON schema field "duration".
Duration *int `json:"duration,omitempty,omitzero" yaml:"duration,omitempty" mapstructure:"duration,omitempty"`
// Input corresponds to the JSON schema field "input".
Input *string `json:"input,omitempty,omitzero" yaml:"input,omitempty" mapstructure:"input,omitempty"`
// Name corresponds to the JSON schema field "name".
Name string `json:"name" yaml:"name" mapstructure:"name"`
}
Active tool information
type RunEventType ¶
type RunEventType string
const RunEventTypeContextFailed RunEventType = "context-failed"
const RunEventTypeContextGenerated RunEventType = "context-generated"
const RunEventTypeContextGenerating RunEventType = "context-generating"
const RunEventTypeContextLoaded RunEventType = "context-loaded"
const RunEventTypeContextSkipped RunEventType = "context-skipped"
const RunEventTypeEpicCompleted RunEventType = "epic-completed"
const RunEventTypeEpicStarted RunEventType = "epic-started"
const RunEventTypeTaskCompleted RunEventType = "task-completed"
const RunEventTypeTaskStarted RunEventType = "task-started"
const RunEventTypeTaskUpdate RunEventType = "task-update"
const RunEventTypeToolActivity RunEventType = "tool-activity"
type ServerMessage ¶
type ServerMessage interface{}
Union of all messages sent from server/DO to clients
type StateFullMessage ¶
type StateFullMessage struct {
// Ticks corresponds to the JSON schema field "ticks".
Ticks StateFullMessageTicks `json:"ticks" yaml:"ticks" mapstructure:"ticks"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Full tick state on connection
type StateFullMessageTicks ¶
type StateFullMessageTicks map[string]TickSchema_1
type SyncFullMessage ¶
type SyncFullMessage struct {
// Ticks corresponds to the JSON schema field "ticks".
Ticks SyncFullMessageTicks `json:"ticks" yaml:"ticks" mapstructure:"ticks"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Local agent sends full tick state to DO
type SyncFullMessageTicks ¶
type SyncFullMessageTicks map[string]TickSchema_1
type TickAwaiting ¶
type TickAwaiting string
const TickAwaitingApproval TickAwaiting = "approval"
const TickAwaitingCheckpoint TickAwaiting = "checkpoint"
const TickAwaitingContent TickAwaiting = "content"
const TickAwaitingEscalation TickAwaiting = "escalation"
const TickAwaitingInput TickAwaiting = "input"
const TickAwaitingReview TickAwaiting = "review"
const TickAwaitingWork TickAwaiting = "work"
type TickColumn ¶
type TickColumn string
const TickColumnAgent TickColumn = "agent"
const TickColumnBlocked TickColumn = "blocked"
const TickColumnDone TickColumn = "done"
const TickColumnHuman TickColumn = "human"
const TickColumnReady TickColumn = "ready"
type TickCreateRequest ¶
type TickCreateRequest struct {
// Tick corresponds to the JSON schema field "tick".
Tick TickSchema_1 `json:"tick" yaml:"tick" mapstructure:"tick"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Client request to create tick
type TickCreatedMessage ¶ added in v0.14.0
type TickCreatedMessage struct {
// Tick corresponds to the JSON schema field "tick".
Tick TickSchema_1 `json:"tick" yaml:"tick" mapstructure:"tick"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Single tick created. Broadcast by the DO when a previously-unknown tick is synced; clients apply it identically to tick_updated.
type TickDeleteRequest ¶
type TickDeleteRequest struct {
// Id corresponds to the JSON schema field "id".
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Client request to delete tick
type TickDeletedMessage ¶
type TickDeletedMessage struct {
// Id corresponds to the JSON schema field "id".
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Tick deleted
type TickOperationRequest ¶
type TickOperationRequest struct {
// Authenticated session user id (opaque, not an email) of the cloud user who
// initiated the operation. Used to attribute activity log entries.
Actor *string `json:"actor,omitempty,omitzero" yaml:"actor,omitempty" mapstructure:"actor,omitempty"`
// Operation corresponds to the JSON schema field "operation".
Operation TickOperationType `json:"operation" yaml:"operation" mapstructure:"operation"`
// Payload corresponds to the JSON schema field "payload".
Payload *TickOperationRequestPayload `json:"payload,omitempty,omitzero" yaml:"payload,omitempty" mapstructure:"payload,omitempty"`
// RequestId corresponds to the JSON schema field "requestId".
RequestId string `json:"requestId" yaml:"requestId" mapstructure:"requestId"`
// TickId corresponds to the JSON schema field "tickId".
TickId string `json:"tickId" yaml:"tickId" mapstructure:"tickId"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
RPC request for tick operation
type TickOperationRequestPayload ¶
type TickOperationRequestPayload struct {
// Message corresponds to the JSON schema field "message".
Message *string `json:"message,omitempty,omitzero" yaml:"message,omitempty" mapstructure:"message,omitempty"`
// Reason corresponds to the JSON schema field "reason".
Reason *string `json:"reason,omitempty,omitzero" yaml:"reason,omitempty" mapstructure:"reason,omitempty"`
}
type TickOperationResponse ¶
type TickOperationResponse struct {
// Error corresponds to the JSON schema field "error".
Error *string `json:"error,omitempty,omitzero" yaml:"error,omitempty" mapstructure:"error,omitempty"`
// RequestId corresponds to the JSON schema field "requestId".
RequestId string `json:"requestId" yaml:"requestId" mapstructure:"requestId"`
// Success corresponds to the JSON schema field "success".
Success bool `json:"success" yaml:"success" mapstructure:"success"`
// Tick corresponds to the JSON schema field "tick".
Tick *TickSchema_1 `json:"tick,omitempty,omitzero" yaml:"tick,omitempty" mapstructure:"tick,omitempty"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
RPC response for tick operation
type TickOperationType ¶
type TickOperationType string
const TickOperationTypeAddNote TickOperationType = "add_note"
const TickOperationTypeApprove TickOperationType = "approve"
const TickOperationTypeClose TickOperationType = "close"
const TickOperationTypeReject TickOperationType = "reject"
const TickOperationTypeReopen TickOperationType = "reopen"
type TickRequires ¶
type TickRequires string
const TickRequiresApproval TickRequires = "approval"
const TickRequiresContent TickRequires = "content"
const TickRequiresReview TickRequires = "review"
type TickResponse ¶
type TickResponse struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// Computed kanban column
Column TickColumn `json:"column" yaml:"column" mapstructure:"column"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Whether this tick is blocked by unresolved dependencies
IsBlocked bool `json:"isBlocked" yaml:"isBlocked" mapstructure:"isBlocked"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
Tick with computed board fields (used in list responses)
type TickRole ¶ added in v0.19.0
type TickRole string
const TickRoleCloseout TickRole = "closeout"
const TickRoleReview TickRole = "review"
type TickSchema ¶
type TickSchema struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
A single work item (task, bug, feature, epic, or chore)
type TickSchema_1 ¶
type TickSchema_1 struct {
// Criteria that must be met for completion
AcceptanceCriteria *string `` /* 127-byte string literal not displayed */
// Tick IDs to preferably work first if feasible; soft ordering only, never gates
// readiness (use blocked_by for that). Missing or closed targets are ignored
After []string `json:"after,omitempty,omitzero" yaml:"after,omitempty" mapstructure:"after,omitempty"`
// Current wait state - what the tick is waiting for
Awaiting *TickAwaiting `json:"awaiting,omitempty,omitzero" yaml:"awaiting,omitempty" mapstructure:"awaiting,omitempty"`
// IDs of ticks that block this one
BlockedBy []string `json:"blocked_by,omitempty,omitzero" yaml:"blocked_by,omitempty" mapstructure:"blocked_by,omitempty"`
// ISO timestamp when the tick was closed
ClosedAt *time.Time `json:"closed_at,omitempty,omitzero" yaml:"closed_at,omitempty" mapstructure:"closed_at,omitempty"`
// Reason for closing (e.g., completed, wont-fix, duplicate)
ClosedReason *string `json:"closed_reason,omitempty,omitzero" yaml:"closed_reason,omitempty" mapstructure:"closed_reason,omitempty"`
// ISO timestamp when the tick was created
CreatedAt time.Time `json:"created_at" yaml:"created_at" mapstructure:"created_at"`
// Who created this tick
CreatedBy string `json:"created_by" yaml:"created_by" mapstructure:"created_by"`
// ISO timestamp - tick is deferred until this time
DeferUntil *time.Time `json:"defer_until,omitempty,omitzero" yaml:"defer_until,omitempty" mapstructure:"defer_until,omitempty"`
// Detailed description of the work to be done
Description *string `json:"description,omitempty,omitzero" yaml:"description,omitempty" mapstructure:"description,omitempty"`
// ID of tick during which this tick was discovered
DiscoveredFrom *string `json:"discovered_from,omitempty,omitzero" yaml:"discovered_from,omitempty" mapstructure:"discovered_from,omitempty"`
// Reference to external issue tracker (e.g., GitHub issue URL)
ExternalRef *string `json:"external_ref,omitempty,omitzero" yaml:"external_ref,omitempty" mapstructure:"external_ref,omitempty"`
// Unique identifier for the tick
Id string `json:"id" yaml:"id" mapstructure:"id"`
// Optional labels for categorization
Labels []string `json:"labels,omitempty,omitzero" yaml:"labels,omitempty" mapstructure:"labels,omitempty"`
// Legacy field - use awaiting instead. True means awaiting=work
Manual *bool `json:"manual,omitempty,omitzero" yaml:"manual,omitempty" mapstructure:"manual,omitempty"`
// Timestamped notes appended during work
Notes *string `json:"notes,omitempty,omitzero" yaml:"notes,omitempty" mapstructure:"notes,omitempty"`
// Who is responsible for this tick (agent or human)
Owner string `json:"owner" yaml:"owner" mapstructure:"owner"`
// Parent epic ID if this tick belongs to an epic
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// Priority level (0=highest, 4=lowest)
Priority int `json:"priority" yaml:"priority" mapstructure:"priority"`
// Pre-declared gate that must be satisfied before closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// Process-tick role in an epic's skeleton: review (final review) or closeout
// (retro + plan next). Absent means a normal work tick
Role *TickRole `json:"role,omitempty,omitzero" yaml:"role,omitempty" mapstructure:"role,omitempty"`
// ISO timestamp when the tick entered in_progress status
StartedAt *time.Time `json:"started_at,omitempty,omitzero" yaml:"started_at,omitempty" mapstructure:"started_at,omitempty"`
// Status corresponds to the JSON schema field "status".
Status TickStatus `json:"status" yaml:"status" mapstructure:"status"`
// Optional precise ISO calendar day (YYYY-MM-DD) the tick targets; no
// time-of-day, no fuzziness. Absent is the common case. Feeds the derived
// overdue/on-track signal and never gates execution
TargetDate *string `json:"target_date,omitempty,omitzero" yaml:"target_date,omitempty" mapstructure:"target_date,omitempty"`
// Short title describing the work item
Title string `json:"title" yaml:"title" mapstructure:"title"`
// Type corresponds to the JSON schema field "type".
Type TickType `json:"type" yaml:"type" mapstructure:"type"`
// ISO timestamp when the tick was last updated
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at" mapstructure:"updated_at"`
// Human response to an awaiting state
Verdict *TickVerdict `json:"verdict,omitempty,omitzero" yaml:"verdict,omitempty" mapstructure:"verdict,omitempty"`
}
A single work item (task, bug, feature, epic, or chore)
type TickStatus ¶
type TickStatus string
const TickStatusClosed TickStatus = "closed"
const TickStatusInProgress TickStatus = "in_progress"
const TickStatusOpen TickStatus = "open"
type TickType ¶
type TickType string
const TickTypeBug TickType = "bug"
const TickTypeChore TickType = "chore"
const TickTypeEpic TickType = "epic"
const TickTypeFeature TickType = "feature"
const TickTypeTask TickType = "task"
type TickUpdateRequest ¶
type TickUpdateRequest struct {
// Tick corresponds to the JSON schema field "tick".
Tick TickSchema_1 `json:"tick" yaml:"tick" mapstructure:"tick"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Client request to update tick
type TickUpdatedMessage ¶
type TickUpdatedMessage struct {
// Tick corresponds to the JSON schema field "tick".
Tick TickSchema_1 `json:"tick" yaml:"tick" mapstructure:"tick"`
// Type corresponds to the JSON schema field "type".
Type interface{} `json:"type" yaml:"type" mapstructure:"type"`
}
Single tick updated
type TickVerdict ¶
type TickVerdict string
const TickVerdictApproved TickVerdict = "approved"
const TickVerdictRejected TickVerdict = "rejected"
type UpdateTickRequest ¶
type UpdateTickRequest struct {
// New owner
Owner *string `json:"owner,omitempty,omitzero" yaml:"owner,omitempty" mapstructure:"owner,omitempty"`
// New parent epic ID
Parent *string `json:"parent,omitempty,omitzero" yaml:"parent,omitempty" mapstructure:"parent,omitempty"`
// New priority level
Priority *int `json:"priority,omitempty,omitzero" yaml:"priority,omitempty" mapstructure:"priority,omitempty"`
// Pre-declared gate for closing
Requires *TickRequires `json:"requires,omitempty,omitzero" yaml:"requires,omitempty" mapstructure:"requires,omitempty"`
// New tick type
Type *TickType `json:"type,omitempty,omitzero" yaml:"type,omitempty" mapstructure:"type,omitempty"`
}
Request body for PATCH /api/ticks/:id