cognitive-core 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/README.md +302 -116
  2. package/SKILL.md +193 -0
  3. package/dist/agents/index.d.ts +3 -0
  4. package/dist/agents/index.d.ts.map +1 -0
  5. package/dist/agents/index.js +5 -0
  6. package/dist/agents/index.js.map +1 -0
  7. package/dist/agents/mock-provider.d.ts +23 -0
  8. package/dist/agents/mock-provider.d.ts.map +1 -0
  9. package/dist/agents/mock-provider.js +71 -0
  10. package/dist/agents/mock-provider.js.map +1 -0
  11. package/dist/agents/types.d.ts +98 -0
  12. package/dist/agents/types.d.ts.map +1 -0
  13. package/dist/agents/types.js +44 -0
  14. package/dist/agents/types.js.map +1 -0
  15. package/dist/atlas.d.ts +196 -0
  16. package/dist/atlas.d.ts.map +1 -0
  17. package/dist/atlas.js +373 -0
  18. package/dist/atlas.js.map +1 -0
  19. package/dist/bin/cognitive-core.d.ts +18 -0
  20. package/dist/bin/cognitive-core.d.ts.map +1 -0
  21. package/dist/bin/cognitive-core.js +419 -0
  22. package/dist/bin/cognitive-core.js.map +1 -0
  23. package/dist/embeddings/bm25.d.ts +104 -0
  24. package/dist/embeddings/bm25.d.ts.map +1 -0
  25. package/dist/embeddings/bm25.js +264 -0
  26. package/dist/embeddings/bm25.js.map +1 -0
  27. package/dist/embeddings/index.d.ts +12 -0
  28. package/dist/embeddings/index.d.ts.map +1 -0
  29. package/dist/embeddings/index.js +16 -0
  30. package/dist/embeddings/index.js.map +1 -0
  31. package/dist/embeddings/manager.d.ts +112 -0
  32. package/dist/embeddings/manager.d.ts.map +1 -0
  33. package/dist/embeddings/manager.js +215 -0
  34. package/dist/embeddings/manager.js.map +1 -0
  35. package/dist/embeddings/provider.d.ts +101 -0
  36. package/dist/embeddings/provider.d.ts.map +1 -0
  37. package/dist/embeddings/provider.js +232 -0
  38. package/dist/embeddings/provider.js.map +1 -0
  39. package/dist/embeddings/vector-store.d.ts +101 -0
  40. package/dist/embeddings/vector-store.d.ts.map +1 -0
  41. package/dist/embeddings/vector-store.js +256 -0
  42. package/dist/embeddings/vector-store.js.map +1 -0
  43. package/dist/factory.d.ts +193 -0
  44. package/dist/factory.d.ts.map +1 -0
  45. package/dist/factory.js +109 -0
  46. package/dist/factory.js.map +1 -0
  47. package/dist/index.d.ts +30 -453
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +84 -509
  50. package/dist/index.js.map +1 -0
  51. package/dist/learning/analyzer.d.ts +110 -0
  52. package/dist/learning/analyzer.d.ts.map +1 -0
  53. package/dist/learning/analyzer.js +213 -0
  54. package/dist/learning/analyzer.js.map +1 -0
  55. package/dist/learning/effectiveness.d.ts +158 -0
  56. package/dist/learning/effectiveness.d.ts.map +1 -0
  57. package/dist/learning/effectiveness.js +251 -0
  58. package/dist/learning/effectiveness.js.map +1 -0
  59. package/dist/learning/index.d.ts +8 -0
  60. package/dist/learning/index.d.ts.map +1 -0
  61. package/dist/learning/index.js +11 -0
  62. package/dist/learning/index.js.map +1 -0
  63. package/dist/learning/llm-extractor.d.ts +88 -0
  64. package/dist/learning/llm-extractor.d.ts.map +1 -0
  65. package/dist/learning/llm-extractor.js +372 -0
  66. package/dist/learning/llm-extractor.js.map +1 -0
  67. package/dist/learning/meta-learner.d.ts +80 -0
  68. package/dist/learning/meta-learner.d.ts.map +1 -0
  69. package/dist/learning/meta-learner.js +355 -0
  70. package/dist/learning/meta-learner.js.map +1 -0
  71. package/dist/learning/pipeline.d.ts +65 -0
  72. package/dist/learning/pipeline.d.ts.map +1 -0
  73. package/dist/learning/pipeline.js +170 -0
  74. package/dist/learning/pipeline.js.map +1 -0
  75. package/dist/learning/playbook-extractor.d.ts +113 -0
  76. package/dist/learning/playbook-extractor.d.ts.map +1 -0
  77. package/dist/learning/playbook-extractor.js +523 -0
  78. package/dist/learning/playbook-extractor.js.map +1 -0
  79. package/dist/learning/usage-inference.d.ts +82 -0
  80. package/dist/learning/usage-inference.d.ts.map +1 -0
  81. package/dist/learning/usage-inference.js +261 -0
  82. package/dist/learning/usage-inference.js.map +1 -0
  83. package/dist/mcp/index.d.ts +6 -0
  84. package/dist/mcp/index.d.ts.map +1 -0
  85. package/dist/mcp/index.js +6 -0
  86. package/dist/mcp/index.js.map +1 -0
  87. package/dist/mcp/playbook-server.d.ts +120 -0
  88. package/dist/mcp/playbook-server.d.ts.map +1 -0
  89. package/dist/mcp/playbook-server.js +427 -0
  90. package/dist/mcp/playbook-server.js.map +1 -0
  91. package/dist/memory/curated-loader.d.ts +62 -0
  92. package/dist/memory/curated-loader.d.ts.map +1 -0
  93. package/dist/memory/curated-loader.js +106 -0
  94. package/dist/memory/curated-loader.js.map +1 -0
  95. package/dist/memory/experience.d.ts +122 -0
  96. package/dist/memory/experience.d.ts.map +1 -0
  97. package/dist/memory/experience.js +392 -0
  98. package/dist/memory/experience.js.map +1 -0
  99. package/dist/memory/index.d.ts +6 -0
  100. package/dist/memory/index.d.ts.map +1 -0
  101. package/dist/memory/index.js +9 -0
  102. package/dist/memory/index.js.map +1 -0
  103. package/dist/memory/meta.d.ts +90 -0
  104. package/dist/memory/meta.d.ts.map +1 -0
  105. package/dist/memory/meta.js +362 -0
  106. package/dist/memory/meta.js.map +1 -0
  107. package/dist/memory/playbook.d.ts +133 -0
  108. package/dist/memory/playbook.d.ts.map +1 -0
  109. package/dist/memory/playbook.js +357 -0
  110. package/dist/memory/playbook.js.map +1 -0
  111. package/dist/memory/system.d.ts +167 -0
  112. package/dist/memory/system.d.ts.map +1 -0
  113. package/dist/memory/system.js +383 -0
  114. package/dist/memory/system.js.map +1 -0
  115. package/dist/runtime/backends/acp.d.ts +67 -0
  116. package/dist/runtime/backends/acp.d.ts.map +1 -0
  117. package/dist/runtime/backends/acp.js +290 -0
  118. package/dist/runtime/backends/acp.js.map +1 -0
  119. package/dist/runtime/backends/index.d.ts +5 -0
  120. package/dist/runtime/backends/index.d.ts.map +1 -0
  121. package/dist/runtime/backends/index.js +6 -0
  122. package/dist/runtime/backends/index.js.map +1 -0
  123. package/dist/runtime/backends/mock.d.ts +67 -0
  124. package/dist/runtime/backends/mock.d.ts.map +1 -0
  125. package/dist/runtime/backends/mock.js +153 -0
  126. package/dist/runtime/backends/mock.js.map +1 -0
  127. package/dist/runtime/backends/subprocess.d.ts +56 -0
  128. package/dist/runtime/backends/subprocess.d.ts.map +1 -0
  129. package/dist/runtime/backends/subprocess.js +260 -0
  130. package/dist/runtime/backends/subprocess.js.map +1 -0
  131. package/dist/runtime/flows/learning.d.ts +73 -0
  132. package/dist/runtime/flows/learning.d.ts.map +1 -0
  133. package/dist/runtime/flows/learning.js +116 -0
  134. package/dist/runtime/flows/learning.js.map +1 -0
  135. package/dist/runtime/flows/validation.d.ts +122 -0
  136. package/dist/runtime/flows/validation.d.ts.map +1 -0
  137. package/dist/runtime/flows/validation.js +223 -0
  138. package/dist/runtime/flows/validation.js.map +1 -0
  139. package/dist/runtime/index.d.ts +6 -0
  140. package/dist/runtime/index.d.ts.map +1 -0
  141. package/dist/runtime/index.js +8 -0
  142. package/dist/runtime/index.js.map +1 -0
  143. package/dist/runtime/manager.d.ts +116 -0
  144. package/dist/runtime/manager.d.ts.map +1 -0
  145. package/dist/runtime/manager.js +416 -0
  146. package/dist/runtime/manager.js.map +1 -0
  147. package/dist/runtime/types.d.ts +138 -0
  148. package/dist/runtime/types.d.ts.map +1 -0
  149. package/dist/runtime/types.js +2 -0
  150. package/dist/runtime/types.js.map +1 -0
  151. package/dist/search/evaluator.d.ts +102 -0
  152. package/dist/search/evaluator.d.ts.map +1 -0
  153. package/dist/search/evaluator.js +352 -0
  154. package/dist/search/evaluator.js.map +1 -0
  155. package/dist/search/index.d.ts +7 -0
  156. package/dist/search/index.d.ts.map +1 -0
  157. package/dist/search/index.js +11 -0
  158. package/dist/search/index.js.map +1 -0
  159. package/dist/search/refinement-loop.d.ts +73 -0
  160. package/dist/search/refinement-loop.d.ts.map +1 -0
  161. package/dist/search/refinement-loop.js +245 -0
  162. package/dist/search/refinement-loop.js.map +1 -0
  163. package/dist/search/refinement-types.d.ts +154 -0
  164. package/dist/search/refinement-types.d.ts.map +1 -0
  165. package/dist/search/refinement-types.js +99 -0
  166. package/dist/search/refinement-types.js.map +1 -0
  167. package/dist/search/router.d.ts +61 -0
  168. package/dist/search/router.d.ts.map +1 -0
  169. package/dist/search/router.js +197 -0
  170. package/dist/search/router.js.map +1 -0
  171. package/dist/search/solver.d.ts +75 -0
  172. package/dist/search/solver.d.ts.map +1 -0
  173. package/dist/search/solver.js +216 -0
  174. package/dist/search/solver.js.map +1 -0
  175. package/dist/search/verification-runner.d.ts +125 -0
  176. package/dist/search/verification-runner.d.ts.map +1 -0
  177. package/dist/search/verification-runner.js +440 -0
  178. package/dist/search/verification-runner.js.map +1 -0
  179. package/dist/surfacing/index.d.ts +2 -0
  180. package/dist/surfacing/index.d.ts.map +1 -0
  181. package/dist/surfacing/index.js +2 -0
  182. package/dist/surfacing/index.js.map +1 -0
  183. package/dist/surfacing/skill-library.d.ts +158 -0
  184. package/dist/surfacing/skill-library.d.ts.map +1 -0
  185. package/dist/surfacing/skill-library.js +429 -0
  186. package/dist/surfacing/skill-library.js.map +1 -0
  187. package/dist/types/config.d.ts +1113 -0
  188. package/dist/types/config.d.ts.map +1 -0
  189. package/dist/types/config.js +274 -0
  190. package/dist/types/config.js.map +1 -0
  191. package/dist/types/index.d.ts +9 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +14 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/memory.d.ts +339 -0
  196. package/dist/types/memory.d.ts.map +1 -0
  197. package/dist/types/memory.js +207 -0
  198. package/dist/types/memory.js.map +1 -0
  199. package/dist/types/meta.d.ts +146 -0
  200. package/dist/types/meta.d.ts.map +1 -0
  201. package/dist/types/meta.js +51 -0
  202. package/dist/types/meta.js.map +1 -0
  203. package/dist/types/outcome.d.ts +42 -0
  204. package/dist/types/outcome.d.ts.map +1 -0
  205. package/dist/types/outcome.js +50 -0
  206. package/dist/types/outcome.js.map +1 -0
  207. package/dist/types/playbook.d.ts +119 -0
  208. package/dist/types/playbook.d.ts.map +1 -0
  209. package/dist/types/playbook.js +71 -0
  210. package/dist/types/playbook.js.map +1 -0
  211. package/dist/types/step.d.ts +44 -0
  212. package/dist/types/step.d.ts.map +1 -0
  213. package/dist/types/step.js +32 -0
  214. package/dist/types/step.js.map +1 -0
  215. package/dist/types/task.d.ts +91 -0
  216. package/dist/types/task.d.ts.map +1 -0
  217. package/dist/types/task.js +39 -0
  218. package/dist/types/task.js.map +1 -0
  219. package/dist/types/trajectory.d.ts +221 -0
  220. package/dist/types/trajectory.d.ts.map +1 -0
  221. package/dist/types/trajectory.js +60 -0
  222. package/dist/types/trajectory.js.map +1 -0
  223. package/dist/utils/index.d.ts +4 -0
  224. package/dist/utils/index.d.ts.map +1 -0
  225. package/dist/utils/index.js +4 -0
  226. package/dist/utils/index.js.map +1 -0
  227. package/dist/utils/similarity.d.ts +31 -0
  228. package/dist/utils/similarity.d.ts.map +1 -0
  229. package/dist/utils/similarity.js +107 -0
  230. package/dist/utils/similarity.js.map +1 -0
  231. package/dist/utils/storage.d.ts +106 -0
  232. package/dist/utils/storage.d.ts.map +1 -0
  233. package/dist/utils/storage.js +203 -0
  234. package/dist/utils/storage.js.map +1 -0
  235. package/dist/utils/validation.d.ts +129 -0
  236. package/dist/utils/validation.d.ts.map +1 -0
  237. package/dist/utils/validation.js +171 -0
  238. package/dist/utils/validation.js.map +1 -0
  239. package/package.json +50 -34
  240. package/scripts/migrate-to-playbooks.ts +307 -0
  241. package/src/agents/index.ts +14 -0
  242. package/src/agents/mock-provider.ts +93 -0
  243. package/src/agents/types.ts +137 -0
  244. package/src/atlas.ts +560 -0
  245. package/src/bin/cognitive-core.ts +470 -0
  246. package/src/embeddings/bm25.ts +337 -0
  247. package/src/embeddings/index.ts +39 -0
  248. package/src/embeddings/manager.ts +288 -0
  249. package/src/embeddings/provider.ts +311 -0
  250. package/src/embeddings/vector-store.ts +353 -0
  251. package/src/factory.ts +263 -0
  252. package/src/index.ts +246 -0
  253. package/src/learning/analyzer.ts +335 -0
  254. package/src/learning/effectiveness.ts +428 -0
  255. package/src/learning/index.ts +58 -0
  256. package/src/learning/llm-extractor.ts +542 -0
  257. package/src/learning/meta-learner.ts +516 -0
  258. package/src/learning/pipeline.ts +244 -0
  259. package/src/learning/playbook-extractor.ts +702 -0
  260. package/src/learning/usage-inference.ts +372 -0
  261. package/src/mcp/index.ts +12 -0
  262. package/src/mcp/playbook-server.ts +565 -0
  263. package/src/memory/curated-loader.ts +160 -0
  264. package/src/memory/experience.ts +515 -0
  265. package/src/memory/index.ts +27 -0
  266. package/src/memory/meta.ts +506 -0
  267. package/src/memory/playbook.ts +493 -0
  268. package/src/memory/system.ts +551 -0
  269. package/src/runtime/backends/acp.ts +378 -0
  270. package/src/runtime/backends/index.ts +24 -0
  271. package/src/runtime/backends/mock.ts +218 -0
  272. package/src/runtime/backends/subprocess.ts +356 -0
  273. package/src/runtime/flows/learning.ts +183 -0
  274. package/src/runtime/flows/validation.ts +381 -0
  275. package/src/runtime/index.ts +53 -0
  276. package/src/runtime/manager.ts +541 -0
  277. package/src/runtime/types.ts +157 -0
  278. package/src/search/evaluator.ts +474 -0
  279. package/src/search/index.ts +59 -0
  280. package/src/search/refinement-loop.ts +363 -0
  281. package/src/search/refinement-types.ts +159 -0
  282. package/src/search/router.ts +261 -0
  283. package/src/search/solver.ts +303 -0
  284. package/src/search/verification-runner.ts +570 -0
  285. package/src/surfacing/index.ts +6 -0
  286. package/src/surfacing/skill-library.ts +594 -0
  287. package/src/types/config.ts +333 -0
  288. package/src/types/index.ts +130 -0
  289. package/src/types/memory.ts +270 -0
  290. package/src/types/meta.ts +218 -0
  291. package/src/types/outcome.ts +66 -0
  292. package/src/types/playbook.ts +196 -0
  293. package/src/types/step.ts +40 -0
  294. package/src/types/task.ts +52 -0
  295. package/src/types/trajectory.ts +80 -0
  296. package/src/utils/index.ts +38 -0
  297. package/src/utils/similarity.ts +139 -0
  298. package/src/utils/storage.ts +249 -0
  299. package/src/utils/validation.ts +286 -0
  300. package/tests/embeddings/bm25.test.ts +130 -0
  301. package/tests/embeddings/manager.test.ts +205 -0
  302. package/tests/integration/atlas.test.ts +266 -0
  303. package/tests/integration/e2e.test.ts +929 -0
  304. package/tests/learning/analyzer.test.ts +426 -0
  305. package/tests/learning/effectiveness.test.ts +542 -0
  306. package/tests/learning/pipeline.test.ts +176 -0
  307. package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
  308. package/tests/learning/usage-inference.test.ts +254 -0
  309. package/tests/mcp/playbook-server.test.ts +252 -0
  310. package/tests/memory/experience.test.ts +198 -0
  311. package/tests/memory/playbook.test.ts +338 -0
  312. package/tests/memory/provenance.test.ts +639 -0
  313. package/tests/memory/system.test.ts +325 -0
  314. package/tests/runtime/agent-manager.test.ts +512 -0
  315. package/tests/runtime/mock-backend.test.ts +248 -0
  316. package/tests/search/refinement-loop.test.ts +468 -0
  317. package/tests/search/refinement.test.ts +267 -0
  318. package/tests/search/router.test.ts +427 -0
  319. package/tests/surfacing/skill-library.test.ts +292 -0
  320. package/tests/types/outcome.test.ts +147 -0
  321. package/tests/types/step.test.ts +133 -0
  322. package/tests/types/task.test.ts +158 -0
  323. package/tests/types/trajectory.test.ts +253 -0
  324. package/tests/utils/similarity.test.ts +188 -0
  325. package/tests/utils/validation.test.ts +252 -0
  326. package/tsconfig.json +25 -0
  327. package/vitest.config.ts +22 -0
  328. package/dist/index.d.mts +0 -466
  329. package/dist/index.mjs +0 -478
