@ginkoai/cli 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/commands/agent/agent-client.d.ts +150 -0
  2. package/dist/commands/agent/agent-client.d.ts.map +1 -0
  3. package/dist/commands/agent/agent-client.js +170 -0
  4. package/dist/commands/agent/agent-client.js.map +1 -0
  5. package/dist/commands/agent/index.d.ts +22 -0
  6. package/dist/commands/agent/index.d.ts.map +1 -0
  7. package/dist/commands/agent/index.js +121 -0
  8. package/dist/commands/agent/index.js.map +1 -0
  9. package/dist/commands/agent/list.d.ts +22 -0
  10. package/dist/commands/agent/list.d.ts.map +1 -0
  11. package/dist/commands/agent/list.js +119 -0
  12. package/dist/commands/agent/list.js.map +1 -0
  13. package/dist/commands/agent/register.d.ts +21 -0
  14. package/dist/commands/agent/register.d.ts.map +1 -0
  15. package/dist/commands/agent/register.js +97 -0
  16. package/dist/commands/agent/register.js.map +1 -0
  17. package/dist/commands/agent/status.d.ts +19 -0
  18. package/dist/commands/agent/status.d.ts.map +1 -0
  19. package/dist/commands/agent/status.js +271 -0
  20. package/dist/commands/agent/status.js.map +1 -0
  21. package/dist/commands/agent/work.d.ts +22 -0
  22. package/dist/commands/agent/work.d.ts.map +1 -0
  23. package/dist/commands/agent/work.js +459 -0
  24. package/dist/commands/agent/work.js.map +1 -0
  25. package/dist/commands/checkpoint/create.d.ts +27 -0
  26. package/dist/commands/checkpoint/create.d.ts.map +1 -0
  27. package/dist/commands/checkpoint/create.js +82 -0
  28. package/dist/commands/checkpoint/create.js.map +1 -0
  29. package/dist/commands/checkpoint/index.d.ts +23 -0
  30. package/dist/commands/checkpoint/index.d.ts.map +1 -0
  31. package/dist/commands/checkpoint/index.js +91 -0
  32. package/dist/commands/checkpoint/index.js.map +1 -0
  33. package/dist/commands/checkpoint/list.d.ts +27 -0
  34. package/dist/commands/checkpoint/list.d.ts.map +1 -0
  35. package/dist/commands/checkpoint/list.js +115 -0
  36. package/dist/commands/checkpoint/list.js.map +1 -0
  37. package/dist/commands/checkpoint/show.d.ts +23 -0
  38. package/dist/commands/checkpoint/show.d.ts.map +1 -0
  39. package/dist/commands/checkpoint/show.js +102 -0
  40. package/dist/commands/checkpoint/show.js.map +1 -0
  41. package/dist/commands/dlq.d.ts +24 -0
  42. package/dist/commands/dlq.d.ts.map +1 -0
  43. package/dist/commands/dlq.js +172 -0
  44. package/dist/commands/dlq.js.map +1 -0
  45. package/dist/commands/escalation/create.d.ts +22 -0
  46. package/dist/commands/escalation/create.d.ts.map +1 -0
  47. package/dist/commands/escalation/create.js +122 -0
  48. package/dist/commands/escalation/create.js.map +1 -0
  49. package/dist/commands/escalation/escalation-client.d.ts +101 -0
  50. package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
  51. package/dist/commands/escalation/escalation-client.js +129 -0
  52. package/dist/commands/escalation/escalation-client.js.map +1 -0
  53. package/dist/commands/escalation/index.d.ts +22 -0
  54. package/dist/commands/escalation/index.d.ts.map +1 -0
  55. package/dist/commands/escalation/index.js +94 -0
  56. package/dist/commands/escalation/index.js.map +1 -0
  57. package/dist/commands/escalation/list.d.ts +24 -0
  58. package/dist/commands/escalation/list.d.ts.map +1 -0
  59. package/dist/commands/escalation/list.js +170 -0
  60. package/dist/commands/escalation/list.js.map +1 -0
  61. package/dist/commands/escalation/resolve.d.ts +20 -0
  62. package/dist/commands/escalation/resolve.d.ts.map +1 -0
  63. package/dist/commands/escalation/resolve.js +102 -0
  64. package/dist/commands/escalation/resolve.js.map +1 -0
  65. package/dist/commands/graph/api-client.d.ts +21 -1
  66. package/dist/commands/graph/api-client.d.ts.map +1 -1
  67. package/dist/commands/graph/api-client.js +23 -0
  68. package/dist/commands/graph/api-client.js.map +1 -1
  69. package/dist/commands/handoff.d.ts.map +1 -1
  70. package/dist/commands/handoff.js +9 -1
  71. package/dist/commands/handoff.js.map +1 -1
  72. package/dist/commands/log.d.ts +3 -0
  73. package/dist/commands/log.d.ts.map +1 -1
  74. package/dist/commands/log.js +73 -14
  75. package/dist/commands/log.js.map +1 -1
  76. package/dist/commands/notifications/history.d.ts +21 -0
  77. package/dist/commands/notifications/history.d.ts.map +1 -0
  78. package/dist/commands/notifications/history.js +160 -0
  79. package/dist/commands/notifications/history.js.map +1 -0
  80. package/dist/commands/notifications/index.d.ts +22 -0
  81. package/dist/commands/notifications/index.d.ts.map +1 -0
  82. package/dist/commands/notifications/index.js +87 -0
  83. package/dist/commands/notifications/index.js.map +1 -0
  84. package/dist/commands/notifications/list.d.ts +19 -0
  85. package/dist/commands/notifications/list.d.ts.map +1 -0
  86. package/dist/commands/notifications/list.js +132 -0
  87. package/dist/commands/notifications/list.js.map +1 -0
  88. package/dist/commands/notifications/test.d.ts +19 -0
  89. package/dist/commands/notifications/test.d.ts.map +1 -0
  90. package/dist/commands/notifications/test.js +217 -0
  91. package/dist/commands/notifications/test.js.map +1 -0
  92. package/dist/commands/orchestrate.d.ts +25 -0
  93. package/dist/commands/orchestrate.d.ts.map +1 -0
  94. package/dist/commands/orchestrate.js +858 -0
  95. package/dist/commands/orchestrate.js.map +1 -0
  96. package/dist/commands/sprint/deps.d.ts +29 -0
  97. package/dist/commands/sprint/deps.d.ts.map +1 -0
  98. package/dist/commands/sprint/deps.js +269 -0
  99. package/dist/commands/sprint/deps.js.map +1 -0
  100. package/dist/commands/sprint/index.d.ts +10 -5
  101. package/dist/commands/sprint/index.d.ts.map +1 -1
  102. package/dist/commands/sprint/index.js +26 -5
  103. package/dist/commands/sprint/index.js.map +1 -1
  104. package/dist/commands/start/index.d.ts.map +1 -1
  105. package/dist/commands/start/index.js +6 -0
  106. package/dist/commands/start/index.js.map +1 -1
  107. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  108. package/dist/commands/start/start-reflection.js +8 -0
  109. package/dist/commands/start/start-reflection.js.map +1 -1
  110. package/dist/commands/verify.d.ts +17 -0
  111. package/dist/commands/verify.d.ts.map +1 -0
  112. package/dist/commands/verify.js +232 -0
  113. package/dist/commands/verify.js.map +1 -0
  114. package/dist/core/session-log-manager.d.ts +1 -1
  115. package/dist/core/session-log-manager.d.ts.map +1 -1
  116. package/dist/index.js +78 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
  119. package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
  120. package/dist/lib/__tests__/task-timeout.test.js +278 -0
  121. package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
  122. package/dist/lib/agent-heartbeat.d.ts +68 -0
  123. package/dist/lib/agent-heartbeat.d.ts.map +1 -0
  124. package/dist/lib/agent-heartbeat.js +117 -0
  125. package/dist/lib/agent-heartbeat.js.map +1 -0
  126. package/dist/lib/checkpoint.d.ts +85 -0
  127. package/dist/lib/checkpoint.d.ts.map +1 -0
  128. package/dist/lib/checkpoint.js +323 -0
  129. package/dist/lib/checkpoint.js.map +1 -0
  130. package/dist/lib/context-metrics.d.ts +230 -0
  131. package/dist/lib/context-metrics.d.ts.map +1 -0
  132. package/dist/lib/context-metrics.js +372 -0
  133. package/dist/lib/context-metrics.js.map +1 -0
  134. package/dist/lib/dead-letter-queue.d.ts +108 -0
  135. package/dist/lib/dead-letter-queue.d.ts.map +1 -0
  136. package/dist/lib/dead-letter-queue.js +378 -0
  137. package/dist/lib/dead-letter-queue.js.map +1 -0
  138. package/dist/lib/event-logger.d.ts +9 -1
  139. package/dist/lib/event-logger.d.ts.map +1 -1
  140. package/dist/lib/event-logger.js +45 -3
  141. package/dist/lib/event-logger.js.map +1 -1
  142. package/dist/lib/event-queue.d.ts.map +1 -1
  143. package/dist/lib/event-queue.js +13 -2
  144. package/dist/lib/event-queue.js.map +1 -1
  145. package/dist/lib/examples/timeout-demo.d.ts +13 -0
  146. package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
  147. package/dist/lib/examples/timeout-demo.js +102 -0
  148. package/dist/lib/examples/timeout-demo.js.map +1 -0
  149. package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
  150. package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
  151. package/dist/lib/examples/timeout-integration-example.js +223 -0
  152. package/dist/lib/examples/timeout-integration-example.js.map +1 -0
  153. package/dist/lib/notification-hooks.d.ts +103 -0
  154. package/dist/lib/notification-hooks.d.ts.map +1 -0
  155. package/dist/lib/notification-hooks.js +223 -0
  156. package/dist/lib/notification-hooks.js.map +1 -0
  157. package/dist/lib/notifications/discord.d.ts +20 -0
  158. package/dist/lib/notifications/discord.d.ts.map +1 -0
  159. package/dist/lib/notifications/discord.js +140 -0
  160. package/dist/lib/notifications/discord.js.map +1 -0
  161. package/dist/lib/notifications/index.d.ts +66 -0
  162. package/dist/lib/notifications/index.d.ts.map +1 -0
  163. package/dist/lib/notifications/index.js +120 -0
  164. package/dist/lib/notifications/index.js.map +1 -0
  165. package/dist/lib/notifications/slack.d.ts +20 -0
  166. package/dist/lib/notifications/slack.d.ts.map +1 -0
  167. package/dist/lib/notifications/slack.js +186 -0
  168. package/dist/lib/notifications/slack.js.map +1 -0
  169. package/dist/lib/notifications/teams.d.ts +20 -0
  170. package/dist/lib/notifications/teams.d.ts.map +1 -0
  171. package/dist/lib/notifications/teams.js +146 -0
  172. package/dist/lib/notifications/teams.js.map +1 -0
  173. package/dist/lib/notifications/webhook.d.ts +23 -0
  174. package/dist/lib/notifications/webhook.d.ts.map +1 -0
  175. package/dist/lib/notifications/webhook.js +65 -0
  176. package/dist/lib/notifications/webhook.js.map +1 -0
  177. package/dist/lib/orchestrator-state.d.ts +194 -0
  178. package/dist/lib/orchestrator-state.d.ts.map +1 -0
  179. package/dist/lib/orchestrator-state.js +332 -0
  180. package/dist/lib/orchestrator-state.js.map +1 -0
  181. package/dist/lib/realtime-cursor.d.ts +107 -0
  182. package/dist/lib/realtime-cursor.d.ts.map +1 -0
  183. package/dist/lib/realtime-cursor.js +260 -0
  184. package/dist/lib/realtime-cursor.js.map +1 -0
  185. package/dist/lib/rollback.d.ts +86 -0
  186. package/dist/lib/rollback.d.ts.map +1 -0
  187. package/dist/lib/rollback.js +405 -0
  188. package/dist/lib/rollback.js.map +1 -0
  189. package/dist/lib/sprint-loader.d.ts +39 -2
  190. package/dist/lib/sprint-loader.d.ts.map +1 -1
  191. package/dist/lib/sprint-loader.js +255 -4
  192. package/dist/lib/sprint-loader.js.map +1 -1
  193. package/dist/lib/stale-agent-detector.d.ts +102 -0
  194. package/dist/lib/stale-agent-detector.d.ts.map +1 -0
  195. package/dist/lib/stale-agent-detector.js +156 -0
  196. package/dist/lib/stale-agent-detector.js.map +1 -0
  197. package/dist/lib/task-dependencies.d.ts +143 -0
  198. package/dist/lib/task-dependencies.d.ts.map +1 -0
  199. package/dist/lib/task-dependencies.js +357 -0
  200. package/dist/lib/task-dependencies.js.map +1 -0
  201. package/dist/lib/task-timeout.d.ts +153 -0
  202. package/dist/lib/task-timeout.d.ts.map +1 -0
  203. package/dist/lib/task-timeout.js +505 -0
  204. package/dist/lib/task-timeout.js.map +1 -0
  205. package/dist/lib/verification/build-check.d.ts +55 -0
  206. package/dist/lib/verification/build-check.d.ts.map +1 -0
  207. package/dist/lib/verification/build-check.js +111 -0
  208. package/dist/lib/verification/build-check.js.map +1 -0
  209. package/dist/lib/verification/index.d.ts +19 -0
  210. package/dist/lib/verification/index.d.ts.map +1 -0
  211. package/dist/lib/verification/index.js +17 -0
  212. package/dist/lib/verification/index.js.map +1 -0
  213. package/dist/lib/verification/lint-check.d.ts +34 -0
  214. package/dist/lib/verification/lint-check.d.ts.map +1 -0
  215. package/dist/lib/verification/lint-check.js +215 -0
  216. package/dist/lib/verification/lint-check.js.map +1 -0
  217. package/dist/lib/verification/test-runner.d.ts +50 -0
  218. package/dist/lib/verification/test-runner.d.ts.map +1 -0
  219. package/dist/lib/verification/test-runner.js +225 -0
  220. package/dist/lib/verification/test-runner.js.map +1 -0
  221. package/dist/utils/command-helpers.d.ts.map +1 -1
  222. package/dist/utils/command-helpers.js +7 -0
  223. package/dist/utils/command-helpers.js.map +1 -1
  224. package/package.json +1 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, api, client, epic-004, multi-agent]
