claude-mycelium 2.0.0 → 2.2.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/.agent-meta/_inhibitors.ndjson +1287 -0
- package/.agent-meta/_quarantine.json +45 -0
- package/.agent-meta/config.json +9 -0
- package/.agent-meta/tasks/_active.json +4 -0
- package/.agent-meta/tasks/task_0657b028-05a0-4b0c-b0b9-a4eae3d66cd9.json +168 -0
- package/.claude/memory.db +0 -0
- package/.claude/settings.local.json +4 -1
- package/README.md +85 -233
- package/SECURITY.md +145 -0
- package/dist/agent/task-worker.d.ts +11 -0
- package/dist/agent/task-worker.d.ts.map +1 -0
- package/dist/agent/task-worker.js +173 -0
- package/dist/agent/task-worker.js.map +1 -0
- package/dist/agent/worker.d.ts +8 -0
- package/dist/agent/worker.d.ts.map +1 -0
- package/dist/agent/worker.js +97 -0
- package/dist/agent/worker.js.map +1 -0
- package/dist/bin.d.ts +7 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +11 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/cost.d.ts +10 -0
- package/dist/cli/cost.d.ts.map +1 -0
- package/dist/cli/cost.js +163 -0
- package/dist/cli/cost.js.map +1 -0
- package/dist/cli/gc.d.ts +10 -0
- package/dist/cli/gc.d.ts.map +1 -0
- package/dist/cli/gc.js +108 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/gradients.d.ts +10 -0
- package/dist/cli/gradients.d.ts.map +1 -0
- package/dist/cli/gradients.js +70 -0
- package/dist/cli/gradients.js.map +1 -0
- package/dist/cli/grow.d.ts +17 -0
- package/dist/cli/grow.d.ts.map +1 -0
- package/dist/cli/grow.js +373 -0
- package/dist/cli/grow.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +74 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +97 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/status.d.ts +10 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +191 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/coordination/file-locks.d.ts +42 -0
- package/dist/coordination/file-locks.d.ts.map +1 -0
- package/dist/coordination/file-locks.js +269 -0
- package/dist/coordination/file-locks.js.map +1 -0
- package/dist/coordination/index.d.ts +4 -0
- package/dist/coordination/index.d.ts.map +1 -1
- package/dist/coordination/index.js +4 -0
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/inhibitors.d.ts +84 -0
- package/dist/coordination/inhibitors.d.ts.map +1 -0
- package/dist/coordination/inhibitors.js +290 -0
- package/dist/coordination/inhibitors.js.map +1 -0
- package/dist/coordination/process-manager.d.ts +73 -0
- package/dist/coordination/process-manager.d.ts.map +1 -0
- package/dist/coordination/process-manager.js +144 -0
- package/dist/coordination/process-manager.js.map +1 -0
- package/dist/core/agent-executor.d.ts +4 -1
- package/dist/core/agent-executor.d.ts.map +1 -1
- package/dist/core/agent-executor.js +38 -12
- package/dist/core/agent-executor.js.map +1 -1
- package/dist/core/change-applier.d.ts +29 -5
- package/dist/core/change-applier.d.ts.map +1 -1
- package/dist/core/change-applier.js +254 -24
- package/dist/core/change-applier.js.map +1 -1
- package/dist/core/signals/churn.d.ts.map +1 -1
- package/dist/core/signals/churn.js +6 -4
- package/dist/core/signals/churn.js.map +1 -1
- package/dist/core/signals/debt.d.ts.map +1 -1
- package/dist/core/signals/debt.js +4 -3
- package/dist/core/signals/debt.js.map +1 -1
- package/dist/cost/cost-tracker.d.ts.map +1 -1
- package/dist/cost/cost-tracker.js +2 -0
- package/dist/cost/cost-tracker.js.map +1 -1
- package/dist/gc/index.d.ts +17 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +17 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/gc/runner.d.ts +39 -0
- package/dist/gc/runner.d.ts.map +1 -0
- package/dist/gc/runner.js +277 -0
- package/dist/gc/runner.js.map +1 -0
- package/dist/gc/trace-compactor.d.ts +31 -0
- package/dist/gc/trace-compactor.d.ts.map +1 -0
- package/dist/gc/trace-compactor.js +162 -0
- package/dist/gc/trace-compactor.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/index.d.ts +2 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/quarantine/explorer.d.ts +65 -0
- package/dist/quarantine/explorer.d.ts.map +1 -0
- package/dist/quarantine/explorer.js +175 -0
- package/dist/quarantine/explorer.js.map +1 -0
- package/dist/quarantine/index.d.ts +7 -0
- package/dist/quarantine/index.d.ts.map +1 -0
- package/dist/quarantine/index.js +7 -0
- package/dist/quarantine/index.js.map +1 -0
- package/dist/quarantine/manager.d.ts +75 -0
- package/dist/quarantine/manager.d.ts.map +1 -0
- package/dist/quarantine/manager.js +275 -0
- package/dist/quarantine/manager.js.map +1 -0
- package/dist/task/acceptance.d.ts +29 -0
- package/dist/task/acceptance.d.ts.map +1 -0
- package/dist/task/acceptance.js +228 -0
- package/dist/task/acceptance.js.map +1 -0
- package/dist/task/agent-coordinator.d.ts +40 -0
- package/dist/task/agent-coordinator.d.ts.map +1 -0
- package/dist/task/agent-coordinator.js +168 -0
- package/dist/task/agent-coordinator.js.map +1 -0
- package/dist/task/executor.d.ts +37 -0
- package/dist/task/executor.d.ts.map +1 -0
- package/dist/task/executor.js +462 -0
- package/dist/task/executor.js.map +1 -0
- package/dist/task/index.d.ts +12 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +12 -0
- package/dist/task/index.js.map +1 -0
- package/dist/task/planner.d.ts +21 -0
- package/dist/task/planner.d.ts.map +1 -0
- package/dist/task/planner.js +253 -0
- package/dist/task/planner.js.map +1 -0
- package/dist/task/storage.d.ts +46 -0
- package/dist/task/storage.d.ts.map +1 -0
- package/dist/task/storage.js +266 -0
- package/dist/task/storage.js.map +1 -0
- package/dist/trace/trace-event.d.ts +2 -18
- package/dist/trace/trace-event.d.ts.map +1 -1
- package/dist/trace/trace-event.js +6 -6
- package/dist/trace/trace-event.js.map +1 -1
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +54 -15
- package/dist/utils/file-utils.js.map +1 -1
- package/docs/PHASE5_IMPLEMENTATION.md +237 -0
- package/docs/PHASES-3-7-COMPLETE.md +177 -0
- package/docs/PHASE_4_COMPLETE.md +135 -0
- package/docs/PHASE_7_DELIVERABLES.md +295 -0
- package/docs/PHASE_7_IMPLEMENTATION.md +306 -0
- package/docs/PHASE_7_SUMMARY.txt +195 -0
- package/docs/RELEASE-NOTES-v2.1.md +213 -0
- package/docs/ROADMAP.md +194 -107
- package/docs/SECURITY-AUDIT.md +387 -0
- package/docs/SNAPSHOT.md +59 -32
- package/docs/implementation/phase3-summary.md +220 -0
- package/package.json +27 -11
- package/src/agent/task-worker.ts +196 -0
- package/src/agent/worker.ts +111 -0
- package/src/bin.ts +13 -0
- package/src/cli/cost.ts +210 -0
- package/src/cli/gc.ts +138 -0
- package/src/cli/gradients.ts +97 -0
- package/src/cli/grow.ts +416 -0
- package/src/cli/index.ts +81 -0
- package/src/cli/init.ts +139 -0
- package/src/cli/status.ts +218 -0
- package/src/coordination/file-locks.ts +300 -0
- package/src/coordination/index.ts +4 -0
- package/src/coordination/inhibitors.ts +345 -0
- package/src/coordination/process-manager.ts +199 -0
- package/src/core/agent-executor.ts +37 -8
- package/src/core/signals/churn.ts +8 -5
- package/src/core/signals/debt.ts +4 -3
- package/src/cost/cost-tracker.ts +2 -0
- package/src/gc/index.ts +17 -0
- package/src/gc/runner.ts +314 -0
- package/src/gc/trace-compactor.ts +187 -0
- package/src/index.ts +7 -1
- package/src/prompts/index.ts +2 -1
- package/src/quarantine/explorer.ts +234 -0
- package/src/quarantine/index.ts +7 -0
- package/src/quarantine/manager.ts +336 -0
- package/src/task/acceptance.ts +267 -0
- package/src/task/agent-coordinator.ts +220 -0
- package/src/task/executor.ts +543 -0
- package/src/task/index.ts +38 -0
- package/src/task/planner.ts +294 -0
- package/src/task/storage.ts +332 -0
- package/src/trace/trace-event.ts +7 -26
- package/src/utils/file-utils.ts +61 -15
- package/tests/cli/gc.test.ts +206 -0
- package/tests/cli/init.test.ts +181 -0
- package/tests/cli/status.test.ts +282 -0
- package/tests/coordination/file-locks.test.ts +196 -0
- package/tests/coordination/inhibitors.test.ts +459 -0
- package/tests/coordination/integration.test.ts +195 -0
- package/tests/coordination/process-manager.test.ts +165 -0
- package/tests/gc/trace-compactor.test.ts +245 -0
- package/tests/integration/phase-7.test.ts +145 -0
- package/tests/quarantine/explorer.test.ts +381 -0
- package/tests/quarantine/manager.test.ts +399 -0
- package/tests/security/command-injection.test.ts +88 -0
- package/tests/security/path-traversal.test.ts +103 -0
- package/tests/task/acceptance.test.ts +411 -0
- package/tests/task/executor.test.ts +421 -0
- package/tests/task/planner.test.ts +359 -0
- package/tests/trace/trace-event.test.ts +62 -20
- package/tsconfig.json +2 -2
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* - Gradient caching
|
|
6
6
|
* - File locks (Phase 3)
|
|
7
7
|
* - Process management (Phase 3)
|
|
8
|
+
* - Inhibitor signals (Phase 4)
|
|
8
9
|
*/
|
|
9
10
|
export * from './gradient-cache.js';
|
|
11
|
+
export * from './file-locks.js';
|
|
12
|
+
export * from './process-manager.js';
|
|
13
|
+
export * from './inhibitors.js';
|
|
10
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inhibitor Signal System for Claude-Mycelium
|
|
3
|
+
* Records pattern-specific warnings from failures with exponential decay
|
|
4
|
+
* Storage: .agent-meta/_inhibitors.ndjson (append-only)
|
|
5
|
+
* Reference: ADR-002, second-spec §1
|
|
6
|
+
*/
|
|
7
|
+
import type { Inhibitor, Mode, TraceEvent } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Emit an inhibitor signal after a failure
|
|
10
|
+
* Appends to NDJSON file for durability
|
|
11
|
+
*/
|
|
12
|
+
export declare function emitInhibitor(params: {
|
|
13
|
+
trigger: {
|
|
14
|
+
file?: string;
|
|
15
|
+
pattern?: string;
|
|
16
|
+
mode?: Mode;
|
|
17
|
+
};
|
|
18
|
+
signal: string;
|
|
19
|
+
origin: {
|
|
20
|
+
agent_id: string;
|
|
21
|
+
trace_id: string;
|
|
22
|
+
energy_wasted: number;
|
|
23
|
+
failure_type: 'ci_failed' | 'regression' | 'reverted' | 'loop_detected';
|
|
24
|
+
};
|
|
25
|
+
strength: number;
|
|
26
|
+
half_life_days: number;
|
|
27
|
+
}): Promise<Inhibitor>;
|
|
28
|
+
/**
|
|
29
|
+
* Query relevant inhibitors for a file + mode combination
|
|
30
|
+
* Returns inhibitors sorted by current strength (strongest first)
|
|
31
|
+
* Filters out inhibitors below relevance threshold
|
|
32
|
+
*/
|
|
33
|
+
export declare function queryInhibitors(file: string, mode: Mode): Promise<Array<Inhibitor & {
|
|
34
|
+
currentStrength: number;
|
|
35
|
+
}>>;
|
|
36
|
+
/**
|
|
37
|
+
* Calculate current strength with exponential decay
|
|
38
|
+
* Formula: strength * 0.5^(days / half_life)
|
|
39
|
+
*
|
|
40
|
+
* Examples (30-day half-life):
|
|
41
|
+
* - Day 0: 1.0
|
|
42
|
+
* - Day 30: 0.5
|
|
43
|
+
* - Day 60: 0.25
|
|
44
|
+
* - Day 90: 0.125
|
|
45
|
+
*/
|
|
46
|
+
export declare function calculateCurrentStrength(inhibitor: Inhibitor): number;
|
|
47
|
+
/**
|
|
48
|
+
* Read all inhibitors from NDJSON file
|
|
49
|
+
*/
|
|
50
|
+
export declare function readInhibitors(): Promise<Inhibitor[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Extract failure pattern from CI output
|
|
53
|
+
* Heuristic pattern matching for common failure types
|
|
54
|
+
*/
|
|
55
|
+
export declare function extractFailurePattern(ciOutput: string): string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Summarize CI failure for human-readable signal
|
|
58
|
+
*/
|
|
59
|
+
export declare function summarizeCIFailure(ciOutput: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Check if inhibitor should be emitted after an agent run
|
|
62
|
+
* Cases: CI failed, regression, or loop detected
|
|
63
|
+
*/
|
|
64
|
+
export declare function maybeEmitInhibitor(trace: TraceEvent, ciOutput?: string): Promise<Inhibitor | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Check for loop pattern (same file + mode, 3+ attempts, no progress)
|
|
67
|
+
* Must be called after trace is recorded
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkForLoop(file: string, mode: Mode, getRecentTraces: (file: string, mode: Mode, limit: number) => Promise<TraceEvent[]>): Promise<Inhibitor | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Garbage collect decayed inhibitors (strength < 0.05)
|
|
72
|
+
* Rewrites the NDJSON file with only relevant inhibitors
|
|
73
|
+
*/
|
|
74
|
+
export declare function gcInhibitors(): Promise<{
|
|
75
|
+
removed: number;
|
|
76
|
+
kept: number;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Format inhibitor for display in agent prompts
|
|
80
|
+
*/
|
|
81
|
+
export declare function formatInhibitorForPrompt(inhibitor: Inhibitor & {
|
|
82
|
+
currentStrength: number;
|
|
83
|
+
}): string;
|
|
84
|
+
//# sourceMappingURL=inhibitors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inhibitors.d.ts","sourceRoot":"","sources":["../../src/coordination/inhibitors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAYrE;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,IAAI,CAAC;KACb,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC;KACzE,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,SAAS,CAAC,CA8BrB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAqBzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAMrE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CA2B3D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAiD3B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,GAClF,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA4C3B;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB/E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,GACjD,MAAM,CAOR"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inhibitor Signal System for Claude-Mycelium
|
|
3
|
+
* Records pattern-specific warnings from failures with exponential decay
|
|
4
|
+
* Storage: .agent-meta/_inhibitors.ndjson (append-only)
|
|
5
|
+
* Reference: ADR-002, second-spec §1
|
|
6
|
+
*/
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { appendFile, readFile, fileExists, writeFile } from '../utils/file-utils.js';
|
|
10
|
+
import { logInfo, logError } from '../utils/logger.js';
|
|
11
|
+
// Compute file path at runtime to respect TEST_META_DIR
|
|
12
|
+
function getInhibitorsFile() {
|
|
13
|
+
const META_DIR = process.env.TEST_META_DIR || '.agent-meta';
|
|
14
|
+
return path.join(META_DIR, '_inhibitors.ndjson');
|
|
15
|
+
}
|
|
16
|
+
const INHIBITOR_RELEVANCE_THRESHOLD = 0.2;
|
|
17
|
+
const INHIBITOR_GC_THRESHOLD = 0.05;
|
|
18
|
+
const DEFAULT_HALF_LIFE_DAYS = 30;
|
|
19
|
+
/**
|
|
20
|
+
* Emit an inhibitor signal after a failure
|
|
21
|
+
* Appends to NDJSON file for durability
|
|
22
|
+
*/
|
|
23
|
+
export async function emitInhibitor(params) {
|
|
24
|
+
const inhibitor = {
|
|
25
|
+
id: uuidv4(),
|
|
26
|
+
timestamp: new Date().toISOString(),
|
|
27
|
+
trigger: params.trigger,
|
|
28
|
+
signal: params.signal,
|
|
29
|
+
origin: params.origin,
|
|
30
|
+
strength: params.strength,
|
|
31
|
+
half_life_days: params.half_life_days,
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
// Append to NDJSON file
|
|
35
|
+
const line = JSON.stringify(inhibitor) + '\n';
|
|
36
|
+
appendFile(getInhibitorsFile(), line);
|
|
37
|
+
logInfo('Inhibitor emitted', {
|
|
38
|
+
id: inhibitor.id,
|
|
39
|
+
file: inhibitor.trigger.file,
|
|
40
|
+
mode: inhibitor.trigger.mode,
|
|
41
|
+
pattern: inhibitor.trigger.pattern,
|
|
42
|
+
failure_type: inhibitor.origin.failure_type,
|
|
43
|
+
energy_wasted: `$${inhibitor.origin.energy_wasted.toFixed(4)}`,
|
|
44
|
+
});
|
|
45
|
+
return inhibitor;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logError('Failed to emit inhibitor', error, { inhibitor });
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Query relevant inhibitors for a file + mode combination
|
|
54
|
+
* Returns inhibitors sorted by current strength (strongest first)
|
|
55
|
+
* Filters out inhibitors below relevance threshold
|
|
56
|
+
*/
|
|
57
|
+
export async function queryInhibitors(file, mode) {
|
|
58
|
+
try {
|
|
59
|
+
const all = await readInhibitors();
|
|
60
|
+
return all
|
|
61
|
+
.map(i => ({ ...i, currentStrength: calculateCurrentStrength(i) }))
|
|
62
|
+
.filter(i => {
|
|
63
|
+
// Must be strong enough to be relevant
|
|
64
|
+
if (i.currentStrength < INHIBITOR_RELEVANCE_THRESHOLD)
|
|
65
|
+
return false;
|
|
66
|
+
// Check trigger match
|
|
67
|
+
const matchesFile = !i.trigger.file || i.trigger.file === file;
|
|
68
|
+
const matchesMode = !i.trigger.mode || i.trigger.mode === mode;
|
|
69
|
+
return matchesFile && matchesMode;
|
|
70
|
+
})
|
|
71
|
+
.sort((a, b) => b.currentStrength - a.currentStrength);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
logError('Failed to query inhibitors', error, { file, mode });
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Calculate current strength with exponential decay
|
|
80
|
+
* Formula: strength * 0.5^(days / half_life)
|
|
81
|
+
*
|
|
82
|
+
* Examples (30-day half-life):
|
|
83
|
+
* - Day 0: 1.0
|
|
84
|
+
* - Day 30: 0.5
|
|
85
|
+
* - Day 60: 0.25
|
|
86
|
+
* - Day 90: 0.125
|
|
87
|
+
*/
|
|
88
|
+
export function calculateCurrentStrength(inhibitor) {
|
|
89
|
+
const ageMs = Date.now() - Date.parse(inhibitor.timestamp);
|
|
90
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
91
|
+
const halfLives = ageDays / inhibitor.half_life_days;
|
|
92
|
+
return inhibitor.strength * Math.pow(0.5, halfLives);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Read all inhibitors from NDJSON file
|
|
96
|
+
*/
|
|
97
|
+
export async function readInhibitors() {
|
|
98
|
+
try {
|
|
99
|
+
if (!fileExists(getInhibitorsFile())) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const content = readFile(getInhibitorsFile());
|
|
103
|
+
const lines = content.trim().split('\n').filter(line => line.length > 0);
|
|
104
|
+
const inhibitors = [];
|
|
105
|
+
for (const line of lines) {
|
|
106
|
+
try {
|
|
107
|
+
const inhibitor = JSON.parse(line);
|
|
108
|
+
inhibitors.push(inhibitor);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
logError('Failed to parse inhibitor line', error, {
|
|
112
|
+
line: line.substring(0, 100),
|
|
113
|
+
});
|
|
114
|
+
// Skip corrupted lines
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return inhibitors;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
logError('Failed to read inhibitors', error);
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Extract failure pattern from CI output
|
|
126
|
+
* Heuristic pattern matching for common failure types
|
|
127
|
+
*/
|
|
128
|
+
export function extractFailurePattern(ciOutput) {
|
|
129
|
+
if (ciOutput.includes('TypeError'))
|
|
130
|
+
return 'changes causing TypeError';
|
|
131
|
+
if (ciOutput.includes('Cannot find module'))
|
|
132
|
+
return 'breaking imports';
|
|
133
|
+
if (ciOutput.includes('is not assignable'))
|
|
134
|
+
return 'type mismatches';
|
|
135
|
+
if (ciOutput.includes('ENOENT'))
|
|
136
|
+
return 'missing file references';
|
|
137
|
+
if (ciOutput.includes('ReferenceError'))
|
|
138
|
+
return 'undefined variable references';
|
|
139
|
+
if (ciOutput.includes('SyntaxError'))
|
|
140
|
+
return 'syntax errors';
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Summarize CI failure for human-readable signal
|
|
145
|
+
*/
|
|
146
|
+
export function summarizeCIFailure(ciOutput) {
|
|
147
|
+
const lines = ciOutput.split('\n').filter(line => line.trim().length > 0);
|
|
148
|
+
// Find the first error line
|
|
149
|
+
for (const line of lines) {
|
|
150
|
+
if (line.includes('Error:') ||
|
|
151
|
+
line.includes('error TS') ||
|
|
152
|
+
line.includes('✖') ||
|
|
153
|
+
line.includes('FAIL')) {
|
|
154
|
+
return line.trim().substring(0, 150); // First 150 chars
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return lines[0]?.substring(0, 150) || 'CI failure (no details available)';
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if inhibitor should be emitted after an agent run
|
|
161
|
+
* Cases: CI failed, regression, or loop detected
|
|
162
|
+
*/
|
|
163
|
+
export async function maybeEmitInhibitor(trace, ciOutput) {
|
|
164
|
+
try {
|
|
165
|
+
// Case 1: CI failed
|
|
166
|
+
if (!trace.ci_passed && ciOutput) {
|
|
167
|
+
return await emitInhibitor({
|
|
168
|
+
trigger: {
|
|
169
|
+
file: trace.file_path,
|
|
170
|
+
mode: trace.mode,
|
|
171
|
+
pattern: extractFailurePattern(ciOutput),
|
|
172
|
+
},
|
|
173
|
+
signal: `CI failed: ${summarizeCIFailure(ciOutput)}`,
|
|
174
|
+
origin: {
|
|
175
|
+
agent_id: trace.agent_id || 'unknown',
|
|
176
|
+
trace_id: trace.id,
|
|
177
|
+
energy_wasted: trace.cost?.estimated_usd || 0,
|
|
178
|
+
failure_type: 'ci_failed',
|
|
179
|
+
},
|
|
180
|
+
strength: 1.0,
|
|
181
|
+
half_life_days: DEFAULT_HALF_LIFE_DAYS,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// Case 2: Regression (gradient increased instead of decreased)
|
|
185
|
+
if (trace.gradient_delta < -0.02) {
|
|
186
|
+
// Made things worse
|
|
187
|
+
return await emitInhibitor({
|
|
188
|
+
trigger: {
|
|
189
|
+
file: trace.file_path,
|
|
190
|
+
mode: trace.mode,
|
|
191
|
+
},
|
|
192
|
+
signal: `${trace.mode} made ${trace.file_path} worse. Gradient increased by ${Math.abs(trace.gradient_delta).toFixed(2)}.`,
|
|
193
|
+
origin: {
|
|
194
|
+
agent_id: trace.agent_id || 'unknown',
|
|
195
|
+
trace_id: trace.id,
|
|
196
|
+
energy_wasted: trace.cost?.estimated_usd || 0,
|
|
197
|
+
failure_type: 'regression',
|
|
198
|
+
},
|
|
199
|
+
strength: 1.0,
|
|
200
|
+
half_life_days: DEFAULT_HALF_LIFE_DAYS,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Case 3: Loop detection is handled separately via checkForLoop()
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
logError('Failed to check for inhibitor emission', error, { trace });
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check for loop pattern (same file + mode, 3+ attempts, no progress)
|
|
213
|
+
* Must be called after trace is recorded
|
|
214
|
+
*/
|
|
215
|
+
export async function checkForLoop(file, mode, getRecentTraces) {
|
|
216
|
+
try {
|
|
217
|
+
const recentTraces = await getRecentTraces(file, mode, 5);
|
|
218
|
+
// Need at least 3 attempts
|
|
219
|
+
if (recentTraces.length < 3) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
// Check if all recent attempts had poor efficiency (<0.02)
|
|
223
|
+
const isLoop = recentTraces.every(t => {
|
|
224
|
+
const efficiency = t.efficiency || 0;
|
|
225
|
+
return efficiency < 0.02;
|
|
226
|
+
});
|
|
227
|
+
if (!isLoop) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
// Calculate total waste
|
|
231
|
+
const totalWasted = recentTraces.reduce((sum, t) => sum + (t.cost?.estimated_usd || 0), 0);
|
|
232
|
+
return await emitInhibitor({
|
|
233
|
+
trigger: {
|
|
234
|
+
file,
|
|
235
|
+
mode,
|
|
236
|
+
},
|
|
237
|
+
signal: `${mode} is stuck on ${file}. ${recentTraces.length} attempts with no improvement. Total wasted: $${totalWasted.toFixed(2)}.`,
|
|
238
|
+
origin: {
|
|
239
|
+
agent_id: recentTraces[0]?.agent_id || 'unknown',
|
|
240
|
+
trace_id: recentTraces[0]?.id || 'unknown',
|
|
241
|
+
energy_wasted: totalWasted,
|
|
242
|
+
failure_type: 'loop_detected',
|
|
243
|
+
},
|
|
244
|
+
strength: 1.0,
|
|
245
|
+
half_life_days: 60, // Longer half-life for loops
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
logError('Failed to check for loop', error, { file, mode });
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Garbage collect decayed inhibitors (strength < 0.05)
|
|
255
|
+
* Rewrites the NDJSON file with only relevant inhibitors
|
|
256
|
+
*/
|
|
257
|
+
export async function gcInhibitors() {
|
|
258
|
+
try {
|
|
259
|
+
const all = await readInhibitors();
|
|
260
|
+
const active = all.filter(i => calculateCurrentStrength(i) >= INHIBITOR_GC_THRESHOLD);
|
|
261
|
+
// Rewrite file with only active inhibitors
|
|
262
|
+
if (active.length < all.length) {
|
|
263
|
+
const lines = active.map(i => JSON.stringify(i) + '\n').join('');
|
|
264
|
+
writeFile(getInhibitorsFile(), lines);
|
|
265
|
+
logInfo('Inhibitor GC complete', {
|
|
266
|
+
removed: all.length - active.length,
|
|
267
|
+
kept: active.length,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
removed: all.length - active.length,
|
|
272
|
+
kept: active.length,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
logError('Failed to GC inhibitors', error);
|
|
277
|
+
return { removed: 0, kept: 0 };
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Format inhibitor for display in agent prompts
|
|
282
|
+
*/
|
|
283
|
+
export function formatInhibitorForPrompt(inhibitor) {
|
|
284
|
+
const strengthPercent = Math.round(inhibitor.currentStrength * 100);
|
|
285
|
+
const patternText = inhibitor.trigger.pattern || 'this approach';
|
|
286
|
+
return `⚠️ **[Strength: ${strengthPercent}%]** ${patternText}
|
|
287
|
+
${inhibitor.signal}
|
|
288
|
+
_Origin: ${inhibitor.origin.failure_type} by ${inhibitor.origin.agent_id}, wasted $${inhibitor.origin.energy_wasted.toFixed(4)}_`;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=inhibitors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inhibitors.js","sourceRoot":"","sources":["../../src/coordination/inhibitors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process management for spawning and managing agent workers
|
|
3
|
+
* Each agent runs as an independent Node.js process via child_process.fork()
|
|
4
|
+
*
|
|
5
|
+
* Reference: ADR-004 lines 15-28
|
|
6
|
+
*/
|
|
7
|
+
import { ChildProcess } from 'child_process';
|
|
8
|
+
export interface SpawnOptions {
|
|
9
|
+
agentId: string;
|
|
10
|
+
maxIterations?: number;
|
|
11
|
+
timeout?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentProcess {
|
|
14
|
+
child: ChildProcess;
|
|
15
|
+
agentId: string;
|
|
16
|
+
startedAt: Date;
|
|
17
|
+
timeout: NodeJS.Timeout | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Spawn an agent worker process
|
|
21
|
+
*
|
|
22
|
+
* @param options - Agent spawn options
|
|
23
|
+
* @returns ChildProcess handle
|
|
24
|
+
*/
|
|
25
|
+
export declare function spawnAgent(options: SpawnOptions): ChildProcess;
|
|
26
|
+
/**
|
|
27
|
+
* Kill an agent process
|
|
28
|
+
*
|
|
29
|
+
* @param agentId - Agent to kill
|
|
30
|
+
* @returns true if agent was killed, false if not found
|
|
31
|
+
*/
|
|
32
|
+
export declare function killAgent(agentId: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* List all active agent processes
|
|
35
|
+
*
|
|
36
|
+
* @returns Array of active agent IDs with metadata
|
|
37
|
+
*/
|
|
38
|
+
export declare function listAgents(): Array<{
|
|
39
|
+
agentId: string;
|
|
40
|
+
pid: number;
|
|
41
|
+
startedAt: Date;
|
|
42
|
+
uptime: number;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Check if an agent is running
|
|
46
|
+
*
|
|
47
|
+
* @param agentId - Agent to check
|
|
48
|
+
* @returns true if agent is running
|
|
49
|
+
*/
|
|
50
|
+
export declare function isAgentRunning(agentId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get agent process info
|
|
53
|
+
*
|
|
54
|
+
* @param agentId - Agent to get info for
|
|
55
|
+
* @returns Agent info or null if not found
|
|
56
|
+
*/
|
|
57
|
+
export declare function getAgentInfo(agentId: string): {
|
|
58
|
+
agentId: string;
|
|
59
|
+
pid: number;
|
|
60
|
+
startedAt: Date;
|
|
61
|
+
uptime: number;
|
|
62
|
+
} | null;
|
|
63
|
+
/**
|
|
64
|
+
* Kill all active agents
|
|
65
|
+
*/
|
|
66
|
+
export declare function killAllAgents(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Wait for all agents to complete
|
|
69
|
+
*
|
|
70
|
+
* @returns Promise that resolves when all agents have exited
|
|
71
|
+
*/
|
|
72
|
+
export declare function waitForAllAgents(): Promise<void>;
|
|
73
|
+
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/coordination/process-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,YAAY,EAAE,MAAM,eAAe,CAAC;AAGnD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAChC;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAmD9D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAalD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAoBD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAYP;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQtD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process management for spawning and managing agent workers
|
|
3
|
+
* Each agent runs as an independent Node.js process via child_process.fork()
|
|
4
|
+
*
|
|
5
|
+
* Reference: ADR-004 lines 15-28
|
|
6
|
+
*/
|
|
7
|
+
import { fork } from 'child_process';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
const activeAgents = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Spawn an agent worker process
|
|
12
|
+
*
|
|
13
|
+
* @param options - Agent spawn options
|
|
14
|
+
* @returns ChildProcess handle
|
|
15
|
+
*/
|
|
16
|
+
export function spawnAgent(options) {
|
|
17
|
+
const { agentId, maxIterations = 10, timeout = 300_000, // 5 minutes default
|
|
18
|
+
} = options;
|
|
19
|
+
// Path to the compiled worker file
|
|
20
|
+
const workerPath = path.join(__dirname, '../agent/worker.js');
|
|
21
|
+
const child = fork(workerPath, [], {
|
|
22
|
+
env: {
|
|
23
|
+
...process.env,
|
|
24
|
+
AGENT_ID: agentId,
|
|
25
|
+
MAX_ITERATIONS: String(maxIterations),
|
|
26
|
+
},
|
|
27
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
28
|
+
});
|
|
29
|
+
// Set up timeout
|
|
30
|
+
const timer = setTimeout(() => {
|
|
31
|
+
console.warn(`[process-manager] Agent ${agentId} timed out after ${timeout}ms`);
|
|
32
|
+
child.kill('SIGTERM');
|
|
33
|
+
}, timeout);
|
|
34
|
+
// Clean up on exit
|
|
35
|
+
child.on('exit', (code, signal) => {
|
|
36
|
+
clearTimeout(timer);
|
|
37
|
+
activeAgents.delete(agentId);
|
|
38
|
+
console.log(`[process-manager] Agent ${agentId} exited with code ${code}, signal ${signal}`);
|
|
39
|
+
});
|
|
40
|
+
// Handle IPC messages
|
|
41
|
+
child.on('message', (message) => {
|
|
42
|
+
console.log(`[process-manager] Message from ${agentId}:`, message);
|
|
43
|
+
});
|
|
44
|
+
// Handle errors
|
|
45
|
+
child.on('error', (error) => {
|
|
46
|
+
console.error(`[process-manager] Error from agent ${agentId}:`, error);
|
|
47
|
+
});
|
|
48
|
+
// Track the agent
|
|
49
|
+
activeAgents.set(agentId, {
|
|
50
|
+
child,
|
|
51
|
+
agentId,
|
|
52
|
+
startedAt: new Date(),
|
|
53
|
+
timeout: timer,
|
|
54
|
+
});
|
|
55
|
+
return child;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Kill an agent process
|
|
59
|
+
*
|
|
60
|
+
* @param agentId - Agent to kill
|
|
61
|
+
* @returns true if agent was killed, false if not found
|
|
62
|
+
*/
|
|
63
|
+
export function killAgent(agentId) {
|
|
64
|
+
const agent = activeAgents.get(agentId);
|
|
65
|
+
if (!agent) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (agent.timeout) {
|
|
69
|
+
clearTimeout(agent.timeout);
|
|
70
|
+
}
|
|
71
|
+
agent.child.kill('SIGTERM');
|
|
72
|
+
activeAgents.delete(agentId);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* List all active agent processes
|
|
77
|
+
*
|
|
78
|
+
* @returns Array of active agent IDs with metadata
|
|
79
|
+
*/
|
|
80
|
+
export function listAgents() {
|
|
81
|
+
const agents = [];
|
|
82
|
+
for (const [agentId, agent] of activeAgents) {
|
|
83
|
+
if (agent.child.pid) {
|
|
84
|
+
agents.push({
|
|
85
|
+
agentId,
|
|
86
|
+
pid: agent.child.pid,
|
|
87
|
+
startedAt: agent.startedAt,
|
|
88
|
+
uptime: Date.now() - agent.startedAt.getTime(),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return agents;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if an agent is running
|
|
96
|
+
*
|
|
97
|
+
* @param agentId - Agent to check
|
|
98
|
+
* @returns true if agent is running
|
|
99
|
+
*/
|
|
100
|
+
export function isAgentRunning(agentId) {
|
|
101
|
+
return activeAgents.has(agentId);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get agent process info
|
|
105
|
+
*
|
|
106
|
+
* @param agentId - Agent to get info for
|
|
107
|
+
* @returns Agent info or null if not found
|
|
108
|
+
*/
|
|
109
|
+
export function getAgentInfo(agentId) {
|
|
110
|
+
const agent = activeAgents.get(agentId);
|
|
111
|
+
if (!agent || !agent.child.pid) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
agentId,
|
|
116
|
+
pid: agent.child.pid,
|
|
117
|
+
startedAt: agent.startedAt,
|
|
118
|
+
uptime: Date.now() - agent.startedAt.getTime(),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Kill all active agents
|
|
123
|
+
*/
|
|
124
|
+
export function killAllAgents() {
|
|
125
|
+
for (const [agentId, agent] of activeAgents) {
|
|
126
|
+
if (agent.timeout) {
|
|
127
|
+
clearTimeout(agent.timeout);
|
|
128
|
+
}
|
|
129
|
+
agent.child.kill('SIGTERM');
|
|
130
|
+
}
|
|
131
|
+
activeAgents.clear();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Wait for all agents to complete
|
|
135
|
+
*
|
|
136
|
+
* @returns Promise that resolves when all agents have exited
|
|
137
|
+
*/
|
|
138
|
+
export async function waitForAllAgents() {
|
|
139
|
+
const promises = Array.from(activeAgents.values()).map((agent) => new Promise((resolve) => {
|
|
140
|
+
agent.child.once('exit', () => resolve());
|
|
141
|
+
}));
|
|
142
|
+
await Promise.all(promises);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/coordination/process-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAgB,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAe7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,MAAM,EACJ,OAAO,EACP,aAAa,GAAG,EAAE,EAClB,OAAO,GAAG,OAAO,EAAE,oBAAoB;MACxC,GAAG,OAAO,CAAC;IAEZ,mCAAmC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE;QACjC,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;SACtC;QACD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;KACvC,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,OAAO,CAAC,IAAI,CAAC,2BAA2B,OAAO,oBAAoB,OAAO,IAAI,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,EAAE,OAAO,CAAC,CAAC;IAEZ,mBAAmB;IACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAChC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,qBAAqB,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAY,EAAE,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,sCAAsC,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE;QACxB,KAAK;QACL,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IAMxB,MAAM,MAAM,GAKP,EAAE,CAAC;IAER,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAM1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO;QACP,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/D,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -16,12 +16,15 @@ import type { Mode, TraceEvent } from '../types/index.js';
|
|
|
16
16
|
export interface AgentRunResult {
|
|
17
17
|
success: boolean;
|
|
18
18
|
changes: string[];
|
|
19
|
-
trace
|
|
19
|
+
trace?: TraceEvent;
|
|
20
20
|
cost: number;
|
|
21
|
+
error?: string;
|
|
21
22
|
}
|
|
22
23
|
export interface AgentExecuteOptions {
|
|
23
24
|
dryRun?: boolean;
|
|
24
25
|
maxRetries?: number;
|
|
26
|
+
agentId?: string;
|
|
27
|
+
taskId?: string;
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
30
|
* Execute agent work on a single file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-executor.d.ts","sourceRoot":"","sources":["../../src/core/agent-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"agent-executor.d.ts","sourceRoot":"","sources":["../../src/core/agent-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAyB,MAAM,mBAAmB,CAAC;AAIjF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAkMzB"}
|