@@ -0,0 +1,261 @@
1
+ import type { Task, RouterConfig } from '../types/index.js';
2
+ import type { MemorySystem, MemoryQueryResultV2 } from '../memory/system.js';
3
+ import type { MetaLearner } from '../learning/meta-learner.js';
4
+
5
+ /**
6
+ * Routing decision with context
7
+ */
8
+ export interface RoutingDecision {
9
+ /** Selected strategy for solving */
10
+ strategy: 'direct' | 'adapt' | 'explore' | 'fallback';
11
+ /** Confidence in this routing (0-1) */
12
+ confidence: number;
13
+ /** Memory query results (playbook format) */
14
+ memoryContext: MemoryQueryResultV2;
15
+ /** Estimated compute budget (LLM calls) */
16
+ estimatedBudget: number;
17
+ /** Reasoning for the decision */
18
+ reasoning: string;
19
+ /** Meta-strategies that were applied */
20
+ appliedMetaStrategies?: string[];
21
+ }
22
+
23
+ /**
24
+ * Task Router
25
+ * Determines the best approach for solving a task based on memory
26
+ * Now with meta-learning integration for adaptive routing
27
+ */
28
+ export class TaskRouter {
29
+ private memory: MemorySystem;
30
+ private config: RouterConfig;
31
+ private metaLearner?: MetaLearner;
32
+
33
+ constructor(
34
+ memory: MemorySystem,
35
+ config?: Partial<RouterConfig>,
36
+ metaLearner?: MetaLearner
37
+ ) {
38
+ this.memory = memory;
39
+ this.config = {
40
+ similarityThreshold: config?.similarityThreshold ?? 0.85,
41
+ useDomainRouting: config?.useDomainRouting ?? true,
42
+ defaultStrategy: config?.defaultStrategy ?? 'direct',
43
+ };
44
+ this.metaLearner = metaLearner;
45
+ }
46
+
47
+ /**
48
+ * Set the meta learner (can be set after construction)
49
+ */
50
+ setMetaLearner(metaLearner: MetaLearner): void {
51
+ this.metaLearner = metaLearner;
52
+ }
53
+
54
+ /**
55
+ * Route a task to determine solving strategy
56
+ * Uses playbook-based memory with meta-learning adjustments
57
+ */
58
+ async route(task: Task): Promise<RoutingDecision> {
59
+ // Query memory for relevant context
60
+ const memoryContext = await this.memory.queryV2(task.description, {
61
+ domains: task.domain ? [task.domain] : undefined,
62
+ });
63
+
64
+ // Compute base routing from playbook memory
65
+ let decision = this.computeBaseRouting(memoryContext);
66
+
67
+ // Apply meta-learning adjustments if available
68
+ if (this.metaLearner) {
69
+ const taskCharacteristics = this.extractTaskCharacteristics(task);
70
+ const memoryState = this.summarizeMemoryState(memoryContext);
71
+
72
+ try {
73
+ const adjusted = await this.metaLearner.adjustRouting(
74
+ {
75
+ strategy: decision.strategy,
76
+ confidence: decision.confidence,
77
+ estimatedBudget: decision.estimatedBudget,
78
+ reasoning: decision.reasoning,
79
+ },
80
+ taskCharacteristics,
81
+ memoryState
82
+ );
83
+
84
+ // Apply adjustments
85
+ if (adjusted.strategy !== decision.strategy || adjusted.confidence !== decision.confidence) {
86
+ decision.strategy = adjusted.strategy;
87
+ decision.confidence = adjusted.confidence;
88
+ decision.reasoning = adjusted.reasoning;
89
+ decision.appliedMetaStrategies = ['meta-learning adjustment'];
90
+ }
91
+ } catch (error) {
92
+ // Meta-learning failed, continue with base routing
93
+ console.error(
94
+ '[TaskRouter] Meta-learning adjustment failed, using base routing:',
95
+ error instanceof Error ? error.message : String(error)
96
+ );
97
+ }
98
+ }
99
+
100
+ return decision;
101
+ }
102
+
103
+ /**
104
+ * Compute base routing decision from memory results
105
+ */
106
+ private computeBaseRouting(memoryContext: MemoryQueryResultV2): RoutingDecision {
107
+ // Check experience memory
108
+ const hasHighSimilarityExperience = memoryContext.experiences.some(
109
+ (e) => e.score >= this.config.similarityThreshold && e.experience.success
110
+ );
111
+
112
+ // Check playbook memory
113
+ const hasHighConfidencePlaybook = memoryContext.playbooks.some(
114
+ (p) => p.score >= this.config.similarityThreshold && p.playbook.confidence >= 0.7
115
+ );
116
+
117
+ const hasApplicablePlaybook = memoryContext.playbooks.some(
118
+ (p) => p.score >= this.config.similarityThreshold * 0.8
119
+ );
120
+
121
+ // Determine routing strategy
122
+ let strategy: RoutingDecision['strategy'];
123
+ let confidence: number;
124
+ let estimatedBudget: number;
125
+ let reasoning: string;
126
+
127
+ if (hasHighSimilarityExperience) {
128
+ strategy = 'adapt';
129
+ confidence = 0.9;
130
+ estimatedBudget = 1;
131
+ reasoning = 'Found highly similar successful experience to adapt from';
132
+ } else if (hasHighConfidencePlaybook) {
133
+ strategy = 'direct';
134
+ confidence = 0.8;
135
+ estimatedBudget = 2;
136
+ reasoning = 'Found high-confidence playbook for guidance';
137
+ } else if (hasApplicablePlaybook) {
138
+ strategy = 'direct';
139
+ confidence = 0.6;
140
+ estimatedBudget = 4;
141
+ reasoning = 'Found applicable playbook to guide solving';
142
+ } else if (memoryContext.experiences.length > 0) {
143
+ strategy = 'explore';
144
+ confidence = 0.4;
145
+ estimatedBudget = 10;
146
+ reasoning = 'Found some context but need exploration';
147
+ } else {
148
+ strategy = 'fallback';
149
+ confidence = 0.2;
150
+ estimatedBudget = 20;
151
+ reasoning = 'No relevant memory found, using fallback strategy';
152
+ }
153
+
154
+ return {
155
+ strategy,
156
+ confidence,
157
+ memoryContext,
158
+ estimatedBudget,
159
+ reasoning,
160
+ };
161
+ }
162
+
163
+ /**
164
+ * Extract task characteristics for meta-learning
165
+ */
166
+ private extractTaskCharacteristics(task: Task): string[] {
167
+ const characteristics: string[] = [];
168
+
169
+ // Domain
170
+ if (task.domain) {
171
+ characteristics.push(`domain: ${task.domain}`);
172
+ }
173
+
174
+ // Analyze description
175
+ const desc = task.description.toLowerCase();
176
+
177
+ if (desc.includes('bug') || desc.includes('fix') || desc.includes('error')) {
178
+ characteristics.push('bug fix');
179
+ }
180
+
181
+ if (desc.includes('test') || desc.includes('spec')) {
182
+ characteristics.push('testing');
183
+ }
184
+
185
+ if (desc.includes('refactor') || desc.includes('clean')) {
186
+ characteristics.push('refactoring');
187
+ }
188
+
189
+ if (desc.includes('implement') || desc.includes('create') || desc.includes('add')) {
190
+ characteristics.push('new feature');
191
+ }
192
+
193
+ if (desc.includes('multiple') || desc.includes('files') || desc.includes('across')) {
194
+ characteristics.push('multi-file change');
195
+ }
196
+
197
+ if (desc.length > 500) {
198
+ characteristics.push('complex task');
199
+ }
200
+
201
+ return characteristics;
202
+ }
203
+
204
+ /**
205
+ * Summarize memory state for meta-learning
206
+ */
207
+ private summarizeMemoryState(memoryContext: MemoryQueryResultV2): string[] {
208
+ const state: string[] = [];
209
+
210
+ // Experience state
211
+ if (memoryContext.experiences.length === 0) {
212
+ state.push('no similar experiences');
213
+ } else {
214
+ const maxScore = Math.max(...memoryContext.experiences.map((e) => e.score), 0);
215
+ if (maxScore >= 0.8) {
216
+ state.push('high similarity experience');
217
+ } else if (maxScore >= 0.5) {
218
+ state.push('moderate similarity experience');
219
+ } else {
220
+ state.push('low similarity experiences');
221
+ }
222
+ }
223
+
224
+ // Playbook state
225
+ if (memoryContext.playbooks.length === 0) {
226
+ state.push('no applicable playbooks');
227
+ } else {
228
+ const maxConfidence = Math.max(
229
+ ...memoryContext.playbooks.map((p) => p.playbook.confidence),
230
+ 0
231
+ );
232
+ if (maxConfidence >= 0.8) {
233
+ state.push('high confidence playbook');
234
+ } else if (maxConfidence >= 0.5) {
235
+ state.push('moderate confidence playbook');
236
+ } else {
237
+ state.push('low confidence playbooks');
238
+ }
239
+ }
240
+
241
+ return state;
242
+ }
243
+
244
+ /**
245
+ * Update configuration
246
+ */
247
+ updateConfig(config: Partial<RouterConfig>): void {
248
+ this.config = { ...this.config, ...config };
249
+ }
250
+ }
251
+
252
+ /**
253
+ * Create a task router
254
+ */
255
+ export function createRouter(
256
+ memory: MemorySystem,
257
+ config?: Partial<RouterConfig>,
258
+ metaLearner?: MetaLearner
259
+ ): TaskRouter {
260
+ return new TaskRouter(memory, config, metaLearner);
261
+ }
@@ -0,0 +1,303 @@
1
+ import type {
2
+ Task,
3
+ Trajectory,
4
+ Step,
5
+ Outcome,
6
+ } from '../types/index.js';
7
+ import {
8
+ createTrajectory,
9
+ createStep,
10
+ successOutcome,
11
+ failureOutcome,
12
+ } from '../types/index.js';
13
+ import type { MemorySystem } from '../memory/system.js';
14
+ import type { LLMProvider, Message } from '../agents/types.js';
15
+ import type { RoutingDecision } from './router.js';
16
+
17
+ /**
18
+ * Solver configuration
19
+ */
20
+ export interface SolverConfig {
21
+ maxSteps: number;
22
+ temperature: number;
23
+ agentId: string;
24
+ }
25
+
26
+ /**
27
+ * Solver result
28
+ */
29
+ export interface SolverResult {
30
+ trajectory: Trajectory;
31
+ usedMemory: boolean;
32
+ strategy: string;
33
+ }
34
+
35
+ /**
36
+ * Direct Solver
37
+ * Solves tasks using memory-augmented LLM calls
38
+ *
39
+ * @deprecated Use AgentManager.spawn() instead. DirectSolver will be removed in v2.0.
40
+ * The AgentManager provides real action execution through configurable backends (ACP, subprocess).
41
+ *
42
+ * Migration example:
43
+ * ```typescript
44
+ * // Before (deprecated):
45
+ * const solver = createSolver(memory, provider);
46
+ * const result = await solver.solve(task, routing);
47
+ *
48
+ * // After (recommended):
49
+ * const manager = createAgentManager(memory);
50
+ * const result = await manager.spawn({
51
+ * agentType: 'claude-code',
52
+ * task,
53
+ * injectedKnowledge: routing.memoryContext,
54
+ * });
55
+ * ```
56
+ */
57
+ export class DirectSolver {
58
+ private memory: MemorySystem;
59
+ private provider: LLMProvider;
60
+ private config: SolverConfig;
61
+
62
+ constructor(
63
+ memory: MemorySystem,
64
+ provider: LLMProvider,
65
+ config?: Partial<SolverConfig>
66
+ ) {
67
+ this.memory = memory;
68
+ this.provider = provider;
69
+ this.config = {
70
+ maxSteps: config?.maxSteps ?? 10,
71
+ temperature: config?.temperature ?? 0.3,
72
+ agentId: config?.agentId ?? 'direct-solver',
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Solve a task using the routing decision
78
+ */
79
+ async solve(task: Task, routing: RoutingDecision): Promise<SolverResult> {
80
+ const startTime = Date.now();
81
+ const steps: Step[] = [];
82
+ let llmCalls = 0;
83
+ let totalTokens = 0;
84
+
85
+ try {
86
+ // Build system prompt with memory context
87
+ const systemPrompt = this.buildSystemPrompt(task, routing);
88
+
89
+ // Execute solving loop
90
+ const messages: Message[] = [
91
+ { role: 'system', content: systemPrompt },
92
+ { role: 'user', content: this.buildTaskPrompt(task) },
93
+ ];
94
+
95
+ let done = false;
96
+ let outcome: Outcome | null = null;
97
+
98
+ while (!done && steps.length < this.config.maxSteps) {
99
+ // Get LLM response
100
+ const response = await this.provider.complete(messages, {
101
+ temperature: this.config.temperature,
102
+ });
103
+ llmCalls++;
104
+
105
+ // Parse response into thought/action
106
+ const { thought, action, isDone, solution } =
107
+ this.parseResponse(response);
108
+
109
+ // Create step
110
+ const step = createStep({
111
+ thought,
112
+ action,
113
+ observation: isDone
114
+ ? 'Task completed'
115
+ : 'Awaiting next step',
116
+ });
117
+ steps.push(step);
118
+
119
+ // Check if done
120
+ if (isDone) {
121
+ done = true;
122
+ outcome = successOutcome(solution);
123
+ }
124
+
125
+ // Add to conversation
126
+ messages.push({ role: 'assistant', content: response });
127
+
128
+ if (!isDone) {
129
+ // In a real implementation, we'd execute the action and get observation
130
+ messages.push({
131
+ role: 'user',
132
+ content: 'Continue with the next step.',
133
+ });
134
+ }
135
+ }
136
+
137
+ // If we hit max steps without completing
138
+ if (!outcome) {
139
+ outcome = failureOutcome('Max steps reached without solution', 0.5);
140
+ }
141
+
142
+ const wallTimeSeconds = (Date.now() - startTime) / 1000;
143
+
144
+ const trajectory = createTrajectory({
145
+ task,
146
+ steps,
147
+ outcome,
148
+ agentId: this.config.agentId,
149
+ llmCalls,
150
+ totalTokens,
151
+ wallTimeSeconds,
152
+ });
153
+
154
+ return {
155
+ trajectory,
156
+ usedMemory: routing.memoryContext.experiences.length > 0,
157
+ strategy: routing.strategy,
158
+ };
159
+ } catch (error) {
160
+ const wallTimeSeconds = (Date.now() - startTime) / 1000;
161
+ const errorMessage =
162
+ error instanceof Error ? error.message : 'Unknown error';
163
+
164
+ const trajectory = createTrajectory({
165
+ task,
166
+ steps,
167
+ outcome: failureOutcome(errorMessage),
168
+ agentId: this.config.agentId,
169
+ llmCalls,
170
+ totalTokens,
171
+ wallTimeSeconds,
172
+ });
173
+
174
+ return {
175
+ trajectory,
176
+ usedMemory: routing.memoryContext.experiences.length > 0,
177
+ strategy: routing.strategy,
178
+ };
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Build system prompt with memory context
184
+ */
185
+ private buildSystemPrompt(_task: Task, routing: RoutingDecision): string {
186
+ const parts: string[] = [
187
+ 'You are a problem-solving agent. Your goal is to solve the given task step by step.',
188
+ '',
189
+ 'For each step, provide:',
190
+ '1. THOUGHT: Your reasoning about what to do next',
191
+ '2. ACTION: The action to take',
192
+ '',
193
+ 'When you have the final solution, output:',
194
+ 'DONE: [your solution]',
195
+ '',
196
+ ];
197
+
198
+ // Add memory context
199
+ const memoryContext = this.memory.formatForPromptV2(routing.memoryContext);
200
+ if (memoryContext) {
201
+ parts.push('## Relevant Memory');
202
+ parts.push(memoryContext);
203
+ parts.push('');
204
+ }
205
+
206
+ // Add strategy-specific guidance
207
+ switch (routing.strategy) {
208
+ case 'adapt':
209
+ parts.push(
210
+ '## Guidance',
211
+ 'A similar task has been solved successfully before. Adapt the previous solution to this task.',
212
+ ''
213
+ );
214
+ break;
215
+ case 'direct':
216
+ parts.push(
217
+ '## Guidance',
218
+ 'Use the applicable strategies and skills from memory to guide your solution.',
219
+ ''
220
+ );
221
+ break;
222
+ case 'explore':
223
+ parts.push(
224
+ '## Guidance',
225
+ 'Limited relevant memory found. Explore different approaches carefully.',
226
+ ''
227
+ );
228
+ break;
229
+ }
230
+
231
+ return parts.join('\n');
232
+ }
233
+
234
+ /**
235
+ * Build task prompt
236
+ */
237
+ private buildTaskPrompt(task: Task): string {
238
+ const parts = [
239
+ `## Task`,
240
+ task.description,
241
+ ];
242
+
243
+ if (Object.keys(task.context).length > 0) {
244
+ parts.push('');
245
+ parts.push('## Context');
246
+ parts.push(JSON.stringify(task.context, null, 2));
247
+ }
248
+
249
+ return parts.join('\n');
250
+ }
251
+
252
+ /**
253
+ * Parse LLM response into structured components
254
+ */
255
+ private parseResponse(response: string): {
256
+ thought: string | undefined;
257
+ action: string;
258
+ isDone: boolean;
259
+ solution: unknown;
260
+ } {
261
+ // Check for DONE
262
+ const doneMatch = response.match(/DONE:\s*(.+)/is);
263
+ if (doneMatch) {
264
+ return {
265
+ thought: undefined,
266
+ action: 'complete',
267
+ isDone: true,
268
+ solution: doneMatch[1].trim(),
269
+ };
270
+ }
271
+
272
+ // Parse THOUGHT and ACTION
273
+ const thoughtMatch = response.match(/THOUGHT:\s*(.+?)(?=ACTION:|$)/is);
274
+ const actionMatch = response.match(/ACTION:\s*(.+?)(?=THOUGHT:|$)/is);
275
+
276
+ return {
277
+ thought: thoughtMatch?.[1]?.trim(),
278
+ action: actionMatch?.[1]?.trim() ?? response.trim(),
279
+ isDone: false,
280
+ solution: null,
281
+ };
282
+ }
283
+
284
+ /**
285
+ * Update configuration
286
+ */
287
+ updateConfig(config: Partial<SolverConfig>): void {
288
+ this.config = { ...this.config, ...config };
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Create a direct solver
294
+ *
295
+ * @deprecated Use createAgentManager() instead. See DirectSolver for migration guide.
296
+ */
297
+ export function createSolver(
298
+ memory: MemorySystem,
299
+ provider: LLMProvider,
300
+ config?: Partial<SolverConfig>
301
+ ): DirectSolver {
302
+ return new DirectSolver(memory, provider, config);
303
+ }