@yuaone/core 0.9.7 → 0.9.9
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/__tests__/context-manager.test.js +5 -9
- package/dist/__tests__/context-manager.test.js.map +1 -1
- package/dist/agent-coordinator.d.ts +172 -0
- package/dist/agent-coordinator.d.ts.map +1 -0
- package/dist/agent-coordinator.js +390 -0
- package/dist/agent-coordinator.js.map +1 -0
- package/dist/agent-loop.d.ts +83 -29
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +697 -335
- package/dist/agent-loop.js.map +1 -1
- package/dist/agent-reputation.d.ts +72 -0
- package/dist/agent-reputation.d.ts.map +1 -0
- package/dist/agent-reputation.js +222 -0
- package/dist/agent-reputation.js.map +1 -0
- package/dist/arch-summarizer.d.ts +48 -0
- package/dist/arch-summarizer.d.ts.map +1 -0
- package/dist/arch-summarizer.js +239 -0
- package/dist/arch-summarizer.js.map +1 -0
- package/dist/autonomous/explicit-planner.d.ts +45 -0
- package/dist/autonomous/explicit-planner.d.ts.map +1 -0
- package/dist/autonomous/explicit-planner.js +99 -0
- package/dist/autonomous/explicit-planner.js.map +1 -0
- package/dist/autonomous/incident-debugger.d.ts +78 -0
- package/dist/autonomous/incident-debugger.d.ts.map +1 -0
- package/dist/autonomous/incident-debugger.js +324 -0
- package/dist/autonomous/incident-debugger.js.map +1 -0
- package/dist/autonomous/index.d.ts +15 -0
- package/dist/autonomous/index.d.ts.map +1 -0
- package/dist/autonomous/index.js +10 -0
- package/dist/autonomous/index.js.map +1 -0
- package/dist/autonomous/patch-tournament.d.ts +82 -0
- package/dist/autonomous/patch-tournament.d.ts.map +1 -0
- package/dist/autonomous/patch-tournament.js +150 -0
- package/dist/autonomous/patch-tournament.js.map +1 -0
- package/dist/autonomous/research-agent.d.ts +66 -0
- package/dist/autonomous/research-agent.d.ts.map +1 -0
- package/dist/autonomous/research-agent.js +210 -0
- package/dist/autonomous/research-agent.js.map +1 -0
- package/dist/autonomous/task-memory.d.ts +63 -0
- package/dist/autonomous/task-memory.d.ts.map +1 -0
- package/dist/autonomous/task-memory.js +143 -0
- package/dist/autonomous/task-memory.js.map +1 -0
- package/dist/budget-governor-v2.d.ts +93 -0
- package/dist/budget-governor-v2.d.ts.map +1 -0
- package/dist/budget-governor-v2.js +345 -0
- package/dist/budget-governor-v2.js.map +1 -0
- package/dist/capability-graph.d.ts +102 -0
- package/dist/capability-graph.d.ts.map +1 -0
- package/dist/capability-graph.js +397 -0
- package/dist/capability-graph.js.map +1 -0
- package/dist/capability-self-model.d.ts +144 -0
- package/dist/capability-self-model.d.ts.map +1 -0
- package/dist/capability-self-model.js +312 -0
- package/dist/capability-self-model.js.map +1 -0
- package/dist/checkpoint-manager.d.ts +94 -0
- package/dist/checkpoint-manager.d.ts.map +1 -0
- package/dist/checkpoint-manager.js +225 -0
- package/dist/checkpoint-manager.js.map +1 -0
- package/dist/continuation-engine.js +1 -1
- package/dist/continuation-engine.js.map +1 -1
- package/dist/dag-orchestrator.d.ts +0 -3
- package/dist/dag-orchestrator.d.ts.map +1 -1
- package/dist/dag-orchestrator.js +0 -1
- package/dist/dag-orchestrator.js.map +1 -1
- package/dist/evidence-chain.d.ts +99 -0
- package/dist/evidence-chain.d.ts.map +1 -0
- package/dist/evidence-chain.js +200 -0
- package/dist/evidence-chain.js.map +1 -0
- package/dist/execution-engine.d.ts.map +1 -1
- package/dist/execution-engine.js +0 -1
- package/dist/execution-engine.js.map +1 -1
- package/dist/failure-signature-memory.d.ts +61 -0
- package/dist/failure-signature-memory.d.ts.map +1 -0
- package/dist/failure-signature-memory.js +278 -0
- package/dist/failure-signature-memory.js.map +1 -0
- package/dist/index.d.ts +52 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -7
- package/dist/index.js.map +1 -1
- package/dist/language-detector.d.ts.map +1 -1
- package/dist/language-detector.js +122 -43
- package/dist/language-detector.js.map +1 -1
- package/dist/llm-client.d.ts +0 -7
- package/dist/llm-client.d.ts.map +1 -1
- package/dist/llm-client.js +15 -122
- package/dist/llm-client.js.map +1 -1
- package/dist/mcp-client.js +1 -1
- package/dist/mcp-client.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +0 -15
- package/dist/memory.js.map +1 -1
- package/dist/meta-learning-collector.d.ts +64 -0
- package/dist/meta-learning-collector.d.ts.map +1 -0
- package/dist/meta-learning-collector.js +169 -0
- package/dist/meta-learning-collector.js.map +1 -0
- package/dist/meta-learning-engine.d.ts +61 -0
- package/dist/meta-learning-engine.d.ts.map +1 -0
- package/dist/meta-learning-engine.js +250 -0
- package/dist/meta-learning-engine.js.map +1 -0
- package/dist/overhead-governor.d.ts +105 -0
- package/dist/overhead-governor.d.ts.map +1 -0
- package/dist/overhead-governor.js +239 -0
- package/dist/overhead-governor.js.map +1 -0
- package/dist/playbook-library.d.ts +75 -0
- package/dist/playbook-library.d.ts.map +1 -0
- package/dist/playbook-library.js +241 -0
- package/dist/playbook-library.js.map +1 -0
- package/dist/project-executive.d.ts +97 -0
- package/dist/project-executive.d.ts.map +1 -0
- package/dist/project-executive.js +223 -0
- package/dist/project-executive.js.map +1 -0
- package/dist/research-loop.d.ts +79 -0
- package/dist/research-loop.d.ts.map +1 -0
- package/dist/research-loop.js +363 -0
- package/dist/research-loop.js.map +1 -0
- package/dist/resolve-memory-path.d.ts +32 -0
- package/dist/resolve-memory-path.d.ts.map +1 -0
- package/dist/resolve-memory-path.js +97 -0
- package/dist/resolve-memory-path.js.map +1 -0
- package/dist/safe-bounds.d.ts +101 -0
- package/dist/safe-bounds.d.ts.map +1 -0
- package/dist/safe-bounds.js +140 -0
- package/dist/safe-bounds.js.map +1 -0
- package/dist/sandbox-tiers.d.ts +5 -0
- package/dist/sandbox-tiers.d.ts.map +1 -1
- package/dist/sandbox-tiers.js +14 -6
- package/dist/sandbox-tiers.js.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +3 -0
- package/dist/security.js.map +1 -1
- package/dist/self-improvement-loop.d.ts +64 -0
- package/dist/self-improvement-loop.d.ts.map +1 -0
- package/dist/self-improvement-loop.js +156 -0
- package/dist/self-improvement-loop.js.map +1 -0
- package/dist/session-persistence.d.ts +5 -0
- package/dist/session-persistence.d.ts.map +1 -1
- package/dist/session-persistence.js +19 -3
- package/dist/session-persistence.js.map +1 -1
- package/dist/skill-loader.d.ts +16 -9
- package/dist/skill-loader.d.ts.map +1 -1
- package/dist/skill-loader.js +52 -116
- package/dist/skill-loader.js.map +1 -1
- package/dist/skill-registry.d.ts +60 -0
- package/dist/skill-registry.d.ts.map +1 -0
- package/dist/skill-registry.js +162 -0
- package/dist/skill-registry.js.map +1 -0
- package/dist/stall-detector.d.ts +56 -0
- package/dist/stall-detector.d.ts.map +1 -0
- package/dist/stall-detector.js +142 -0
- package/dist/stall-detector.js.map +1 -0
- package/dist/strategy-learner.d.ts +57 -0
- package/dist/strategy-learner.d.ts.map +1 -0
- package/dist/strategy-learner.js +160 -0
- package/dist/strategy-learner.js.map +1 -0
- package/dist/strategy-market.d.ts +73 -0
- package/dist/strategy-market.d.ts.map +1 -0
- package/dist/strategy-market.js +200 -0
- package/dist/strategy-market.js.map +1 -0
- package/dist/sub-agent.d.ts +0 -3
- package/dist/sub-agent.d.ts.map +1 -1
- package/dist/sub-agent.js +0 -10
- package/dist/sub-agent.js.map +1 -1
- package/dist/system-prompt.d.ts +0 -2
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +97 -490
- package/dist/system-prompt.js.map +1 -1
- package/dist/task-classifier.d.ts.map +1 -1
- package/dist/task-classifier.js +2 -54
- package/dist/task-classifier.js.map +1 -1
- package/dist/tool-synthesizer.d.ts +149 -0
- package/dist/tool-synthesizer.d.ts.map +1 -0
- package/dist/tool-synthesizer.js +455 -0
- package/dist/tool-synthesizer.js.map +1 -0
- package/dist/trace-pattern-extractor.d.ts +76 -0
- package/dist/trace-pattern-extractor.d.ts.map +1 -0
- package/dist/trace-pattern-extractor.js +321 -0
- package/dist/trace-pattern-extractor.js.map +1 -0
- package/dist/trace-recorder.d.ts +38 -0
- package/dist/trace-recorder.d.ts.map +1 -0
- package/dist/trace-recorder.js +94 -0
- package/dist/trace-recorder.js.map +1 -0
- package/dist/trust-economics.d.ts +50 -0
- package/dist/trust-economics.d.ts.map +1 -0
- package/dist/trust-economics.js +148 -0
- package/dist/trust-economics.js.map +1 -0
- package/dist/types.d.ts +272 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/yuan-md-loader.d.ts +22 -0
- package/dist/yuan-md-loader.d.ts.map +1 -0
- package/dist/yuan-md-loader.js +75 -0
- package/dist/yuan-md-loader.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-memory.js","sourceRoot":"","sources":["../../src/autonomous/task-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module budget-governor-v2
|
|
3
|
+
* @description Multi-dimensional Budget Governor v2.
|
|
4
|
+
*
|
|
5
|
+
* Tracks and enforces budgets across six dimensions simultaneously:
|
|
6
|
+
* task, project, daily, branch, research, model_tier
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Graceful degradation: suggests LOCAL model tier when usage >= degradeAtPercent
|
|
10
|
+
* - Hard halt: emits budget_exhausted event when usage >= haltAtPercent
|
|
11
|
+
* - Atomic JSON storage to ~/.yuan/budget/budget-state.json
|
|
12
|
+
* - Daily budget auto-resets at UTC midnight
|
|
13
|
+
* - Never throws — all checks are non-blocking
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from "node:events";
|
|
16
|
+
export type BudgetType = "task" | "project" | "daily" | "branch" | "research" | "model_tier";
|
|
17
|
+
export interface BudgetAllocationV2 {
|
|
18
|
+
type: BudgetType;
|
|
19
|
+
id: string;
|
|
20
|
+
limit: number;
|
|
21
|
+
used: number;
|
|
22
|
+
remaining: number;
|
|
23
|
+
exhaustedAt?: string;
|
|
24
|
+
degradedAt?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface BudgetPolicy {
|
|
27
|
+
taskBudget: number;
|
|
28
|
+
projectBudget: number;
|
|
29
|
+
dailyBudget: number;
|
|
30
|
+
branchBudget: number;
|
|
31
|
+
researchBudget: number;
|
|
32
|
+
degradeAtPercent: number;
|
|
33
|
+
haltAtPercent: number;
|
|
34
|
+
}
|
|
35
|
+
export interface BudgetStatusV2 {
|
|
36
|
+
taskId?: string;
|
|
37
|
+
projectId?: string;
|
|
38
|
+
allocations: BudgetAllocationV2[];
|
|
39
|
+
isDegraded: boolean;
|
|
40
|
+
isHalted: boolean;
|
|
41
|
+
recommendation: "continue" | "degrade" | "halt";
|
|
42
|
+
suggestedModelTier?: "LOCAL" | "STANDARD" | "PREMIUM";
|
|
43
|
+
}
|
|
44
|
+
export declare class BudgetGovernorV2 extends EventEmitter {
|
|
45
|
+
private readonly policy;
|
|
46
|
+
private readonly storageDir;
|
|
47
|
+
private readonly storagePath;
|
|
48
|
+
/** All tracked allocations keyed by `${type}:${id}` */
|
|
49
|
+
private allocations;
|
|
50
|
+
/** Active task entries (taskId → metadata) */
|
|
51
|
+
private activeTasks;
|
|
52
|
+
/** Last known daily date for midnight detection */
|
|
53
|
+
private currentDailyDate;
|
|
54
|
+
constructor(policy?: Partial<BudgetPolicy>, storageDir?: string);
|
|
55
|
+
/**
|
|
56
|
+
* Start tracking a task.
|
|
57
|
+
* Creates allocation entries for task / project (if given) / daily / branch (if given).
|
|
58
|
+
*/
|
|
59
|
+
startTask(taskId: string, projectId?: string, branchName?: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Record token usage for a specific budget dimension.
|
|
62
|
+
* Triggers degradation/exhaustion events as thresholds are crossed.
|
|
63
|
+
*/
|
|
64
|
+
recordUsage(tokens: number, budgetType: BudgetType, id: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Check if the task is allowed to continue.
|
|
67
|
+
* Returns status with recommendation ("continue" | "degrade" | "halt").
|
|
68
|
+
*/
|
|
69
|
+
check(taskId: string): BudgetStatusV2;
|
|
70
|
+
/**
|
|
71
|
+
* End task and finalize its budget tracking.
|
|
72
|
+
*/
|
|
73
|
+
endTask(taskId: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Reset the daily budget allocation.
|
|
76
|
+
* Call this at day boundary or let it auto-detect via internal checks.
|
|
77
|
+
*/
|
|
78
|
+
resetDaily(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get all current allocations.
|
|
81
|
+
*/
|
|
82
|
+
getAllocations(): BudgetAllocationV2[];
|
|
83
|
+
private _key;
|
|
84
|
+
private _makeAllocation;
|
|
85
|
+
private _ensureAllocation;
|
|
86
|
+
private _defaultLimit;
|
|
87
|
+
/** Auto-detect UTC day rollover and reset daily budget. */
|
|
88
|
+
private _checkDailyReset;
|
|
89
|
+
private _saveState;
|
|
90
|
+
private _loadState;
|
|
91
|
+
private _isValidAllocation;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=budget-governor-v2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-governor-v2.d.ts","sourceRoot":"","sources":["../src/budget-governor-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,UAAU,GACV,YAAY,CAAC;AAEjB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,kBAAkB,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;CACvD;AAsCD,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,uDAAuD;IACvD,OAAO,CAAC,WAAW,CAAkC;IAErD,8CAA8C;IAC9C,OAAO,CAAC,WAAW,CAAyB;IAE5C,mDAAmD;IACnD,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM;IAc/D;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IA4BxE;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IA4DrE;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAmFrC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS7B;;;OAGG;IACH,UAAU,IAAI,IAAI;IAkBlB;;OAEG;IACH,cAAc,IAAI,kBAAkB,EAAE;IAMtC,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IAWrB,2DAA2D;IAC3D,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,kBAAkB;CAW3B"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module budget-governor-v2
|
|
3
|
+
* @description Multi-dimensional Budget Governor v2.
|
|
4
|
+
*
|
|
5
|
+
* Tracks and enforces budgets across six dimensions simultaneously:
|
|
6
|
+
* task, project, daily, branch, research, model_tier
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Graceful degradation: suggests LOCAL model tier when usage >= degradeAtPercent
|
|
10
|
+
* - Hard halt: emits budget_exhausted event when usage >= haltAtPercent
|
|
11
|
+
* - Atomic JSON storage to ~/.yuan/budget/budget-state.json
|
|
12
|
+
* - Daily budget auto-resets at UTC midnight
|
|
13
|
+
* - Never throws — all checks are non-blocking
|
|
14
|
+
*/
|
|
15
|
+
import { EventEmitter } from "node:events";
|
|
16
|
+
import { writeFileSync, readFileSync, mkdirSync, renameSync } from "node:fs";
|
|
17
|
+
import { homedir } from "node:os";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
// ─── Defaults ───
|
|
20
|
+
const DEFAULT_POLICY = {
|
|
21
|
+
taskBudget: 50_000,
|
|
22
|
+
projectBudget: 500_000,
|
|
23
|
+
dailyBudget: 200_000,
|
|
24
|
+
branchBudget: 100_000,
|
|
25
|
+
researchBudget: 20_000,
|
|
26
|
+
degradeAtPercent: 80,
|
|
27
|
+
haltAtPercent: 100,
|
|
28
|
+
};
|
|
29
|
+
function todayUtc() {
|
|
30
|
+
return new Date().toISOString().slice(0, 10); // "YYYY-MM-DD"
|
|
31
|
+
}
|
|
32
|
+
function nowIso() {
|
|
33
|
+
return new Date().toISOString();
|
|
34
|
+
}
|
|
35
|
+
// ─── BudgetGovernorV2 ───
|
|
36
|
+
export class BudgetGovernorV2 extends EventEmitter {
|
|
37
|
+
policy;
|
|
38
|
+
storageDir;
|
|
39
|
+
storagePath;
|
|
40
|
+
/** All tracked allocations keyed by `${type}:${id}` */
|
|
41
|
+
allocations;
|
|
42
|
+
/** Active task entries (taskId → metadata) */
|
|
43
|
+
activeTasks;
|
|
44
|
+
/** Last known daily date for midnight detection */
|
|
45
|
+
currentDailyDate;
|
|
46
|
+
constructor(policy, storageDir) {
|
|
47
|
+
super();
|
|
48
|
+
this.policy = { ...DEFAULT_POLICY, ...policy };
|
|
49
|
+
this.storageDir =
|
|
50
|
+
storageDir ?? join(homedir(), ".yuan", "budget");
|
|
51
|
+
this.storagePath = join(this.storageDir, "budget-state.json");
|
|
52
|
+
this.allocations = new Map();
|
|
53
|
+
this.activeTasks = new Map();
|
|
54
|
+
this.currentDailyDate = todayUtc();
|
|
55
|
+
this._loadState();
|
|
56
|
+
}
|
|
57
|
+
// ─── Public API ───
|
|
58
|
+
/**
|
|
59
|
+
* Start tracking a task.
|
|
60
|
+
* Creates allocation entries for task / project (if given) / daily / branch (if given).
|
|
61
|
+
*/
|
|
62
|
+
startTask(taskId, projectId, branchName) {
|
|
63
|
+
try {
|
|
64
|
+
this._checkDailyReset();
|
|
65
|
+
const entry = {
|
|
66
|
+
taskId,
|
|
67
|
+
projectId,
|
|
68
|
+
branchName,
|
|
69
|
+
startedAt: nowIso(),
|
|
70
|
+
};
|
|
71
|
+
this.activeTasks.set(taskId, entry);
|
|
72
|
+
// Ensure allocation entries exist
|
|
73
|
+
this._ensureAllocation("task", taskId, this.policy.taskBudget);
|
|
74
|
+
if (projectId) {
|
|
75
|
+
this._ensureAllocation("project", projectId, this.policy.projectBudget);
|
|
76
|
+
}
|
|
77
|
+
this._ensureAllocation("daily", this.currentDailyDate, this.policy.dailyBudget);
|
|
78
|
+
if (branchName) {
|
|
79
|
+
this._ensureAllocation("branch", branchName, this.policy.branchBudget);
|
|
80
|
+
}
|
|
81
|
+
this._saveState();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// never crash main loop
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Record token usage for a specific budget dimension.
|
|
89
|
+
* Triggers degradation/exhaustion events as thresholds are crossed.
|
|
90
|
+
*/
|
|
91
|
+
recordUsage(tokens, budgetType, id) {
|
|
92
|
+
try {
|
|
93
|
+
this._checkDailyReset();
|
|
94
|
+
const key = this._key(budgetType, id);
|
|
95
|
+
let alloc = this.allocations.get(key);
|
|
96
|
+
if (!alloc) {
|
|
97
|
+
// Auto-create allocation for unknown id using policy default
|
|
98
|
+
const limit = this._defaultLimit(budgetType);
|
|
99
|
+
alloc = this._makeAllocation(budgetType, id, limit);
|
|
100
|
+
this.allocations.set(key, alloc);
|
|
101
|
+
}
|
|
102
|
+
const previousUsed = alloc.used;
|
|
103
|
+
alloc.used = Math.min(alloc.used + tokens, Number.MAX_SAFE_INTEGER);
|
|
104
|
+
alloc.remaining = Math.max(0, alloc.limit - alloc.used);
|
|
105
|
+
const percentUsed = alloc.limit > 0 ? (alloc.used / alloc.limit) * 100 : 100;
|
|
106
|
+
const previousPercent = alloc.limit > 0 ? (previousUsed / alloc.limit) * 100 : 0;
|
|
107
|
+
const haltThreshold = this.policy.haltAtPercent;
|
|
108
|
+
const degradeThreshold = this.policy.degradeAtPercent;
|
|
109
|
+
// Halt threshold crossed
|
|
110
|
+
if (percentUsed >= haltThreshold && !alloc.exhaustedAt) {
|
|
111
|
+
alloc.exhaustedAt = nowIso();
|
|
112
|
+
this.emit("agent:budget_exhausted", {
|
|
113
|
+
kind: "agent:budget_exhausted",
|
|
114
|
+
budgetType,
|
|
115
|
+
id,
|
|
116
|
+
percentUsed: Math.round(percentUsed * 100) / 100,
|
|
117
|
+
timestamp: alloc.exhaustedAt,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Degrade threshold crossed (only once)
|
|
121
|
+
if (percentUsed >= degradeThreshold &&
|
|
122
|
+
previousPercent < degradeThreshold &&
|
|
123
|
+
!alloc.degradedAt) {
|
|
124
|
+
alloc.degradedAt = nowIso();
|
|
125
|
+
this.emit("agent:budget_degraded", {
|
|
126
|
+
kind: "agent:budget_degraded",
|
|
127
|
+
budgetType,
|
|
128
|
+
id,
|
|
129
|
+
percentUsed: Math.round(percentUsed * 100) / 100,
|
|
130
|
+
suggestedTier: "LOCAL",
|
|
131
|
+
timestamp: alloc.degradedAt,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
this._saveState();
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// never crash main loop
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if the task is allowed to continue.
|
|
142
|
+
* Returns status with recommendation ("continue" | "degrade" | "halt").
|
|
143
|
+
*/
|
|
144
|
+
check(taskId) {
|
|
145
|
+
try {
|
|
146
|
+
this._checkDailyReset();
|
|
147
|
+
const entry = this.activeTasks.get(taskId);
|
|
148
|
+
const relevantAllocs = [];
|
|
149
|
+
// Collect allocations relevant to this task
|
|
150
|
+
const taskAlloc = this.allocations.get(this._key("task", taskId));
|
|
151
|
+
if (taskAlloc)
|
|
152
|
+
relevantAllocs.push(taskAlloc);
|
|
153
|
+
if (entry?.projectId) {
|
|
154
|
+
const pAlloc = this.allocations.get(this._key("project", entry.projectId));
|
|
155
|
+
if (pAlloc)
|
|
156
|
+
relevantAllocs.push(pAlloc);
|
|
157
|
+
}
|
|
158
|
+
const dailyAlloc = this.allocations.get(this._key("daily", this.currentDailyDate));
|
|
159
|
+
if (dailyAlloc)
|
|
160
|
+
relevantAllocs.push(dailyAlloc);
|
|
161
|
+
if (entry?.branchName) {
|
|
162
|
+
const bAlloc = this.allocations.get(this._key("branch", entry.branchName));
|
|
163
|
+
if (bAlloc)
|
|
164
|
+
relevantAllocs.push(bAlloc);
|
|
165
|
+
}
|
|
166
|
+
const haltThreshold = this.policy.haltAtPercent;
|
|
167
|
+
const degradeThreshold = this.policy.degradeAtPercent;
|
|
168
|
+
let isHalted = false;
|
|
169
|
+
let isDegraded = false;
|
|
170
|
+
for (const alloc of relevantAllocs) {
|
|
171
|
+
const percent = alloc.limit > 0 ? (alloc.used / alloc.limit) * 100 : 0;
|
|
172
|
+
if (percent >= haltThreshold)
|
|
173
|
+
isHalted = true;
|
|
174
|
+
if (percent >= degradeThreshold)
|
|
175
|
+
isDegraded = true;
|
|
176
|
+
}
|
|
177
|
+
const recommendation = isHalted
|
|
178
|
+
? "halt"
|
|
179
|
+
: isDegraded
|
|
180
|
+
? "degrade"
|
|
181
|
+
: "continue";
|
|
182
|
+
const status = {
|
|
183
|
+
taskId,
|
|
184
|
+
projectId: entry?.projectId,
|
|
185
|
+
allocations: relevantAllocs,
|
|
186
|
+
isDegraded,
|
|
187
|
+
isHalted,
|
|
188
|
+
recommendation,
|
|
189
|
+
suggestedModelTier: isHalted
|
|
190
|
+
? "LOCAL"
|
|
191
|
+
: isDegraded
|
|
192
|
+
? "LOCAL"
|
|
193
|
+
: undefined,
|
|
194
|
+
};
|
|
195
|
+
this.emit("agent:budget_status", {
|
|
196
|
+
kind: "agent:budget_status",
|
|
197
|
+
taskId,
|
|
198
|
+
recommendation,
|
|
199
|
+
timestamp: nowIso(),
|
|
200
|
+
});
|
|
201
|
+
return status;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// fallback: safe continue
|
|
205
|
+
return {
|
|
206
|
+
taskId,
|
|
207
|
+
allocations: [],
|
|
208
|
+
isDegraded: false,
|
|
209
|
+
isHalted: false,
|
|
210
|
+
recommendation: "continue",
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* End task and finalize its budget tracking.
|
|
216
|
+
*/
|
|
217
|
+
endTask(taskId) {
|
|
218
|
+
try {
|
|
219
|
+
this.activeTasks.delete(taskId);
|
|
220
|
+
this._saveState();
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// never crash main loop
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Reset the daily budget allocation.
|
|
228
|
+
* Call this at day boundary or let it auto-detect via internal checks.
|
|
229
|
+
*/
|
|
230
|
+
resetDaily() {
|
|
231
|
+
try {
|
|
232
|
+
const today = todayUtc();
|
|
233
|
+
this.currentDailyDate = today;
|
|
234
|
+
// Remove old daily allocations and create fresh one
|
|
235
|
+
for (const [key] of this.allocations) {
|
|
236
|
+
if (key.startsWith("daily:")) {
|
|
237
|
+
this.allocations.delete(key);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
this._ensureAllocation("daily", today, this.policy.dailyBudget);
|
|
241
|
+
this._saveState();
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// never crash main loop
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get all current allocations.
|
|
249
|
+
*/
|
|
250
|
+
getAllocations() {
|
|
251
|
+
return Array.from(this.allocations.values());
|
|
252
|
+
}
|
|
253
|
+
// ─── Private Helpers ───
|
|
254
|
+
_key(type, id) {
|
|
255
|
+
return `${type}:${id}`;
|
|
256
|
+
}
|
|
257
|
+
_makeAllocation(type, id, limit) {
|
|
258
|
+
return { type, id, limit, used: 0, remaining: limit };
|
|
259
|
+
}
|
|
260
|
+
_ensureAllocation(type, id, limit) {
|
|
261
|
+
const key = this._key(type, id);
|
|
262
|
+
if (!this.allocations.has(key)) {
|
|
263
|
+
this.allocations.set(key, this._makeAllocation(type, id, limit));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
_defaultLimit(type) {
|
|
267
|
+
switch (type) {
|
|
268
|
+
case "task": return this.policy.taskBudget;
|
|
269
|
+
case "project": return this.policy.projectBudget;
|
|
270
|
+
case "daily": return this.policy.dailyBudget;
|
|
271
|
+
case "branch": return this.policy.branchBudget;
|
|
272
|
+
case "research": return this.policy.researchBudget;
|
|
273
|
+
case "model_tier": return this.policy.taskBudget; // sensible fallback
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/** Auto-detect UTC day rollover and reset daily budget. */
|
|
277
|
+
_checkDailyReset() {
|
|
278
|
+
const today = todayUtc();
|
|
279
|
+
if (today !== this.currentDailyDate) {
|
|
280
|
+
this.resetDaily();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// ─── Atomic Storage ───
|
|
284
|
+
_saveState() {
|
|
285
|
+
try {
|
|
286
|
+
mkdirSync(this.storageDir, { recursive: true });
|
|
287
|
+
const state = {
|
|
288
|
+
allocations: Array.from(this.allocations.values()),
|
|
289
|
+
dailyDate: this.currentDailyDate,
|
|
290
|
+
};
|
|
291
|
+
const tmp = this.storagePath + ".tmp";
|
|
292
|
+
writeFileSync(tmp, JSON.stringify(state, null, 2), "utf-8");
|
|
293
|
+
// Atomic rename on POSIX
|
|
294
|
+
renameSync(tmp, this.storagePath);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// storage failure is non-fatal — in-memory state remains valid
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
_loadState() {
|
|
301
|
+
try {
|
|
302
|
+
const raw = readFileSync(this.storagePath, "utf-8");
|
|
303
|
+
const state = JSON.parse(raw);
|
|
304
|
+
// Restore allocations
|
|
305
|
+
this.allocations = new Map();
|
|
306
|
+
if (Array.isArray(state.allocations)) {
|
|
307
|
+
for (const alloc of state.allocations) {
|
|
308
|
+
if (this._isValidAllocation(alloc)) {
|
|
309
|
+
this.allocations.set(this._key(alloc.type, alloc.id), alloc);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Restore or reset daily date
|
|
314
|
+
if (typeof state.dailyDate === "string") {
|
|
315
|
+
const today = todayUtc();
|
|
316
|
+
if (state.dailyDate === today) {
|
|
317
|
+
this.currentDailyDate = today;
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Day has changed since last run — reset daily
|
|
321
|
+
this.currentDailyDate = today;
|
|
322
|
+
for (const [key] of this.allocations) {
|
|
323
|
+
if (key.startsWith("daily:")) {
|
|
324
|
+
this.allocations.delete(key);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// File doesn't exist or is corrupt — start fresh
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
_isValidAllocation(v) {
|
|
335
|
+
if (typeof v !== "object" || v === null)
|
|
336
|
+
return false;
|
|
337
|
+
const obj = v;
|
|
338
|
+
return (typeof obj["type"] === "string" &&
|
|
339
|
+
typeof obj["id"] === "string" &&
|
|
340
|
+
typeof obj["limit"] === "number" &&
|
|
341
|
+
typeof obj["used"] === "number" &&
|
|
342
|
+
typeof obj["remaining"] === "number");
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=budget-governor-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-governor-v2.js","sourceRoot":"","sources":["../src/budget-governor-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAwDjC,mBAAmB;AAEnB,MAAM,cAAc,GAAiB;IACnC,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,OAAO;IACtB,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,OAAO;IACrB,cAAc,EAAE,MAAM;IACtB,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,GAAG;CACnB,CAAC;AAEF,SAAS,QAAQ;IACf,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;AAC/D,CAAC;AAED,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,2BAA2B;AAE3B,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAC/B,MAAM,CAAe;IACrB,UAAU,CAAS;IACnB,WAAW,CAAS;IAErC,uDAAuD;IAC/C,WAAW,CAAkC;IAErD,8CAA8C;IACtC,WAAW,CAAyB;IAE5C,mDAAmD;IAC3C,gBAAgB,CAAS;IAEjC,YAAY,MAA8B,EAAE,UAAmB;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU;YACb,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,qBAAqB;IAErB;;;OAGG;IACH,SAAS,CAAC,MAAc,EAAE,SAAkB,EAAE,UAAmB;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,MAAM,KAAK,GAAc;gBACvB,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,SAAS,EAAE,MAAM,EAAE;aACpB,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpC,kCAAkC;YAClC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChF,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,MAAc,EAAE,UAAsB,EAAE,EAAU;QAC5D,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,6DAA6D;gBAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC7C,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;YAChC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAExD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7E,MAAM,eAAe,GACnB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAEtD,yBAAyB;YACzB,IAAI,WAAW,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvD,KAAK,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAClC,IAAI,EAAE,wBAAwB;oBAC9B,UAAU;oBACV,EAAE;oBACF,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;oBAChD,SAAS,EAAE,KAAK,CAAC,WAAW;iBAC7B,CAAC,CAAC;YACL,CAAC;YAED,wCAAwC;YACxC,IACE,WAAW,IAAI,gBAAgB;gBAC/B,eAAe,GAAG,gBAAgB;gBAClC,CAAC,KAAK,CAAC,UAAU,EACjB,CAAC;gBACD,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;oBACjC,IAAI,EAAE,uBAAuB;oBAC7B,UAAU;oBACV,EAAE;oBACF,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;oBAChD,aAAa,EAAE,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,UAAU;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,cAAc,GAAyB,EAAE,CAAC;YAEhD,4CAA4C;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,IAAI,SAAS;gBAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CACtC,CAAC;gBACF,IAAI,MAAM;oBAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAC1C,CAAC;YACF,IAAI,UAAU;gBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhD,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CACtC,CAAC;gBACF,IAAI,MAAM;oBAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAEtD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,OAAO,GACX,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,OAAO,IAAI,aAAa;oBAAE,QAAQ,GAAG,IAAI,CAAC;gBAC9C,IAAI,OAAO,IAAI,gBAAgB;oBAAE,UAAU,GAAG,IAAI,CAAC;YACrD,CAAC;YAED,MAAM,cAAc,GAAoC,QAAQ;gBAC9D,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,UAAU,CAAC;YAEf,MAAM,MAAM,GAAmB;gBAC7B,MAAM;gBACN,SAAS,EAAE,KAAK,EAAE,SAAS;gBAC3B,WAAW,EAAE,cAAc;gBAC3B,UAAU;gBACV,QAAQ;gBACR,cAAc;gBACd,kBAAkB,EAAE,QAAQ;oBAC1B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,OAAO;wBACT,CAAC,CAAC,SAAS;aACd,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAC/B,IAAI,EAAE,qBAAqB;gBAC3B,MAAM;gBACN,cAAc;gBACd,SAAS,EAAE,MAAM,EAAE;aACpB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;YAC1B,OAAO;gBACL,MAAM;gBACN,WAAW,EAAE,EAAE;gBACf,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,KAAK;gBACf,cAAc,EAAE,UAAU;aAC3B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAE9B,oDAAoD;YACpD,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,0BAA0B;IAElB,IAAI,CAAC,IAAgB,EAAE,EAAU;QACvC,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe,CACrB,IAAgB,EAChB,EAAU,EACV,KAAa;QAEb,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAEO,iBAAiB,CACvB,IAAgB,EAChB,EAAU,EACV,KAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAgB;QACpC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,CAAO,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACjD,KAAK,SAAS,CAAC,CAAI,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACpD,KAAK,OAAO,CAAC,CAAM,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAClD,KAAK,QAAQ,CAAC,CAAK,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnD,KAAK,UAAU,CAAC,CAAG,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YACrD,KAAK,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB;QACxE,CAAC;IACH,CAAC;IAED,2DAA2D;IACnD,gBAAgB;QACtB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,yBAAyB;IAEjB,UAAU;QAChB,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,KAAK,GAAmB;gBAC5B,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAClD,SAAS,EAAE,IAAI,CAAC,gBAAgB;aACjC,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;YACtC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5D,yBAAyB;YACzB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;YAEhD,sBAAsB;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;wBACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,+CAA+C;oBAC/C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;oBAC9B,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,CAAU;QACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,OAAO,CACL,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ;YAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;YAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ;YAChC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ;YAC/B,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,CACrC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module capability-graph
|
|
3
|
+
* @description Capability Graph — represents tools, skills, playbooks, agents, and evidence
|
|
4
|
+
* as interconnected graph nodes. Enables skill composition, smarter tool selection, and
|
|
5
|
+
* reasoning about what the agent can/cannot do.
|
|
6
|
+
*
|
|
7
|
+
* Storage: ~/.yuan/capability-graph.json
|
|
8
|
+
* Atomic writes (.tmp + renameSync).
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from "node:events";
|
|
11
|
+
export type CapabilityNodeType = "tool" | "skill" | "playbook" | "agent" | "evidence";
|
|
12
|
+
export interface CapabilityNode {
|
|
13
|
+
id: string;
|
|
14
|
+
type: CapabilityNodeType;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
successRate: number;
|
|
18
|
+
usageCount: number;
|
|
19
|
+
tags: string[];
|
|
20
|
+
metadata: Record<string, unknown>;
|
|
21
|
+
addedAt: string;
|
|
22
|
+
}
|
|
23
|
+
export type CapabilityEdgeType = "uses" | "requires" | "produces" | "verified_by" | "learned_from" | "composed_of" | "conflicts_with";
|
|
24
|
+
export interface CapabilityEdge {
|
|
25
|
+
fromId: string;
|
|
26
|
+
toId: string;
|
|
27
|
+
type: CapabilityEdgeType;
|
|
28
|
+
weight: number;
|
|
29
|
+
addedAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CapabilityPath {
|
|
32
|
+
nodes: CapabilityNode[];
|
|
33
|
+
edges: CapabilityEdge[];
|
|
34
|
+
totalWeight: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class CapabilityGraph extends EventEmitter {
|
|
37
|
+
private readonly storageFile;
|
|
38
|
+
private readonly storageDir;
|
|
39
|
+
private nodes;
|
|
40
|
+
private edges;
|
|
41
|
+
constructor(storageDir?: string);
|
|
42
|
+
/**
|
|
43
|
+
* Add or update a node. Emits agent:capability_graph_updated.
|
|
44
|
+
*/
|
|
45
|
+
upsertNode(node: Omit<CapabilityNode, "addedAt"> & {
|
|
46
|
+
addedAt?: string;
|
|
47
|
+
}): void;
|
|
48
|
+
/**
|
|
49
|
+
* Add a directed edge between two nodes.
|
|
50
|
+
* If the edge (fromId, toId, type) already exists, it is replaced.
|
|
51
|
+
*/
|
|
52
|
+
addEdge(fromId: string, toId: string, type: CapabilityEdgeType, weight?: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Find nodes matching the given filter criteria.
|
|
55
|
+
*/
|
|
56
|
+
findNodes(filter: {
|
|
57
|
+
type?: CapabilityNodeType;
|
|
58
|
+
tags?: string[];
|
|
59
|
+
minSuccessRate?: number;
|
|
60
|
+
}): CapabilityNode[];
|
|
61
|
+
/**
|
|
62
|
+
* Get all edges originating from a node, optionally filtered by edge type.
|
|
63
|
+
*/
|
|
64
|
+
getEdges(nodeId: string, edgeType?: CapabilityEdgeType): CapabilityEdge[];
|
|
65
|
+
/**
|
|
66
|
+
* BFS path search between two nodes. Max depth 5. Returns shortest path by hop count.
|
|
67
|
+
*/
|
|
68
|
+
findPath(fromId: string, toId: string): CapabilityPath | null;
|
|
69
|
+
/**
|
|
70
|
+
* Get composed capabilities: all tool/skill nodes reachable from nodes
|
|
71
|
+
* tagged with taskType via "uses" or "composed_of" edges (max depth 3).
|
|
72
|
+
*/
|
|
73
|
+
getComposition(taskType: string): CapabilityNode[];
|
|
74
|
+
/**
|
|
75
|
+
* Update success rate for a node using exponential moving average.
|
|
76
|
+
* newRate = (oldRate * (n-1) + (success ? 1 : 0)) / n
|
|
77
|
+
*/
|
|
78
|
+
recordOutcome(nodeId: string, success: boolean): void;
|
|
79
|
+
/**
|
|
80
|
+
* Export the full graph as a plain JSON object.
|
|
81
|
+
*/
|
|
82
|
+
export(): {
|
|
83
|
+
nodes: CapabilityNode[];
|
|
84
|
+
edges: CapabilityEdge[];
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Import skills from SkillRegistry as graph nodes.
|
|
88
|
+
* Each skill is added as a "skill" type node; existing nodes are updated.
|
|
89
|
+
*/
|
|
90
|
+
importFromSkillRegistry(skills: Array<{
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
taskType: string;
|
|
94
|
+
pattern: string;
|
|
95
|
+
successRate: number;
|
|
96
|
+
usageCount: number;
|
|
97
|
+
}>): void;
|
|
98
|
+
private _load;
|
|
99
|
+
private _populateDefaults;
|
|
100
|
+
private _save;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=capability-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-graph.d.ts","sourceRoot":"","sources":["../src/capability-graph.ts"],"names":[],"mappings":"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"}
|