@ginkoai/cli 1.6.1 → 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 (246) hide show
  1. package/README.md +34 -0
  2. package/dist/commands/agent/agent-client.d.ts +150 -0
  3. package/dist/commands/agent/agent-client.d.ts.map +1 -0
  4. package/dist/commands/agent/agent-client.js +170 -0
  5. package/dist/commands/agent/agent-client.js.map +1 -0
  6. package/dist/commands/agent/index.d.ts +22 -0
  7. package/dist/commands/agent/index.d.ts.map +1 -0
  8. package/dist/commands/agent/index.js +121 -0
  9. package/dist/commands/agent/index.js.map +1 -0
  10. package/dist/commands/agent/list.d.ts +22 -0
  11. package/dist/commands/agent/list.d.ts.map +1 -0
  12. package/dist/commands/agent/list.js +119 -0
  13. package/dist/commands/agent/list.js.map +1 -0
  14. package/dist/commands/agent/register.d.ts +21 -0
  15. package/dist/commands/agent/register.d.ts.map +1 -0
  16. package/dist/commands/agent/register.js +97 -0
  17. package/dist/commands/agent/register.js.map +1 -0
  18. package/dist/commands/agent/status.d.ts +19 -0
  19. package/dist/commands/agent/status.d.ts.map +1 -0
  20. package/dist/commands/agent/status.js +271 -0
  21. package/dist/commands/agent/status.js.map +1 -0
  22. package/dist/commands/agent/work.d.ts +22 -0
  23. package/dist/commands/agent/work.d.ts.map +1 -0
  24. package/dist/commands/agent/work.js +459 -0
  25. package/dist/commands/agent/work.js.map +1 -0
  26. package/dist/commands/checkpoint/create.d.ts +27 -0
  27. package/dist/commands/checkpoint/create.d.ts.map +1 -0
  28. package/dist/commands/checkpoint/create.js +82 -0
  29. package/dist/commands/checkpoint/create.js.map +1 -0
  30. package/dist/commands/checkpoint/index.d.ts +23 -0
  31. package/dist/commands/checkpoint/index.d.ts.map +1 -0
  32. package/dist/commands/checkpoint/index.js +91 -0
  33. package/dist/commands/checkpoint/index.js.map +1 -0
  34. package/dist/commands/checkpoint/list.d.ts +27 -0
  35. package/dist/commands/checkpoint/list.d.ts.map +1 -0
  36. package/dist/commands/checkpoint/list.js +115 -0
  37. package/dist/commands/checkpoint/list.js.map +1 -0
  38. package/dist/commands/checkpoint/show.d.ts +23 -0
  39. package/dist/commands/checkpoint/show.d.ts.map +1 -0
  40. package/dist/commands/checkpoint/show.js +102 -0
  41. package/dist/commands/checkpoint/show.js.map +1 -0
  42. package/dist/commands/dlq.d.ts +24 -0
  43. package/dist/commands/dlq.d.ts.map +1 -0
  44. package/dist/commands/dlq.js +172 -0
  45. package/dist/commands/dlq.js.map +1 -0
  46. package/dist/commands/epic.d.ts +29 -0
  47. package/dist/commands/epic.d.ts.map +1 -0
  48. package/dist/commands/epic.js +322 -0
  49. package/dist/commands/epic.js.map +1 -0
  50. package/dist/commands/escalation/create.d.ts +22 -0
  51. package/dist/commands/escalation/create.d.ts.map +1 -0
  52. package/dist/commands/escalation/create.js +122 -0
  53. package/dist/commands/escalation/create.js.map +1 -0
  54. package/dist/commands/escalation/escalation-client.d.ts +101 -0
  55. package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
  56. package/dist/commands/escalation/escalation-client.js +129 -0
  57. package/dist/commands/escalation/escalation-client.js.map +1 -0
  58. package/dist/commands/escalation/index.d.ts +22 -0
  59. package/dist/commands/escalation/index.d.ts.map +1 -0
  60. package/dist/commands/escalation/index.js +94 -0
  61. package/dist/commands/escalation/index.js.map +1 -0
  62. package/dist/commands/escalation/list.d.ts +24 -0
  63. package/dist/commands/escalation/list.d.ts.map +1 -0
  64. package/dist/commands/escalation/list.js +170 -0
  65. package/dist/commands/escalation/list.js.map +1 -0
  66. package/dist/commands/escalation/resolve.d.ts +20 -0
  67. package/dist/commands/escalation/resolve.d.ts.map +1 -0
  68. package/dist/commands/escalation/resolve.js +102 -0
  69. package/dist/commands/escalation/resolve.js.map +1 -0
  70. package/dist/commands/graph/api-client.d.ts +222 -1
  71. package/dist/commands/graph/api-client.d.ts.map +1 -1
  72. package/dist/commands/graph/api-client.js +82 -0
  73. package/dist/commands/graph/api-client.js.map +1 -1
  74. package/dist/commands/handoff.d.ts.map +1 -1
  75. package/dist/commands/handoff.js +9 -1
  76. package/dist/commands/handoff.js.map +1 -1
  77. package/dist/commands/log.d.ts +3 -0
  78. package/dist/commands/log.d.ts.map +1 -1
  79. package/dist/commands/log.js +110 -16
  80. package/dist/commands/log.js.map +1 -1
  81. package/dist/commands/notifications/history.d.ts +21 -0
  82. package/dist/commands/notifications/history.d.ts.map +1 -0
  83. package/dist/commands/notifications/history.js +160 -0
  84. package/dist/commands/notifications/history.js.map +1 -0
  85. package/dist/commands/notifications/index.d.ts +22 -0
  86. package/dist/commands/notifications/index.d.ts.map +1 -0
  87. package/dist/commands/notifications/index.js +87 -0
  88. package/dist/commands/notifications/index.js.map +1 -0
  89. package/dist/commands/notifications/list.d.ts +19 -0
  90. package/dist/commands/notifications/list.d.ts.map +1 -0
  91. package/dist/commands/notifications/list.js +132 -0
  92. package/dist/commands/notifications/list.js.map +1 -0
  93. package/dist/commands/notifications/test.d.ts +19 -0
  94. package/dist/commands/notifications/test.d.ts.map +1 -0
  95. package/dist/commands/notifications/test.js +217 -0
  96. package/dist/commands/notifications/test.js.map +1 -0
  97. package/dist/commands/orchestrate.d.ts +25 -0
  98. package/dist/commands/orchestrate.d.ts.map +1 -0
  99. package/dist/commands/orchestrate.js +858 -0
  100. package/dist/commands/orchestrate.js.map +1 -0
  101. package/dist/commands/sprint/deps.d.ts +29 -0
  102. package/dist/commands/sprint/deps.d.ts.map +1 -0
  103. package/dist/commands/sprint/deps.js +269 -0
  104. package/dist/commands/sprint/deps.js.map +1 -0
  105. package/dist/commands/sprint/index.d.ts +10 -5
  106. package/dist/commands/sprint/index.d.ts.map +1 -1
  107. package/dist/commands/sprint/index.js +26 -5
  108. package/dist/commands/sprint/index.js.map +1 -1
  109. package/dist/commands/start/index.d.ts.map +1 -1
  110. package/dist/commands/start/index.js +6 -0
  111. package/dist/commands/start/index.js.map +1 -1
  112. package/dist/commands/start/start-reflection.d.ts +11 -0
  113. package/dist/commands/start/start-reflection.d.ts.map +1 -1
  114. package/dist/commands/start/start-reflection.js +150 -12
  115. package/dist/commands/start/start-reflection.js.map +1 -1
  116. package/dist/commands/verify.d.ts +17 -0
  117. package/dist/commands/verify.d.ts.map +1 -0
  118. package/dist/commands/verify.js +232 -0
  119. package/dist/commands/verify.js.map +1 -0
  120. package/dist/core/session-log-manager.d.ts +1 -1
  121. package/dist/core/session-log-manager.d.ts.map +1 -1
  122. package/dist/core/session-log-manager.js +12 -3
  123. package/dist/core/session-log-manager.js.map +1 -1
  124. package/dist/index.js +98 -1
  125. package/dist/index.js.map +1 -1
  126. package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
  127. package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
  128. package/dist/lib/__tests__/task-timeout.test.js +278 -0
  129. package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
  130. package/dist/lib/agent-heartbeat.d.ts +68 -0
  131. package/dist/lib/agent-heartbeat.d.ts.map +1 -0
  132. package/dist/lib/agent-heartbeat.js +117 -0
  133. package/dist/lib/agent-heartbeat.js.map +1 -0
  134. package/dist/lib/checkpoint.d.ts +85 -0
  135. package/dist/lib/checkpoint.d.ts.map +1 -0
  136. package/dist/lib/checkpoint.js +323 -0
  137. package/dist/lib/checkpoint.js.map +1 -0
  138. package/dist/lib/context-metrics.d.ts +230 -0
  139. package/dist/lib/context-metrics.d.ts.map +1 -0
  140. package/dist/lib/context-metrics.js +372 -0
  141. package/dist/lib/context-metrics.js.map +1 -0
  142. package/dist/lib/dead-letter-queue.d.ts +108 -0
  143. package/dist/lib/dead-letter-queue.d.ts.map +1 -0
  144. package/dist/lib/dead-letter-queue.js +378 -0
  145. package/dist/lib/dead-letter-queue.js.map +1 -0
  146. package/dist/lib/event-logger.d.ts +9 -1
  147. package/dist/lib/event-logger.d.ts.map +1 -1
  148. package/dist/lib/event-logger.js +45 -3
  149. package/dist/lib/event-logger.js.map +1 -1
  150. package/dist/lib/event-queue.d.ts.map +1 -1
  151. package/dist/lib/event-queue.js +13 -2
  152. package/dist/lib/event-queue.js.map +1 -1
  153. package/dist/lib/examples/timeout-demo.d.ts +13 -0
  154. package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
  155. package/dist/lib/examples/timeout-demo.js +102 -0
  156. package/dist/lib/examples/timeout-demo.js.map +1 -0
  157. package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
  158. package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
  159. package/dist/lib/examples/timeout-integration-example.js +223 -0
  160. package/dist/lib/examples/timeout-integration-example.js.map +1 -0
  161. package/dist/lib/notification-hooks.d.ts +103 -0
  162. package/dist/lib/notification-hooks.d.ts.map +1 -0
  163. package/dist/lib/notification-hooks.js +223 -0
  164. package/dist/lib/notification-hooks.js.map +1 -0
  165. package/dist/lib/notifications/discord.d.ts +20 -0
  166. package/dist/lib/notifications/discord.d.ts.map +1 -0
  167. package/dist/lib/notifications/discord.js +140 -0
  168. package/dist/lib/notifications/discord.js.map +1 -0
  169. package/dist/lib/notifications/index.d.ts +66 -0
  170. package/dist/lib/notifications/index.d.ts.map +1 -0
  171. package/dist/lib/notifications/index.js +120 -0
  172. package/dist/lib/notifications/index.js.map +1 -0
  173. package/dist/lib/notifications/slack.d.ts +20 -0
  174. package/dist/lib/notifications/slack.d.ts.map +1 -0
  175. package/dist/lib/notifications/slack.js +186 -0
  176. package/dist/lib/notifications/slack.js.map +1 -0
  177. package/dist/lib/notifications/teams.d.ts +20 -0
  178. package/dist/lib/notifications/teams.d.ts.map +1 -0
  179. package/dist/lib/notifications/teams.js +146 -0
  180. package/dist/lib/notifications/teams.js.map +1 -0
  181. package/dist/lib/notifications/webhook.d.ts +23 -0
  182. package/dist/lib/notifications/webhook.d.ts.map +1 -0
  183. package/dist/lib/notifications/webhook.js +65 -0
  184. package/dist/lib/notifications/webhook.js.map +1 -0
  185. package/dist/lib/orchestrator-state.d.ts +194 -0
  186. package/dist/lib/orchestrator-state.d.ts.map +1 -0
  187. package/dist/lib/orchestrator-state.js +332 -0
  188. package/dist/lib/orchestrator-state.js.map +1 -0
  189. package/dist/lib/output-formatter.d.ts +25 -1
  190. package/dist/lib/output-formatter.d.ts.map +1 -1
  191. package/dist/lib/output-formatter.js +37 -17
  192. package/dist/lib/output-formatter.js.map +1 -1
  193. package/dist/lib/realtime-cursor.d.ts +107 -0
  194. package/dist/lib/realtime-cursor.d.ts.map +1 -0
  195. package/dist/lib/realtime-cursor.js +260 -0
  196. package/dist/lib/realtime-cursor.js.map +1 -0
  197. package/dist/lib/rollback.d.ts +86 -0
  198. package/dist/lib/rollback.d.ts.map +1 -0
  199. package/dist/lib/rollback.js +405 -0
  200. package/dist/lib/rollback.js.map +1 -0
  201. package/dist/lib/sprint-loader.d.ts +41 -2
  202. package/dist/lib/sprint-loader.d.ts.map +1 -1
  203. package/dist/lib/sprint-loader.js +335 -9
  204. package/dist/lib/sprint-loader.js.map +1 -1
  205. package/dist/lib/stale-agent-detector.d.ts +102 -0
  206. package/dist/lib/stale-agent-detector.d.ts.map +1 -0
  207. package/dist/lib/stale-agent-detector.js +156 -0
  208. package/dist/lib/stale-agent-detector.js.map +1 -0
  209. package/dist/lib/task-dependencies.d.ts +143 -0
  210. package/dist/lib/task-dependencies.d.ts.map +1 -0
  211. package/dist/lib/task-dependencies.js +357 -0
  212. package/dist/lib/task-dependencies.js.map +1 -0
  213. package/dist/lib/task-timeout.d.ts +153 -0
  214. package/dist/lib/task-timeout.d.ts.map +1 -0
  215. package/dist/lib/task-timeout.js +505 -0
  216. package/dist/lib/task-timeout.js.map +1 -0
  217. package/dist/lib/verification/build-check.d.ts +55 -0
  218. package/dist/lib/verification/build-check.d.ts.map +1 -0
  219. package/dist/lib/verification/build-check.js +111 -0
  220. package/dist/lib/verification/build-check.js.map +1 -0
  221. package/dist/lib/verification/index.d.ts +19 -0
  222. package/dist/lib/verification/index.d.ts.map +1 -0
  223. package/dist/lib/verification/index.js +17 -0
  224. package/dist/lib/verification/index.js.map +1 -0
  225. package/dist/lib/verification/lint-check.d.ts +34 -0
  226. package/dist/lib/verification/lint-check.d.ts.map +1 -0
  227. package/dist/lib/verification/lint-check.js +215 -0
  228. package/dist/lib/verification/lint-check.js.map +1 -0
  229. package/dist/lib/verification/test-runner.d.ts +50 -0
  230. package/dist/lib/verification/test-runner.d.ts.map +1 -0
  231. package/dist/lib/verification/test-runner.js +225 -0
  232. package/dist/lib/verification/test-runner.js.map +1 -0
  233. package/dist/templates/ai-instructions-template.d.ts +3 -2
  234. package/dist/templates/ai-instructions-template.d.ts.map +1 -1
  235. package/dist/templates/ai-instructions-template.js +104 -2
  236. package/dist/templates/ai-instructions-template.js.map +1 -1
  237. package/dist/templates/epic-template.md +319 -0
  238. package/dist/utils/command-helpers.d.ts +10 -0
  239. package/dist/utils/command-helpers.d.ts.map +1 -1
  240. package/dist/utils/command-helpers.js +59 -1
  241. package/dist/utils/command-helpers.js.map +1 -1
  242. package/dist/utils/pattern-confidence.d.ts +82 -0
  243. package/dist/utils/pattern-confidence.d.ts.map +1 -0
  244. package/dist/utils/pattern-confidence.js +172 -0
  245. package/dist/utils/pattern-confidence.js.map +1 -0
  246. package/package.json +1 -1
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @fileType: utility
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, api, client, epic-004, human-intervention]
6
+ * @related: [create.ts, list.ts, resolve.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [auth-storage]
10
+ */
11
+ /**
12
+ * Escalation API Client (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * Client for interacting with escalation management API endpoints
15
+ */
16
+ import { getAccessToken, isAuthenticated } from '../../utils/auth-storage.js';
17
+ /**
18
+ * Escalation API client
19
+ */
20
+ export class EscalationClient {
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[Escalation API Debug] ${method} ${url}`);
44
+ if (body) {
45
+ console.log('[Escalation 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(`[Escalation 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('[Escalation 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('[Escalation 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
+ * Create a new escalation
83
+ */
84
+ static async create(data) {
85
+ return this.request('POST', '/api/v1/escalation', data);
86
+ }
87
+ /**
88
+ * List escalations 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.severity) {
96
+ queryParams.append('severity', params.severity);
97
+ }
98
+ if (params.taskId) {
99
+ queryParams.append('taskId', params.taskId);
100
+ }
101
+ if (params.agentId) {
102
+ queryParams.append('agentId', params.agentId);
103
+ }
104
+ if (params.limit !== undefined) {
105
+ queryParams.append('limit', params.limit.toString());
106
+ }
107
+ if (params.offset !== undefined) {
108
+ queryParams.append('offset', params.offset.toString());
109
+ }
110
+ const queryString = queryParams.toString();
111
+ const endpoint = queryString ? `/api/v1/escalation?${queryString}` : '/api/v1/escalation';
112
+ return this.request('GET', endpoint);
113
+ }
114
+ /**
115
+ * Acknowledge an escalation
116
+ */
117
+ static async acknowledge(escalationId, acknowledgedBy) {
118
+ const request = { acknowledgedBy };
119
+ return this.request('POST', `/api/v1/escalation/${escalationId}/acknowledge`, request);
120
+ }
121
+ /**
122
+ * Resolve an escalation
123
+ */
124
+ static async resolve(escalationId, resolvedBy, resolution) {
125
+ const request = { resolvedBy, resolution };
126
+ return this.request('POST', `/api/v1/escalation/${escalationId}/resolve`, request);
127
+ }
128
+ }
129
+ //# sourceMappingURL=escalation-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalation-client.js","sourceRoot":"","sources":["../../../src/commands/escalation/escalation-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, cli, epic-004, human-intervention, multi-agent]
6
+ * @related: [create.ts, list.ts, resolve.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ /**
12
+ * Escalation Commands (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * CLI commands for human escalation management in multi-agent collaboration
15
+ */
16
+ import { Command } from 'commander';
17
+ /**
18
+ * Main escalation command with subcommands
19
+ */
20
+ export declare function escalationCommand(): Command;
21
+ export default escalationCommand;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/escalation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;GAEG;AACH,wBAAgB,iBAAiB,YA0EhC;AAGD,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, cli, epic-004, human-intervention, multi-agent]
6
+ * @related: [create.ts, list.ts, resolve.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk]
10
+ */
11
+ /**
12
+ * Escalation Commands (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * CLI commands for human escalation management in multi-agent collaboration
15
+ */
16
+ import { Command } from 'commander';
17
+ import chalk from 'chalk';
18
+ import { createEscalationCommand } from './create.js';
19
+ import { listEscalationsCommand } from './list.js';
20
+ import { resolveEscalationCommand } from './resolve.js';
21
+ /**
22
+ * Main escalation command with subcommands
23
+ */
24
+ export function escalationCommand() {
25
+ const escalation = new Command('escalation')
26
+ .description('Manage human escalations for multi-agent collaboration (EPIC-004)')
27
+ .showHelpAfterError('(use --help for additional information)')
28
+ .addHelpText('after', `
29
+ ${chalk.gray('Quick Start:')}
30
+ ${chalk.green('ginko login')} ${chalk.gray('# Authenticate first')}
31
+ ${chalk.green('ginko escalation create')} --task TASK-1 \\
32
+ --reason "..." \\
33
+ --severity high ${chalk.gray('# Create escalation')}
34
+ ${chalk.green('ginko escalation list')} --status open ${chalk.gray('# List open escalations')}
35
+ ${chalk.green('ginko escalation resolve')} <id> \\
36
+ --resolution "..." ${chalk.gray('# Resolve escalation')}
37
+
38
+ ${chalk.gray('Usage Examples:')}
39
+ ${chalk.green('ginko escalation create')} --task TASK-5 --reason "Ambiguous requirements" --severity medium
40
+ ${chalk.green('ginko escalation list')} --status open --severity critical
41
+ ${chalk.green('ginko escalation list')} --task TASK-1
42
+ ${chalk.green('ginko escalation resolve')} escalation_123 --resolution "Clarified in ADR-050"
43
+
44
+ ${chalk.gray('Features:')}
45
+ ${chalk.cyan('🚨 Escalation Creation')} - Request human intervention
46
+ ${chalk.cyan('📋 Escalation Discovery')} - List and filter escalations
47
+ ${chalk.cyan('✅ Resolution Tracking')} - Record human decisions
48
+ ${chalk.cyan('🔄 Task Unblocking')} - Resume work after resolution
49
+
50
+ ${chalk.gray('Learn More:')}
51
+ ${chalk.dim('https://docs.ginko.ai/escalations')}
52
+ `)
53
+ .action(() => {
54
+ // When called without subcommand, show help
55
+ escalation.help({ error: false });
56
+ });
57
+ // Create command
58
+ escalation
59
+ .command('create')
60
+ .description('Create a new escalation for human intervention')
61
+ .requiredOption('--task <taskId>', 'Task ID requiring escalation (e.g., "TASK-1")')
62
+ .requiredOption('--reason <reason>', 'Reason for escalation')
63
+ .requiredOption('--severity <severity>', 'Severity level (low|medium|high|critical)')
64
+ .option('--agent <agentId>', 'Agent ID (defaults to current agent from .ginko/agent.json)')
65
+ .action(async (options) => {
66
+ await createEscalationCommand(options);
67
+ });
68
+ // List command
69
+ escalation
70
+ .command('list')
71
+ .description('List escalations with optional filtering')
72
+ .option('--status <status>', 'Filter by status (open|acknowledged|resolved)')
73
+ .option('--severity <severity>', 'Filter by severity (low|medium|high|critical)')
74
+ .option('--task <taskId>', 'Filter by task ID')
75
+ .option('--agent <agentId>', 'Filter by agent ID')
76
+ .option('--limit <limit>', 'Max results (default 20, max 100)', '20')
77
+ .option('--offset <offset>', 'Pagination offset (default 0)', '0')
78
+ .action(async (options) => {
79
+ await listEscalationsCommand(options);
80
+ });
81
+ // Resolve command
82
+ escalation
83
+ .command('resolve <id>')
84
+ .description('Resolve an escalation with human decision')
85
+ .requiredOption('--resolution <resolution>', 'Resolution details')
86
+ .option('--resolved-by <email>', 'Email of person resolving (defaults to git user.email)')
87
+ .action(async (id, options) => {
88
+ await resolveEscalationCommand(id, options);
89
+ });
90
+ return escalation;
91
+ }
92
+ // Export for use in main CLI
93
+ export default escalationCommand;
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/escalation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, list, cli, epic-004, human-intervention]
6
+ * @related: [index.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ interface ListOptions {
12
+ status?: string;
13
+ severity?: string;
14
+ task?: string;
15
+ agent?: string;
16
+ limit?: string;
17
+ offset?: string;
18
+ }
19
+ /**
20
+ * List escalations
21
+ */
22
+ export declare function listEscalationsCommand(options: ListOptions): Promise<void>;
23
+ export {};
24
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/escalation/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyDD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhF"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, list, cli, epic-004, human-intervention]
6
+ * @related: [index.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ /**
12
+ * List Escalations Command (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * List escalations with optional filtering and severity-based ordering
15
+ */
16
+ import chalk from 'chalk';
17
+ import ora from 'ora';
18
+ import { EscalationClient } from './escalation-client.js';
19
+ /**
20
+ * Get severity color
21
+ */
22
+ function getSeverityColor(severity) {
23
+ switch (severity) {
24
+ case 'critical':
25
+ return chalk.red(severity.toUpperCase());
26
+ case 'high':
27
+ return chalk.yellow(severity.toUpperCase());
28
+ case 'medium':
29
+ return chalk.blue(severity);
30
+ case 'low':
31
+ return chalk.gray(severity);
32
+ default:
33
+ return severity;
34
+ }
35
+ }
36
+ /**
37
+ * Get status indicator
38
+ */
39
+ function getStatusIndicator(status) {
40
+ switch (status) {
41
+ case 'open':
42
+ return chalk.red('●');
43
+ case 'acknowledged':
44
+ return chalk.yellow('●');
45
+ case 'resolved':
46
+ return chalk.green('●');
47
+ default:
48
+ return '●';
49
+ }
50
+ }
51
+ /**
52
+ * Format date for display
53
+ */
54
+ function formatDate(dateString) {
55
+ const date = new Date(dateString);
56
+ const now = new Date();
57
+ const diffMs = now.getTime() - date.getTime();
58
+ const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
59
+ const diffDays = Math.floor(diffHours / 24);
60
+ if (diffHours < 1) {
61
+ return chalk.red('< 1 hour ago');
62
+ }
63
+ else if (diffHours < 24) {
64
+ return chalk.yellow(`${diffHours}h ago`);
65
+ }
66
+ else if (diffDays < 7) {
67
+ return chalk.dim(`${diffDays}d ago`);
68
+ }
69
+ else {
70
+ return chalk.dim(date.toLocaleDateString());
71
+ }
72
+ }
73
+ /**
74
+ * List escalations
75
+ */
76
+ export async function listEscalationsCommand(options) {
77
+ const spinner = ora('Loading escalations...').start();
78
+ try {
79
+ const limit = options.limit ? parseInt(options.limit, 10) : 20;
80
+ const offset = options.offset ? parseInt(options.offset, 10) : 0;
81
+ // Fetch escalations via API
82
+ const response = await EscalationClient.list({
83
+ status: options.status,
84
+ severity: options.severity,
85
+ taskId: options.task,
86
+ agentId: options.agent,
87
+ limit,
88
+ offset,
89
+ });
90
+ spinner.stop();
91
+ if (response.escalations.length === 0) {
92
+ console.log(chalk.dim('No escalations found'));
93
+ if (options.status || options.severity || options.task || options.agent) {
94
+ console.log('');
95
+ console.log(chalk.dim('💡 Try removing filters to see all escalations'));
96
+ }
97
+ return;
98
+ }
99
+ // Display results
100
+ console.log('');
101
+ console.log(chalk.bold(`Escalations (${response.total} total, showing ${response.escalations.length})`));
102
+ console.log('');
103
+ for (const escalation of response.escalations) {
104
+ const status = getStatusIndicator(escalation.status);
105
+ const severity = getSeverityColor(escalation.severity);
106
+ const age = formatDate(escalation.createdAt);
107
+ console.log(`${status} ${severity} ${chalk.bold(escalation.taskId)} - ${escalation.reason}`);
108
+ console.log(chalk.dim(` ID: ${escalation.id}`));
109
+ console.log(chalk.dim(` Agent: ${escalation.agentId}`));
110
+ console.log(chalk.dim(` Created: ${age}`));
111
+ if (escalation.status === 'acknowledged' && escalation.acknowledgedBy) {
112
+ console.log(chalk.dim(` Acknowledged by: ${escalation.acknowledgedBy}`));
113
+ }
114
+ if (escalation.status === 'resolved' && escalation.resolvedBy && escalation.resolution) {
115
+ console.log(chalk.dim(` Resolved by: ${escalation.resolvedBy}`));
116
+ console.log(chalk.dim(` Resolution: ${escalation.resolution}`));
117
+ }
118
+ console.log('');
119
+ }
120
+ // Show pagination info
121
+ if (response.total > limit) {
122
+ const hasMore = offset + limit < response.total;
123
+ if (hasMore) {
124
+ console.log(chalk.dim(`💡 Use --offset ${offset + limit} to see more results`));
125
+ }
126
+ }
127
+ // Show summary by severity for open escalations
128
+ if (!options.status || options.status === 'open') {
129
+ const openEscalations = response.escalations.filter(e => e.status === 'open');
130
+ if (openEscalations.length > 0) {
131
+ const critical = openEscalations.filter(e => e.severity === 'critical').length;
132
+ const high = openEscalations.filter(e => e.severity === 'high').length;
133
+ const medium = openEscalations.filter(e => e.severity === 'medium').length;
134
+ const low = openEscalations.filter(e => e.severity === 'low').length;
135
+ console.log(chalk.bold('Open Escalations Summary:'));
136
+ if (critical > 0)
137
+ console.log(chalk.red(` ${critical} critical`));
138
+ if (high > 0)
139
+ console.log(chalk.yellow(` ${high} high`));
140
+ if (medium > 0)
141
+ console.log(chalk.blue(` ${medium} medium`));
142
+ if (low > 0)
143
+ console.log(chalk.gray(` ${low} low`));
144
+ console.log('');
145
+ }
146
+ }
147
+ // Show next steps
148
+ console.log(chalk.dim('💡 Next steps:'));
149
+ console.log(chalk.dim(' ginko escalation resolve <id> --resolution "..." # Resolve escalation'));
150
+ console.log(chalk.dim(' ginko escalation list --status resolved # View resolved'));
151
+ }
152
+ catch (error) {
153
+ spinner.fail(chalk.red('Failed to list escalations'));
154
+ // Handle specific error codes
155
+ if (error.message.includes('Not authenticated')) {
156
+ console.error(chalk.red(' Not authenticated. Run `ginko login` first.'));
157
+ }
158
+ else if (error.message.includes('INVALID_STATUS')) {
159
+ console.error(chalk.red(' Invalid status. Must be: open, acknowledged, resolved'));
160
+ }
161
+ else if (error.message.includes('INVALID_SEVERITY')) {
162
+ console.error(chalk.red(' Invalid severity. Must be: low, medium, high, critical'));
163
+ }
164
+ else {
165
+ console.error(chalk.red(` ${error.message}`));
166
+ }
167
+ process.exit(1);
168
+ }
169
+ }
170
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/escalation/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, resolve, cli, epic-004, human-intervention]
6
+ * @related: [index.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ interface ResolveOptions {
12
+ resolution: string;
13
+ resolvedBy?: string;
14
+ }
15
+ /**
16
+ * Resolve an escalation
17
+ */
18
+ export declare function resolveEscalationCommand(escalationId: string, options: ResolveOptions): Promise<void>;
19
+ export {};
20
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/commands/escalation/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAyEf"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, resolve, cli, epic-004, human-intervention]
6
+ * @related: [index.ts, escalation-client.ts]
7
+ * @priority: high
8
+ * @complexity: medium
9
+ * @dependencies: [commander, chalk, ora]
10
+ */
11
+ /**
12
+ * Resolve Escalation Command (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * Resolve an escalation with human decision/guidance
15
+ */
16
+ import chalk from 'chalk';
17
+ import ora from 'ora';
18
+ import { execSync } from 'child_process';
19
+ import { EscalationClient } from './escalation-client.js';
20
+ /**
21
+ * Get git user email
22
+ */
23
+ function getGitUserEmail() {
24
+ try {
25
+ const email = execSync('git config user.email', { encoding: 'utf-8' }).trim();
26
+ return email || null;
27
+ }
28
+ catch (error) {
29
+ return null;
30
+ }
31
+ }
32
+ /**
33
+ * Resolve an escalation
34
+ */
35
+ export async function resolveEscalationCommand(escalationId, options) {
36
+ const spinner = ora('Resolving escalation...').start();
37
+ try {
38
+ // Validate escalation ID
39
+ if (!escalationId || escalationId.trim().length === 0) {
40
+ spinner.fail(chalk.red('Failed to resolve escalation'));
41
+ console.error(chalk.red(' Escalation ID is required'));
42
+ process.exit(1);
43
+ }
44
+ // Get resolvedBy (default to git user.email)
45
+ let resolvedBy = options.resolvedBy;
46
+ if (!resolvedBy) {
47
+ const gitEmail = getGitUserEmail();
48
+ if (!gitEmail) {
49
+ spinner.fail(chalk.red('Failed to resolve escalation'));
50
+ console.error(chalk.red(' Could not determine git user.email'));
51
+ console.error(chalk.red(' Either:'));
52
+ console.error(chalk.red(' - Set git config user.email'));
53
+ console.error(chalk.red(' - Use --resolved-by <email> to specify'));
54
+ process.exit(1);
55
+ }
56
+ resolvedBy = gitEmail;
57
+ }
58
+ // Resolve escalation via API
59
+ const response = await EscalationClient.resolve(escalationId, resolvedBy, options.resolution);
60
+ if (!response.escalationId) {
61
+ spinner.fail(chalk.red('Failed to resolve escalation'));
62
+ console.error(chalk.red(' No escalation ID returned from API'));
63
+ process.exit(1);
64
+ }
65
+ spinner.succeed(chalk.green('Escalation resolved successfully'));
66
+ console.log('');
67
+ console.log(chalk.bold(' Resolution recorded'));
68
+ console.log(chalk.dim(` ID: ${response.escalationId}`));
69
+ console.log(chalk.dim(` Status: ${response.status}`));
70
+ console.log(chalk.dim(` Resolved by: ${response.resolvedBy}`));
71
+ console.log(chalk.dim(` Resolved at: ${new Date(response.resolvedAt).toLocaleString()}`));
72
+ console.log('');
73
+ console.log(chalk.bold(' Resolution:'));
74
+ console.log(chalk.dim(` ${response.resolution}`));
75
+ console.log('');
76
+ // Show next steps
77
+ console.log(chalk.dim('💡 Task is now unblocked and can resume'));
78
+ console.log(chalk.dim(' ginko escalation list --status open # View remaining escalations'));
79
+ }
80
+ catch (error) {
81
+ spinner.fail(chalk.red('Failed to resolve escalation'));
82
+ // Handle specific error codes
83
+ if (error.message.includes('Not authenticated')) {
84
+ console.error(chalk.red(' Not authenticated. Run `ginko login` first.'));
85
+ }
86
+ else if (error.message.includes('ESCALATION_NOT_FOUND')) {
87
+ console.error(chalk.red(' Escalation not found or already resolved'));
88
+ console.error(chalk.red(' Use "ginko escalation list" to see available escalations'));
89
+ }
90
+ else if (error.message.includes('MISSING_RESOLVED_BY')) {
91
+ console.error(chalk.red(' resolvedBy is required'));
92
+ }
93
+ else if (error.message.includes('MISSING_RESOLUTION')) {
94
+ console.error(chalk.red(' Resolution details are required'));
95
+ }
96
+ else {
97
+ console.error(chalk.red(` ${error.message}`));
98
+ }
99
+ process.exit(1);
100
+ }
101
+ }
102
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/commands/escalation/resolve.ts"],"names":[],"mappings":"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"}