zora-agent 0.9.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/CHANGELOG.md +145 -0
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli/audit-commands.d.ts +8 -0
- package/dist/cli/audit-commands.d.ts.map +1 -0
- package/dist/cli/audit-commands.js +67 -0
- package/dist/cli/audit-commands.js.map +1 -0
- package/dist/cli/daemon.d.ts +9 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +107 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +21 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +31 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/edit-commands.d.ts +8 -0
- package/dist/cli/edit-commands.d.ts.map +1 -0
- package/dist/cli/edit-commands.js +46 -0
- package/dist/cli/edit-commands.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +319 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-command.d.ts +30 -0
- package/dist/cli/init-command.d.ts.map +1 -0
- package/dist/cli/init-command.js +425 -0
- package/dist/cli/init-command.js.map +1 -0
- package/dist/cli/memory-commands.d.ts +11 -0
- package/dist/cli/memory-commands.d.ts.map +1 -0
- package/dist/cli/memory-commands.js +57 -0
- package/dist/cli/memory-commands.js.map +1 -0
- package/dist/cli/presets.d.ts +12 -0
- package/dist/cli/presets.d.ts.map +1 -0
- package/dist/cli/presets.js +169 -0
- package/dist/cli/presets.js.map +1 -0
- package/dist/cli/skill-commands.d.ts +10 -0
- package/dist/cli/skill-commands.d.ts.map +1 -0
- package/dist/cli/skill-commands.js +73 -0
- package/dist/cli/skill-commands.js.map +1 -0
- package/dist/cli/steer-commands.d.ts +10 -0
- package/dist/cli/steer-commands.d.ts.map +1 -0
- package/dist/cli/steer-commands.js +92 -0
- package/dist/cli/steer-commands.js.map +1 -0
- package/dist/cli/team-commands.d.ts +8 -0
- package/dist/cli/team-commands.d.ts.map +1 -0
- package/dist/cli/team-commands.js +93 -0
- package/dist/cli/team-commands.js.map +1 -0
- package/dist/config/defaults.d.ts +26 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +173 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +30 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +130 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/policy-loader.d.ts +18 -0
- package/dist/config/policy-loader.d.ts.map +1 -0
- package/dist/config/policy-loader.js +72 -0
- package/dist/config/policy-loader.js.map +1 -0
- package/dist/dashboard/auth-middleware.d.ts +15 -0
- package/dist/dashboard/auth-middleware.d.ts.map +1 -0
- package/dist/dashboard/auth-middleware.js +44 -0
- package/dist/dashboard/auth-middleware.js.map +1 -0
- package/dist/dashboard/frontend/vite.config.d.ts +3 -0
- package/dist/dashboard/frontend/vite.config.d.ts.map +1 -0
- package/dist/dashboard/frontend/vite.config.js +11 -0
- package/dist/dashboard/frontend/vite.config.js.map +1 -0
- package/dist/dashboard/server.d.ts +55 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +254 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/category-organizer.d.ts +33 -0
- package/dist/memory/category-organizer.d.ts.map +1 -0
- package/dist/memory/category-organizer.js +137 -0
- package/dist/memory/category-organizer.js.map +1 -0
- package/dist/memory/extraction-pipeline.d.ts +22 -0
- package/dist/memory/extraction-pipeline.d.ts.map +1 -0
- package/dist/memory/extraction-pipeline.js +156 -0
- package/dist/memory/extraction-pipeline.js.map +1 -0
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +7 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +56 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +198 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-types.d.ts +44 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +8 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/memory/salience-scorer.d.ts +19 -0
- package/dist/memory/salience-scorer.d.ts.map +1 -0
- package/dist/memory/salience-scorer.js +72 -0
- package/dist/memory/salience-scorer.js.map +1 -0
- package/dist/memory/structured-memory.d.ts +28 -0
- package/dist/memory/structured-memory.d.ts.map +1 -0
- package/dist/memory/structured-memory.js +140 -0
- package/dist/memory/structured-memory.js.map +1 -0
- package/dist/orchestrator/auth-monitor.d.ts +28 -0
- package/dist/orchestrator/auth-monitor.d.ts.map +1 -0
- package/dist/orchestrator/auth-monitor.js +49 -0
- package/dist/orchestrator/auth-monitor.js.map +1 -0
- package/dist/orchestrator/execution-loop.d.ts +59 -0
- package/dist/orchestrator/execution-loop.d.ts.map +1 -0
- package/dist/orchestrator/execution-loop.js +94 -0
- package/dist/orchestrator/execution-loop.js.map +1 -0
- package/dist/orchestrator/failover-controller.d.ts +32 -0
- package/dist/orchestrator/failover-controller.d.ts.map +1 -0
- package/dist/orchestrator/failover-controller.js +111 -0
- package/dist/orchestrator/failover-controller.js.map +1 -0
- package/dist/orchestrator/index.d.ts +11 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +11 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +99 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +456 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/retry-queue.d.ts +39 -0
- package/dist/orchestrator/retry-queue.d.ts.map +1 -0
- package/dist/orchestrator/retry-queue.js +99 -0
- package/dist/orchestrator/retry-queue.js.map +1 -0
- package/dist/orchestrator/router.d.ts +49 -0
- package/dist/orchestrator/router.d.ts.map +1 -0
- package/dist/orchestrator/router.js +167 -0
- package/dist/orchestrator/router.js.map +1 -0
- package/dist/orchestrator/session-manager.d.ts +39 -0
- package/dist/orchestrator/session-manager.d.ts.map +1 -0
- package/dist/orchestrator/session-manager.js +117 -0
- package/dist/orchestrator/session-manager.js.map +1 -0
- package/dist/providers/claude-provider.d.ts +182 -0
- package/dist/providers/claude-provider.d.ts.map +1 -0
- package/dist/providers/claude-provider.js +443 -0
- package/dist/providers/claude-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +46 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +336 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +61 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +319 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/routines/event-triggers.d.ts +34 -0
- package/dist/routines/event-triggers.d.ts.map +1 -0
- package/dist/routines/event-triggers.js +104 -0
- package/dist/routines/event-triggers.js.map +1 -0
- package/dist/routines/heartbeat.d.ts +35 -0
- package/dist/routines/heartbeat.d.ts.map +1 -0
- package/dist/routines/heartbeat.js +93 -0
- package/dist/routines/heartbeat.js.map +1 -0
- package/dist/routines/index.d.ts +7 -0
- package/dist/routines/index.d.ts.map +1 -0
- package/dist/routines/index.js +7 -0
- package/dist/routines/index.js.map +1 -0
- package/dist/routines/routine-manager.d.ts +62 -0
- package/dist/routines/routine-manager.d.ts.map +1 -0
- package/dist/routines/routine-manager.js +148 -0
- package/dist/routines/routine-manager.js.map +1 -0
- package/dist/security/audit-logger.d.ts +55 -0
- package/dist/security/audit-logger.d.ts.map +1 -0
- package/dist/security/audit-logger.js +252 -0
- package/dist/security/audit-logger.js.map +1 -0
- package/dist/security/capability-tokens.d.ts +30 -0
- package/dist/security/capability-tokens.d.ts.map +1 -0
- package/dist/security/capability-tokens.js +110 -0
- package/dist/security/capability-tokens.js.map +1 -0
- package/dist/security/index.d.ts +18 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +12 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/integrity-guardian.d.ts +43 -0
- package/dist/security/integrity-guardian.d.ts.map +1 -0
- package/dist/security/integrity-guardian.js +103 -0
- package/dist/security/integrity-guardian.js.map +1 -0
- package/dist/security/intent-capsule.d.ts +52 -0
- package/dist/security/intent-capsule.d.ts.map +1 -0
- package/dist/security/intent-capsule.js +157 -0
- package/dist/security/intent-capsule.js.map +1 -0
- package/dist/security/leak-detector.d.ts +26 -0
- package/dist/security/leak-detector.d.ts.map +1 -0
- package/dist/security/leak-detector.js +75 -0
- package/dist/security/leak-detector.js.map +1 -0
- package/dist/security/policy-engine.d.ts +188 -0
- package/dist/security/policy-engine.d.ts.map +1 -0
- package/dist/security/policy-engine.js +799 -0
- package/dist/security/policy-engine.js.map +1 -0
- package/dist/security/prompt-defense.d.ts +30 -0
- package/dist/security/prompt-defense.d.ts.map +1 -0
- package/dist/security/prompt-defense.js +164 -0
- package/dist/security/prompt-defense.js.map +1 -0
- package/dist/security/secrets-manager.d.ts +47 -0
- package/dist/security/secrets-manager.d.ts.map +1 -0
- package/dist/security/secrets-manager.js +132 -0
- package/dist/security/secrets-manager.js.map +1 -0
- package/dist/security/security-types.d.ts +84 -0
- package/dist/security/security-types.d.ts.map +1 -0
- package/dist/security/security-types.js +8 -0
- package/dist/security/security-types.js.map +1 -0
- package/dist/skills/index.d.ts +5 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +5 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +25 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +64 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/steering/flag-manager.d.ts +52 -0
- package/dist/steering/flag-manager.d.ts.map +1 -0
- package/dist/steering/flag-manager.js +160 -0
- package/dist/steering/flag-manager.js.map +1 -0
- package/dist/steering/index.d.ts +8 -0
- package/dist/steering/index.d.ts.map +1 -0
- package/dist/steering/index.js +8 -0
- package/dist/steering/index.js.map +1 -0
- package/dist/steering/steer-injector.d.ts +15 -0
- package/dist/steering/steer-injector.d.ts.map +1 -0
- package/dist/steering/steer-injector.js +41 -0
- package/dist/steering/steer-injector.js.map +1 -0
- package/dist/steering/steering-manager.d.ts +33 -0
- package/dist/steering/steering-manager.d.ts.map +1 -0
- package/dist/steering/steering-manager.js +79 -0
- package/dist/steering/steering-manager.js.map +1 -0
- package/dist/steering/telegram-gateway.d.ts +27 -0
- package/dist/steering/telegram-gateway.d.ts.map +1 -0
- package/dist/steering/telegram-gateway.js +89 -0
- package/dist/steering/telegram-gateway.js.map +1 -0
- package/dist/steering/types.d.ts +54 -0
- package/dist/steering/types.d.ts.map +1 -0
- package/dist/steering/types.js +11 -0
- package/dist/steering/types.js.map +1 -0
- package/dist/teams/agent-loader.d.ts +38 -0
- package/dist/teams/agent-loader.d.ts.map +1 -0
- package/dist/teams/agent-loader.js +85 -0
- package/dist/teams/agent-loader.js.map +1 -0
- package/dist/teams/bridge-watchdog.d.ts +44 -0
- package/dist/teams/bridge-watchdog.d.ts.map +1 -0
- package/dist/teams/bridge-watchdog.js +118 -0
- package/dist/teams/bridge-watchdog.js.map +1 -0
- package/dist/teams/gemini-bridge.d.ts +43 -0
- package/dist/teams/gemini-bridge.d.ts.map +1 -0
- package/dist/teams/gemini-bridge.js +132 -0
- package/dist/teams/gemini-bridge.js.map +1 -0
- package/dist/teams/index.d.ts +11 -0
- package/dist/teams/index.d.ts.map +1 -0
- package/dist/teams/index.js +11 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/mailbox.d.ts +33 -0
- package/dist/teams/mailbox.d.ts.map +1 -0
- package/dist/teams/mailbox.js +97 -0
- package/dist/teams/mailbox.js.map +1 -0
- package/dist/teams/pr-lifecycle.d.ts +47 -0
- package/dist/teams/pr-lifecycle.d.ts.map +1 -0
- package/dist/teams/pr-lifecycle.js +83 -0
- package/dist/teams/pr-lifecycle.js.map +1 -0
- package/dist/teams/team-manager.d.ts +57 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +170 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-types.d.ts +35 -0
- package/dist/teams/team-types.d.ts.map +1 -0
- package/dist/teams/team-types.js +9 -0
- package/dist/teams/team-types.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/notifications.d.ts +13 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +30 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/types.d.ts +311 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +31 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +139 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wasm/wasmtime-spike.d.ts +19 -0
- package/dist/wasm/wasmtime-spike.d.ts.map +1 -0
- package/dist/wasm/wasmtime-spike.js +39 -0
- package/dist/wasm/wasmtime-spike.js.map +1 -0
- package/examples/routines/content-pipeline.toml +20 -0
- package/examples/routines/job-search.toml +19 -0
- package/examples/routines/repo-cleanup.toml +14 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-memory.d.ts","sourceRoot":"","sources":["../../src/memory/structured-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,KAAK,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,qBAAqB,CAAC,CAAC;AAExH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,QAAQ,EAAE,MAAM;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAcvD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAiB/C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAehF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYxC,SAAS,CAAC,MAAM,CAAC,EAAE;QACvB,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAenB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAavD,OAAO,CAAC,SAAS;YAQH,UAAU;YAKV,aAAa;CAqB5B"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StructuredMemory — Tier 3 CRUD for memory items.
|
|
3
|
+
*
|
|
4
|
+
* Stores each MemoryItem as a JSON file in the items directory.
|
|
5
|
+
* Uses atomic writes (write to .tmp, rename) for crash safety.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import crypto from 'node:crypto';
|
|
10
|
+
import { writeAtomic } from '../utils/fs.js';
|
|
11
|
+
export class StructuredMemory {
|
|
12
|
+
_itemsDir;
|
|
13
|
+
constructor(itemsDir) {
|
|
14
|
+
this._itemsDir = itemsDir;
|
|
15
|
+
}
|
|
16
|
+
async init() {
|
|
17
|
+
await fs.mkdir(this._itemsDir, { recursive: true, mode: 0o700 });
|
|
18
|
+
}
|
|
19
|
+
async createItem(input) {
|
|
20
|
+
const now = new Date().toISOString();
|
|
21
|
+
const item = {
|
|
22
|
+
...input,
|
|
23
|
+
id: `mem_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`,
|
|
24
|
+
created_at: now,
|
|
25
|
+
last_accessed: now,
|
|
26
|
+
access_count: 0,
|
|
27
|
+
reinforcement_score: 0,
|
|
28
|
+
};
|
|
29
|
+
await this._writeItem(item);
|
|
30
|
+
return item;
|
|
31
|
+
}
|
|
32
|
+
async getItem(id) {
|
|
33
|
+
try {
|
|
34
|
+
const data = await fs.readFile(this._itemPath(id), 'utf8');
|
|
35
|
+
const item = JSON.parse(data);
|
|
36
|
+
// Bump access stats
|
|
37
|
+
item.access_count += 1;
|
|
38
|
+
item.last_accessed = new Date().toISOString();
|
|
39
|
+
await this._writeItem(item);
|
|
40
|
+
return item;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err.code === 'ENOENT') {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async updateItem(id, updates) {
|
|
50
|
+
try {
|
|
51
|
+
const data = await fs.readFile(this._itemPath(id), 'utf8');
|
|
52
|
+
const item = JSON.parse(data);
|
|
53
|
+
const merged = { ...item, ...updates, id }; // id is immutable
|
|
54
|
+
await this._writeItem(merged);
|
|
55
|
+
return merged;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
if (err.code === 'ENOENT') {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async deleteItem(id) {
|
|
65
|
+
try {
|
|
66
|
+
await fs.unlink(this._itemPath(id));
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err.code === 'ENOENT') {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async listItems(filter) {
|
|
77
|
+
const items = await this._readAllItems();
|
|
78
|
+
if (!filter)
|
|
79
|
+
return items;
|
|
80
|
+
return items.filter(item => {
|
|
81
|
+
if (filter.type && item.type !== filter.type)
|
|
82
|
+
return false;
|
|
83
|
+
if (filter.category && item.category !== filter.category)
|
|
84
|
+
return false;
|
|
85
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
86
|
+
const hasAllTags = filter.tags.every(t => item.tags.includes(t));
|
|
87
|
+
if (!hasAllTags)
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async searchItems(query) {
|
|
94
|
+
const items = await this._readAllItems();
|
|
95
|
+
const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
|
|
96
|
+
if (terms.length === 0)
|
|
97
|
+
return items;
|
|
98
|
+
return items.filter(item => {
|
|
99
|
+
const text = `${item.summary} ${item.tags.join(' ')}`.toLowerCase();
|
|
100
|
+
return terms.some(term => text.includes(term));
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// ── Private helpers ──────────────────────────────────────────────
|
|
104
|
+
_itemPath(id) {
|
|
105
|
+
// Validate id to prevent path traversal
|
|
106
|
+
if (/[/\\]/.test(id) || id.includes('..')) {
|
|
107
|
+
throw new Error(`Invalid item id: ${id}`);
|
|
108
|
+
}
|
|
109
|
+
return path.join(this._itemsDir, `${id}.json`);
|
|
110
|
+
}
|
|
111
|
+
async _writeItem(item) {
|
|
112
|
+
const filePath = this._itemPath(item.id);
|
|
113
|
+
await writeAtomic(filePath, JSON.stringify(item, null, 2));
|
|
114
|
+
}
|
|
115
|
+
async _readAllItems() {
|
|
116
|
+
let files;
|
|
117
|
+
try {
|
|
118
|
+
files = await fs.readdir(this._itemsDir);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (err.code === 'ENOENT')
|
|
122
|
+
return [];
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
const items = [];
|
|
126
|
+
for (const file of files) {
|
|
127
|
+
if (!file.endsWith('.json'))
|
|
128
|
+
continue;
|
|
129
|
+
try {
|
|
130
|
+
const data = await fs.readFile(path.join(this._itemsDir, file), 'utf8');
|
|
131
|
+
items.push(JSON.parse(data));
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Skip corrupt/unreadable files
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return items;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=structured-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-memory.js","sourceRoot":"","sources":["../../src/memory/structured-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthMonitor — Periodic provider health and auth status checks.
|
|
3
|
+
*
|
|
4
|
+
* Spec §5.1 "Auth Health Monitoring":
|
|
5
|
+
* - Checks all registered provider health and auth status on every heartbeat.
|
|
6
|
+
* - Notifies user if auth expires or is near expiry.
|
|
7
|
+
* - Distinguishes between quota exhaustion and auth failure.
|
|
8
|
+
* - Checkpoints active jobs on auth failure.
|
|
9
|
+
*/
|
|
10
|
+
import type { LLMProvider, AuthStatus } from '../types.js';
|
|
11
|
+
import { NotificationTools } from '../tools/notifications.js';
|
|
12
|
+
export interface AuthMonitorOptions {
|
|
13
|
+
providers: LLMProvider[];
|
|
14
|
+
notifications: NotificationTools;
|
|
15
|
+
preExpiryWarningHours?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class AuthMonitor {
|
|
18
|
+
private readonly _providers;
|
|
19
|
+
private readonly _notifications;
|
|
20
|
+
private readonly _preExpiryWarningHours;
|
|
21
|
+
constructor(options: AuthMonitorOptions);
|
|
22
|
+
/**
|
|
23
|
+
* Performs a full health check across all providers.
|
|
24
|
+
* Typically called on every heartbeat.
|
|
25
|
+
*/
|
|
26
|
+
checkAll(): Promise<Map<string, AuthStatus>>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=auth-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-monitor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/auth-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,aAAa,EAAE,iBAAiB,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;gBAEpC,OAAO,EAAE,kBAAkB;IAMvC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAkCnD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthMonitor — Periodic provider health and auth status checks.
|
|
3
|
+
*
|
|
4
|
+
* Spec §5.1 "Auth Health Monitoring":
|
|
5
|
+
* - Checks all registered provider health and auth status on every heartbeat.
|
|
6
|
+
* - Notifies user if auth expires or is near expiry.
|
|
7
|
+
* - Distinguishes between quota exhaustion and auth failure.
|
|
8
|
+
* - Checkpoints active jobs on auth failure.
|
|
9
|
+
*/
|
|
10
|
+
export class AuthMonitor {
|
|
11
|
+
_providers;
|
|
12
|
+
_notifications;
|
|
13
|
+
_preExpiryWarningHours;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this._providers = options.providers;
|
|
16
|
+
this._notifications = options.notifications;
|
|
17
|
+
this._preExpiryWarningHours = options.preExpiryWarningHours ?? 2;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Performs a full health check across all providers.
|
|
21
|
+
* Typically called on every heartbeat.
|
|
22
|
+
*/
|
|
23
|
+
async checkAll() {
|
|
24
|
+
const results = new Map();
|
|
25
|
+
const MS_PER_HOUR = 3600000;
|
|
26
|
+
await Promise.all(this._providers.map(async (provider) => {
|
|
27
|
+
try {
|
|
28
|
+
const auth = await provider.checkAuth();
|
|
29
|
+
results.set(provider.name, auth);
|
|
30
|
+
if (!auth.valid && auth.requiresInteraction) {
|
|
31
|
+
await this._notifications.notify('Authentication Required', `${provider.name} auth expired. Please re-authenticate in the desktop app or CLI.`);
|
|
32
|
+
// In a full implementation, we would call checkpointActiveJobs(provider.name) here
|
|
33
|
+
}
|
|
34
|
+
else if (auth.valid && auth.expiresAt) {
|
|
35
|
+
const hoursRemaining = (auth.expiresAt.getTime() - Date.now()) / MS_PER_HOUR;
|
|
36
|
+
if (hoursRemaining > 0 && hoursRemaining < this._preExpiryWarningHours) {
|
|
37
|
+
await this._notifications.notify('Token Near Expiry', `${provider.name} token expires in ~${Math.round(hoursRemaining)}h.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
// Unexpected error during auth check
|
|
43
|
+
console.error(`Error checking auth for ${provider.name}:`, err);
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
return results;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=auth-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-monitor.js","sourceRoot":"","sources":["../../src/orchestrator/auth-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,MAAM,OAAO,WAAW;IACL,UAAU,CAAgB;IAC1B,cAAc,CAAoB;IAClC,sBAAsB,CAAS;IAEhD,YAAY,OAA2B;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC;QAE5B,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAEjC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAC9B,yBAAyB,EACzB,GAAG,QAAQ,CAAC,IAAI,kEAAkE,CACnF,CAAC;oBACF,mFAAmF;gBACrF,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxC,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC;oBAC7E,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBACvE,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAC9B,mBAAmB,EACnB,GAAG,QAAQ,CAAC,IAAI,sBAAsB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CACrE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qCAAqC;gBACrC,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExecutionLoop — Wraps the Claude Agent SDK's query() function.
|
|
3
|
+
*
|
|
4
|
+
* Zora v0.6: Replaced the hand-rolled agentic cycle with the SDK's
|
|
5
|
+
* production execution engine. The SDK provides built-in tools
|
|
6
|
+
* (Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, Task),
|
|
7
|
+
* MCP server management, subagent orchestration, hooks, and permissions.
|
|
8
|
+
*/
|
|
9
|
+
import { type PermissionMode, type HookCallback, type CanUseTool, type AgentDefinition } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
import type { SDKMessage } from '../providers/index.js';
|
|
11
|
+
export type SdkPermissionMode = PermissionMode;
|
|
12
|
+
export type SdkHookCallback = HookCallback;
|
|
13
|
+
export type SdkCanUseTool = CanUseTool;
|
|
14
|
+
export type SdkAgentDefinition = AgentDefinition;
|
|
15
|
+
export interface SdkHookMatcher {
|
|
16
|
+
matcher?: string;
|
|
17
|
+
hooks: SdkHookCallback[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Custom tool that Zora can inject into the SDK execution.
|
|
21
|
+
* Used for Zora-specific tools like check_permissions and request_permissions.
|
|
22
|
+
*/
|
|
23
|
+
export interface CustomToolDefinition {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
input_schema: Record<string, unknown>;
|
|
27
|
+
handler: (input: Record<string, unknown>) => Promise<unknown>;
|
|
28
|
+
}
|
|
29
|
+
export interface ZoraExecutionOptions {
|
|
30
|
+
systemPrompt?: string;
|
|
31
|
+
cwd?: string;
|
|
32
|
+
model?: string;
|
|
33
|
+
maxTurns?: number;
|
|
34
|
+
allowedTools?: string[];
|
|
35
|
+
customTools?: CustomToolDefinition[];
|
|
36
|
+
mcpServers?: Record<string, Record<string, unknown>>;
|
|
37
|
+
agents?: Record<string, SdkAgentDefinition>;
|
|
38
|
+
hooks?: Partial<Record<string, SdkHookMatcher[]>>;
|
|
39
|
+
canUseTool?: SdkCanUseTool;
|
|
40
|
+
permissionMode?: SdkPermissionMode;
|
|
41
|
+
onMessage?: (message: SDKMessage) => void;
|
|
42
|
+
/** ERR-05: Timeout in milliseconds for stream operations (default: 30min) */
|
|
43
|
+
streamTimeout?: number;
|
|
44
|
+
}
|
|
45
|
+
export declare class ExecutionLoop {
|
|
46
|
+
private readonly _opts;
|
|
47
|
+
constructor(options: ZoraExecutionOptions);
|
|
48
|
+
/**
|
|
49
|
+
* Runs a prompt through the SDK's agentic loop.
|
|
50
|
+
* Returns the final result text.
|
|
51
|
+
* ERR-05: Added timeout protection to prevent indefinite blocking on hung streams.
|
|
52
|
+
*/
|
|
53
|
+
run(prompt: string): Promise<string>;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the SDK options for inspection/testing.
|
|
56
|
+
*/
|
|
57
|
+
get options(): ZoraExecutionOptions;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=execution-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-loop.d.ts","sourceRoot":"","sources":["../../src/orchestrator/execution-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKxD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC;AAC3C,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAClD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;gBAEjC,OAAO,EAAE,oBAAoB;IAIzC;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsE1C;;OAEG;IACH,IAAI,OAAO,IAAI,oBAAoB,CAElC;CACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExecutionLoop — Wraps the Claude Agent SDK's query() function.
|
|
3
|
+
*
|
|
4
|
+
* Zora v0.6: Replaced the hand-rolled agentic cycle with the SDK's
|
|
5
|
+
* production execution engine. The SDK provides built-in tools
|
|
6
|
+
* (Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, Task),
|
|
7
|
+
* MCP server management, subagent orchestration, hooks, and permissions.
|
|
8
|
+
*/
|
|
9
|
+
import { query, } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
const DEFAULT_TOOLS = [
|
|
11
|
+
'Read', 'Write', 'Edit', 'Bash', 'Glob', 'Grep',
|
|
12
|
+
'WebSearch', 'WebFetch', 'Task',
|
|
13
|
+
];
|
|
14
|
+
export class ExecutionLoop {
|
|
15
|
+
_opts;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this._opts = options;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs a prompt through the SDK's agentic loop.
|
|
21
|
+
* Returns the final result text.
|
|
22
|
+
* ERR-05: Added timeout protection to prevent indefinite blocking on hung streams.
|
|
23
|
+
*/
|
|
24
|
+
async run(prompt) {
|
|
25
|
+
let result = '';
|
|
26
|
+
let sessionId;
|
|
27
|
+
// Build custom tool schemas for SDK registration
|
|
28
|
+
const customToolSchemas = (this._opts.customTools ?? []).map(t => ({
|
|
29
|
+
name: t.name,
|
|
30
|
+
description: t.description,
|
|
31
|
+
input_schema: t.input_schema,
|
|
32
|
+
}));
|
|
33
|
+
const sdkOptions = {
|
|
34
|
+
allowedTools: this._opts.allowedTools ?? DEFAULT_TOOLS,
|
|
35
|
+
permissionMode: this._opts.permissionMode ?? 'default',
|
|
36
|
+
mcpServers: this._opts.mcpServers ?? {},
|
|
37
|
+
agents: this._opts.agents ?? {},
|
|
38
|
+
systemPrompt: this._opts.systemPrompt,
|
|
39
|
+
cwd: this._opts.cwd ?? process.cwd(),
|
|
40
|
+
model: this._opts.model,
|
|
41
|
+
maxTurns: this._opts.maxTurns,
|
|
42
|
+
hooks: this._opts.hooks ?? {},
|
|
43
|
+
canUseTool: this._opts.canUseTool,
|
|
44
|
+
settingSources: ['user', 'project'],
|
|
45
|
+
...(customToolSchemas.length > 0 ? { customTools: customToolSchemas } : {}),
|
|
46
|
+
};
|
|
47
|
+
// ERR-05: Timeout protection (default 30 minutes)
|
|
48
|
+
const streamTimeout = this._opts.streamTimeout ?? 30 * 60 * 1000;
|
|
49
|
+
let timeoutHandle = null;
|
|
50
|
+
let lastEventTime = Date.now();
|
|
51
|
+
try {
|
|
52
|
+
for await (const message of query({ prompt, options: sdkOptions })) {
|
|
53
|
+
// Clear previous timeout and set new one (reset on each event)
|
|
54
|
+
if (timeoutHandle)
|
|
55
|
+
clearTimeout(timeoutHandle);
|
|
56
|
+
lastEventTime = Date.now();
|
|
57
|
+
timeoutHandle = setTimeout(() => {
|
|
58
|
+
const elapsed = Date.now() - lastEventTime;
|
|
59
|
+
console.error('[ExecutionLoop] Stream timeout exceeded:', {
|
|
60
|
+
timeout: streamTimeout,
|
|
61
|
+
elapsed,
|
|
62
|
+
sessionId,
|
|
63
|
+
});
|
|
64
|
+
throw new Error(`Stream timeout: No events received for ${streamTimeout}ms`);
|
|
65
|
+
}, streamTimeout);
|
|
66
|
+
// Capture session ID from init message
|
|
67
|
+
if ('session_id' in message && !sessionId) {
|
|
68
|
+
sessionId = message.session_id;
|
|
69
|
+
}
|
|
70
|
+
// Notify listener if registered
|
|
71
|
+
if (this._opts.onMessage) {
|
|
72
|
+
this._opts.onMessage(message);
|
|
73
|
+
}
|
|
74
|
+
// Extract final result
|
|
75
|
+
if ('result' in message && typeof message.result === 'string') {
|
|
76
|
+
result = message.result;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
// Always clear timeout on exit
|
|
83
|
+
if (timeoutHandle)
|
|
84
|
+
clearTimeout(timeoutHandle);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Returns the SDK options for inspection/testing.
|
|
89
|
+
*/
|
|
90
|
+
get options() {
|
|
91
|
+
return this._opts;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=execution-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-loop.js","sourceRoot":"","sources":["../../src/orchestrator/execution-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,GAKN,MAAM,gCAAgC,CAAC;AA4CxC,MAAM,aAAa,GAAG;IACpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC/C,WAAW,EAAE,UAAU,EAAE,MAAM;CAChC,CAAC;AAEF,MAAM,OAAO,aAAa;IACP,KAAK,CAAuB;IAE7C,YAAY,OAA6B;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,SAA6B,CAAC;QAElC,iDAAiD;QACjD,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,UAAU,GAA4B;YAC1C,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,aAAa;YACtD,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,SAAS;YACtD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;YAC/B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;YACrC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;YACnC,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;QAEF,kDAAkD;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACjE,IAAI,aAAa,GAA0B,IAAI,CAAC;QAChD,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAiB,EAAE,CAAC,EAAE,CAAC;gBAC1E,+DAA+D;gBAC/D,IAAI,aAAa;oBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC/C,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE3B,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;oBAC3C,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE;wBACxD,OAAO,EAAE,aAAa;wBACtB,OAAO;wBACP,SAAS;qBACV,CAAC,CAAC;oBACH,MAAM,IAAI,KAAK,CAAC,0CAA0C,aAAa,IAAI,CAAC,CAAC;gBAC/E,CAAC,EAAE,aAAa,CAAC,CAAC;gBAElB,uCAAuC;gBACvC,IAAI,YAAY,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC1C,SAAS,GAAI,OAAe,CAAC,UAAU,CAAC;gBAC1C,CAAC;gBAED,gCAAgC;gBAChC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;gBAED,uBAAuB;gBACvB,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACvE,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,+BAA+B;YAC/B,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FailoverController — Manages provider health and orchestrates failover handoffs.
|
|
3
|
+
*
|
|
4
|
+
* Spec §5.1 "Handoff Protocol" & "Auth Health Monitoring":
|
|
5
|
+
* - Tracks quota usage, error rates, and auth status per provider.
|
|
6
|
+
* - Distinguishes between quota exhaustion and auth failure.
|
|
7
|
+
* - Creates HandoffBundles for seamless mid-task transitions.
|
|
8
|
+
* - Implements cooldown tracking with exponential backoff.
|
|
9
|
+
*/
|
|
10
|
+
import type { LLMProvider, TaskContext, HandoffBundle, FailoverConfig } from '../types.js';
|
|
11
|
+
import { Router } from './router.js';
|
|
12
|
+
export interface FailoverResult {
|
|
13
|
+
nextProvider: LLMProvider;
|
|
14
|
+
handoffBundle: HandoffBundle;
|
|
15
|
+
}
|
|
16
|
+
export declare class FailoverController {
|
|
17
|
+
private readonly _providers;
|
|
18
|
+
private readonly _config;
|
|
19
|
+
constructor(providers: LLMProvider[], _router: Router, config: FailoverConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Evaluates a failure and determines if a failover should occur.
|
|
22
|
+
* If so, returns the next provider and a handoff bundle.
|
|
23
|
+
*/
|
|
24
|
+
handleFailure(task: TaskContext, failedProvider: LLMProvider, error: Error): Promise<FailoverResult | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a structured context package for failover.
|
|
27
|
+
*/
|
|
28
|
+
private _createHandoffBundle;
|
|
29
|
+
private _isQuotaError;
|
|
30
|
+
private _isAuthError;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=failover-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failover-controller.d.ts","sourceRoot":"","sources":["../../src/orchestrator/failover-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;IAK7E;;;OAGG;IACG,aAAa,CACjB,IAAI,EAAE,WAAW,EACjB,cAAc,EAAE,WAAW,EAC3B,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqCjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;CAKrB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FailoverController — Manages provider health and orchestrates failover handoffs.
|
|
3
|
+
*
|
|
4
|
+
* Spec §5.1 "Handoff Protocol" & "Auth Health Monitoring":
|
|
5
|
+
* - Tracks quota usage, error rates, and auth status per provider.
|
|
6
|
+
* - Distinguishes between quota exhaustion and auth failure.
|
|
7
|
+
* - Creates HandoffBundles for seamless mid-task transitions.
|
|
8
|
+
* - Implements cooldown tracking with exponential backoff.
|
|
9
|
+
*/
|
|
10
|
+
import { Router } from './router.js';
|
|
11
|
+
export class FailoverController {
|
|
12
|
+
_providers;
|
|
13
|
+
_config;
|
|
14
|
+
constructor(providers, _router, config) {
|
|
15
|
+
this._providers = providers;
|
|
16
|
+
this._config = config;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Evaluates a failure and determines if a failover should occur.
|
|
20
|
+
* If so, returns the next provider and a handoff bundle.
|
|
21
|
+
*/
|
|
22
|
+
async handleFailure(task, failedProvider, error) {
|
|
23
|
+
if (!this._config.enabled)
|
|
24
|
+
return null;
|
|
25
|
+
const errorMessage = error.message.toLowerCase();
|
|
26
|
+
const isQuotaError = this._isQuotaError(errorMessage);
|
|
27
|
+
const isAuthError = this._isAuthError(errorMessage);
|
|
28
|
+
if (!isQuotaError && !isAuthError) {
|
|
29
|
+
// For general errors, we might retry or fail depending on config.
|
|
30
|
+
// For v1, we only failover on quota/auth.
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
// 1. Mark the failed provider as unhealthy
|
|
34
|
+
// (In a real system, the provider state would be globally updated)
|
|
35
|
+
// 2. Identify candidates for failover
|
|
36
|
+
// We use the router to find the NEXT best provider, excluding the failed one
|
|
37
|
+
const candidates = this._providers.filter(p => p.name !== failedProvider.name);
|
|
38
|
+
const candidateRouter = new Router({
|
|
39
|
+
providers: candidates,
|
|
40
|
+
mode: 'respect_ranking' // Always walk down the ranked list for failover
|
|
41
|
+
});
|
|
42
|
+
try {
|
|
43
|
+
const nextProvider = await candidateRouter.selectProvider(task);
|
|
44
|
+
// 3. Create HandoffBundle
|
|
45
|
+
const handoffBundle = this._createHandoffBundle(task, failedProvider, nextProvider, error);
|
|
46
|
+
return { nextProvider, handoffBundle };
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
// No other provider available
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates a structured context package for failover.
|
|
55
|
+
*/
|
|
56
|
+
_createHandoffBundle(task, from, to, error) {
|
|
57
|
+
const history = task.history || [];
|
|
58
|
+
// Extract progress/artifacts from history
|
|
59
|
+
const progress = [];
|
|
60
|
+
const artifacts = [];
|
|
61
|
+
const toolHistory = [];
|
|
62
|
+
for (const event of history) {
|
|
63
|
+
if (event.type === 'text') {
|
|
64
|
+
progress.push(event.content.text);
|
|
65
|
+
}
|
|
66
|
+
else if (event.type === 'tool_call') {
|
|
67
|
+
const content = event.content;
|
|
68
|
+
toolHistory.push({
|
|
69
|
+
toolCallId: content.toolCallId,
|
|
70
|
+
tool: content.tool,
|
|
71
|
+
arguments: content.arguments,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (event.type === 'tool_result') {
|
|
75
|
+
const content = event.content;
|
|
76
|
+
const lastTool = toolHistory[toolHistory.length - 1];
|
|
77
|
+
if (lastTool && lastTool.toolCallId === content.toolCallId) {
|
|
78
|
+
lastTool.result = {
|
|
79
|
+
status: content.result.success ? 'ok' : 'error',
|
|
80
|
+
output: content.result.content || content.result.stdout,
|
|
81
|
+
error: content.result.error || content.result.stderr,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
jobId: task.jobId,
|
|
88
|
+
fromProvider: from.name,
|
|
89
|
+
toProvider: to.name,
|
|
90
|
+
createdAt: new Date(),
|
|
91
|
+
task: task.task,
|
|
92
|
+
context: {
|
|
93
|
+
summary: `Failing over from ${from.name} to ${to.name} due to ${this._isQuotaError(error.message) ? 'quota limits' : 'auth failure'}.`,
|
|
94
|
+
progress,
|
|
95
|
+
artifacts,
|
|
96
|
+
},
|
|
97
|
+
toolHistory,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
_isQuotaError(message) {
|
|
101
|
+
const patterns = ['rate_limit', 'rate limit', 'quota', '429', 'too many requests', 'overloaded'];
|
|
102
|
+
const lower = message.toLowerCase();
|
|
103
|
+
return patterns.some(p => lower.includes(p));
|
|
104
|
+
}
|
|
105
|
+
_isAuthError(message) {
|
|
106
|
+
const patterns = ['auth', 'unauthorized', 'token', 'expired', 'session', 'login'];
|
|
107
|
+
const lower = message.toLowerCase();
|
|
108
|
+
return patterns.some(p => lower.includes(p));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=failover-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failover-controller.js","sourceRoot":"","sources":["../../src/orchestrator/failover-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator barrel exports.
|
|
3
|
+
*/
|
|
4
|
+
export * from './execution-loop.js';
|
|
5
|
+
export * from './session-manager.js';
|
|
6
|
+
export * from './router.js';
|
|
7
|
+
export * from './failover-controller.js';
|
|
8
|
+
export * from './auth-monitor.js';
|
|
9
|
+
export * from './retry-queue.js';
|
|
10
|
+
export * from './orchestrator.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator barrel exports.
|
|
3
|
+
*/
|
|
4
|
+
export * from './execution-loop.js';
|
|
5
|
+
export * from './session-manager.js';
|
|
6
|
+
export * from './router.js';
|
|
7
|
+
export * from './failover-controller.js';
|
|
8
|
+
export * from './auth-monitor.js';
|
|
9
|
+
export * from './retry-queue.js';
|
|
10
|
+
export * from './orchestrator.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|