@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [checkpoint, cli, epic-004-sprint5, task-1, resilience]
|
|
6
|
+
* @related: [create.ts, list.ts, show.ts, checkpoint.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Checkpoint Commands (EPIC-004 Sprint 5 TASK-1)
|
|
13
|
+
*
|
|
14
|
+
* CLI commands for creating, listing, and inspecting checkpoints
|
|
15
|
+
* Checkpoints enable rollback and recovery for multi-agent task execution
|
|
16
|
+
*/
|
|
17
|
+
import { Command } from 'commander';
|
|
18
|
+
import chalk from 'chalk';
|
|
19
|
+
import { createCheckpointCommand } from './create.js';
|
|
20
|
+
import { listCheckpointsCommand } from './list.js';
|
|
21
|
+
import { showCheckpointCommand } from './show.js';
|
|
22
|
+
/**
|
|
23
|
+
* Main checkpoint command with subcommands
|
|
24
|
+
*/
|
|
25
|
+
export function checkpointCommand() {
|
|
26
|
+
const checkpoint = new Command('checkpoint')
|
|
27
|
+
.description('Manage checkpoints for task rollback and recovery (EPIC-004)')
|
|
28
|
+
.showHelpAfterError('(use --help for additional information)')
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
${chalk.gray('Quick Start:')}
|
|
31
|
+
${chalk.green('ginko checkpoint create')} --task TASK-1 --message "Before refactor" ${chalk.gray('# Create checkpoint')}
|
|
32
|
+
${chalk.green('ginko checkpoint list')} --task TASK-1 ${chalk.gray('# List task checkpoints')}
|
|
33
|
+
${chalk.green('ginko checkpoint show')} cp_xxx ${chalk.gray('# Show checkpoint details')}
|
|
34
|
+
|
|
35
|
+
${chalk.gray('Usage Examples:')}
|
|
36
|
+
${chalk.green('ginko checkpoint create')} --task TASK-1 --message "Completed authentication"
|
|
37
|
+
${chalk.green('ginko checkpoint create')} --task TASK-2 ${chalk.dim('# Auto-generated message')}
|
|
38
|
+
${chalk.green('ginko checkpoint list')} ${chalk.dim('# List all checkpoints')}
|
|
39
|
+
${chalk.green('ginko checkpoint list')} --task TASK-1 ${chalk.dim('# Filter by task')}
|
|
40
|
+
${chalk.green('ginko checkpoint show')} cp_1701234567_a1b2c3d4
|
|
41
|
+
|
|
42
|
+
${chalk.gray('Features:')}
|
|
43
|
+
${chalk.cyan('📸 Lightweight Snapshots')} - Captures git commit, files, event stream position
|
|
44
|
+
${chalk.cyan('🔄 Quick Recovery')} - Roll back to any checkpoint using git operations
|
|
45
|
+
${chalk.cyan('🔍 Task Filtering')} - List checkpoints for specific tasks
|
|
46
|
+
${chalk.cyan('📊 Detailed Inspection')} - View checkpoint metadata and state
|
|
47
|
+
|
|
48
|
+
${chalk.gray('Checkpoint Structure:')}
|
|
49
|
+
${chalk.dim('Checkpoints store references to work state:')}
|
|
50
|
+
${chalk.dim('- Git commit hash (current HEAD)')}
|
|
51
|
+
${chalk.dim('- Modified files since task start')}
|
|
52
|
+
${chalk.dim('- Event stream position (last event ID)')}
|
|
53
|
+
${chalk.dim('- Optional message and metadata')}
|
|
54
|
+
|
|
55
|
+
${chalk.gray('Learn More:')}
|
|
56
|
+
${chalk.dim('https://docs.ginko.ai/checkpoints')}
|
|
57
|
+
`)
|
|
58
|
+
.action(() => {
|
|
59
|
+
// When called without subcommand, show help
|
|
60
|
+
checkpoint.help({ error: false });
|
|
61
|
+
});
|
|
62
|
+
// Create command
|
|
63
|
+
checkpoint
|
|
64
|
+
.command('create')
|
|
65
|
+
.description('Create a checkpoint for current work state')
|
|
66
|
+
.requiredOption('--task <taskId>', 'Task ID for this checkpoint (e.g., TASK-1)')
|
|
67
|
+
.option('--message <message>', 'Optional description of checkpoint')
|
|
68
|
+
.option('--agent <agentId>', 'Agent ID (auto-detected if not provided)')
|
|
69
|
+
.action(async (options) => {
|
|
70
|
+
await createCheckpointCommand(options);
|
|
71
|
+
});
|
|
72
|
+
// List command
|
|
73
|
+
checkpoint
|
|
74
|
+
.command('list')
|
|
75
|
+
.description('List checkpoints with optional task filtering')
|
|
76
|
+
.option('--task <taskId>', 'Filter by task ID')
|
|
77
|
+
.action(async (options) => {
|
|
78
|
+
await listCheckpointsCommand(options);
|
|
79
|
+
});
|
|
80
|
+
// Show command
|
|
81
|
+
checkpoint
|
|
82
|
+
.command('show <checkpointId>')
|
|
83
|
+
.description('Show detailed checkpoint information')
|
|
84
|
+
.action(async (checkpointId) => {
|
|
85
|
+
await showCheckpointCommand(checkpointId);
|
|
86
|
+
});
|
|
87
|
+
return checkpoint;
|
|
88
|
+
}
|
|
89
|
+
// Export for use in main CLI
|
|
90
|
+
export default checkpointCommand;
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/checkpoint/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [checkpoint, list, cli, epic-004-sprint5, task-1]
|
|
6
|
+
* @related: [checkpoint.ts, create.ts, show.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [chalk, cli-table3, checkpoint]
|
|
10
|
+
*/
|
|
11
|
+
interface ListCheckpointsOptions {
|
|
12
|
+
task?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* List checkpoints with optional task filtering
|
|
16
|
+
*
|
|
17
|
+
* Displays:
|
|
18
|
+
* - Checkpoint ID
|
|
19
|
+
* - Timestamp
|
|
20
|
+
* - Git commit (short hash)
|
|
21
|
+
* - Modified file count
|
|
22
|
+
* - Message (if provided)
|
|
23
|
+
* - Latest marker
|
|
24
|
+
*/
|
|
25
|
+
export declare function listCheckpointsCommand(options: ListCheckpointsOptions): Promise<void>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/checkpoint/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG3F"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [checkpoint, list, cli, epic-004-sprint5, task-1]
|
|
6
|
+
* @related: [checkpoint.ts, create.ts, show.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [chalk, cli-table3, checkpoint]
|
|
10
|
+
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import Table from 'cli-table3';
|
|
13
|
+
import { listCheckpoints, getLatestCheckpoint } from '../../lib/checkpoint.js';
|
|
14
|
+
/**
|
|
15
|
+
* List checkpoints with optional task filtering
|
|
16
|
+
*
|
|
17
|
+
* Displays:
|
|
18
|
+
* - Checkpoint ID
|
|
19
|
+
* - Timestamp
|
|
20
|
+
* - Git commit (short hash)
|
|
21
|
+
* - Modified file count
|
|
22
|
+
* - Message (if provided)
|
|
23
|
+
* - Latest marker
|
|
24
|
+
*/
|
|
25
|
+
export async function listCheckpointsCommand(options) {
|
|
26
|
+
try {
|
|
27
|
+
// Get checkpoints (optionally filtered by task)
|
|
28
|
+
const checkpoints = await listCheckpoints(options.task);
|
|
29
|
+
if (checkpoints.length === 0) {
|
|
30
|
+
if (options.task) {
|
|
31
|
+
console.log(chalk.yellow(`\n⚠️ No checkpoints found for task ${chalk.bold(options.task)}`));
|
|
32
|
+
console.log(chalk.dim('Create one with: ginko checkpoint create --task ' + options.task));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(chalk.yellow('\n⚠️ No checkpoints found'));
|
|
36
|
+
console.log(chalk.dim('Create one with: ginko checkpoint create --task TASK-1'));
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Get latest checkpoint for marking
|
|
41
|
+
const latestCheckpoint = options.task
|
|
42
|
+
? await getLatestCheckpoint(options.task)
|
|
43
|
+
: checkpoints[0]; // Already sorted by timestamp desc
|
|
44
|
+
// Display header
|
|
45
|
+
console.log(chalk.green(`\n📸 Checkpoints ${options.task ? `for ${chalk.bold(options.task)}` : ''}`));
|
|
46
|
+
console.log(chalk.gray('─'.repeat(80)));
|
|
47
|
+
// Create table
|
|
48
|
+
const table = new Table({
|
|
49
|
+
head: ['ID', 'Timestamp', 'Commit', 'Files', 'Message'],
|
|
50
|
+
style: {
|
|
51
|
+
head: ['cyan'],
|
|
52
|
+
border: ['gray']
|
|
53
|
+
},
|
|
54
|
+
colWidths: [25, 20, 10, 8, 35],
|
|
55
|
+
wordWrap: true
|
|
56
|
+
});
|
|
57
|
+
// Add checkpoint rows
|
|
58
|
+
checkpoints.forEach((checkpoint) => {
|
|
59
|
+
const isLatest = latestCheckpoint?.id === checkpoint.id;
|
|
60
|
+
// Format ID with latest marker
|
|
61
|
+
const idText = isLatest
|
|
62
|
+
? chalk.cyan(checkpoint.id) + chalk.yellow(' (latest)')
|
|
63
|
+
: chalk.dim(checkpoint.id);
|
|
64
|
+
// Format timestamp
|
|
65
|
+
const timestamp = checkpoint.timestamp.toLocaleString('en-US', {
|
|
66
|
+
month: 'short',
|
|
67
|
+
day: 'numeric',
|
|
68
|
+
hour: '2-digit',
|
|
69
|
+
minute: '2-digit'
|
|
70
|
+
});
|
|
71
|
+
// Format commit hash (short)
|
|
72
|
+
const commitShort = checkpoint.gitCommit.substring(0, 7);
|
|
73
|
+
const commitText = isLatest ? chalk.cyan(commitShort) : chalk.dim(commitShort);
|
|
74
|
+
// Format file count
|
|
75
|
+
const fileCount = checkpoint.filesModified.length;
|
|
76
|
+
const fileCountText = fileCount > 0
|
|
77
|
+
? chalk.yellow(fileCount.toString())
|
|
78
|
+
: chalk.dim('0');
|
|
79
|
+
// Format message
|
|
80
|
+
const message = checkpoint.message || chalk.dim('(no message)');
|
|
81
|
+
const messageText = isLatest ? message : chalk.dim(message);
|
|
82
|
+
table.push([
|
|
83
|
+
idText,
|
|
84
|
+
chalk.dim(timestamp),
|
|
85
|
+
commitText,
|
|
86
|
+
fileCountText,
|
|
87
|
+
messageText
|
|
88
|
+
]);
|
|
89
|
+
});
|
|
90
|
+
console.log(table.toString());
|
|
91
|
+
// Display summary
|
|
92
|
+
console.log(chalk.gray('\n' + '─'.repeat(80)));
|
|
93
|
+
console.log(chalk.dim(`Total: ${chalk.cyan(checkpoints.length)} checkpoint${checkpoints.length === 1 ? '' : 's'}`));
|
|
94
|
+
if (options.task) {
|
|
95
|
+
console.log(chalk.dim(`Task: ${chalk.cyan(options.task)}`));
|
|
96
|
+
}
|
|
97
|
+
console.log(chalk.dim('\nNext steps:'));
|
|
98
|
+
console.log(chalk.dim(` • View details: ${chalk.cyan('ginko checkpoint show <id>')}`));
|
|
99
|
+
console.log(chalk.dim(` • Create new: ${chalk.cyan('ginko checkpoint create --task ' + (options.task || 'TASK-ID'))}`));
|
|
100
|
+
if (latestCheckpoint) {
|
|
101
|
+
console.log(chalk.dim(` • Rollback to latest: ${chalk.cyan(`ginko rollback ${latestCheckpoint.id}`)} ${chalk.yellow('(future)')}`));
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (error instanceof Error) {
|
|
107
|
+
console.error(chalk.red(`\n✗ Error: ${error.message}`));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.error(chalk.red('\n✗ An unexpected error occurred'));
|
|
111
|
+
}
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/checkpoint/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [checkpoint, show, cli, epic-004-sprint5, task-1]
|
|
6
|
+
* @related: [checkpoint.ts, create.ts, list.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [chalk, checkpoint]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Show detailed checkpoint information
|
|
13
|
+
*
|
|
14
|
+
* Displays all checkpoint fields:
|
|
15
|
+
* - ID, task ID, agent ID
|
|
16
|
+
* - Timestamp
|
|
17
|
+
* - Git commit hash
|
|
18
|
+
* - Modified files list
|
|
19
|
+
* - Event stream position
|
|
20
|
+
* - Message and metadata
|
|
21
|
+
*/
|
|
22
|
+
export declare function showCheckpointCommand(checkpointId: string): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=show.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/checkpoint/show.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF/E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [checkpoint, show, cli, epic-004-sprint5, task-1]
|
|
6
|
+
* @related: [checkpoint.ts, create.ts, list.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [chalk, checkpoint]
|
|
10
|
+
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { getCheckpoint } from '../../lib/checkpoint.js';
|
|
13
|
+
/**
|
|
14
|
+
* Show detailed checkpoint information
|
|
15
|
+
*
|
|
16
|
+
* Displays all checkpoint fields:
|
|
17
|
+
* - ID, task ID, agent ID
|
|
18
|
+
* - Timestamp
|
|
19
|
+
* - Git commit hash
|
|
20
|
+
* - Modified files list
|
|
21
|
+
* - Event stream position
|
|
22
|
+
* - Message and metadata
|
|
23
|
+
*/
|
|
24
|
+
export async function showCheckpointCommand(checkpointId) {
|
|
25
|
+
try {
|
|
26
|
+
// Validate checkpoint ID
|
|
27
|
+
if (!checkpointId) {
|
|
28
|
+
console.log(chalk.red('\n✗ Checkpoint ID is required'));
|
|
29
|
+
console.log(chalk.dim('Usage: ginko checkpoint show <checkpointId>'));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
// Get checkpoint
|
|
33
|
+
const checkpoint = await getCheckpoint(checkpointId);
|
|
34
|
+
if (!checkpoint) {
|
|
35
|
+
console.log(chalk.yellow(`\n⚠️ Checkpoint ${chalk.bold(checkpointId)} not found`));
|
|
36
|
+
console.log(chalk.dim('List checkpoints with: ginko checkpoint list'));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Display checkpoint details
|
|
40
|
+
console.log(chalk.green(`\n📸 Checkpoint Details`));
|
|
41
|
+
console.log(chalk.gray('═'.repeat(60)));
|
|
42
|
+
// Basic info
|
|
43
|
+
console.log(chalk.bold('\nIdentification:'));
|
|
44
|
+
console.log(` ${chalk.dim('ID:')} ${chalk.cyan(checkpoint.id)}`);
|
|
45
|
+
console.log(` ${chalk.dim('Task:')} ${chalk.cyan(checkpoint.taskId)}`);
|
|
46
|
+
console.log(` ${chalk.dim('Agent:')} ${chalk.dim(checkpoint.agentId)}`);
|
|
47
|
+
console.log(` ${chalk.dim('Created:')} ${chalk.dim(checkpoint.timestamp.toLocaleString())}`);
|
|
48
|
+
// Message
|
|
49
|
+
if (checkpoint.message) {
|
|
50
|
+
console.log(chalk.bold('\nMessage:'));
|
|
51
|
+
console.log(` ${checkpoint.message}`);
|
|
52
|
+
}
|
|
53
|
+
// Git state
|
|
54
|
+
console.log(chalk.bold('\nGit State:'));
|
|
55
|
+
console.log(` ${chalk.dim('Commit:')} ${chalk.cyan(checkpoint.gitCommit)}`);
|
|
56
|
+
console.log(` ${chalk.dim('Short:')} ${chalk.cyan(checkpoint.gitCommit.substring(0, 7))}`);
|
|
57
|
+
// Modified files
|
|
58
|
+
console.log(chalk.bold('\nModified Files:'));
|
|
59
|
+
if (checkpoint.filesModified.length === 0) {
|
|
60
|
+
console.log(chalk.dim(' (no modified files)'));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(` ${chalk.yellow(checkpoint.filesModified.length)} file${checkpoint.filesModified.length === 1 ? '' : 's'} modified:`);
|
|
64
|
+
checkpoint.filesModified.forEach((file, index) => {
|
|
65
|
+
// Show first 20 files, then truncate
|
|
66
|
+
if (index < 20) {
|
|
67
|
+
console.log(` ${chalk.dim(`${index + 1}.`)} ${file}`);
|
|
68
|
+
}
|
|
69
|
+
else if (index === 20) {
|
|
70
|
+
console.log(chalk.dim(` ... and ${checkpoint.filesModified.length - 20} more files`));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// Event stream position
|
|
75
|
+
console.log(chalk.bold('\nEvent Stream:'));
|
|
76
|
+
console.log(` ${chalk.dim('Last event:')} ${chalk.dim(checkpoint.eventsSince)}`);
|
|
77
|
+
// Metadata
|
|
78
|
+
if (checkpoint.metadata && Object.keys(checkpoint.metadata).length > 0) {
|
|
79
|
+
console.log(chalk.bold('\nMetadata:'));
|
|
80
|
+
Object.entries(checkpoint.metadata).forEach(([key, value]) => {
|
|
81
|
+
console.log(` ${chalk.dim(key + ':')} ${JSON.stringify(value)}`);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Next steps
|
|
85
|
+
console.log(chalk.gray('\n' + '═'.repeat(60)));
|
|
86
|
+
console.log(chalk.dim('Next steps:'));
|
|
87
|
+
console.log(chalk.dim(` • View commit: ${chalk.cyan(`git show ${checkpoint.gitCommit.substring(0, 7)}`)}`));
|
|
88
|
+
console.log(chalk.dim(` • List task checkpoints: ${chalk.cyan(`ginko checkpoint list --task ${checkpoint.taskId}`)}`));
|
|
89
|
+
console.log(chalk.dim(` • Rollback to this checkpoint: ${chalk.cyan(`ginko rollback ${checkpoint.id}`)} ${chalk.yellow('(future)')}`));
|
|
90
|
+
console.log();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error instanceof Error) {
|
|
94
|
+
console.error(chalk.red(`\n✗ Error: ${error.message}`));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.error(chalk.red('\n✗ An unexpected error occurred'));
|
|
98
|
+
}
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/checkpoint/show.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: [dead-letter-queue, dlq, cli-command, epic-004]
|
|
6
|
+
* @related: [../lib/dead-letter-queue.ts, log.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [commander]
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
/**
|
|
13
|
+
* ginko dlq - Dead Letter Queue management
|
|
14
|
+
*
|
|
15
|
+
* Commands:
|
|
16
|
+
* - ginko dlq list [--status=pending]
|
|
17
|
+
* - ginko dlq show <id>
|
|
18
|
+
* - ginko dlq retry <id>
|
|
19
|
+
* - ginko dlq retry-all
|
|
20
|
+
* - ginko dlq stats
|
|
21
|
+
* - ginko dlq cleanup [--days=30]
|
|
22
|
+
*/
|
|
23
|
+
export declare const dlqCommand: Command;
|
|
24
|
+
//# sourceMappingURL=dlq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dlq.d.ts","sourceRoot":"","sources":["../../src/commands/dlq.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,SAwKpB,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [dead-letter-queue, dlq, cli-command, epic-004]
|
|
6
|
+
* @related: [../lib/dead-letter-queue.ts, log.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [commander]
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { getDeadLetterEntries, getDeadLetterEntry, retryDeadLetter, autoRetryDeadLetters, getDeadLetterStats, cleanupDeadLetters } from '../lib/dead-letter-queue.js';
|
|
13
|
+
/**
|
|
14
|
+
* ginko dlq - Dead Letter Queue management
|
|
15
|
+
*
|
|
16
|
+
* Commands:
|
|
17
|
+
* - ginko dlq list [--status=pending]
|
|
18
|
+
* - ginko dlq show <id>
|
|
19
|
+
* - ginko dlq retry <id>
|
|
20
|
+
* - ginko dlq retry-all
|
|
21
|
+
* - ginko dlq stats
|
|
22
|
+
* - ginko dlq cleanup [--days=30]
|
|
23
|
+
*/
|
|
24
|
+
export const dlqCommand = new Command('dlq')
|
|
25
|
+
.description('Manage Dead Letter Queue (failed events)')
|
|
26
|
+
.addCommand(new Command('list')
|
|
27
|
+
.description('List DLQ entries')
|
|
28
|
+
.option('-s, --status <status>', 'Filter by status (pending|retrying|resolved|abandoned)')
|
|
29
|
+
.option('-l, --limit <number>', 'Limit number of results', '20')
|
|
30
|
+
.action(async (options) => {
|
|
31
|
+
try {
|
|
32
|
+
const status = options.status;
|
|
33
|
+
const limit = parseInt(options.limit, 10);
|
|
34
|
+
const entries = await getDeadLetterEntries(status);
|
|
35
|
+
const displayEntries = entries.slice(0, limit);
|
|
36
|
+
if (displayEntries.length === 0) {
|
|
37
|
+
console.log('No DLQ entries found.');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log(`\nDead Letter Queue Entries (${displayEntries.length}/${entries.length}):\n`);
|
|
41
|
+
for (const entry of displayEntries) {
|
|
42
|
+
const age = Math.floor((Date.now() - entry.failedAt.getTime()) / 1000 / 60);
|
|
43
|
+
const ageStr = age < 60 ? `${age}m` : `${Math.floor(age / 60)}h`;
|
|
44
|
+
console.log(` ${entry.id}`);
|
|
45
|
+
console.log(` Status: ${entry.status}`);
|
|
46
|
+
console.log(` Event: ${entry.originalEvent.id}`);
|
|
47
|
+
console.log(` Failed: ${ageStr} ago (${entry.retryCount} retries)`);
|
|
48
|
+
console.log(` Reason: ${entry.failureReason.split('\n')[0]}`);
|
|
49
|
+
console.log('');
|
|
50
|
+
}
|
|
51
|
+
if (entries.length > limit) {
|
|
52
|
+
console.log(` ... and ${entries.length - limit} more entries`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('Error listing DLQ entries:', error instanceof Error ? error.message : String(error));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}))
|
|
60
|
+
.addCommand(new Command('show')
|
|
61
|
+
.description('Show details of a specific DLQ entry')
|
|
62
|
+
.argument('<id>', 'DLQ entry ID')
|
|
63
|
+
.action(async (id) => {
|
|
64
|
+
try {
|
|
65
|
+
const entry = await getDeadLetterEntry(id);
|
|
66
|
+
if (!entry) {
|
|
67
|
+
console.error(`DLQ entry not found: ${id}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
console.log(`\nDLQ Entry: ${entry.id}\n`);
|
|
71
|
+
console.log(`Status: ${entry.status}`);
|
|
72
|
+
console.log(`Failed At: ${entry.failedAt.toISOString()}`);
|
|
73
|
+
console.log(`Retry Count: ${entry.retryCount}`);
|
|
74
|
+
if (entry.lastRetryAt) {
|
|
75
|
+
console.log(`Last Retry: ${entry.lastRetryAt.toISOString()}`);
|
|
76
|
+
}
|
|
77
|
+
console.log(`\nFailure Reason:`);
|
|
78
|
+
console.log(entry.failureReason.split('\n').map(line => ` ${line}`).join('\n'));
|
|
79
|
+
console.log(`\nOriginal Event:`);
|
|
80
|
+
console.log(` ID: ${entry.originalEvent.id}`);
|
|
81
|
+
console.log(` Category: ${entry.originalEvent.category}`);
|
|
82
|
+
console.log(` Description: ${entry.originalEvent.description}`);
|
|
83
|
+
console.log(` Timestamp: ${entry.originalEvent.timestamp}`);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error('Error showing DLQ entry:', error instanceof Error ? error.message : String(error));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}))
|
|
90
|
+
.addCommand(new Command('retry')
|
|
91
|
+
.description('Retry a specific DLQ entry')
|
|
92
|
+
.argument('<id>', 'DLQ entry ID')
|
|
93
|
+
.action(async (id) => {
|
|
94
|
+
try {
|
|
95
|
+
console.log(`Retrying DLQ entry: ${id}...`);
|
|
96
|
+
const result = await retryDeadLetter(id);
|
|
97
|
+
if (result.success) {
|
|
98
|
+
console.log(`✓ Entry ${id} successfully retried and resolved`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.error(`✗ Retry failed: ${result.error}`);
|
|
102
|
+
console.error(` Status: ${result.entry.status}`);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('Error retrying DLQ entry:', error instanceof Error ? error.message : String(error));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}))
|
|
111
|
+
.addCommand(new Command('retry-all')
|
|
112
|
+
.description('Auto-retry all eligible pending entries')
|
|
113
|
+
.action(async () => {
|
|
114
|
+
try {
|
|
115
|
+
console.log('Auto-retrying eligible DLQ entries...');
|
|
116
|
+
const retriedCount = await autoRetryDeadLetters();
|
|
117
|
+
if (retriedCount === 0) {
|
|
118
|
+
console.log('No entries eligible for retry at this time.');
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(`✓ Successfully retried ${retriedCount} entries`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error('Error auto-retrying DLQ entries:', error instanceof Error ? error.message : String(error));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}))
|
|
129
|
+
.addCommand(new Command('stats')
|
|
130
|
+
.description('Show DLQ statistics')
|
|
131
|
+
.action(async () => {
|
|
132
|
+
try {
|
|
133
|
+
const stats = await getDeadLetterStats();
|
|
134
|
+
console.log('\nDead Letter Queue Statistics:\n');
|
|
135
|
+
console.log(` Total: ${stats.total}`);
|
|
136
|
+
console.log(` Pending: ${stats.pending}`);
|
|
137
|
+
console.log(` Retrying: ${stats.retrying}`);
|
|
138
|
+
console.log(` Resolved: ${stats.resolved}`);
|
|
139
|
+
console.log(` Abandoned: ${stats.abandoned}`);
|
|
140
|
+
if (stats.oldestPending) {
|
|
141
|
+
const age = Math.floor((Date.now() - stats.oldestPending.getTime()) / 1000 / 60);
|
|
142
|
+
const ageStr = age < 60 ? `${age} minutes` : `${Math.floor(age / 60)} hours`;
|
|
143
|
+
console.log(`\n Oldest pending: ${ageStr} ago`);
|
|
144
|
+
}
|
|
145
|
+
console.log('');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('Error getting DLQ stats:', error instanceof Error ? error.message : String(error));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
}))
|
|
152
|
+
.addCommand(new Command('cleanup')
|
|
153
|
+
.description('Clean up old resolved/abandoned entries')
|
|
154
|
+
.option('-d, --days <number>', 'Delete entries older than N days', '30')
|
|
155
|
+
.action(async (options) => {
|
|
156
|
+
try {
|
|
157
|
+
const days = parseInt(options.days, 10);
|
|
158
|
+
console.log(`Cleaning up DLQ entries older than ${days} days...`);
|
|
159
|
+
const deletedCount = await cleanupDeadLetters(days);
|
|
160
|
+
if (deletedCount === 0) {
|
|
161
|
+
console.log('No old entries to clean up.');
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.log(`✓ Deleted ${deletedCount} old entries`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
console.error('Error cleaning up DLQ:', error instanceof Error ? error.message : String(error));
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
}));
|
|
172
|
+
//# sourceMappingURL=dlq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dlq.js","sourceRoot":"","sources":["../../src/commands/dlq.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, 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
|
+
interface CreateOptions {
|
|
12
|
+
task: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
15
|
+
agent?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a new escalation
|
|
19
|
+
*/
|
|
20
|
+
export declare function createEscalationCommand(options: CreateOptions): Promise<void>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/escalation/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFnF"}
|