@ginkoai/cli 1.6.2 → 1.7.1

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 +269 -5
  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,122 @@
1
+ /**
2
+ * @fileType: command
3
+ * @status: current
4
+ * @updated: 2025-12-07
5
+ * @tags: [escalation, create, 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
+ * Create Escalation Command (EPIC-004 Sprint 5 TASK-7)
13
+ *
14
+ * Create a new escalation requesting human intervention
15
+ */
16
+ import chalk from 'chalk';
17
+ import ora from 'ora';
18
+ import fs from 'fs/promises';
19
+ import path from 'path';
20
+ import { EscalationClient } from './escalation-client.js';
21
+ import { requireGinkoRoot } from '../../utils/ginko-root.js';
22
+ /**
23
+ * Load agent config from .ginko/agent.json
24
+ */
25
+ async function loadAgentConfig() {
26
+ try {
27
+ const projectRoot = await requireGinkoRoot();
28
+ const agentConfigPath = path.join(projectRoot, '.ginko', 'agent.json');
29
+ const content = await fs.readFile(agentConfigPath, 'utf-8');
30
+ const config = JSON.parse(content);
31
+ if (!config.agentId) {
32
+ return null;
33
+ }
34
+ return config;
35
+ }
36
+ catch (error) {
37
+ return null;
38
+ }
39
+ }
40
+ /**
41
+ * Create a new escalation
42
+ */
43
+ export async function createEscalationCommand(options) {
44
+ const spinner = ora('Creating escalation...').start();
45
+ try {
46
+ // Validate severity
47
+ if (!['low', 'medium', 'high', 'critical'].includes(options.severity)) {
48
+ spinner.fail(chalk.red('Failed to create escalation'));
49
+ console.error(chalk.red(' Severity must be one of: low, medium, high, critical'));
50
+ process.exit(1);
51
+ }
52
+ // Get agent ID
53
+ let agentId = options.agent;
54
+ if (!agentId) {
55
+ const agentConfig = await loadAgentConfig();
56
+ if (!agentConfig) {
57
+ spinner.fail(chalk.red('Failed to create escalation'));
58
+ console.error(chalk.red(' No agent found. Either:'));
59
+ console.error(chalk.red(' - Use --agent <agentId> to specify agent'));
60
+ console.error(chalk.red(' - Run "ginko agent register" to register current agent'));
61
+ process.exit(1);
62
+ }
63
+ agentId = agentConfig.agentId;
64
+ }
65
+ // Create escalation via API
66
+ const response = await EscalationClient.create({
67
+ taskId: options.task,
68
+ agentId,
69
+ reason: options.reason,
70
+ severity: options.severity,
71
+ });
72
+ if (!response.escalationId) {
73
+ spinner.fail(chalk.red('Failed to create escalation'));
74
+ console.error(chalk.red(' No escalation ID returned from API'));
75
+ process.exit(1);
76
+ }
77
+ spinner.succeed(chalk.green('Escalation created successfully'));
78
+ console.log('');
79
+ console.log(chalk.bold(` ${response.reason}`));
80
+ console.log(chalk.dim(` ID: ${response.escalationId}`));
81
+ console.log(chalk.dim(` Task: ${response.taskId}`));
82
+ console.log(chalk.dim(` Severity: ${response.severity}`));
83
+ console.log(chalk.dim(` Status: ${response.status}`));
84
+ console.log(chalk.dim(` Created: ${new Date(response.createdAt).toLocaleString()}`));
85
+ console.log('');
86
+ // Show severity-based guidance
87
+ if (response.severity === 'critical') {
88
+ console.log(chalk.red('⚠️ CRITICAL escalation - immediate attention required'));
89
+ }
90
+ else if (response.severity === 'high') {
91
+ console.log(chalk.yellow('⚠️ HIGH priority - requires prompt attention'));
92
+ }
93
+ console.log('');
94
+ console.log(chalk.dim('💡 Next steps:'));
95
+ console.log(chalk.dim(' ginko escalation list --status open # View all open escalations'));
96
+ console.log(chalk.dim(` ginko escalation resolve ${response.escalationId.substring(0, 20)}... --resolution "..." # Resolve when ready`));
97
+ }
98
+ catch (error) {
99
+ spinner.fail(chalk.red('Failed to create escalation'));
100
+ // Handle specific error codes
101
+ if (error.message.includes('Not authenticated')) {
102
+ console.error(chalk.red(' Not authenticated. Run `ginko login` first.'));
103
+ }
104
+ else if (error.message.includes('MISSING_TASK_ID')) {
105
+ console.error(chalk.red(' Task ID is required'));
106
+ }
107
+ else if (error.message.includes('MISSING_AGENT_ID')) {
108
+ console.error(chalk.red(' Agent ID is required'));
109
+ }
110
+ else if (error.message.includes('MISSING_REASON')) {
111
+ console.error(chalk.red(' Reason is required'));
112
+ }
113
+ else if (error.message.includes('INVALID_SEVERITY')) {
114
+ console.error(chalk.red(' Invalid severity. Must be: low, medium, high, critical'));
115
+ }
116
+ else {
117
+ console.error(chalk.red(` ${error.message}`));
118
+ }
119
+ process.exit(1);
120
+ }
121
+ }
122
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/escalation/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
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
+ interface CreateEscalationRequest {
12
+ taskId: string;
13
+ agentId: string;
14
+ reason: string;
15
+ severity: 'low' | 'medium' | 'high' | 'critical';
16
+ metadata?: Record<string, any>;
17
+ }
18
+ interface CreateEscalationResponse {
19
+ escalationId: string;
20
+ taskId: string;
21
+ agentId: string;
22
+ reason: string;
23
+ severity: string;
24
+ status: string;
25
+ organizationId: string;
26
+ createdAt: string;
27
+ }
28
+ interface ListEscalationsRequest {
29
+ status?: string;
30
+ severity?: string;
31
+ taskId?: string;
32
+ agentId?: string;
33
+ limit?: number;
34
+ offset?: number;
35
+ }
36
+ interface ListEscalationsResponse {
37
+ escalations: Array<{
38
+ id: string;
39
+ taskId: string;
40
+ agentId: string;
41
+ reason: string;
42
+ severity: string;
43
+ status: string;
44
+ organizationId: string;
45
+ createdAt: string;
46
+ acknowledgedAt?: string;
47
+ acknowledgedBy?: string;
48
+ resolvedAt?: string;
49
+ resolvedBy?: string;
50
+ resolution?: string;
51
+ metadata?: Record<string, any>;
52
+ }>;
53
+ total: number;
54
+ limit: number;
55
+ offset: number;
56
+ }
57
+ interface AcknowledgeResponse {
58
+ escalationId: string;
59
+ status: string;
60
+ acknowledgedAt: string;
61
+ acknowledgedBy: string;
62
+ }
63
+ interface ResolveResponse {
64
+ escalationId: string;
65
+ status: string;
66
+ resolvedAt: string;
67
+ resolvedBy: string;
68
+ resolution: string;
69
+ }
70
+ /**
71
+ * Escalation API client
72
+ */
73
+ export declare class EscalationClient {
74
+ private static apiUrl;
75
+ /**
76
+ * Check if user is authenticated
77
+ */
78
+ private static requireAuth;
79
+ /**
80
+ * Make authenticated API request
81
+ */
82
+ private static request;
83
+ /**
84
+ * Create a new escalation
85
+ */
86
+ static create(data: CreateEscalationRequest): Promise<CreateEscalationResponse>;
87
+ /**
88
+ * List escalations with optional filtering
89
+ */
90
+ static list(params?: ListEscalationsRequest): Promise<ListEscalationsResponse>;
91
+ /**
92
+ * Acknowledge an escalation
93
+ */
94
+ static acknowledge(escalationId: string, acknowledgedBy: string): Promise<AcknowledgeResponse>;
95
+ /**
96
+ * Resolve an escalation
97
+ */
98
+ static resolve(escalationId: string, resolvedBy: string, resolution: string): Promise<ResolveResponse>;
99
+ }
100
+ export type { CreateEscalationResponse, ListEscalationsResponse, ResolveResponse };
101
+ //# sourceMappingURL=escalation-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalation-client.d.ts","sourceRoot":"","sources":["../../../src/commands/escalation/escalation-client.ts"],"names":[],"mappings":"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"}
@@ -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"}