6
+ * @related: [register.ts, list.ts, status.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [auth-storage]
10
+ */
11
+ interface RegisterAgentRequest {
12
+ name: string;
13
+ capabilities: string[];
14
+ status?: 'active' | 'idle' | 'busy' | 'offline';
15
+ metadata?: Record<string, any>;
16
+ }
17
+ interface RegisterAgentResponse {
18
+ agentId: string;
19
+ name: string;
20
+ capabilities: string[];
21
+ status: string;
22
+ organizationId: string;
23
+ createdAt: string;
24
+ }
25
+ interface ListAgentsRequest {
26
+ status?: string;
27
+ capability?: string;
28
+ limit?: number;
29
+ offset?: number;
30
+ }
31
+ interface ListAgentsResponse {
32
+ agents: Array<{
33
+ id: string;
34
+ name: string;
35
+ capabilities: string[];
36
+ status: string;
37
+ organizationId: string;
38
+ createdAt: string;
39
+ updatedAt: string;
40
+ metadata?: Record<string, any>;
41
+ }>;
42
+ total: number;
43
+ limit: number;
44
+ offset: number;
45
+ }
46
+ interface AvailableTask {
47
+ id: string;
48
+ title: string;
49
+ description: string;
50
+ effort: string;
51
+ priority: number;
52
+ requiredCapabilities: string[];
53
+ sprintId: string;
54
+ }
55
+ interface AvailableTasksResponse {
56
+ tasks: AvailableTask[];
57
+ total: number;
58
+ }
59
+ interface ClaimTaskResponse {
60
+ task: {
61
+ id: string;
62
+ status: string;
63
+ claimedAt: string;
64
+ };
65
+ agent: {
66
+ id: string;
67
+ name: string;
68
+ status: string;
69
+ };
70
+ }
71
+ interface ReleaseTaskResponse {
72
+ success: boolean;
73
+ taskId: string;
74
+ status: string;
75
+ agentId: string;
76
+ releasedAt: string;
77
+ }
78
+ interface TaskContextResponse {
79
+ files: string[];
80
+ acceptanceCriteria: Array<{
81
+ id: string;
82
+ description: string;
83
+ verifiable: boolean;
84
+ }>;
85
+ patterns: Array<{
86
+ id: string;
87
+ name: string;
88
+ confidence: string;
89
+ }>;
90
+ gotchas: Array<{
91
+ id: string;
92
+ description: string;
93
+ severity: string;
94
+ }>;
95
+ constraints: Array<{
96
+ id: string;
97
+ type: string;
98
+ description: string;
99
+ }>;
100
+ }
101
+ /**
102
+ * Agent API client
103
+ */
104
+ export declare class AgentClient {
105
+ private static apiUrl;
106
+ /**
107
+ * Check if user is authenticated
108
+ */
109
+ private static requireAuth;
110
+ /**
111
+ * Make authenticated API request
112
+ */
113
+ private static request;
114
+ /**
115
+ * Register a new agent
116
+ */
117
+ static register(data: RegisterAgentRequest): Promise<RegisterAgentResponse>;
118
+ /**
119
+ * List agents with optional filtering
120
+ */
121
+ static list(params?: ListAgentsRequest): Promise<ListAgentsResponse>;
122
+ /**
123
+ * Get available tasks that match agent capabilities
124
+ * @param graphId - Graph namespace ID
125
+ * @param capabilities - Agent capabilities to match
126
+ * @param limit - Max tasks to return
127
+ */
128
+ static getAvailableTasks(graphId: string, capabilities?: string[], limit?: number): Promise<AvailableTasksResponse>;
129
+ /**
130
+ * Claim a task atomically
131
+ * @param taskId - Task ID to claim
132
+ * @param agentId - Agent ID claiming the task
133
+ * @returns ClaimTaskResponse if successful, or throws error on conflict
134
+ */
135
+ static claimTask(taskId: string, agentId: string): Promise<ClaimTaskResponse>;
136
+ /**
137
+ * Release a claimed task back to available
138
+ * @param taskId - Task ID to release
139
+ * @param agentId - Agent ID releasing the task
140
+ */
141
+ static releaseTask(taskId: string, agentId: string): Promise<ReleaseTaskResponse>;
142
+ /**
143
+ * Get task context (files, acceptance criteria, patterns, gotchas)
144
+ * @param taskId - Task ID to get context for
145
+ * @param graphId - Graph namespace ID
146
+ */
147
+ static getTaskContext(taskId: string, graphId: string): Promise<TaskContextResponse>;
148
+ }
149
+ export type { AvailableTask, ClaimTaskResponse, TaskContextResponse };
150
+ //# sourceMappingURL=agent-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/agent-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, api, client, epic-004, multi-agent]
6
+ * @related: [register.ts, list.ts, status.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [auth-storage]
10
+ */
11
+ /**
12
+ * Agent API Client (EPIC-004 Sprint 1 TASK-6)
13
+ *
14
+ * Client for interacting with agent management API endpoints
15
+ */
16
+ import { getAccessToken, isAuthenticated } from '../../utils/auth-storage.js';
17
+ /**
18
+ * Agent API client
19
+ */
20
+ export class AgentClient {
21
+ static apiUrl = process.env.GINKO_API_URL || 'https://app.ginkoai.com';
22
+ /**
23
+ * Check if user is authenticated
24
+ */
25
+ static async requireAuth() {
26
+ if (!await isAuthenticated()) {
27
+ throw new Error('Not authenticated. Run "ginko login" first.');
28
+ }
29
+ const token = await getAccessToken();
30
+ if (!token) {
31
+ throw new Error('Failed to get access token. Run "ginko login" again.');
32
+ }
33
+ return token;
34
+ }
35
+ /**
36
+ * Make authenticated API request
37
+ */
38
+ static async request(method, endpoint, body) {
39
+ const token = await this.requireAuth();
40
+ const url = `${this.apiUrl}${endpoint}`;
41
+ const debugMode = process.env.GINKO_DEBUG_API === 'true';
42
+ if (debugMode) {
43
+ console.log(`\n[Agent API Debug] ${method} ${url}`);
44
+ if (body) {
45
+ console.log('[Agent API Debug] Request body:', JSON.stringify(body, null, 2));
46
+ }
47
+ }
48
+ try {
49
+ const response = await fetch(url, {
50
+ method,
51
+ headers: {
52
+ 'Authorization': `Bearer ${token}`,
53
+ 'Content-Type': 'application/json',
54
+ 'X-Client-Version': 'ginko-cli@1.2.0',
55
+ },
56
+ body: body ? JSON.stringify(body) : undefined,
57
+ });
58
+ if (debugMode) {
59
+ console.log(`[Agent API Debug] Response status: ${response.status} ${response.statusText}`);
60
+ }
61
+ if (!response.ok) {
62
+ const errorData = await response.json();
63
+ if (debugMode) {
64
+ console.log('[Agent API Debug] Error response:', JSON.stringify(errorData, null, 2));
65
+ }
66
+ throw new Error(errorData.error.message || `API error: ${response.status}`);
67
+ }
68
+ const responseData = await response.json();
69
+ if (debugMode) {
70
+ console.log('[Agent API Debug] Response data:', JSON.stringify(responseData, null, 2));
71
+ }
72
+ return responseData;
73
+ }
74
+ catch (error) {
75
+ if (error instanceof Error) {
76
+ throw new Error(`Failed to ${method} ${url}: ${error.message}`);
77
+ }
78
+ throw error;
79
+ }
80
+ }
81
+ /**
82
+ * Register a new agent
83
+ */
84
+ static async register(data) {
85
+ return this.request('POST', '/api/v1/agent', data);
86
+ }
87
+ /**
88
+ * List agents with optional filtering
89
+ */
90
+ static async list(params = {}) {
91
+ const queryParams = new URLSearchParams();
92
+ if (params.status) {
93
+ queryParams.append('status', params.status);
94
+ }
95
+ if (params.capability) {
96
+ queryParams.append('capability', params.capability);
97
+ }
98
+ if (params.limit !== undefined) {
99
+ queryParams.append('limit', params.limit.toString());
100
+ }
101
+ if (params.offset !== undefined) {
102
+ queryParams.append('offset', params.offset.toString());
103
+ }
104
+ const queryString = queryParams.toString();
105
+ const endpoint = queryString ? `/api/v1/agent?${queryString}` : '/api/v1/agent';
106
+ return this.request('GET', endpoint);
107
+ }
108
+ // ============================================================
109
+ // EPIC-004 Sprint 4 TASK-8: Task Management Methods
110
+ // ============================================================
111
+ /**
112
+ * Get available tasks that match agent capabilities
113
+ * @param graphId - Graph namespace ID
114
+ * @param capabilities - Agent capabilities to match
115
+ * @param limit - Max tasks to return
116
+ */
117
+ static async getAvailableTasks(graphId, capabilities, limit = 10) {
118
+ const queryParams = new URLSearchParams();
119
+ queryParams.append('graphId', graphId);
120
+ queryParams.append('limit', limit.toString());
121
+ if (capabilities && capabilities.length > 0) {
122
+ queryParams.append('capabilities', capabilities.join(','));
123
+ }
124
+ return this.request('GET', `/api/v1/task/available?${queryParams.toString()}`);
125
+ }
126
+ /**
127
+ * Claim a task atomically
128
+ * @param taskId - Task ID to claim
129
+ * @param agentId - Agent ID claiming the task
130
+ * @returns ClaimTaskResponse if successful, or throws error on conflict
131
+ */
132
+ static async claimTask(taskId, agentId) {
133
+ const request = { agentId };
134
+ return this.request('POST', `/api/v1/task/${taskId}/claim`, request);
135
+ }
136
+ /**
137
+ * Release a claimed task back to available
138
+ * @param taskId - Task ID to release
139
+ * @param agentId - Agent ID releasing the task
140
+ */
141
+ static async releaseTask(taskId, agentId) {
142
+ const request = { agentId };
143
+ return this.request('POST', `/api/v1/task/${taskId}/release`, request);
144
+ }
145
+ /**
146
+ * Get task context (files, acceptance criteria, patterns, gotchas)
147
+ * @param taskId - Task ID to get context for
148
+ * @param graphId - Graph namespace ID
149
+ */
150
+ static async getTaskContext(taskId, graphId) {
151
+ // Load context from multiple endpoints in parallel
152
+ const [files, patterns, gotchas, constraints] = await Promise.all([
153
+ this.request('GET', `/api/v1/task/${taskId}/files?graphId=${graphId}`)
154
+ .catch(() => ({ files: [] })),
155
+ this.request('GET', `/api/v1/task/${taskId}/patterns?graphId=${graphId}`).catch(() => ({ patterns: [] })),
156
+ this.request('GET', `/api/v1/task/${taskId}/gotchas?graphId=${graphId}`).catch(() => ({ gotchas: [] })),
157
+ this.request('GET', `/api/v1/task/${taskId}/constraints?graphId=${graphId}`).catch(() => ({ constraints: [] })),
158
+ ]);
159
+ // Acceptance criteria come from the task itself (loaded locally)
160
+ // For now return empty - will be parsed from sprint file
161
+ return {
162
+ files: files.files || [],
163
+ acceptanceCriteria: [],
164
+ patterns: patterns.patterns || [],
165
+ gotchas: gotchas.gotchas || [],
166
+ constraints: constraints.constraints || [],
167
+ };
168
+ }
169
+ }
170
+ //# sourceMappingURL=agent-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../../../src/commands/agent/agent-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, cli, epic-004, multi-agent, collaboration]
6
+ * @related: [register.ts, list.ts, status.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ /**
12
+ * Agent Commands (EPIC-004 Sprint 1 TASK-6)
13
+ *
14
+ * CLI commands for AI-to-AI collaboration agent management
15
+ */
16
+ import { Command } from 'commander';
17
+ /**
18
+ * Main agent command with subcommands
19
+ */
20
+ export declare function agentCommand(): Command;
21
+ export default agentCommand;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,YAAY,YAqG3B;AAGD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, cli, epic-004, multi-agent, collaboration]
6
+ * @related: [register.ts, list.ts, status.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ /**
12
+ * Agent Commands (EPIC-004 Sprint 1 TASK-6)
13
+ *
14
+ * CLI commands for AI-to-AI collaboration agent management
15
+ */
16
+ import { Command } from 'commander';
17
+ import chalk from 'chalk';
18
+ import { registerAgentCommand } from './register.js';
19
+ import { listAgentsCommand } from './list.js';
20
+ import { statusAgentCommand } from './status.js';
21
+ import { workAgentCommand } from './work.js';
22
+ /**
23
+ * Main agent command with subcommands
24
+ */
25
+ export function agentCommand() {
26
+ const agent = new Command('agent')
27
+ .description('Manage AI agents for multi-agent collaboration (EPIC-004)')
28
+ .showHelpAfterError('(use --help for additional information)')
29
+ .addHelpText('after', `
30
+ ${chalk.gray('Quick Start:')}
31
+ ${chalk.green('ginko login')} ${chalk.gray('# Authenticate first')}
32
+ ${chalk.green('ginko agent register')} --name "Worker-1" \\
33
+ --capabilities typescript,testing ${chalk.gray('# Register agent')}
34
+ ${chalk.green('ginko agent list')} ${chalk.gray('# List all agents')}
35
+ ${chalk.green('ginko agent status')} ${chalk.gray('# Show current agent')}
36
+
37
+ ${chalk.gray('Usage Examples:')}
38
+ ${chalk.green('ginko agent register')} --name "Backend-Agent" --capabilities typescript,nodejs,api
39
+ ${chalk.green('ginko agent list')} --status active
40
+ ${chalk.green('ginko agent list')} --capability typescript
41
+ ${chalk.green('ginko agent status')}
42
+
43
+ ${chalk.gray('Features:')}
44
+ ${chalk.cyan('🤖 Agent Registration')} - Register agents with capabilities
45
+ ${chalk.cyan('📋 Agent Discovery')} - List and filter available agents
46
+ ${chalk.cyan('📊 Agent Status')} - View current agent details
47
+ ${chalk.cyan('🔄 Multi-Agent Collab')} - Enable AI-to-AI collaboration
48
+
49
+ ${chalk.gray('Learn More:')}
50
+ ${chalk.dim('https://docs.ginko.ai/multi-agent')}
51
+ `)
52
+ .action(() => {
53
+ // When called without subcommand, show help
54
+ agent.help({ error: false });
55
+ });
56
+ // Register command
57
+ agent
58
+ .command('register')
59
+ .description('Register a new agent with capabilities')
60
+ .requiredOption('--name <name>', 'Agent name (e.g., "Worker-1", "Backend-Agent")')
61
+ .requiredOption('--capabilities <capabilities>', 'Comma-separated capabilities (e.g., "typescript,testing,api")')
62
+ .option('--status <status>', 'Initial status (active|idle|busy|offline)', 'active')
63
+ .action(async (options) => {
64
+ await registerAgentCommand(options);
65
+ });
66
+ // List command
67
+ agent
68
+ .command('list')
69
+ .description('List agents with optional filtering')
70
+ .option('--status <status>', 'Filter by status (active|idle|busy|offline)')
71
+ .option('--capability <capability>', 'Filter by capability')
72
+ .option('--limit <limit>', 'Max results (default 20, max 100)', '20')
73
+ .option('--offset <offset>', 'Pagination offset (default 0)', '0')
74
+ .action(async (options) => {
75
+ await listAgentsCommand(options);
76
+ });
77
+ // Status command
78
+ agent
79
+ .command('status')
80
+ .description('Show current agent status and details')
81
+ .action(async () => {
82
+ await statusAgentCommand();
83
+ });
84
+ // Work command (EPIC-004 Sprint 4 TASK-8)
85
+ agent
86
+ .command('work')
87
+ .description('Start worker agent that loads context and polls for task assignments')
88
+ .option('--name <name>', 'Agent name (required if not already registered)')
89
+ .option('--capabilities <capabilities>', 'Comma-separated capabilities (required if not already registered)')
90
+ .option('--poll-interval <seconds>', 'Task polling interval in seconds (default: 5)', '5')
91
+ .option('--max-tasks <count>', 'Max tasks to process before exiting (0 = unlimited)', '0')
92
+ .addHelpText('after', `
93
+ ${chalk.gray('Worker Agent Flow:')}
94
+ ${chalk.dim('1. Register as worker agent (or use existing from .ginko/agent.json)')}
95
+ ${chalk.dim('2. Call ginko start to load project context (events, patterns, ADRs)')}
96
+ ${chalk.dim('3. Start heartbeat to maintain online status')}
97
+ ${chalk.dim('4. Enter polling loop for task assignments')}
98
+ ${chalk.dim('5. On assignment: claim task atomically, load task-specific context')}
99
+ ${chalk.dim('6. Execute task (AI does the work), log events, verify')}
100
+ ${chalk.dim('7. Report completion/blocker via events')}
101
+ ${chalk.dim('8. Return to polling')}
102
+
103
+ ${chalk.gray('Examples:')}
104
+ ${chalk.green('ginko agent work --name "Worker-1" --capabilities typescript,testing')}
105
+ ${chalk.green('ginko agent work')} ${chalk.dim('# Uses existing agent from .ginko/agent.json')}
106
+ ${chalk.green('ginko agent work --poll-interval 10')} ${chalk.dim('# Poll every 10 seconds')}
107
+ ${chalk.green('ginko agent work --max-tasks 5')} ${chalk.dim('# Process 5 tasks then exit')}
108
+ `)
109
+ .action(async (options) => {
110
+ await workAgentCommand({
111
+ name: options.name,
112
+ capabilities: options.capabilities,
113
+ pollInterval: parseInt(options.pollInterval, 10),
114
+ maxTasks: parseInt(options.maxTasks, 10),
115
+ });
116
+ });
117
+ return agent;
118
+ }
119
+ // Export for use in main CLI
120
+ export default agentCommand;
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, list, cli, epic-004, multi-agent]
6
+ * @related: [index.ts, agent-client.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ interface ListOptions {
12
+ status?: string;
13
+ capability?: string;
14
+ limit?: string;
15
+ offset?: string;
16
+ }
17
+ /**
18
+ * List agents with optional filtering
19
+ */
20
+ export declare function listAgentsCommand(options: ListOptions): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E3E"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-05
5
+ * @tags: [agent, list, cli, epic-004, multi-agent]
6
+ * @related: [index.ts, agent-client.ts]
7
+ * @priority: high
8
+ * @complexity: low
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ /**
12
+ * List Agents Command (EPIC-004 Sprint 1 TASK-6)
13
+ *
14
+ * List agents with optional filtering by status or capability
15
+ */
16
+ import chalk from 'chalk';
17
+ import ora from 'ora';
18
+ import { AgentClient } from './agent-client.js';
19
+ /**
20
+ * List agents with optional filtering
21
+ */
22
+ export async function listAgentsCommand(options) {
23
+ const spinner = ora('Fetching agents...').start();
24
+ try {
25
+ const limit = parseInt(options.limit || '20', 10);
26
+ const offset = parseInt(options.offset || '0', 10);
27
+ const response = await AgentClient.list({
28
+ status: options.status,
29
+ capability: options.capability,
30
+ limit,
31
+ offset,
32
+ });
33
+ spinner.succeed(chalk.green(`Found ${response.total} agent${response.total === 1 ? '' : 's'}`));
34
+ console.log('');
35
+ if (response.agents.length === 0) {
36
+ console.log(chalk.dim(' No agents found'));
37
+ if (options.status || options.capability) {
38
+ console.log('');
39
+ console.log(chalk.dim('💡 Try removing filters to see all agents:'));
40
+ console.log(chalk.dim(' ginko agent list'));
41
+ }
42
+ else {
43
+ console.log('');
44
+ console.log(chalk.dim('💡 Register your first agent:'));
45
+ console.log(chalk.dim(' ginko agent register --name "Worker-1" --capabilities typescript,testing'));
46
+ }
47
+ return;
48
+ }
49
+ // Display agents in a table-like format
50
+ response.agents.forEach((agent, index) => {
51
+ console.log(chalk.bold(` ${agent.name}`));
52
+ console.log(chalk.dim(` ├─ ID: ${agent.id}`));
53
+ console.log(chalk.dim(` ├─ Status: ${getStatusBadge(agent.status)}`));
54
+ console.log(chalk.dim(` ├─ Capabilities: ${agent.capabilities.join(', ')}`));
55
+ console.log(chalk.dim(` ├─ Organization: ${agent.organizationId}`));
56
+ console.log(chalk.dim(` ├─ Created: ${formatDate(agent.createdAt)}`));
57
+ console.log(chalk.dim(` └─ Updated: ${formatDate(agent.updatedAt)}`));
58
+ // Add spacing between agents (except last one)
59
+ if (index < response.agents.length - 1) {
60
+ console.log('');
61
+ }
62
+ });
63
+ // Pagination info
64
+ if (response.total > response.limit) {
65
+ console.log('');
66
+ console.log(chalk.dim(` Showing ${response.offset + 1}-${Math.min(response.offset + response.limit, response.total)} of ${response.total} agents`));
67
+ if (response.offset + response.limit < response.total) {
68
+ const nextOffset = response.offset + response.limit;
69
+ console.log('');
70
+ console.log(chalk.dim('💡 View more:'));
71
+ console.log(chalk.dim(` ginko agent list --offset ${nextOffset}`));
72
+ }
73
+ }
74
+ }
75
+ catch (error) {
76
+ spinner.fail(chalk.red('Failed to list agents'));
77
+ // Handle specific error codes
78
+ if (error.message.includes('Not authenticated')) {
79
+ console.error(chalk.red(' Not authenticated. Run `ginko login` first.'));
80
+ }
81
+ else if (error.message.includes('INVALID_STATUS')) {
82
+ console.error(chalk.red(' Invalid status. Must be one of: active, idle, busy, offline'));
83
+ }
84
+ else {
85
+ console.error(chalk.red(` ${error.message}`));
86
+ }
87
+ process.exit(1);
88
+ }
89
+ }
90
+ /**
91
+ * Get colored status badge
92
+ */
93
+ function getStatusBadge(status) {
94
+ switch (status) {
95
+ case 'active':
96
+ return chalk.green('● active');
97
+ case 'idle':
98
+ return chalk.yellow('● idle');
99
+ case 'busy':
100
+ return chalk.blue('● busy');
101
+ case 'offline':
102
+ return chalk.gray('● offline');
103
+ default:
104
+ return status;
105
+ }
106
+ }
107
+ /**
108
+ * Format ISO date string to readable format
109
+ */
110
+ function formatDate(isoString) {
111
+ try {
112
+ const date = new Date(isoString);
113
+ return date.toLocaleString();
114
+ }
115
+ catch {
116
+ return isoString;
117
+ }
118
+ }
119
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"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"}