@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.
Files changed (193) 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 -29
  8. package/dist/agent-loop.d.ts.map +1 -1
  9. package/dist/agent-loop.js +697 -335
  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 +15 -122
  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/research-loop.d.ts +79 -0
  113. package/dist/research-loop.d.ts.map +1 -0
  114. package/dist/research-loop.js +363 -0
  115. package/dist/research-loop.js.map +1 -0
  116. package/dist/resolve-memory-path.d.ts +32 -0
  117. package/dist/resolve-memory-path.d.ts.map +1 -0
  118. package/dist/resolve-memory-path.js +97 -0
  119. package/dist/resolve-memory-path.js.map +1 -0
  120. package/dist/safe-bounds.d.ts +101 -0
  121. package/dist/safe-bounds.d.ts.map +1 -0
  122. package/dist/safe-bounds.js +140 -0
  123. package/dist/safe-bounds.js.map +1 -0
  124. package/dist/sandbox-tiers.d.ts +5 -0
  125. package/dist/sandbox-tiers.d.ts.map +1 -1
  126. package/dist/sandbox-tiers.js +14 -6
  127. package/dist/sandbox-tiers.js.map +1 -1
  128. package/dist/security.d.ts.map +1 -1
  129. package/dist/security.js +3 -0
  130. package/dist/security.js.map +1 -1
  131. package/dist/self-improvement-loop.d.ts +64 -0
  132. package/dist/self-improvement-loop.d.ts.map +1 -0
  133. package/dist/self-improvement-loop.js +156 -0
  134. package/dist/self-improvement-loop.js.map +1 -0
  135. package/dist/session-persistence.d.ts +5 -0
  136. package/dist/session-persistence.d.ts.map +1 -1
  137. package/dist/session-persistence.js +19 -3
  138. package/dist/session-persistence.js.map +1 -1
  139. package/dist/skill-loader.d.ts +16 -9
  140. package/dist/skill-loader.d.ts.map +1 -1
  141. package/dist/skill-loader.js +52 -116
  142. package/dist/skill-loader.js.map +1 -1
  143. package/dist/skill-registry.d.ts +60 -0
  144. package/dist/skill-registry.d.ts.map +1 -0
  145. package/dist/skill-registry.js +162 -0
  146. package/dist/skill-registry.js.map +1 -0
  147. package/dist/stall-detector.d.ts +56 -0
  148. package/dist/stall-detector.d.ts.map +1 -0
  149. package/dist/stall-detector.js +142 -0
  150. package/dist/stall-detector.js.map +1 -0
  151. package/dist/strategy-learner.d.ts +57 -0
  152. package/dist/strategy-learner.d.ts.map +1 -0
  153. package/dist/strategy-learner.js +160 -0
  154. package/dist/strategy-learner.js.map +1 -0
  155. package/dist/strategy-market.d.ts +73 -0
  156. package/dist/strategy-market.d.ts.map +1 -0
  157. package/dist/strategy-market.js +200 -0
  158. package/dist/strategy-market.js.map +1 -0
  159. package/dist/sub-agent.d.ts +0 -3
  160. package/dist/sub-agent.d.ts.map +1 -1
  161. package/dist/sub-agent.js +0 -10
  162. package/dist/sub-agent.js.map +1 -1
  163. package/dist/system-prompt.d.ts +0 -2
  164. package/dist/system-prompt.d.ts.map +1 -1
  165. package/dist/system-prompt.js +97 -490
  166. package/dist/system-prompt.js.map +1 -1
  167. package/dist/task-classifier.d.ts.map +1 -1
  168. package/dist/task-classifier.js +2 -54
  169. package/dist/task-classifier.js.map +1 -1
  170. package/dist/tool-synthesizer.d.ts +149 -0
  171. package/dist/tool-synthesizer.d.ts.map +1 -0
  172. package/dist/tool-synthesizer.js +455 -0
  173. package/dist/tool-synthesizer.js.map +1 -0
  174. package/dist/trace-pattern-extractor.d.ts +76 -0
  175. package/dist/trace-pattern-extractor.d.ts.map +1 -0
  176. package/dist/trace-pattern-extractor.js +321 -0
  177. package/dist/trace-pattern-extractor.js.map +1 -0
  178. package/dist/trace-recorder.d.ts +38 -0
  179. package/dist/trace-recorder.d.ts.map +1 -0
  180. package/dist/trace-recorder.js +94 -0
  181. package/dist/trace-recorder.js.map +1 -0
  182. package/dist/trust-economics.d.ts +50 -0
  183. package/dist/trust-economics.d.ts.map +1 -0
  184. package/dist/trust-economics.js +148 -0
  185. package/dist/trust-economics.js.map +1 -0
  186. package/dist/types.d.ts +272 -3
  187. package/dist/types.d.ts.map +1 -1
  188. package/dist/types.js.map +1 -1
  189. package/dist/yuan-md-loader.d.ts +22 -0
  190. package/dist/yuan-md-loader.d.ts.map +1 -0
  191. package/dist/yuan-md-loader.js +75 -0
  192. package/dist/yuan-md-loader.js.map +1 -0
  193. package/package.json +1 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @module project-executive
