@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.
- package/dist/commands/agent/agent-client.d.ts +150 -0
- package/dist/commands/agent/agent-client.d.ts.map +1 -0
- package/dist/commands/agent/agent-client.js +170 -0
- package/dist/commands/agent/agent-client.js.map +1 -0
- package/dist/commands/agent/index.d.ts +22 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +121 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/list.d.ts +22 -0
- package/dist/commands/agent/list.d.ts.map +1 -0
- package/dist/commands/agent/list.js +119 -0
- package/dist/commands/agent/list.js.map +1 -0
- package/dist/commands/agent/register.d.ts +21 -0
- package/dist/commands/agent/register.d.ts.map +1 -0
- package/dist/commands/agent/register.js +97 -0
- package/dist/commands/agent/register.js.map +1 -0
- package/dist/commands/agent/status.d.ts +19 -0
- package/dist/commands/agent/status.d.ts.map +1 -0
- package/dist/commands/agent/status.js +271 -0
- package/dist/commands/agent/status.js.map +1 -0
- package/dist/commands/agent/work.d.ts +22 -0
- package/dist/commands/agent/work.d.ts.map +1 -0
- package/dist/commands/agent/work.js +459 -0
- package/dist/commands/agent/work.js.map +1 -0
- package/dist/commands/checkpoint/create.d.ts +27 -0
- package/dist/commands/checkpoint/create.d.ts.map +1 -0
- package/dist/commands/checkpoint/create.js +82 -0
- package/dist/commands/checkpoint/create.js.map +1 -0
- package/dist/commands/checkpoint/index.d.ts +23 -0
- package/dist/commands/checkpoint/index.d.ts.map +1 -0
- package/dist/commands/checkpoint/index.js +91 -0
- package/dist/commands/checkpoint/index.js.map +1 -0
- package/dist/commands/checkpoint/list.d.ts +27 -0
- package/dist/commands/checkpoint/list.d.ts.map +1 -0
- package/dist/commands/checkpoint/list.js +115 -0
- package/dist/commands/checkpoint/list.js.map +1 -0
- package/dist/commands/checkpoint/show.d.ts +23 -0
- package/dist/commands/checkpoint/show.d.ts.map +1 -0
- package/dist/commands/checkpoint/show.js +102 -0
- package/dist/commands/checkpoint/show.js.map +1 -0
- package/dist/commands/dlq.d.ts +24 -0
- package/dist/commands/dlq.d.ts.map +1 -0
- package/dist/commands/dlq.js +172 -0
- package/dist/commands/dlq.js.map +1 -0
- package/dist/commands/escalation/create.d.ts +22 -0
- package/dist/commands/escalation/create.d.ts.map +1 -0
- package/dist/commands/escalation/create.js +122 -0
- package/dist/commands/escalation/create.js.map +1 -0
- package/dist/commands/escalation/escalation-client.d.ts +101 -0
- package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
- package/dist/commands/escalation/escalation-client.js +129 -0
- package/dist/commands/escalation/escalation-client.js.map +1 -0
- package/dist/commands/escalation/index.d.ts +22 -0
- package/dist/commands/escalation/index.d.ts.map +1 -0
- package/dist/commands/escalation/index.js +94 -0
- package/dist/commands/escalation/index.js.map +1 -0
- package/dist/commands/escalation/list.d.ts +24 -0
- package/dist/commands/escalation/list.d.ts.map +1 -0
- package/dist/commands/escalation/list.js +170 -0
- package/dist/commands/escalation/list.js.map +1 -0
- package/dist/commands/escalation/resolve.d.ts +20 -0
- package/dist/commands/escalation/resolve.d.ts.map +1 -0
- package/dist/commands/escalation/resolve.js +102 -0
- package/dist/commands/escalation/resolve.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +21 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +23 -0
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +9 -1
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +73 -14
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/notifications/history.d.ts +21 -0
- package/dist/commands/notifications/history.d.ts.map +1 -0
- package/dist/commands/notifications/history.js +160 -0
- package/dist/commands/notifications/history.js.map +1 -0
- package/dist/commands/notifications/index.d.ts +22 -0
- package/dist/commands/notifications/index.d.ts.map +1 -0
- package/dist/commands/notifications/index.js +87 -0
- package/dist/commands/notifications/index.js.map +1 -0
- package/dist/commands/notifications/list.d.ts +19 -0
- package/dist/commands/notifications/list.d.ts.map +1 -0
- package/dist/commands/notifications/list.js +132 -0
- package/dist/commands/notifications/list.js.map +1 -0
- package/dist/commands/notifications/test.d.ts +19 -0
- package/dist/commands/notifications/test.d.ts.map +1 -0
- package/dist/commands/notifications/test.js +217 -0
- package/dist/commands/notifications/test.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +25 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +858 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/sprint/deps.d.ts +29 -0
- package/dist/commands/sprint/deps.d.ts.map +1 -0
- package/dist/commands/sprint/deps.js +269 -0
- package/dist/commands/sprint/deps.js.map +1 -0
- package/dist/commands/sprint/index.d.ts +10 -5
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +26 -5
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/start/index.d.ts.map +1 -1
- package/dist/commands/start/index.js +6 -0
- package/dist/commands/start/index.js.map +1 -1
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +8 -0
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/verify.d.ts +17 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +232 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +1 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/index.js +78 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
- package/dist/lib/__tests__/task-timeout.test.js +278 -0
- package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
- package/dist/lib/agent-heartbeat.d.ts +68 -0
- package/dist/lib/agent-heartbeat.d.ts.map +1 -0
- package/dist/lib/agent-heartbeat.js +117 -0
- package/dist/lib/agent-heartbeat.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +85 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/checkpoint.js +323 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/context-metrics.d.ts +230 -0
- package/dist/lib/context-metrics.d.ts.map +1 -0
- package/dist/lib/context-metrics.js +372 -0
- package/dist/lib/context-metrics.js.map +1 -0
- package/dist/lib/dead-letter-queue.d.ts +108 -0
- package/dist/lib/dead-letter-queue.d.ts.map +1 -0
- package/dist/lib/dead-letter-queue.js +378 -0
- package/dist/lib/dead-letter-queue.js.map +1 -0
- package/dist/lib/event-logger.d.ts +9 -1
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +45 -3
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/event-queue.d.ts.map +1 -1
- package/dist/lib/event-queue.js +13 -2
- package/dist/lib/event-queue.js.map +1 -1
- package/dist/lib/examples/timeout-demo.d.ts +13 -0
- package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
- package/dist/lib/examples/timeout-demo.js +102 -0
- package/dist/lib/examples/timeout-demo.js.map +1 -0
- package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
- package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
- package/dist/lib/examples/timeout-integration-example.js +223 -0
- package/dist/lib/examples/timeout-integration-example.js.map +1 -0
- package/dist/lib/notification-hooks.d.ts +103 -0
- package/dist/lib/notification-hooks.d.ts.map +1 -0
- package/dist/lib/notification-hooks.js +223 -0
- package/dist/lib/notification-hooks.js.map +1 -0
- package/dist/lib/notifications/discord.d.ts +20 -0
- package/dist/lib/notifications/discord.d.ts.map +1 -0
- package/dist/lib/notifications/discord.js +140 -0
- package/dist/lib/notifications/discord.js.map +1 -0
- package/dist/lib/notifications/index.d.ts +66 -0
- package/dist/lib/notifications/index.d.ts.map +1 -0
- package/dist/lib/notifications/index.js +120 -0
- package/dist/lib/notifications/index.js.map +1 -0
- package/dist/lib/notifications/slack.d.ts +20 -0
- package/dist/lib/notifications/slack.d.ts.map +1 -0
- package/dist/lib/notifications/slack.js +186 -0
- package/dist/lib/notifications/slack.js.map +1 -0
- package/dist/lib/notifications/teams.d.ts +20 -0
- package/dist/lib/notifications/teams.d.ts.map +1 -0
- package/dist/lib/notifications/teams.js +146 -0
- package/dist/lib/notifications/teams.js.map +1 -0
- package/dist/lib/notifications/webhook.d.ts +23 -0
- package/dist/lib/notifications/webhook.d.ts.map +1 -0
- package/dist/lib/notifications/webhook.js +65 -0
- package/dist/lib/notifications/webhook.js.map +1 -0
- package/dist/lib/orchestrator-state.d.ts +194 -0
- package/dist/lib/orchestrator-state.d.ts.map +1 -0
- package/dist/lib/orchestrator-state.js +332 -0
- package/dist/lib/orchestrator-state.js.map +1 -0
- package/dist/lib/realtime-cursor.d.ts +107 -0
- package/dist/lib/realtime-cursor.d.ts.map +1 -0
- package/dist/lib/realtime-cursor.js +260 -0
- package/dist/lib/realtime-cursor.js.map +1 -0
- package/dist/lib/rollback.d.ts +86 -0
- package/dist/lib/rollback.d.ts.map +1 -0
- package/dist/lib/rollback.js +405 -0
- package/dist/lib/rollback.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +39 -2
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +269 -5
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/stale-agent-detector.d.ts +102 -0
- package/dist/lib/stale-agent-detector.d.ts.map +1 -0
- package/dist/lib/stale-agent-detector.js +156 -0
- package/dist/lib/stale-agent-detector.js.map +1 -0
- package/dist/lib/task-dependencies.d.ts +143 -0
- package/dist/lib/task-dependencies.d.ts.map +1 -0
- package/dist/lib/task-dependencies.js +357 -0
- package/dist/lib/task-dependencies.js.map +1 -0
- package/dist/lib/task-timeout.d.ts +153 -0
- package/dist/lib/task-timeout.d.ts.map +1 -0
- package/dist/lib/task-timeout.js +505 -0
- package/dist/lib/task-timeout.js.map +1 -0
- package/dist/lib/verification/build-check.d.ts +55 -0
- package/dist/lib/verification/build-check.d.ts.map +1 -0
- package/dist/lib/verification/build-check.js +111 -0
- package/dist/lib/verification/build-check.js.map +1 -0
- package/dist/lib/verification/index.d.ts +19 -0
- package/dist/lib/verification/index.d.ts.map +1 -0
- package/dist/lib/verification/index.js +17 -0
- package/dist/lib/verification/index.js.map +1 -0
- package/dist/lib/verification/lint-check.d.ts +34 -0
- package/dist/lib/verification/lint-check.d.ts.map +1 -0
- package/dist/lib/verification/lint-check.js +215 -0
- package/dist/lib/verification/lint-check.js.map +1 -0
- package/dist/lib/verification/test-runner.d.ts +50 -0
- package/dist/lib/verification/test-runner.d.ts.map +1 -0
- package/dist/lib/verification/test-runner.js +225 -0
- package/dist/lib/verification/test-runner.js.map +1 -0
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +7 -0
- package/dist/utils/command-helpers.js.map +1 -1
- 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"}
|