@ginkoai/cli 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +255 -4
- 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,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileType: example
|
|
4
|
+
* @status: current
|
|
5
|
+
* @updated: 2025-12-07
|
|
6
|
+
* @tags: [demo, timeout, verification]
|
|
7
|
+
* @related: [../task-timeout.ts]
|
|
8
|
+
* @priority: low
|
|
9
|
+
* @complexity: low
|
|
10
|
+
* @dependencies: []
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Quick Demo: Task Timeout Module
|
|
14
|
+
*
|
|
15
|
+
* Demonstrates timeout creation, warning detection, and timeout handling.
|
|
16
|
+
* Run with: node dist/lib/examples/timeout-demo.js
|
|
17
|
+
*/
|
|
18
|
+
import { startTaskTimeout, checkTimeouts, getActiveTimeouts, clearTaskTimeout } from '../task-timeout.js';
|
|
19
|
+
async function sleep(ms) {
|
|
20
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
21
|
+
}
|
|
22
|
+
async function demo() {
|
|
23
|
+
console.log('=== Task Timeout Module Demo ===\n');
|
|
24
|
+
try {
|
|
25
|
+
// Create a timeout with very short duration for demo
|
|
26
|
+
console.log('1. Creating timeout for DEMO-TASK (500ms max duration, 50% warning threshold)...');
|
|
27
|
+
const timeout = await startTaskTimeout('DEMO-TASK', 500, // 500ms total
|
|
28
|
+
'demo-agent', { warningThreshold: 0.5 } // Warn at 50% (250ms)
|
|
29
|
+
);
|
|
30
|
+
console.log(` ✓ Timeout created`);
|
|
31
|
+
console.log(` Task: ${timeout.taskId}`);
|
|
32
|
+
console.log(` Agent: ${timeout.agentId}`);
|
|
33
|
+
console.log(` Max Duration: ${timeout.maxDuration}ms`);
|
|
34
|
+
console.log(` Status: ${timeout.status}`);
|
|
35
|
+
console.log(` Warning At: ${timeout.warningAt?.toISOString()}`);
|
|
36
|
+
console.log(` Timeout At: ${timeout.timeoutAt.toISOString()}\n`);
|
|
37
|
+
// Wait for warning threshold
|
|
38
|
+
console.log('2. Waiting 300ms for warning threshold...');
|
|
39
|
+
await sleep(300);
|
|
40
|
+
console.log('3. Checking for warnings...');
|
|
41
|
+
await checkTimeouts();
|
|
42
|
+
const activeTimeouts = await getActiveTimeouts();
|
|
43
|
+
const demoTimeout = activeTimeouts.find(t => t.taskId === 'DEMO-TASK');
|
|
44
|
+
if (demoTimeout) {
|
|
45
|
+
console.log(` ✓ Timeout status updated: ${demoTimeout.status}`);
|
|
46
|
+
if (demoTimeout.status === 'warning') {
|
|
47
|
+
console.log(` ⚠️ Task is at ${((300 / 500) * 100).toFixed(0)}% of max duration\n`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Wait for timeout
|
|
51
|
+
console.log('4. Waiting 250ms more for timeout...');
|
|
52
|
+
await sleep(250);
|
|
53
|
+
console.log('5. Checking for timeouts...');
|
|
54
|
+
const timedOut = await checkTimeouts();
|
|
55
|
+
const demoTimedOut = timedOut.find(t => t.taskId === 'DEMO-TASK');
|
|
56
|
+
if (demoTimedOut) {
|
|
57
|
+
console.log(` ✓ Task timed out!`);
|
|
58
|
+
console.log(` Duration: ${demoTimedOut.duration}ms`);
|
|
59
|
+
console.log(` Checkpoint: ${demoTimedOut.checkpointId}`);
|
|
60
|
+
console.log(` Escalation: ${demoTimedOut.escalationEventId}\n`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.log(` ✗ Timeout not detected\n`);
|
|
64
|
+
}
|
|
65
|
+
console.log('6. Demonstrating successful task completion...');
|
|
66
|
+
// Create another timeout
|
|
67
|
+
const successTimeout = await startTaskTimeout('SUCCESS-TASK', 60000, // 1 minute
|
|
68
|
+
'success-agent');
|
|
69
|
+
console.log(` ✓ Created timeout for ${successTimeout.taskId}`);
|
|
70
|
+
// Complete it immediately
|
|
71
|
+
await clearTaskTimeout('SUCCESS-TASK');
|
|
72
|
+
console.log(` ✓ Task completed and timeout cleared\n`);
|
|
73
|
+
console.log('7. Checking active timeouts...');
|
|
74
|
+
const finalActive = await getActiveTimeouts();
|
|
75
|
+
const ourTasks = finalActive.filter(t => t.taskId === 'DEMO-TASK' || t.taskId === 'SUCCESS-TASK');
|
|
76
|
+
console.log(` Active timeouts: ${ourTasks.length}`);
|
|
77
|
+
for (const t of ourTasks) {
|
|
78
|
+
console.log(` - ${t.taskId}: ${t.status}`);
|
|
79
|
+
}
|
|
80
|
+
console.log('\n=== Demo Complete ===\n');
|
|
81
|
+
console.log('Summary:');
|
|
82
|
+
console.log('✓ Timeout creation working');
|
|
83
|
+
console.log('✓ Warning threshold detection working');
|
|
84
|
+
console.log('✓ Timeout detection working');
|
|
85
|
+
console.log('✓ Checkpoint creation working');
|
|
86
|
+
console.log('✓ Escalation event creation working');
|
|
87
|
+
console.log('✓ Task completion working\n');
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('\n❌ Demo failed:', error);
|
|
91
|
+
if (error instanceof Error) {
|
|
92
|
+
console.error(error.stack);
|
|
93
|
+
}
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Run demo
|
|
98
|
+
demo().catch(error => {
|
|
99
|
+
console.error('Fatal error:', error);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=timeout-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-demo.js","sourceRoot":"","sources":["../../../src/lib/examples/timeout-demo.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,qDAAqD;QACrD,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAChG,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,WAAW,EACX,GAAG,EAAG,cAAc;QACpB,YAAY,EACZ,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAE,sBAAsB;SAClD,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAErE,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,aAAa,EAAE,CAAC;QAEtB,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QAEvE,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,gCAAgC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QAEvC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QAElE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAE9D,yBAAyB;QACzB,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAC3C,cAAc,EACd,KAAK,EAAG,WAAW;QACnB,eAAe,CAChB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,4BAA4B,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjE,0BAA0B;QAC1B,MAAM,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAEzD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,CACxD,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,WAAW;AACX,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: example
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [example, timeout, orchestrator, integration]
|
|
6
|
+
* @related: [../task-timeout.ts, ../orchestrator-state.ts]
|
|
7
|
+
* @priority: low
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: []
|
|
10
|
+
*/
|
|
11
|
+
declare function exampleBasicTimeout(): Promise<void>;
|
|
12
|
+
declare function exampleOrchestrationLoop(): Promise<void>;
|
|
13
|
+
declare function exampleCustomConfiguration(): Promise<void>;
|
|
14
|
+
declare function exampleTimeoutHandling(): Promise<void>;
|
|
15
|
+
declare function exampleOrchestratorIntegration(): Promise<void>;
|
|
16
|
+
export { exampleBasicTimeout, exampleOrchestrationLoop, exampleCustomConfiguration, exampleTimeoutHandling, exampleOrchestratorIntegration };
|
|
17
|
+
//# sourceMappingURL=timeout-integration-example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-integration-example.d.ts","sourceRoot":"","sources":["../../../src/lib/examples/timeout-integration-example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH,iBAAe,mBAAmB,kBAuBjC;AAMD,iBAAe,wBAAwB,kBAqDtC;AAMD,iBAAe,0BAA0B,kBAsCxC;AAMD,iBAAe,sBAAsB,kBAsCpC;AAaD,iBAAe,8BAA8B,kBA4E5C;AAuBD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC/B,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: example
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [example, timeout, orchestrator, integration]
|
|
6
|
+
* @related: [../task-timeout.ts, ../orchestrator-state.ts]
|
|
7
|
+
* @priority: low
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: []
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Example: Task Timeout Integration with Orchestrator
|
|
13
|
+
*
|
|
14
|
+
* This example shows how to integrate the task timeout module
|
|
15
|
+
* into the orchestrator workflow.
|
|
16
|
+
*/
|
|
17
|
+
import { startTaskTimeout, checkTimeouts, clearTaskTimeout, getActiveTimeouts, TimeoutMonitor } from '../task-timeout.js';
|
|
18
|
+
// ============================================================
|
|
19
|
+
// Example 1: Basic Timeout Tracking
|
|
20
|
+
// ============================================================
|
|
21
|
+
async function exampleBasicTimeout() {
|
|
22
|
+
console.log('=== Example 1: Basic Timeout Tracking ===\n');
|
|
23
|
+
// When assigning a task to an agent
|
|
24
|
+
const taskId = 'TASK-1';
|
|
25
|
+
const agentId = 'agent-001';
|
|
26
|
+
const maxDuration = 30 * 60 * 1000; // 30 minutes
|
|
27
|
+
console.log(`Assigning ${taskId} to ${agentId} with ${maxDuration / 1000}s timeout`);
|
|
28
|
+
const timeout = await startTaskTimeout(taskId, maxDuration, agentId);
|
|
29
|
+
console.log(`Timeout started: ${timeout.taskId}`);
|
|
30
|
+
console.log(` Warning at: ${timeout.warningAt?.toISOString()}`);
|
|
31
|
+
console.log(` Timeout at: ${timeout.timeoutAt.toISOString()}`);
|
|
32
|
+
// ... agent works on task ...
|
|
33
|
+
// When task completes successfully
|
|
34
|
+
console.log(`\nTask ${taskId} completed successfully`);
|
|
35
|
+
await clearTaskTimeout(taskId);
|
|
36
|
+
console.log('Timeout cleared\n');
|
|
37
|
+
}
|
|
38
|
+
// ============================================================
|
|
39
|
+
// Example 2: Timeout Monitoring in Orchestration Loop
|
|
40
|
+
// ============================================================
|
|
41
|
+
async function exampleOrchestrationLoop() {
|
|
42
|
+
console.log('=== Example 2: Orchestration Loop with Timeout Checks ===\n');
|
|
43
|
+
// Start background monitor
|
|
44
|
+
const monitor = new TimeoutMonitor({
|
|
45
|
+
checkInterval: 30000 // Check every 30 seconds
|
|
46
|
+
});
|
|
47
|
+
monitor.start();
|
|
48
|
+
console.log('Timeout monitor started\n');
|
|
49
|
+
// Simulate orchestration loop
|
|
50
|
+
for (let cycle = 1; cycle <= 3; cycle++) {
|
|
51
|
+
console.log(`--- Orchestration Cycle ${cycle} ---`);
|
|
52
|
+
// Check for timed out tasks
|
|
53
|
+
const timedOutTasks = await checkTimeouts();
|
|
54
|
+
if (timedOutTasks.length > 0) {
|
|
55
|
+
console.log(`Found ${timedOutTasks.length} timed out tasks:`);
|
|
56
|
+
for (const task of timedOutTasks) {
|
|
57
|
+
console.log(` ${task.taskId}:`);
|
|
58
|
+
console.log(` Agent: ${task.agentId}`);
|
|
59
|
+
console.log(` Duration: ${task.duration / 1000}s`);
|
|
60
|
+
console.log(` Checkpoint: ${task.checkpointId}`);
|
|
61
|
+
console.log(` Escalation: ${task.escalationEventId}`);
|
|
62
|
+
// Reassign task to different agent
|
|
63
|
+
console.log(` → Reassigning to different agent`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log('No timeouts detected');
|
|
68
|
+
}
|
|
69
|
+
// Check active timeouts
|
|
70
|
+
const activeTimeouts = await getActiveTimeouts();
|
|
71
|
+
console.log(`Active timeouts: ${activeTimeouts.length}`);
|
|
72
|
+
for (const timeout of activeTimeouts) {
|
|
73
|
+
const remaining = timeout.timeoutAt.getTime() - Date.now();
|
|
74
|
+
console.log(` ${timeout.taskId}: ${remaining / 1000}s remaining (${timeout.status})`);
|
|
75
|
+
}
|
|
76
|
+
console.log();
|
|
77
|
+
// Wait before next cycle
|
|
78
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
79
|
+
}
|
|
80
|
+
// Stop monitor
|
|
81
|
+
monitor.stop();
|
|
82
|
+
console.log('Timeout monitor stopped\n');
|
|
83
|
+
}
|
|
84
|
+
// ============================================================
|
|
85
|
+
// Example 3: Custom Timeout Configuration
|
|
86
|
+
// ============================================================
|
|
87
|
+
async function exampleCustomConfiguration() {
|
|
88
|
+
console.log('=== Example 3: Custom Timeout Configuration ===\n');
|
|
89
|
+
const config = {
|
|
90
|
+
defaultTimeout: 15 * 60 * 1000, // 15 minutes
|
|
91
|
+
warningThreshold: 0.75, // Warn at 75%
|
|
92
|
+
checkInterval: 15000 // Check every 15 seconds
|
|
93
|
+
};
|
|
94
|
+
// Short timeout for testing tasks
|
|
95
|
+
const testTimeout = await startTaskTimeout('TEST-1', 5 * 60 * 1000, // 5 minutes
|
|
96
|
+
'agent-test', config);
|
|
97
|
+
console.log(`Test task timeout started:`);
|
|
98
|
+
console.log(` Max duration: ${testTimeout.maxDuration / 1000}s`);
|
|
99
|
+
console.log(` Warning at: ${testTimeout.warningAt?.toISOString()}`);
|
|
100
|
+
// Long timeout for complex tasks
|
|
101
|
+
const complexTimeout = await startTaskTimeout('COMPLEX-1', 2 * 60 * 60 * 1000, // 2 hours
|
|
102
|
+
'agent-senior', { warningThreshold: 0.9 } // Warn at 90%
|
|
103
|
+
);
|
|
104
|
+
console.log(`\nComplex task timeout started:`);
|
|
105
|
+
console.log(` Max duration: ${complexTimeout.maxDuration / 1000}s`);
|
|
106
|
+
console.log(` Warning at: ${complexTimeout.warningAt?.toISOString()}`);
|
|
107
|
+
// Clean up
|
|
108
|
+
await clearTaskTimeout('TEST-1');
|
|
109
|
+
await clearTaskTimeout('COMPLEX-1');
|
|
110
|
+
console.log('\nTimeouts cleared\n');
|
|
111
|
+
}
|
|
112
|
+
// ============================================================
|
|
113
|
+
// Example 4: Handling Timeout Events
|
|
114
|
+
// ============================================================
|
|
115
|
+
async function exampleTimeoutHandling() {
|
|
116
|
+
console.log('=== Example 4: Handling Timeout Events ===\n');
|
|
117
|
+
// Create a timeout with very short duration for demonstration
|
|
118
|
+
const timeout = await startTaskTimeout('DEMO-1', 200, // 200ms (very short for demo)
|
|
119
|
+
'agent-demo', { warningThreshold: 0.5 } // 50% for demo
|
|
120
|
+
);
|
|
121
|
+
console.log(`Created demo timeout: ${timeout.taskId}`);
|
|
122
|
+
// Wait for warning threshold
|
|
123
|
+
await new Promise(resolve => setTimeout(resolve, 120));
|
|
124
|
+
console.log('\nChecking for warnings...');
|
|
125
|
+
await checkTimeouts();
|
|
126
|
+
let currentTimeout = await getActiveTimeouts();
|
|
127
|
+
const warningTimeout = currentTimeout.find(t => t.taskId === 'DEMO-1');
|
|
128
|
+
if (warningTimeout) {
|
|
129
|
+
console.log(`Status: ${warningTimeout.status}`);
|
|
130
|
+
}
|
|
131
|
+
// Wait for timeout
|
|
132
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
133
|
+
console.log('\nChecking for timeouts...');
|
|
134
|
+
const timedOut = await checkTimeouts();
|
|
135
|
+
const demoTimeout = timedOut.find(t => t.taskId === 'DEMO-1');
|
|
136
|
+
if (demoTimeout) {
|
|
137
|
+
console.log('\nTask timed out!');
|
|
138
|
+
console.log(` Checkpoint created: ${demoTimeout.checkpointId}`);
|
|
139
|
+
console.log(` Escalation created: ${demoTimeout.escalationEventId}`);
|
|
140
|
+
console.log(` Duration: ${demoTimeout.duration}ms`);
|
|
141
|
+
}
|
|
142
|
+
console.log();
|
|
143
|
+
}
|
|
144
|
+
async function exampleOrchestratorIntegration() {
|
|
145
|
+
console.log('=== Example 5: Orchestrator Integration ===\n');
|
|
146
|
+
const tasks = [
|
|
147
|
+
{ id: 'TASK-1', status: 'pending', max_duration: 30 * 60 * 1000 },
|
|
148
|
+
{ id: 'TASK-2', status: 'pending', max_duration: 15 * 60 * 1000 },
|
|
149
|
+
{ id: 'TASK-3', status: 'pending', max_duration: 45 * 60 * 1000 }
|
|
150
|
+
];
|
|
151
|
+
console.log('Assigning tasks to agents...\n');
|
|
152
|
+
// Assign tasks to agents
|
|
153
|
+
for (const task of tasks) {
|
|
154
|
+
const agentId = `agent-${Math.floor(Math.random() * 100)}`;
|
|
155
|
+
task.agentId = agentId;
|
|
156
|
+
task.status = 'assigned';
|
|
157
|
+
// Start timeout tracking
|
|
158
|
+
await startTaskTimeout(task.id, task.max_duration || 30 * 60 * 1000, agentId);
|
|
159
|
+
console.log(`${task.id} assigned to ${agentId} (${task.max_duration / 1000}s timeout)`);
|
|
160
|
+
}
|
|
161
|
+
console.log('\nMonitoring tasks...\n');
|
|
162
|
+
// Simulate orchestration loop
|
|
163
|
+
for (let i = 0; i < 3; i++) {
|
|
164
|
+
console.log(`--- Check ${i + 1} ---`);
|
|
165
|
+
// Check for timeouts
|
|
166
|
+
const timedOut = await checkTimeouts();
|
|
167
|
+
// Update task status for timed out tasks
|
|
168
|
+
for (const timeout of timedOut) {
|
|
169
|
+
const task = tasks.find(t => t.id === timeout.taskId);
|
|
170
|
+
if (task) {
|
|
171
|
+
task.status = 'timed_out';
|
|
172
|
+
console.log(`${task.id} timed out - checkpoint: ${timeout.checkpointId}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Simulate some tasks completing
|
|
176
|
+
if (i === 1 && tasks[0].status === 'assigned') {
|
|
177
|
+
tasks[0].status = 'completed';
|
|
178
|
+
await clearTaskTimeout(tasks[0].id);
|
|
179
|
+
console.log(`${tasks[0].id} completed successfully`);
|
|
180
|
+
}
|
|
181
|
+
// Show active timeouts
|
|
182
|
+
const active = await getActiveTimeouts();
|
|
183
|
+
const myActiveTimeouts = active.filter(t => tasks.some(task => task.id === t.taskId));
|
|
184
|
+
console.log(`Active timeouts: ${myActiveTimeouts.length}`);
|
|
185
|
+
for (const timeout of myActiveTimeouts) {
|
|
186
|
+
const remaining = Math.floor((timeout.timeoutAt.getTime() - Date.now()) / 1000);
|
|
187
|
+
console.log(` ${timeout.taskId}: ${remaining}s remaining`);
|
|
188
|
+
}
|
|
189
|
+
console.log();
|
|
190
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
191
|
+
}
|
|
192
|
+
// Clean up remaining tasks
|
|
193
|
+
for (const task of tasks) {
|
|
194
|
+
if (task.status === 'assigned') {
|
|
195
|
+
await clearTaskTimeout(task.id);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
console.log('Example complete\n');
|
|
199
|
+
}
|
|
200
|
+
// ============================================================
|
|
201
|
+
// Run Examples
|
|
202
|
+
// ============================================================
|
|
203
|
+
async function runExamples() {
|
|
204
|
+
try {
|
|
205
|
+
// Uncomment to run specific examples:
|
|
206
|
+
// await exampleBasicTimeout();
|
|
207
|
+
// await exampleOrchestrationLoop();
|
|
208
|
+
// await exampleCustomConfiguration();
|
|
209
|
+
// await exampleTimeoutHandling();
|
|
210
|
+
// await exampleOrchestratorIntegration();
|
|
211
|
+
console.log('All examples completed!');
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
console.error('Example failed:', error);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Export for use in other modules
|
|
218
|
+
export { exampleBasicTimeout, exampleOrchestrationLoop, exampleCustomConfiguration, exampleTimeoutHandling, exampleOrchestratorIntegration };
|
|
219
|
+
// Run if called directly
|
|
220
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
221
|
+
runExamples();
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=timeout-integration-example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-integration-example.js","sourceRoot":"","sources":["../../../src/lib/examples/timeout-integration-example.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAE5B,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D;AAE/D,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,oCAAoC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,OAAO,GAAG,WAAW,CAAC;IAC5B,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAEjD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,OAAO,OAAO,SAAS,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC;IAErF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEhE,8BAA8B;IAE9B,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,yBAAyB,CAAC,CAAC;IACvD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAE/D,KAAK,UAAU,wBAAwB;IACrC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAE3E,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC;QACjC,aAAa,EAAE,KAAK,CAAC,yBAAyB;KAC/C,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,8BAA8B;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM,CAAC,CAAC;QAEpD,4BAA4B;QAC5B,MAAM,aAAa,GAAG,MAAM,aAAa,EAAE,CAAC;QAE5C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,MAAM,mBAAmB,CAAC,CAAC;YAE9D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAEzD,mCAAmC;gBACnC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,wBAAwB;QACxB,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,gBAAgB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,yBAAyB;QACzB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,eAAe;IACf,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC3C,CAAC;AAED,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;AAE/D,KAAK,UAAU,0BAA0B;IACvC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAkB;QAC5B,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAG,aAAa;QAC9C,gBAAgB,EAAE,IAAI,EAAW,cAAc;QAC/C,aAAa,EAAE,KAAK,CAAa,yBAAyB;KAC3D,CAAC;IAEF,kCAAkC;IAClC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CACxC,QAAQ,EACR,CAAC,GAAG,EAAE,GAAG,IAAI,EAAG,YAAY;IAC5B,YAAY,EACZ,MAAM,CACP,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAErE,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAC3C,WAAW,EACX,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAG,UAAU;IAC/B,cAAc,EACd,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAE,cAAc;KAC1C,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAExE,WAAW;IACX,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAE/D,KAAK,UAAU,sBAAsB;IACnC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAE5D,8DAA8D;IAC9D,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,QAAQ,EACR,GAAG,EAAE,8BAA8B;IACnC,YAAY,EACZ,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,eAAe;KAC1C,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvD,6BAA6B;IAC7B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,aAAa,EAAE,CAAC;IAEtB,IAAI,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACvE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,WAAW,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAaD,KAAK,UAAU,8BAA8B;IAC3C,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAuB;QAChC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;QACjE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;QACjE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;KAClE,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,yBAAyB;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QAEzB,yBAAyB;QACzB,MAAM,gBAAgB,CACpB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EACnC,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,gBAAgB,OAAO,KAAK,IAAI,CAAC,YAAa,GAAG,IAAI,YAAY,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtC,qBAAqB;QACrB,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QAEvC,yCAAyC;QACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,4BAA4B,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;YAC9B,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACvD,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACzC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CACzC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,oBAAoB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,KAAK,SAAS,aAAa,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC;AAED,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,sCAAsC;QAEtC,+BAA+B;QAC/B,oCAAoC;QACpC,sCAAsC;QACtC,kCAAkC;QAClC,0CAA0C;QAE1C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC/B,CAAC;AAEF,yBAAyB;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,WAAW,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-07
|
|
5
|
+
* @tags: [notifications, hooks, epic-004, resilience, alerts]
|
|
6
|
+
* @related: [notifications/index.ts, event-logger.ts, orchestrator-state.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [fs-extra, minimatch]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Notification event types
|
|
13
|
+
*/
|
|
14
|
+
export type NotificationEvent = 'escalation' | 'blocker' | 'failure' | 'milestone' | 'completion' | 'stale_agent' | 'human_required';
|
|
15
|
+
/**
|
|
16
|
+
* Severity levels for filtering
|
|
17
|
+
*/
|
|
18
|
+
export type NotificationSeverity = 'low' | 'medium' | 'high' | 'critical';
|
|
19
|
+
/**
|
|
20
|
+
* Notification destination configuration
|
|
21
|
+
*/
|
|
22
|
+
export interface NotificationDestination {
|
|
23
|
+
type: 'slack' | 'discord' | 'teams' | 'webhook' | 'email';
|
|
24
|
+
config: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Notification filter configuration
|
|
28
|
+
*/
|
|
29
|
+
export interface NotificationFilter {
|
|
30
|
+
severity?: NotificationSeverity[];
|
|
31
|
+
epicId?: string;
|
|
32
|
+
taskPattern?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Notification hook configuration
|
|
36
|
+
*/
|
|
37
|
+
export interface NotificationHook {
|
|
38
|
+
id: string;
|
|
39
|
+
events: NotificationEvent[];
|
|
40
|
+
destination: NotificationDestination;
|
|
41
|
+
filter?: NotificationFilter;
|
|
42
|
+
enabled?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Notification payload structure
|
|
46
|
+
*/
|
|
47
|
+
export interface NotificationPayload {
|
|
48
|
+
event: NotificationEvent;
|
|
49
|
+
severity: NotificationSeverity;
|
|
50
|
+
timestamp: string;
|
|
51
|
+
title: string;
|
|
52
|
+
description: string;
|
|
53
|
+
taskId?: string;
|
|
54
|
+
epicId?: string;
|
|
55
|
+
agentId?: string;
|
|
56
|
+
metadata?: Record<string, any>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Notification configuration (from ginko.config.json)
|
|
60
|
+
*/
|
|
61
|
+
export interface NotificationConfig {
|
|
62
|
+
hooks: NotificationHook[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Load notification hooks from ginko.config.json
|
|
66
|
+
*
|
|
67
|
+
* @returns Array of notification hooks
|
|
68
|
+
*/
|
|
69
|
+
export declare function loadNotificationHooks(): Promise<NotificationHook[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Check if a hook matches the given payload based on filters
|
|
72
|
+
*
|
|
73
|
+
* @param hook - Notification hook to check
|
|
74
|
+
* @param payload - Notification payload to match against
|
|
75
|
+
* @returns True if hook matches filters
|
|
76
|
+
*/
|
|
77
|
+
export declare function matchesFilter(hook: NotificationHook, payload: NotificationPayload): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Trigger a notification to all matching hooks
|
|
80
|
+
*
|
|
81
|
+
* @param event - Notification event type
|
|
82
|
+
* @param payload - Notification payload
|
|
83
|
+
*/
|
|
84
|
+
export declare function triggerNotification(event: NotificationEvent, payload: NotificationPayload): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Dispatch a notification to a specific destination
|
|
87
|
+
*
|
|
88
|
+
* @param destination - Notification destination config
|
|
89
|
+
* @param payload - Notification payload
|
|
90
|
+
* @returns Promise<boolean> - True if dispatch succeeded
|
|
91
|
+
*/
|
|
92
|
+
export declare function dispatchToDestination(destination: NotificationDestination, payload: NotificationPayload): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Validate notification hook configuration
|
|
95
|
+
*
|
|
96
|
+
* @param hook - Hook configuration to validate
|
|
97
|
+
* @returns Validation result with errors
|
|
98
|
+
*/
|
|
99
|
+
export declare function validateHook(hook: NotificationHook): {
|
|
100
|
+
valid: boolean;
|
|
101
|
+
errors: string[];
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=notification-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/notification-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,SAAS,GACT,SAAS,GACT,WAAW,GACX,YAAY,GACZ,aAAa,GACb,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,WAAW,EAAE,uBAAuB,CAAC;IACrC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmDzE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CA8B3F;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD/G;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBhI;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmDzF"}
|