3
+ * @description Long-Horizon Project Executive — manages project-level goals, milestones,
4
+ * stalled task detection, and resume points.
5
+ *
6
+ * Storage: ~/.yuan/projects/{projectId}/executive.json
7
+ * projectId = stable 8-char hash of projectPath
8
+ *
9
+ * Design:
10
+ * - Event-driven observer ONLY — does NOT mutate agent-loop state
11
+ * - Reads from TaskMemory but does not write to it
12
+ * - All persistence is atomic (.tmp + renameSync)
13
+ * - Emits structured events for all state transitions
14
+ */
15
+ import { EventEmitter } from "node:events";
16
+ export type GoalStatus = "active" | "completed" | "abandoned";
17
+ export type GoalStrategy = "bugfix" | "refactor" | "migration" | "feature" | "investigation";
18
+ export interface ProjectGoal {
19
+ id: string;
20
+ description: string;
21
+ strategy: GoalStrategy;
22
+ status: GoalStatus;
23
+ childTaskIds: string[];
24
+ estimatedIterations: number;
25
+ createdAt: string;
26
+ completedAt?: string;
27
+ }
28
+ export interface ProjectMilestone {
29
+ id: string;
30
+ description: string;
31
+ goalId: string;
32
+ targetIteration: number;
33
+ status: "pending" | "reached" | "missed";
34
+ reachedAt?: string;
35
+ }
36
+ export interface StalledTask {
37
+ taskId: string;
38
+ stallReason: "iteration_overrun" | "repeated_errors" | "no_progress" | "patch_entropy";
39
+ detectedAt: string;
40
+ iterationsElapsed: number;
41
+ estimatedIterations: number;
42
+ }
43
+ export interface ResumePoint {
44
+ taskId: string;
45
+ sessionId: string;
46
+ checkpointPath: string;
47
+ savedAt: string;
48
+ }
49
+ export interface ProjectExecutiveState {
50
+ projectId: string;
51
+ projectPath: string;
52
+ goals: ProjectGoal[];
53
+ milestones: ProjectMilestone[];
54
+ activeTasks: string[];
55
+ stalledTasks: StalledTask[];
56
+ resumePoints: ResumePoint[];
57
+ updatedAt: string;
58
+ }
59
+ export interface ProjectExecutiveConfig {
60
+ /** defaults to ~/.yuan/projects/ */
61
+ storageDir?: string;
62
+ }
63
+ export declare class ProjectExecutive extends EventEmitter {
64
+ private state;
65
+ private storagePath;
66
+ constructor(projectPath: string, config?: ProjectExecutiveConfig);
67
+ private persist;
68
+ private emitStateUpdate;
69
+ /**
70
+ * Add a new goal. Returns the created goal. Emits agent:project_state_update.
71
+ */
72
+ addGoal(description: string, strategy: GoalStrategy, estimatedIterations?: number): ProjectGoal;
73
+ /**
74
+ * Mark a goal as completed or abandoned. Emits agent:project_state_update.
75
+ */
76
+ completeGoal(goalId: string, status: "completed" | "abandoned"): void;
77
+ /** Add a milestone to a goal. */
78
+ addMilestone(goalId: string, description: string, targetIteration: number): ProjectMilestone;
79
+ /**
80
+ * Check and possibly mark a milestone as reached.
81
+ * Emits agent:milestone_reached if reached.
82
+ */
83
+ checkMilestone(milestoneId: string, currentIteration: number): boolean;
84
+ /** Register a stalled task. Emits agent:task_stalled. */
85
+ recordStall(taskId: string, reason: StalledTask["stallReason"], iterationsElapsed: number, estimatedIterations: number): void;
86
+ /** Clear a stall (task resumed or resolved). */
87
+ clearStall(taskId: string): void;
88
+ /** Save a resume point for a task. */
89
+ addResumePoint(taskId: string, sessionId: string, checkpointPath: string): void;
90
+ /** Mark a task as active. */
91
+ activateTask(taskId: string): void;
92
+ /** Mark a task as no longer active. */
93
+ deactivateTask(taskId: string): void;
94
+ /** Get current state snapshot. */
95
+ getState(): ProjectExecutiveState;
96
+ }
97
+ //# sourceMappingURL=project-executive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-executive.d.ts","sourceRoot":"","sources":["../src/project-executive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * @module project-executive
3
+ * @description Long-Horizon Project Executive — manages project-level goals, milestones,
4
+ * stalled task detection, and resume points.
5
+ *
6
+ * Storage: ~/.yuan/projects/{projectId}/executive.json
7
+ * projectId = stable 8-char hash of projectPath
8
+ *
9
+ * Design:
10
+ * - Event-driven observer ONLY — does NOT mutate agent-loop state
11
+ * - Reads from TaskMemory but does not write to it
12
+ * - All persistence is atomic (.tmp + renameSync)
13
+ * - Emits structured events for all state transitions
14
+ */
15
+ import { EventEmitter } from "node:events";
16
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
17
+ import { homedir } from "node:os";
18
+ import { dirname, join } from "node:path";
19
+ // ─── Helpers ───────────────────────────────────────────────────────────────
20
+ function makeProjectId(projectPath) {
21
+ return Buffer.from(projectPath)
22
+ .toString("base64")
23
+ .replace(/[^a-z0-9]/gi, "")
24
+ .slice(0, 8);
25
+ }
26
+ function makeId() {
27
+ return Math.random().toString(36).slice(2, 10) + Date.now().toString(36);
28
+ }
29
+ function atomicWrite(filePath, data) {
30
+ const dir = dirname(filePath);
31
+ if (!existsSync(dir)) {
32
+ mkdirSync(dir, { recursive: true });
33
+ }
34
+ const tmp = filePath + ".tmp";
35
+ writeFileSync(tmp, data, "utf8");
36
+ renameSync(tmp, filePath);
37
+ }
38
+ function emptyState(projectId, projectPath) {
39
+ return {
40
+ projectId,
41
+ projectPath,
42
+ goals: [],
43
+ milestones: [],
44
+ activeTasks: [],
45
+ stalledTasks: [],
46
+ resumePoints: [],
47
+ updatedAt: new Date().toISOString(),
48
+ };
49
+ }
50
+ // ─── ProjectExecutive ──────────────────────────────────────────────────────
51
+ export class ProjectExecutive extends EventEmitter {
52
+ state;
53
+ storagePath;
54
+ constructor(projectPath, config) {
55
+ super();
56
+ const projectId = makeProjectId(projectPath);
57
+ const storageDir = config?.storageDir ?? join(homedir(), ".yuan", "projects");
58
+ this.storagePath = join(storageDir, projectId, "executive.json");
59
+ // Load existing state or create empty
60
+ if (existsSync(this.storagePath)) {
61
+ try {
62
+ const raw = readFileSync(this.storagePath, "utf8");
63
+ this.state = JSON.parse(raw);
64
+ }
65
+ catch {
66
+ this.state = emptyState(projectId, projectPath);
67
+ }
68
+ }
69
+ else {
70
+ this.state = emptyState(projectId, projectPath);
71
+ }
72
+ }
73
+ // ── Persistence ──────────────────────────────────────────────────────────
74
+ persist() {
75
+ this.state.updatedAt = new Date().toISOString();
76
+ atomicWrite(this.storagePath, JSON.stringify(this.state, null, 2));
77
+ }
78
+ emitStateUpdate() {
79
+ this.emit("event", {
80
+ kind: "agent:project_state_update",
81
+ projectId: this.state.projectId,
82
+ goals: this.state.goals.length,
83
+ activeTasks: this.state.activeTasks.length,
84
+ stalledTasks: this.state.stalledTasks.length,
85
+ timestamp: Date.now(),
86
+ });
87
+ }
88
+ // ── Goals ─────────────────────────────────────────────────────────────────
89
+ /**
90
+ * Add a new goal. Returns the created goal. Emits agent:project_state_update.
91
+ */
92
+ addGoal(description, strategy, estimatedIterations = 20) {
93
+ const goal = {
94
+ id: makeId(),
95
+ description,
96
+ strategy,
97
+ status: "active",
98
+ childTaskIds: [],
99
+ estimatedIterations,
100
+ createdAt: new Date().toISOString(),
101
+ };
102
+ this.state.goals.push(goal);
103
+ this.persist();
104
+ this.emitStateUpdate();
105
+ return goal;
106
+ }
107
+ /**
108
+ * Mark a goal as completed or abandoned. Emits agent:project_state_update.
109
+ */
110
+ completeGoal(goalId, status) {
111
+ const goal = this.state.goals.find((g) => g.id === goalId);
112
+ if (!goal)
113
+ return;
114
+ goal.status = status;
115
+ goal.completedAt = new Date().toISOString();
116
+ this.persist();
117
+ this.emitStateUpdate();
118
+ }
119
+ // ── Milestones ────────────────────────────────────────────────────────────
120
+ /** Add a milestone to a goal. */
121
+ addMilestone(goalId, description, targetIteration) {
122
+ const milestone = {
123
+ id: makeId(),
124
+ description,
125
+ goalId,
126
+ targetIteration,
127
+ status: "pending",
128
+ };
129
+ this.state.milestones.push(milestone);
130
+ this.persist();
131
+ return milestone;
132
+ }
133
+ /**
134
+ * Check and possibly mark a milestone as reached.
135
+ * Emits agent:milestone_reached if reached.
136
+ */
137
+ checkMilestone(milestoneId, currentIteration) {
138
+ const ms = this.state.milestones.find((m) => m.id === milestoneId);
139
+ if (!ms || ms.status !== "pending")
140
+ return false;
141
+ if (currentIteration >= ms.targetIteration) {
142
+ ms.status = "reached";
143
+ ms.reachedAt = new Date().toISOString();
144
+ this.persist();
145
+ this.emit("event", {
146
+ kind: "agent:milestone_reached",
147
+ milestoneId: ms.id,
148
+ goalId: ms.goalId,
149
+ description: ms.description,
150
+ timestamp: Date.now(),
151
+ });
152
+ return true;
153
+ }
154
+ return false;
155
+ }
156
+ // ── Stall Tracking ────────────────────────────────────────────────────────
157
+ /** Register a stalled task. Emits agent:task_stalled. */
158
+ recordStall(taskId, reason, iterationsElapsed, estimatedIterations) {
159
+ // Avoid duplicates
160
+ const existing = this.state.stalledTasks.find((s) => s.taskId === taskId);
161
+ if (existing) {
162
+ existing.stallReason = reason;
163
+ existing.detectedAt = new Date().toISOString();
164
+ existing.iterationsElapsed = iterationsElapsed;
165
+ existing.estimatedIterations = estimatedIterations;
166
+ }
167
+ else {
168
+ this.state.stalledTasks.push({
169
+ taskId,
170
+ stallReason: reason,
171
+ detectedAt: new Date().toISOString(),
172
+ iterationsElapsed,
173
+ estimatedIterations,
174
+ });
175
+ }
176
+ this.persist();
177
+ this.emit("event", {
178
+ kind: "agent:task_stalled",
179
+ taskId,
180
+ stallReason: reason,
181
+ iterationsElapsed,
182
+ estimatedIterations,
183
+ timestamp: Date.now(),
184
+ });
185
+ }
186
+ /** Clear a stall (task resumed or resolved). */
187
+ clearStall(taskId) {
188
+ this.state.stalledTasks = this.state.stalledTasks.filter((s) => s.taskId !== taskId);
189
+ this.persist();
190
+ }
191
+ // ── Resume Points ─────────────────────────────────────────────────────────
192
+ /** Save a resume point for a task. */
193
+ addResumePoint(taskId, sessionId, checkpointPath) {
194
+ // Replace existing resume point for same taskId
195
+ this.state.resumePoints = this.state.resumePoints.filter((r) => r.taskId !== taskId);
196
+ this.state.resumePoints.push({
197
+ taskId,
198
+ sessionId,
199
+ checkpointPath,
200
+ savedAt: new Date().toISOString(),
201
+ });
202
+ this.persist();
203
+ }
204
+ // ── Active Task Tracking ──────────────────────────────────────────────────
205
+ /** Mark a task as active. */
206
+ activateTask(taskId) {
207
+ if (!this.state.activeTasks.includes(taskId)) {
208
+ this.state.activeTasks.push(taskId);
209
+ this.persist();
210
+ }
211
+ }
212
+ /** Mark a task as no longer active. */
213
+ deactivateTask(taskId) {
214
+ this.state.activeTasks = this.state.activeTasks.filter((id) => id !== taskId);
215
+ this.persist();
216
+ }
217
+ // ── State Access ──────────────────────────────────────────────────────────
218
+ /** Get current state snapshot. */
219
+ getState() {
220
+ return JSON.parse(JSON.stringify(this.state));
221
+ }
222
+ }
223
+ //# sourceMappingURL=project-executive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-executive.js","sourceRoot":"","sources":["../src/project-executive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @module research-loop
3
+ * @description Hypothesis-driven engineering research loop.
4
+ *
5
+ * Takes a problem statement, generates hypotheses (template-based, no LLM),
6
+ * searches code/docs via a caller-supplied searchFn, evaluates evidence,
7
+ * and produces a strategy recommendation.
8
+ *
9
+ * Loop:
10
+ * problem → hypotheses → search (code/docs) → evaluate evidence → update strategy
11
+ *
12
+ * Constraints:
13
+ * - ESM only (no require())
14
+ * - No LLM calls — purely structural, deterministic
15
+ * - Atomic writes (.tmp → renameSync)
16
+ * - All errors caught — never blocks
17
+ * - Emits agent:research_session_complete on completion
18
+ */
19
+ import { EventEmitter } from "node:events";
20
+ export interface ResearchHypothesis {
21
+ id: string;
22
+ statement: string;
23
+ confidence: number;
24
+ supportingEvidence: string[];
25
+ contradictingEvidence: string[];
26
+ status: "active" | "confirmed" | "rejected" | "inconclusive";
27
+ }
28
+ export interface ResearchSession {
29
+ id: string;
30
+ problem: string;
31
+ hypotheses: ResearchHypothesis[];
32
+ searchResults: Array<{
33
+ query: string;
34
+ source: "code" | "docs" | "web" | "issues";
35
+ snippets: string[];
36
+ timestamp: string;
37
+ }>;
38
+ conclusion: string;
39
+ recommendedStrategy: string;
40
+ confidence: number;
41
+ iterations: number;
42
+ startedAt: string;
43
+ completedAt?: string;
44
+ }
45
+ export interface ResearchLoopConfig {
46
+ /** Max iterations per research session. Default: 5 */
47
+ maxIterations?: number;
48
+ /** Stop early when any hypothesis reaches this confidence. Default: 0.75 */
49
+ minConfidenceToStop?: number;
50
+ /** Directory to store sessions.json. Default: ~/.yuan/research/ */
51
+ storageDir?: string;
52
+ }
53
+ export declare class ResearchLoop extends EventEmitter {
54
+ private readonly maxIterations;
55
+ private readonly minConfidenceToStop;
56
+ private readonly storageDir;
57
+ private sessions;
58
+ constructor(config?: ResearchLoopConfig);
59
+ /**
60
+ * Run a hypothesis-driven research session for the given problem.
61
+ * - Generates 2-3 initial hypotheses (template-based, no LLM)
62
+ * - For each iteration, selects the lowest-confidence hypothesis, generates
63
+ * a search query, calls searchFn for "code" and "docs", evaluates evidence
64
+ * - Stops early when minConfidenceToStop is reached
65
+ * - Returns completed ResearchSession with conclusion + recommendedStrategy
66
+ * - Emits agent:research_session_complete on completion
67
+ */
68
+ research(problem: string, searchFn: (query: string, source: "code" | "docs") => Promise<string[]>, sessionId?: string): Promise<ResearchSession>;
69
+ /**
70
+ * Return all research sessions loaded from storage (+ any run in this instance).
71
+ */
72
+ getSessions(): ResearchSession[];
73
+ /**
74
+ * Find the most relevant past session for a given problem using word-overlap
75
+ * similarity. Returns null if no session has similarity ≥ 0.3.
76
+ */
77
+ findRelevant(problem: string): ResearchSession | null;
78
+ }
79
+ //# sourceMappingURL=research-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-loop.d.ts","sourceRoot":"","sources":["../src/research-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,aAAa,EAAE,KAAK,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;QAC3C,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8OD,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAoB;gBAExB,MAAM,GAAE,kBAAuB;IAQ3C;;;;;;;;OAQG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,EACvE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC;IAgH3B;;OAEG;IACH,WAAW,IAAI,eAAe,EAAE;IAIhC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CAetD"}