@yuaone/core 0.9.8 → 0.9.10

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.
Files changed (196) hide show
  1. package/dist/__tests__/context-manager.test.js +5 -9
  2. package/dist/__tests__/context-manager.test.js.map +1 -1
  3. package/dist/agent-coordinator.d.ts +172 -0
  4. package/dist/agent-coordinator.d.ts.map +1 -0
  5. package/dist/agent-coordinator.js +390 -0
  6. package/dist/agent-coordinator.js.map +1 -0
  7. package/dist/agent-loop.d.ts +83 -39
  8. package/dist/agent-loop.d.ts.map +1 -1
  9. package/dist/agent-loop.js +694 -471
  10. package/dist/agent-loop.js.map +1 -1
  11. package/dist/agent-reputation.d.ts +72 -0
  12. package/dist/agent-reputation.d.ts.map +1 -0
  13. package/dist/agent-reputation.js +222 -0
  14. package/dist/agent-reputation.js.map +1 -0
  15. package/dist/arch-summarizer.d.ts +48 -0
  16. package/dist/arch-summarizer.d.ts.map +1 -0
  17. package/dist/arch-summarizer.js +239 -0
  18. package/dist/arch-summarizer.js.map +1 -0
  19. package/dist/autonomous/explicit-planner.d.ts +45 -0
  20. package/dist/autonomous/explicit-planner.d.ts.map +1 -0
  21. package/dist/autonomous/explicit-planner.js +99 -0
  22. package/dist/autonomous/explicit-planner.js.map +1 -0
  23. package/dist/autonomous/incident-debugger.d.ts +78 -0
  24. package/dist/autonomous/incident-debugger.d.ts.map +1 -0
  25. package/dist/autonomous/incident-debugger.js +324 -0
  26. package/dist/autonomous/incident-debugger.js.map +1 -0
  27. package/dist/autonomous/index.d.ts +15 -0
  28. package/dist/autonomous/index.d.ts.map +1 -0
  29. package/dist/autonomous/index.js +10 -0
  30. package/dist/autonomous/index.js.map +1 -0
  31. package/dist/autonomous/patch-tournament.d.ts +82 -0
  32. package/dist/autonomous/patch-tournament.d.ts.map +1 -0
  33. package/dist/autonomous/patch-tournament.js +150 -0
  34. package/dist/autonomous/patch-tournament.js.map +1 -0
  35. package/dist/autonomous/research-agent.d.ts +66 -0
  36. package/dist/autonomous/research-agent.d.ts.map +1 -0
  37. package/dist/autonomous/research-agent.js +210 -0
  38. package/dist/autonomous/research-agent.js.map +1 -0
  39. package/dist/autonomous/task-memory.d.ts +63 -0
  40. package/dist/autonomous/task-memory.d.ts.map +1 -0
  41. package/dist/autonomous/task-memory.js +143 -0
  42. package/dist/autonomous/task-memory.js.map +1 -0
  43. package/dist/budget-governor-v2.d.ts +93 -0
  44. package/dist/budget-governor-v2.d.ts.map +1 -0
  45. package/dist/budget-governor-v2.js +345 -0
  46. package/dist/budget-governor-v2.js.map +1 -0
  47. package/dist/capability-graph.d.ts +102 -0
  48. package/dist/capability-graph.d.ts.map +1 -0
  49. package/dist/capability-graph.js +397 -0
  50. package/dist/capability-graph.js.map +1 -0
  51. package/dist/capability-self-model.d.ts +144 -0
  52. package/dist/capability-self-model.d.ts.map +1 -0
  53. package/dist/capability-self-model.js +312 -0
  54. package/dist/capability-self-model.js.map +1 -0
  55. package/dist/checkpoint-manager.d.ts +94 -0
  56. package/dist/checkpoint-manager.d.ts.map +1 -0
  57. package/dist/checkpoint-manager.js +225 -0
  58. package/dist/checkpoint-manager.js.map +1 -0
  59. package/dist/continuation-engine.js +1 -1
  60. package/dist/continuation-engine.js.map +1 -1
  61. package/dist/dag-orchestrator.d.ts +0 -3
  62. package/dist/dag-orchestrator.d.ts.map +1 -1
  63. package/dist/dag-orchestrator.js +0 -1
  64. package/dist/dag-orchestrator.js.map +1 -1
  65. package/dist/evidence-chain.d.ts +99 -0
  66. package/dist/evidence-chain.d.ts.map +1 -0
  67. package/dist/evidence-chain.js +200 -0
  68. package/dist/evidence-chain.js.map +1 -0
  69. package/dist/execution-engine.d.ts.map +1 -1
  70. package/dist/execution-engine.js +0 -1
  71. package/dist/execution-engine.js.map +1 -1
  72. package/dist/failure-signature-memory.d.ts +61 -0
  73. package/dist/failure-signature-memory.d.ts.map +1 -0
  74. package/dist/failure-signature-memory.js +278 -0
  75. package/dist/failure-signature-memory.js.map +1 -0
  76. package/dist/index.d.ts +52 -5
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +48 -7
  79. package/dist/index.js.map +1 -1
  80. package/dist/language-detector.d.ts.map +1 -1
  81. package/dist/language-detector.js +122 -43
  82. package/dist/language-detector.js.map +1 -1
  83. package/dist/llm-client.d.ts +0 -7
  84. package/dist/llm-client.d.ts.map +1 -1
  85. package/dist/llm-client.js +29 -113
  86. package/dist/llm-client.js.map +1 -1
  87. package/dist/mcp-client.js +1 -1
  88. package/dist/mcp-client.js.map +1 -1
  89. package/dist/memory.d.ts.map +1 -1
  90. package/dist/memory.js +0 -15
  91. package/dist/memory.js.map +1 -1
  92. package/dist/meta-learning-collector.d.ts +64 -0
  93. package/dist/meta-learning-collector.d.ts.map +1 -0
  94. package/dist/meta-learning-collector.js +169 -0
  95. package/dist/meta-learning-collector.js.map +1 -0
  96. package/dist/meta-learning-engine.d.ts +61 -0
  97. package/dist/meta-learning-engine.d.ts.map +1 -0
  98. package/dist/meta-learning-engine.js +250 -0
  99. package/dist/meta-learning-engine.js.map +1 -0
  100. package/dist/overhead-governor.d.ts +105 -0
  101. package/dist/overhead-governor.d.ts.map +1 -0
  102. package/dist/overhead-governor.js +239 -0
  103. package/dist/overhead-governor.js.map +1 -0
  104. package/dist/playbook-library.d.ts +75 -0
  105. package/dist/playbook-library.d.ts.map +1 -0
  106. package/dist/playbook-library.js +241 -0
  107. package/dist/playbook-library.js.map +1 -0
  108. package/dist/project-executive.d.ts +97 -0
  109. package/dist/project-executive.d.ts.map +1 -0
  110. package/dist/project-executive.js +223 -0
  111. package/dist/project-executive.js.map +1 -0
  112. package/dist/reasoning-adapter.d.ts.map +1 -1
  113. package/dist/reasoning-adapter.js +11 -36
  114. package/dist/reasoning-adapter.js.map +1 -1
  115. package/dist/research-loop.d.ts +79 -0
  116. package/dist/research-loop.d.ts.map +1 -0
  117. package/dist/research-loop.js +363 -0
  118. package/dist/research-loop.js.map +1 -0
  119. package/dist/resolve-memory-path.d.ts +32 -0
  120. package/dist/resolve-memory-path.d.ts.map +1 -0
  121. package/dist/resolve-memory-path.js +97 -0
  122. package/dist/resolve-memory-path.js.map +1 -0
  123. package/dist/safe-bounds.d.ts +101 -0
  124. package/dist/safe-bounds.d.ts.map +1 -0
  125. package/dist/safe-bounds.js +140 -0
  126. package/dist/safe-bounds.js.map +1 -0
  127. package/dist/sandbox-tiers.d.ts +5 -0
  128. package/dist/sandbox-tiers.d.ts.map +1 -1
  129. package/dist/sandbox-tiers.js +14 -6
  130. package/dist/sandbox-tiers.js.map +1 -1
  131. package/dist/security.d.ts.map +1 -1
  132. package/dist/security.js +3 -0
  133. package/dist/security.js.map +1 -1
  134. package/dist/self-improvement-loop.d.ts +64 -0
  135. package/dist/self-improvement-loop.d.ts.map +1 -0
  136. package/dist/self-improvement-loop.js +156 -0
  137. package/dist/self-improvement-loop.js.map +1 -0
  138. package/dist/session-persistence.d.ts +5 -0
  139. package/dist/session-persistence.d.ts.map +1 -1
  140. package/dist/session-persistence.js +19 -3
  141. package/dist/session-persistence.js.map +1 -1
  142. package/dist/skill-loader.d.ts +16 -9
  143. package/dist/skill-loader.d.ts.map +1 -1
  144. package/dist/skill-loader.js +52 -116
  145. package/dist/skill-loader.js.map +1 -1
  146. package/dist/skill-registry.d.ts +60 -0
  147. package/dist/skill-registry.d.ts.map +1 -0
  148. package/dist/skill-registry.js +162 -0
  149. package/dist/skill-registry.js.map +1 -0
  150. package/dist/stall-detector.d.ts +56 -0
  151. package/dist/stall-detector.d.ts.map +1 -0
  152. package/dist/stall-detector.js +142 -0
  153. package/dist/stall-detector.js.map +1 -0
  154. package/dist/strategy-learner.d.ts +57 -0
  155. package/dist/strategy-learner.d.ts.map +1 -0
  156. package/dist/strategy-learner.js +160 -0
  157. package/dist/strategy-learner.js.map +1 -0
  158. package/dist/strategy-market.d.ts +73 -0
  159. package/dist/strategy-market.d.ts.map +1 -0
  160. package/dist/strategy-market.js +200 -0
  161. package/dist/strategy-market.js.map +1 -0
  162. package/dist/sub-agent.d.ts +0 -3
  163. package/dist/sub-agent.d.ts.map +1 -1
  164. package/dist/sub-agent.js +0 -10
  165. package/dist/sub-agent.js.map +1 -1
  166. package/dist/system-prompt.d.ts +0 -2
  167. package/dist/system-prompt.d.ts.map +1 -1
  168. package/dist/system-prompt.js +97 -490
  169. package/dist/system-prompt.js.map +1 -1
  170. package/dist/task-classifier.d.ts.map +1 -1
  171. package/dist/task-classifier.js +2 -54
  172. package/dist/task-classifier.js.map +1 -1
  173. package/dist/tool-synthesizer.d.ts +149 -0
  174. package/dist/tool-synthesizer.d.ts.map +1 -0
  175. package/dist/tool-synthesizer.js +455 -0
  176. package/dist/tool-synthesizer.js.map +1 -0
  177. package/dist/trace-pattern-extractor.d.ts +76 -0
  178. package/dist/trace-pattern-extractor.d.ts.map +1 -0
  179. package/dist/trace-pattern-extractor.js +321 -0
  180. package/dist/trace-pattern-extractor.js.map +1 -0
  181. package/dist/trace-recorder.d.ts +38 -0
  182. package/dist/trace-recorder.d.ts.map +1 -0
  183. package/dist/trace-recorder.js +94 -0
  184. package/dist/trace-recorder.js.map +1 -0
  185. package/dist/trust-economics.d.ts +50 -0
  186. package/dist/trust-economics.d.ts.map +1 -0
  187. package/dist/trust-economics.js +148 -0
  188. package/dist/trust-economics.js.map +1 -0
  189. package/dist/types.d.ts +273 -4
  190. package/dist/types.d.ts.map +1 -1
  191. package/dist/types.js.map +1 -1
  192. package/dist/yuan-md-loader.d.ts +22 -0
  193. package/dist/yuan-md-loader.d.ts.map +1 -0
  194. package/dist/yuan-md-loader.js +75 -0
  195. package/dist/yuan-md-loader.js.map +1 -0
  196. 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":"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"}
@@ -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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"}