@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,72 @@
1
+ /**
2
+ * @module agent-reputation
3
+ * @description Agent Reputation / Trust Layer for role agents.
4
+ * Tracks performance of specialized role agents and enables AgentCoordinator
5
+ * to route tasks to the best-performing agent for each context.
6
+ *
7
+ * Storage: ~/.yuan/reputation/agent-reputation.json
8
+ *
9
+ * Wilson score lower bound (95% CI) is used as reputationScore for robustness
10
+ * against small sample sizes.
11
+ */
12
+ import { EventEmitter } from "node:events";
13
+ export type RoleAgentType = "planner" | "researcher" | "coder" | "reviewer" | "verifier" | "incident";
14
+ export interface AgentPerformanceRecord {
15
+ agentType: RoleAgentType;
16
+ taskType: string;
17
+ environment?: string;
18
+ successes: number;
19
+ failures: number;
20
+ avgLatencyMs: number;
21
+ avgTokenCost: number;
22
+ /** Wilson score confidence interval lower bound — robust to small samples. 0..1 */
23
+ reputationScore: number;
24
+ lastUpdated: string;
25
+ }
26
+ export interface RoutingRecommendation {
27
+ taskType: string;
28
+ environment?: string;
29
+ recommended: RoleAgentType;
30
+ score: number;
31
+ alternatives: Array<{
32
+ agentType: RoleAgentType;
33
+ score: number;
34
+ }>;
35
+ reason: string;
36
+ }
37
+ export declare class AgentReputation extends EventEmitter {
38
+ private readonly storageFile;
39
+ private records;
40
+ constructor(storageDir?: string);
41
+ /**
42
+ * Record a task outcome for a role agent.
43
+ * Updates avgLatencyMs, avgTokenCost, and reputationScore (Wilson lower bound).
44
+ */
45
+ record(agentType: RoleAgentType, taskType: string, outcome: {
46
+ success: boolean;
47
+ latencyMs: number;
48
+ tokenCost: number;
49
+ environment?: string;
50
+ }): void;
51
+ /**
52
+ * Get routing recommendation for a task type (and optional environment).
53
+ * Sorts candidates by Wilson score. Falls back to default routing if no data.
54
+ */
55
+ recommend(taskType: string, environment?: string): RoutingRecommendation;
56
+ /**
57
+ * Get all performance records for a given agent type.
58
+ */
59
+ getRecords(agentType: RoleAgentType): AgentPerformanceRecord[];
60
+ /**
61
+ * Get a summary of average reputation scores and total task counts per agent type.
62
+ */
63
+ getSummary(): Record<RoleAgentType, {
64
+ avgScore: number;
65
+ totalTasks: number;
66
+ }>;
67
+ private _key;
68
+ private _keyOf;
69
+ private _load;
70
+ private _save;
71
+ }
72
+ //# sourceMappingURL=agent-reputation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-reputation.d.ts","sourceRoot":"","sources":["../src/agent-reputation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,YAAY,GACZ,OAAO,GACP,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,aAAa,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AA0DD,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAA2B;gBAE9B,UAAU,CAAC,EAAE,MAAM;IAS/B;;;OAGG;IACH,MAAM,CACJ,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,IAAI;IAgDP;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAmDxE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,aAAa,GAAG,sBAAsB,EAAE;IAI9D;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB7E,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,KAAK;CAUd"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * @module agent-reputation
3
+ * @description Agent Reputation / Trust Layer for role agents.
4
+ * Tracks performance of specialized role agents and enables AgentCoordinator
5
+ * to route tasks to the best-performing agent for each context.
6
+ *
7
+ * Storage: ~/.yuan/reputation/agent-reputation.json
8
+ *
9
+ * Wilson score lower bound (95% CI) is used as reputationScore for robustness
10
+ * against small sample sizes.
11
+ */
12
+ import { EventEmitter } from "node:events";
13
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ import { join } from "node:path";
16
+ // ─── Helpers ───
17
+ const Z = 1.96; // 95% confidence interval
18
+ /**
19
+ * Wilson score lower bound (confidence-correct success rate).
20
+ * Falls back to 0.5 when n < 3 (insufficient data).
21
+ */
22
+ function wilsonLowerBound(successes, failures) {
23
+ const n = successes + failures;
24
+ if (n < 3)
25
+ return 0.5;
26
+ const p = successes / n;
27
+ const z2 = Z * Z;
28
+ const numerator = p + z2 / (2 * n) - Z * Math.sqrt((p * (1 - p)) / n + z2 / (4 * n * n));
29
+ const denominator = 1 + z2 / n;
30
+ return Math.max(0, Math.min(1, numerator / denominator));
31
+ }
32
+ /**
33
+ * Running average helper: update avg with a new value given prior count.
34
+ */
35
+ function updatedAvg(currentAvg, currentCount, newValue) {
36
+ return (currentAvg * currentCount + newValue) / (currentCount + 1);
37
+ }
38
+ /**
39
+ * Default agent routing when no performance data exists.
40
+ */
41
+ function defaultAgent(taskType) {
42
+ const lower = taskType.toLowerCase();
43
+ if (lower === "bugfix" || lower === "feature" || lower === "refactor")
44
+ return "coder";
45
+ if (lower === "research" || lower === "analysis")
46
+ return "researcher";
47
+ if (lower === "review" || lower === "qa")
48
+ return "reviewer";
49
+ if (lower === "incident" || lower === "debug")
50
+ return "incident";
51
+ if (lower === "plan" || lower === "design")
52
+ return "planner";
53
+ return "coder";
54
+ }
55
+ const ALL_AGENT_TYPES = [
56
+ "planner",
57
+ "researcher",
58
+ "coder",
59
+ "reviewer",
60
+ "verifier",
61
+ "incident",
62
+ ];
63
+ // ─── Class ───
64
+ export class AgentReputation extends EventEmitter {
65
+ storageFile;
66
+ records;
67
+ constructor(storageDir) {
68
+ super();
69
+ const dir = storageDir ?? join(homedir(), ".yuan", "reputation");
70
+ this.storageFile = join(dir, "agent-reputation.json");
71
+ this.records = this._load(dir);
72
+ }
73
+ // ─── Public API ───
74
+ /**
75
+ * Record a task outcome for a role agent.
76
+ * Updates avgLatencyMs, avgTokenCost, and reputationScore (Wilson lower bound).
77
+ */
78
+ record(agentType, taskType, outcome) {
79
+ const now = new Date().toISOString();
80
+ const key = this._key(agentType, taskType, outcome.environment);
81
+ let existing = this.records.find((r) => this._keyOf(r) === key);
82
+ if (!existing) {
83
+ existing = {
84
+ agentType,
85
+ taskType,
86
+ environment: outcome.environment,
87
+ successes: 0,
88
+ failures: 0,
89
+ avgLatencyMs: 0,
90
+ avgTokenCost: 0,
91
+ reputationScore: 0.5,
92
+ lastUpdated: now,
93
+ };
94
+ this.records.push(existing);
95
+ }
96
+ const prevCount = existing.successes + existing.failures;
97
+ // Update running averages
98
+ existing.avgLatencyMs = updatedAvg(existing.avgLatencyMs, prevCount, outcome.latencyMs);
99
+ existing.avgTokenCost = updatedAvg(existing.avgTokenCost, prevCount, outcome.tokenCost);
100
+ if (outcome.success) {
101
+ existing.successes += 1;
102
+ }
103
+ else {
104
+ existing.failures += 1;
105
+ }
106
+ existing.reputationScore = wilsonLowerBound(existing.successes, existing.failures);
107
+ existing.lastUpdated = now;
108
+ this._save();
109
+ this.emit("agent:reputation_updated", {
110
+ kind: "agent:reputation_updated",
111
+ agentType,
112
+ taskType,
113
+ reputationScore: existing.reputationScore,
114
+ successes: existing.successes,
115
+ failures: existing.failures,
116
+ timestamp: Date.now(),
117
+ });
118
+ }
119
+ /**
120
+ * Get routing recommendation for a task type (and optional environment).
121
+ * Sorts candidates by Wilson score. Falls back to default routing if no data.
122
+ */
123
+ recommend(taskType, environment) {
124
+ // Collect records matching taskType (exact match, env-aware)
125
+ const candidates = this.records.filter((r) => r.taskType === taskType &&
126
+ (environment === undefined || r.environment === environment || r.environment === undefined));
127
+ if (candidates.length === 0) {
128
+ // No data — use default routing
129
+ const recommended = defaultAgent(taskType);
130
+ return {
131
+ taskType,
132
+ environment,
133
+ recommended,
134
+ score: 0.5,
135
+ alternatives: ALL_AGENT_TYPES.filter((t) => t !== recommended).map((agentType) => ({
136
+ agentType,
137
+ score: 0.5,
138
+ })),
139
+ reason: `No performance data for task "${taskType}". Using default routing.`,
140
+ };
141
+ }
142
+ // Aggregate by agentType (pick best record per agent if multiple envs match)
143
+ const agentBestScore = new Map();
144
+ for (const c of candidates) {
145
+ const current = agentBestScore.get(c.agentType) ?? -1;
146
+ if (c.reputationScore > current) {
147
+ agentBestScore.set(c.agentType, c.reputationScore);
148
+ }
149
+ }
150
+ // Sort descending by score
151
+ const sorted = Array.from(agentBestScore.entries()).sort((a, b) => b[1] - a[1]);
152
+ const [topAgent, topScore] = sorted[0];
153
+ const alternatives = sorted.slice(1).map(([agentType, score]) => ({ agentType, score }));
154
+ const total = candidates.reduce((s, r) => s + r.successes + r.failures, 0);
155
+ return {
156
+ taskType,
157
+ environment,
158
+ recommended: topAgent,
159
+ score: topScore,
160
+ alternatives,
161
+ reason: `Based on ${total} recorded tasks. ${topAgent} leads with Wilson score ${topScore.toFixed(3)}.`,
162
+ };
163
+ }
164
+ /**
165
+ * Get all performance records for a given agent type.
166
+ */
167
+ getRecords(agentType) {
168
+ return this.records.filter((r) => r.agentType === agentType);
169
+ }
170
+ /**
171
+ * Get a summary of average reputation scores and total task counts per agent type.
172
+ */
173
+ getSummary() {
174
+ const result = {};
175
+ for (const agentType of ALL_AGENT_TYPES) {
176
+ const recs = this.records.filter((r) => r.agentType === agentType);
177
+ if (recs.length === 0) {
178
+ result[agentType] = { avgScore: 0.5, totalTasks: 0 };
179
+ }
180
+ else {
181
+ const totalTasks = recs.reduce((s, r) => s + r.successes + r.failures, 0);
182
+ const avgScore = recs.reduce((s, r) => s + r.reputationScore, 0) / recs.length;
183
+ result[agentType] = { avgScore, totalTasks };
184
+ }
185
+ }
186
+ return result;
187
+ }
188
+ // ─── Internal ───
189
+ _key(agentType, taskType, environment) {
190
+ return `${agentType}::${taskType}::${environment ?? ""}`;
191
+ }
192
+ _keyOf(record) {
193
+ return this._key(record.agentType, record.taskType, record.environment);
194
+ }
195
+ _load(storageDir) {
196
+ try {
197
+ if (!existsSync(storageDir)) {
198
+ mkdirSync(storageDir, { recursive: true });
199
+ }
200
+ if (!existsSync(this.storageFile))
201
+ return [];
202
+ const raw = readFileSync(this.storageFile, "utf8");
203
+ const parsed = JSON.parse(raw);
204
+ return Array.isArray(parsed.records) ? parsed.records : [];
205
+ }
206
+ catch {
207
+ return [];
208
+ }
209
+ }
210
+ _save() {
211
+ const tmpFile = `${this.storageFile}.tmp`;
212
+ try {
213
+ const data = { records: this.records };
214
+ writeFileSync(tmpFile, JSON.stringify(data, null, 2), "utf8");
215
+ renameSync(tmpFile, this.storageFile);
216
+ }
217
+ catch {
218
+ // Non-fatal: storage failures should not crash the agent loop
219
+ }
220
+ }
221
+ }
222
+ //# sourceMappingURL=agent-reputation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-reputation.js","sourceRoot":"","sources":["../src/agent-reputation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @module arch-summarizer
3
+ * @description Architecture Auto-Summarizer.
4
+ *
5
+ * Scans the project and generates a concise architecture summary cached at
6
+ * `.yuan/cache/arch-summary.md`. Refreshes when dependency graph changes
7
+ * (detected via mtime of package.json / tsconfig.json) or when explicitly
8
+ * called after a major refactor.
9
+ *
10
+ * Design constraints:
11
+ * - Runs async, never blocks main loop
12
+ * - Uses only local file system — no LLM calls
13
+ * - Cache TTL: 24 hours + invalidated by package.json/tsconfig mtime change
14
+ */
15
+ export declare class ArchSummarizer {
16
+ private readonly projectPath;
17
+ private readonly cacheDir;
18
+ private readonly cachePath;
19
+ constructor(projectPath: string, cacheBase?: string);
20
+ /** Path to the cached summary file */
21
+ get path(): string;
22
+ /**
23
+ * Returns cached summary if fresh, otherwise regenerates.
24
+ * Never throws — returns empty string on failure.
25
+ */
26
+ getSummary(): Promise<string>;
27
+ /**
28
+ * Force-regenerate the summary and update cache.
29
+ * Safe to call after a dependency graph change.
30
+ */
31
+ regenerate(): Promise<string>;
32
+ /**
33
+ * Check if a dependency-graph-relevant file changed since last cache.
34
+ * Lightweight mtime check — no file reading.
35
+ */
36
+ isDirty(): boolean;
37
+ private loadCache;
38
+ private isFresh;
39
+ private getMtime;
40
+ private buildSummary;
41
+ private saveCache;
42
+ private fileExists;
43
+ private depExists;
44
+ private devDepExists;
45
+ private listDirs;
46
+ private countSourceFiles;
47
+ }
48
+ //# sourceMappingURL=arch-summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arch-summarizer.d.ts","sourceRoot":"","sources":["../src/arch-summarizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA6BH,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGhB,WAAW,EAAE,MAAM,EACpC,SAAS,CAAC,EAAE,MAAM;IAMpB,sCAAsC;IACtC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAYnC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAUnC;;;OAGG;IACH,OAAO,IAAI,OAAO;IAYlB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,QAAQ;YAQF,YAAY;IAoF1B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * @module arch-summarizer
3
+ * @description Architecture Auto-Summarizer.
4
+ *
5
+ * Scans the project and generates a concise architecture summary cached at
6
+ * `.yuan/cache/arch-summary.md`. Refreshes when dependency graph changes
7
+ * (detected via mtime of package.json / tsconfig.json) or when explicitly
8
+ * called after a major refactor.
9
+ *
10
+ * Design constraints:
11
+ * - Runs async, never blocks main loop
12
+ * - Uses only local file system — no LLM calls
13
+ * - Cache TTL: 24 hours + invalidated by package.json/tsconfig mtime change
14
+ */
15
+ import { mkdirSync, writeFileSync, readFileSync, statSync } from "node:fs";
16
+ import { join, extname } from "node:path";
17
+ import { homedir } from "node:os";
18
+ import { readdirSync } from "node:fs";
19
+ const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24h
20
+ export class ArchSummarizer {
21
+ projectPath;
22
+ cacheDir;
23
+ cachePath;
24
+ constructor(projectPath, cacheBase) {
25
+ this.projectPath = projectPath;
26
+ this.cacheDir = cacheBase ?? join(homedir(), ".yuan", "cache");
27
+ this.cachePath = join(this.cacheDir, "arch-summary.md");
28
+ }
29
+ /** Path to the cached summary file */
30
+ get path() {
31
+ return this.cachePath;
32
+ }
33
+ /**
34
+ * Returns cached summary if fresh, otherwise regenerates.
35
+ * Never throws — returns empty string on failure.
36
+ */
37
+ async getSummary() {
38
+ try {
39
+ const cached = this.loadCache();
40
+ if (cached && this.isFresh(cached)) {
41
+ return cached.content;
42
+ }
43
+ return await this.regenerate();
44
+ }
45
+ catch {
46
+ return "";
47
+ }
48
+ }
49
+ /**
50
+ * Force-regenerate the summary and update cache.
51
+ * Safe to call after a dependency graph change.
52
+ */
53
+ async regenerate() {
54
+ try {
55
+ const summary = await this.buildSummary();
56
+ this.saveCache(summary);
57
+ return summary;
58
+ }
59
+ catch {
60
+ return "";
61
+ }
62
+ }
63
+ /**
64
+ * Check if a dependency-graph-relevant file changed since last cache.
65
+ * Lightweight mtime check — no file reading.
66
+ */
67
+ isDirty() {
68
+ try {
69
+ const cached = this.loadCache();
70
+ if (!cached)
71
+ return true;
72
+ return !this.isFresh(cached);
73
+ }
74
+ catch {
75
+ return true;
76
+ }
77
+ }
78
+ // ─── private ───────────────────────────────────────────────────────────────
79
+ loadCache() {
80
+ try {
81
+ const raw = readFileSync(this.cachePath, "utf-8");
82
+ // Cache header is a JSON comment at the top: <!-- CACHE:{...} -->
83
+ const match = raw.match(/^<!-- CACHE:(.*?) -->/);
84
+ if (!match)
85
+ return null;
86
+ const meta = JSON.parse(match[1]);
87
+ meta.content = raw.replace(/^<!-- CACHE:.*? -->\n/, "");
88
+ return meta;
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ isFresh(cache) {
95
+ const age = Date.now() - new Date(cache.generatedAt).getTime();
96
+ if (age > CACHE_TTL_MS)
97
+ return false;
98
+ const pkgMtime = this.getMtime(join(this.projectPath, "package.json"));
99
+ const tscMtime = this.getMtime(join(this.projectPath, "tsconfig.json"));
100
+ return pkgMtime === cache.packageJsonMtime && tscMtime === cache.tsconfigMtime;
101
+ }
102
+ getMtime(filePath) {
103
+ try {
104
+ return statSync(filePath).mtimeMs;
105
+ }
106
+ catch {
107
+ return 0;
108
+ }
109
+ }
110
+ async buildSummary() {
111
+ const projectPath = this.projectPath;
112
+ // 1. Read package.json
113
+ let pkg = {};
114
+ try {
115
+ pkg = JSON.parse(readFileSync(join(projectPath, "package.json"), "utf-8"));
116
+ }
117
+ catch { /* ok */ }
118
+ // 2. Detect project type
119
+ const isMonorepo = this.fileExists(join(projectPath, "pnpm-workspace.yaml"))
120
+ || this.fileExists(join(projectPath, "lerna.json"))
121
+ || this.fileExists(join(projectPath, "turbo.json"));
122
+ const hasNextJs = this.depExists(pkg, "next");
123
+ const hasReact = this.depExists(pkg, "react");
124
+ const hasExpress = this.depExists(pkg, "express") || this.depExists(pkg, "fastify") || this.depExists(pkg, "hono");
125
+ const hasTypeScript = this.devDepExists(pkg, "typescript") || this.fileExists(join(projectPath, "tsconfig.json"));
126
+ const hasPrisma = this.depExists(pkg, "@prisma/client") || this.fileExists(join(projectPath, "prisma/schema.prisma"));
127
+ const hasVite = this.devDepExists(pkg, "vite");
128
+ // 3. Collect top-level dirs
129
+ const topDirs = this.listDirs(projectPath).slice(0, 20);
130
+ // 4. Count source files
131
+ const srcFileCount = this.countSourceFiles(projectPath, 3);
132
+ // 5. Key scripts
133
+ const scripts = Object.keys(pkg.scripts ?? {}).slice(0, 10);
134
+ // 6. Build summary
135
+ const lines = [
136
+ `# Architecture Summary`,
137
+ ``,
138
+ `**Project:** ${pkg.name ?? "unknown"} ${pkg.version ? `v${pkg.version}` : ""}`,
139
+ pkg.description ? `**Description:** ${pkg.description}` : "",
140
+ ``,
141
+ `## Stack`,
142
+ ``,
143
+ ];
144
+ const stackItems = [];
145
+ if (isMonorepo)
146
+ stackItems.push("Monorepo (pnpm workspace)");
147
+ if (hasTypeScript)
148
+ stackItems.push("TypeScript");
149
+ if (hasNextJs)
150
+ stackItems.push("Next.js");
151
+ if (hasReact && !hasNextJs)
152
+ stackItems.push("React");
153
+ if (hasVite)
154
+ stackItems.push("Vite");
155
+ if (hasExpress)
156
+ stackItems.push("Node.js backend (Express/Fastify/Hono)");
157
+ if (hasPrisma)
158
+ stackItems.push("Prisma ORM");
159
+ for (const item of stackItems) {
160
+ lines.push(`- ${item}`);
161
+ }
162
+ lines.push(``, `## Structure`, ``);
163
+ lines.push(`\`\`\``);
164
+ for (const dir of topDirs) {
165
+ lines.push(`${dir}/`);
166
+ }
167
+ lines.push(`\`\`\``);
168
+ lines.push(``, `## Stats`, ``, `- Source files: ~${srcFileCount}`, `- Scripts: ${scripts.join(", ")}`, ``, `## Key Dependencies`, ``);
169
+ const allDeps = [
170
+ ...Object.keys(pkg.dependencies ?? {}),
171
+ ...Object.keys(pkg.devDependencies ?? {}),
172
+ ].filter(d => !d.startsWith("@types/")).slice(0, 20);
173
+ for (const dep of allDeps) {
174
+ lines.push(`- \`${dep}\``);
175
+ }
176
+ return lines.filter(l => l !== "").join("\n") + "\n";
177
+ }
178
+ saveCache(content) {
179
+ try {
180
+ mkdirSync(this.cacheDir, { recursive: true });
181
+ const meta = {
182
+ generatedAt: new Date().toISOString(),
183
+ packageJsonMtime: this.getMtime(join(this.projectPath, "package.json")),
184
+ tsconfigMtime: this.getMtime(join(this.projectPath, "tsconfig.json")),
185
+ };
186
+ const header = `<!-- CACHE:${JSON.stringify(meta)} -->\n`;
187
+ writeFileSync(this.cachePath, header + content, "utf-8");
188
+ }
189
+ catch { /* non-fatal */ }
190
+ }
191
+ fileExists(p) {
192
+ try {
193
+ statSync(p);
194
+ return true;
195
+ }
196
+ catch {
197
+ return false;
198
+ }
199
+ }
200
+ depExists(pkg, name) {
201
+ return name in (pkg.dependencies ?? {});
202
+ }
203
+ devDepExists(pkg, name) {
204
+ return name in (pkg.devDependencies ?? {});
205
+ }
206
+ listDirs(dir) {
207
+ try {
208
+ return readdirSync(dir, { withFileTypes: true })
209
+ .filter(e => e.isDirectory() && !e.name.startsWith(".") && e.name !== "node_modules")
210
+ .map(e => e.name)
211
+ .sort();
212
+ }
213
+ catch {
214
+ return [];
215
+ }
216
+ }
217
+ countSourceFiles(dir, maxDepth) {
218
+ const SRC_EXTS = new Set([".ts", ".tsx", ".js", ".jsx", ".mts", ".cts", ".mjs", ".py", ".go", ".rs", ".java"]);
219
+ let count = 0;
220
+ const walk = (d, depth) => {
221
+ if (depth > maxDepth)
222
+ return;
223
+ try {
224
+ for (const entry of readdirSync(d, { withFileTypes: true })) {
225
+ if (entry.name.startsWith(".") || entry.name === "node_modules" || entry.name === "dist")
226
+ continue;
227
+ if (entry.isDirectory())
228
+ walk(join(d, entry.name), depth + 1);
229
+ else if (SRC_EXTS.has(extname(entry.name)))
230
+ count++;
231
+ }
232
+ }
233
+ catch { /* skip unreadable dirs */ }
234
+ };
235
+ walk(dir, 0);
236
+ return count;
237
+ }
238
+ }
239
+ //# sourceMappingURL=arch-summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arch-summarizer.js","sourceRoot":"","sources":["../src/arch-summarizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @module autonomous/explicit-planner
3
+ * @description ExplicitPlanningEngine — generates an explicit numbered plan before coding
4
+ * and persists it to .yuan/tasks/<taskId>/plan.json.
5
+ *
6
+ * Wraps HierarchicalPlanner: uses its TacticalTask list as plan steps,
7
+ * adds task-level persistence and event emission.
8
+ */
9
+ import { EventEmitter } from "node:events";
10
+ import { type HierarchicalPlannerConfig } from "../hierarchical-planner.js";
11
+ import type { BYOKClient } from "../llm-client.js";
12
+ export interface AutonomousPlanStep {
13
+ index: number;
14
+ description: string;
15
+ /** 0-based indices of steps this depends on */
16
+ dependsOn: number[];
17
+ /** Files to be modified */
18
+ targetFiles?: string[];
19
+ }
20
+ export interface ExplicitPlan {
21
+ taskId: string;
22
+ goal: string;
23
+ steps: AutonomousPlanStep[];
24
+ /** ISO timestamp */
25
+ createdAt: string;
26
+ /** Path to this plan file */
27
+ storedAt: string;
28
+ }
29
+ export interface ExplicitPlannerConfig {
30
+ plannerConfig?: Partial<HierarchicalPlannerConfig>;
31
+ tasksDir?: string;
32
+ projectPath?: string;
33
+ }
34
+ export declare class ExplicitPlanningEngine extends EventEmitter {
35
+ private readonly tasksDir;
36
+ private readonly projectPath;
37
+ constructor(config?: ExplicitPlannerConfig);
38
+ /**
39
+ * Generate an explicit plan for a goal using HierarchicalPlanner.
40
+ * Persists to .yuan/tasks/<taskId>/plan.json and emits agent:plan_generated.
41
+ */
42
+ plan(goal: string, llmClient: BYOKClient, taskId?: string, context?: string): Promise<ExplicitPlan>;
43
+ private emitPlanGenerated;
44
+ }
45
+ //# sourceMappingURL=explicit-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explicit-planner.d.ts","sourceRoot":"","sources":["../../src/autonomous/explicit-planner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,GAAE,qBAA0B;IAO9C;;;OAGG;IACG,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC;IA6DxB,OAAO,CAAC,iBAAiB;CAc1B"}