cognitive-core 0.0.1 → 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 +363 -2
  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 +43 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +84 -0
  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 +61 -9
  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/index.d.ts +0 -4
  329. package/index.js +0 -4
package/src/atlas.ts ADDED
@@ -0,0 +1,560 @@
1
+ import type {
2
+ Task,
3
+ Trajectory,
4
+ AtlasConfig,
5
+ Playbook,
6
+ } from './types/index.js';
7
+ import { createDefaultConfig } from './types/index.js';
8
+ import { MemorySystem, createMemorySystem } from './memory/index.js';
9
+ import {
10
+ LearningPipeline,
11
+ createLearningPipeline,
12
+ type ProcessResult,
13
+ type BatchResult,
14
+ } from './learning/index.js';
15
+ import {
16
+ PlaybookUsageInference,
17
+ createUsageInference,
18
+ } from './learning/usage-inference.js';
19
+ import { TaskRouter, createRouter, type RoutingDecision } from './search/router.js';
20
+ import { DirectSolver, createSolver } from './search/solver.js';
21
+ import {
22
+ RefinementLoop,
23
+ createRefinementLoop,
24
+ } from './search/refinement-loop.js';
25
+ import type { RefinementResult } from './search/refinement-types.js';
26
+ import type { LLMProvider } from './agents/types.js';
27
+ import { AgentManager, createAgentManager } from './runtime/manager.js';
28
+ import type { AgentBackend, AgentSpawnConfig } from './runtime/types.js';
29
+ import {
30
+ SkillLibrary,
31
+ createSkillLibrary,
32
+ } from './surfacing/skill-library.js';
33
+ import {
34
+ PlaybookMCPServer,
35
+ createPlaybookMCPServer,
36
+ } from './mcp/playbook-server.js';
37
+
38
+ /**
39
+ * Atlas statistics
40
+ */
41
+ export interface AtlasStats {
42
+ memory: {
43
+ experienceCount: number;
44
+ playbookCount: number;
45
+ metaObservationCount: number;
46
+ };
47
+ learning: {
48
+ trajectoriesProcessed: number;
49
+ pendingTrajectories: number;
50
+ };
51
+ execution?: {
52
+ agentManagerEnabled: boolean;
53
+ refinementEnabled: boolean;
54
+ backends: string[];
55
+ };
56
+ skillLibrary?: {
57
+ coreSkillCount: number;
58
+ domainSkillCounts: Record<string, number>;
59
+ mcpServerEnabled: boolean;
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Playbook usage tracking
65
+ */
66
+ export interface PlaybookUsage {
67
+ playbookId: string;
68
+ playbookName: string;
69
+ wasUsed: boolean;
70
+ usageConfidence: number;
71
+ wasSuccessful: boolean;
72
+ }
73
+
74
+ /**
75
+ * Extended solve result with refinement info
76
+ */
77
+ export interface SolveResult {
78
+ /** The execution trajectory */
79
+ trajectory: Trajectory;
80
+ /** Whether memory was used */
81
+ usedMemory?: boolean;
82
+ /** Strategy used (from legacy solver) */
83
+ strategy?: string;
84
+ /** Routing decision (when using AgentManager) */
85
+ routing?: RoutingDecision;
86
+ /** Whether the result came from agent execution (vs direct solver) */
87
+ usedAgentManager: boolean;
88
+ /** Refinement result if refinement was performed */
89
+ refinement?: RefinementResult;
90
+ /** Playbooks that were injected for this task */
91
+ injectedPlaybooks?: Playbook[];
92
+ /** Playbook usage inference results */
93
+ playbookUsage?: PlaybookUsage[];
94
+ }
95
+
96
+ /**
97
+ * Atlas - Adaptive Trajectory Learning and Abstraction System
98
+ *
99
+ * Main orchestrator that combines:
100
+ * - Memory systems (experiences, playbooks, meta-observations)
101
+ * - Learning engine (trajectory analysis, playbook extraction)
102
+ * - Task routing (deciding how to solve tasks)
103
+ * - Skill surfacing (providing playbooks to agents)
104
+ */
105
+ export class Atlas {
106
+ private memory: MemorySystem;
107
+ private learning: LearningPipeline;
108
+ private router: TaskRouter;
109
+ private solver: DirectSolver | null = null;
110
+ private agentManager: AgentManager | null = null;
111
+ private refinementLoop: RefinementLoop | null = null;
112
+ private config: AtlasConfig;
113
+ private provider: LLMProvider | null = null;
114
+ private trajectoriesProcessed = 0;
115
+
116
+ // Playbook-based components
117
+ private skillLibrary: SkillLibrary | null = null;
118
+ private usageInference: PlaybookUsageInference | null = null;
119
+ private mcpServer: PlaybookMCPServer | null = null;
120
+
121
+ constructor(config?: Partial<AtlasConfig>) {
122
+ this.config = createDefaultConfig(config);
123
+
124
+ // Initialize memory system
125
+ this.memory = createMemorySystem(
126
+ this.config.storage.baseDir,
127
+ this.config.memory
128
+ );
129
+
130
+ // Initialize learning pipeline
131
+ this.learning = createLearningPipeline(this.memory, this.config.learning);
132
+
133
+ // Initialize router
134
+ this.router = createRouter(this.memory, this.config.router);
135
+ }
136
+
137
+ /**
138
+ * Initialize Atlas (load persisted data)
139
+ */
140
+ async init(): Promise<void> {
141
+ await this.memory.init();
142
+
143
+ // Initialize playbook-based components if playbooks are available
144
+ if (this.memory.playbooks) {
145
+ this.skillLibrary = createSkillLibrary(
146
+ this.memory.playbooks,
147
+ this.config.skillLibrary
148
+ );
149
+ this.usageInference = createUsageInference();
150
+
151
+ // Refresh skill tiers on init
152
+ await this.skillLibrary.refreshTiers();
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Set the LLM provider for solving (deprecated)
158
+ * @deprecated Use setAgentManager() with backends for real execution
159
+ */
160
+ setProvider(provider: LLMProvider): void {
161
+ this.provider = provider;
162
+ this.solver = createSolver(this.memory, provider);
163
+ }
164
+
165
+ /**
166
+ * Set up the AgentManager with backends for real action execution
167
+ * This is the recommended way to configure Atlas for execution
168
+ */
169
+ setAgentManager(backends: AgentBackend[]): void {
170
+ // Create AgentManager with memory system
171
+ this.agentManager = createAgentManager(this.memory);
172
+
173
+ // Register all backends
174
+ for (const backend of backends) {
175
+ this.agentManager.registerBackend(backend);
176
+ }
177
+
178
+ // Create refinement loop with config
179
+ this.refinementLoop = createRefinementLoop(
180
+ this.agentManager,
181
+ this.memory,
182
+ {
183
+ maxIterations: this.config.refinement.maxIterations,
184
+ minAcceptableScore: this.config.refinement.acceptableScore,
185
+ evaluatorConfig: {
186
+ evaluatorAgentType: this.config.refinement.evaluatorAgentType,
187
+ },
188
+ triggerOnStrategies: this.config.refinement.triggerOnStrategies,
189
+ confidenceThreshold: this.config.refinement.confidenceThreshold,
190
+ }
191
+ );
192
+ }
193
+
194
+ /**
195
+ * Get the AgentManager for direct access
196
+ */
197
+ getAgentManager(): AgentManager | null {
198
+ return this.agentManager;
199
+ }
200
+
201
+ /**
202
+ * Get the RefinementLoop for registering domain verifiers
203
+ */
204
+ getRefinementLoop(): RefinementLoop | null {
205
+ return this.refinementLoop;
206
+ }
207
+
208
+ /**
209
+ * Check if agent execution is available
210
+ */
211
+ hasAgentExecution(): boolean {
212
+ return this.agentManager !== null;
213
+ }
214
+
215
+ /**
216
+ * Solve a task using the best available method
217
+ * Prefers AgentManager with refinement when available
218
+ */
219
+ async solve(task: Task): Promise<SolveResult> {
220
+ // Route the task first
221
+ const routing = await this.router.route(task);
222
+
223
+ // Get skills for the agent if skill library is available
224
+ let injectedPlaybooks: Playbook[] = [];
225
+ let skillContext = '';
226
+ if (this.skillLibrary) {
227
+ const skills = await this.skillLibrary.getSkillsForAgent(task);
228
+ injectedPlaybooks = [...skills.core, ...skills.domain, ...skills.contextual];
229
+ skillContext = this.skillLibrary.formatForSystemPrompt(skills);
230
+ }
231
+
232
+ // Merge playbooks from router's memory context (deduplicating by ID)
233
+ // This ensures we track ALL playbooks that will be injected into the agent
234
+ const injectedIds = new Set(injectedPlaybooks.map(p => p.id));
235
+ for (const { playbook } of routing.memoryContext.playbooks) {
236
+ if (!injectedIds.has(playbook.id)) {
237
+ injectedPlaybooks.push(playbook);
238
+ injectedIds.add(playbook.id);
239
+ }
240
+ }
241
+
242
+ let result: SolveResult;
243
+
244
+ // Prefer AgentManager if available
245
+ if (this.agentManager) {
246
+ result = await this.solveWithAgent(task, routing, skillContext);
247
+ } else if (this.solver && this.provider) {
248
+ // Fall back to DirectSolver (deprecated)
249
+ const solverResult = await this.solver.solve(task, routing);
250
+ result = {
251
+ trajectory: solverResult.trajectory,
252
+ usedMemory: solverResult.usedMemory,
253
+ strategy: solverResult.strategy,
254
+ usedAgentManager: false,
255
+ };
256
+ } else {
257
+ throw new Error(
258
+ 'No execution method available. Call setAgentManager() or setProvider().'
259
+ );
260
+ }
261
+
262
+ // Add injected playbooks to result
263
+ result.injectedPlaybooks = injectedPlaybooks;
264
+
265
+ // Infer playbook usage from trajectory
266
+ if (this.usageInference && this.skillLibrary && injectedPlaybooks.length > 0) {
267
+ const usageResults = await this.usageInference.inferUsage(
268
+ result.trajectory,
269
+ injectedPlaybooks
270
+ );
271
+
272
+ // Convert to PlaybookUsage format and record outcomes
273
+ result.playbookUsage = [];
274
+ for (const usage of usageResults) {
275
+ result.playbookUsage.push({
276
+ playbookId: usage.playbookId,
277
+ playbookName: usage.playbookName,
278
+ wasUsed: usage.wasUsed,
279
+ usageConfidence: usage.usageConfidence,
280
+ wasSuccessful: usage.wasSuccessful,
281
+ });
282
+
283
+ // Record outcome for tier management
284
+ if (usage.wasUsed) {
285
+ await this.skillLibrary.recordOutcome(
286
+ usage.playbookId,
287
+ result.trajectory.id,
288
+ usage.wasSuccessful,
289
+ usage.context
290
+ );
291
+ }
292
+ }
293
+ }
294
+
295
+ // Process the trajectory for learning
296
+ await this.learning.processTrajectory(result.trajectory);
297
+ this.trajectoriesProcessed++;
298
+
299
+ // Run batch learning if ready
300
+ if (this.learning.shouldRunBatch()) {
301
+ await this.runBatchLearning();
302
+ }
303
+
304
+ return result;
305
+ }
306
+
307
+ /**
308
+ * Solve using AgentManager with optional refinement
309
+ */
310
+ private async solveWithAgent(
311
+ task: Task,
312
+ routing: RoutingDecision,
313
+ skillContext?: string
314
+ ): Promise<SolveResult> {
315
+ if (!this.agentManager) {
316
+ throw new Error('AgentManager not available');
317
+ }
318
+
319
+ // Build spawn configuration
320
+ const spawnConfig: AgentSpawnConfig = {
321
+ agentType: this.config.execution.defaultAgentType,
322
+ task,
323
+ timeout: this.config.execution.maxExecutionTime * 1000,
324
+ captureToolCalls: this.config.execution.captureToolCalls,
325
+ // Inject skill context if available
326
+ systemPromptAdditions: skillContext || undefined,
327
+ // Pass router's memory context to avoid duplicate memory queries
328
+ injectedKnowledge: routing.memoryContext,
329
+ };
330
+
331
+ // Run initial execution
332
+ const agentResult = await this.agentManager.spawn(spawnConfig);
333
+
334
+ // Check if refinement should be triggered
335
+ const shouldRefine =
336
+ this.refinementLoop &&
337
+ this.config.refinement.useAgentEvaluation &&
338
+ this.refinementLoop.shouldTriggerRefinement(
339
+ routing.strategy,
340
+ routing.confidence
341
+ );
342
+
343
+ let refinementResult: RefinementResult | undefined;
344
+
345
+ if (shouldRefine && !agentResult.success) {
346
+ // Run refinement loop on failed trajectory
347
+ refinementResult = await this.refinementLoop!.refine(
348
+ agentResult.trajectory,
349
+ spawnConfig
350
+ );
351
+
352
+ return {
353
+ trajectory: refinementResult.trajectory,
354
+ routing,
355
+ usedAgentManager: true,
356
+ refinement: refinementResult,
357
+ };
358
+ }
359
+
360
+ return {
361
+ trajectory: agentResult.trajectory,
362
+ routing,
363
+ usedAgentManager: true,
364
+ };
365
+ }
366
+
367
+ /**
368
+ * Solve multiple tasks
369
+ */
370
+ async solveBatch(tasks: Task[]): Promise<SolveResult[]> {
371
+ const results: SolveResult[] = [];
372
+ for (const task of tasks) {
373
+ const result = await this.solve(task);
374
+ results.push(result);
375
+ }
376
+ return results;
377
+ }
378
+
379
+ /**
380
+ * Process an external trajectory (from another agent)
381
+ */
382
+ async processTrajectory(trajectory: Trajectory): Promise<ProcessResult> {
383
+ const result = await this.learning.processTrajectory(trajectory);
384
+ this.trajectoriesProcessed++;
385
+ return result;
386
+ }
387
+
388
+ /**
389
+ * Run batch learning explicitly
390
+ */
391
+ async runBatchLearning(): Promise<BatchResult> {
392
+ return this.learning.runBatchLearning();
393
+ }
394
+
395
+ /**
396
+ * Query memory for relevant context
397
+ */
398
+ async queryMemory(
399
+ query: string,
400
+ options?: {
401
+ domains?: string[];
402
+ includeExperiences?: boolean;
403
+ includePlaybooks?: boolean;
404
+ }
405
+ ) {
406
+ return this.memory.queryV2(query, options);
407
+ }
408
+
409
+ /**
410
+ * Get Atlas statistics
411
+ */
412
+ async getStats(): Promise<AtlasStats> {
413
+ const memoryStats = await this.memory.getStats();
414
+ const stats: AtlasStats = {
415
+ memory: memoryStats,
416
+ learning: {
417
+ trajectoriesProcessed: this.trajectoriesProcessed,
418
+ pendingTrajectories: this.learning.getAccumulatedCount(),
419
+ },
420
+ };
421
+
422
+ // Add execution stats if AgentManager is available
423
+ if (this.agentManager) {
424
+ stats.execution = {
425
+ agentManagerEnabled: true,
426
+ refinementEnabled: this.refinementLoop !== null,
427
+ backends: this.agentManager.listBackends(),
428
+ };
429
+ }
430
+
431
+ // Add skill library stats if available
432
+ if (this.skillLibrary) {
433
+ const libStats = this.skillLibrary.getStats();
434
+ stats.skillLibrary = {
435
+ coreSkillCount: libStats.coreSkillCount,
436
+ domainSkillCounts: libStats.domainSkillCounts,
437
+ mcpServerEnabled: this.mcpServer !== null,
438
+ };
439
+ }
440
+
441
+ return stats;
442
+ }
443
+
444
+ /**
445
+ * Get the memory system for direct access
446
+ */
447
+ getMemory(): MemorySystem {
448
+ return this.memory;
449
+ }
450
+
451
+ /**
452
+ * Get the learning pipeline for direct access
453
+ */
454
+ getLearning(): LearningPipeline {
455
+ return this.learning;
456
+ }
457
+
458
+ /**
459
+ * Get the skill library for direct access
460
+ */
461
+ getSkillLibrary(): SkillLibrary | null {
462
+ return this.skillLibrary;
463
+ }
464
+
465
+ /**
466
+ * Get the MCP server for direct access
467
+ */
468
+ getMCPServer(): PlaybookMCPServer | null {
469
+ return this.mcpServer;
470
+ }
471
+
472
+ /**
473
+ * Start the MCP server for playbook access
474
+ */
475
+ async startMCPServer(): Promise<void> {
476
+ if (!this.memory.playbooks) {
477
+ throw new Error('Playbook library not available. Initialize Atlas first.');
478
+ }
479
+
480
+ if (this.mcpServer) {
481
+ return; // Already started
482
+ }
483
+
484
+ this.mcpServer = createPlaybookMCPServer(
485
+ this.memory.playbooks,
486
+ this.skillLibrary ?? undefined,
487
+ this.config.mcp
488
+ );
489
+ }
490
+
491
+ /**
492
+ * Stop the MCP server
493
+ */
494
+ async stopMCPServer(): Promise<void> {
495
+ if (this.mcpServer) {
496
+ this.mcpServer = null;
497
+ }
498
+ }
499
+
500
+ /**
501
+ * Update configuration
502
+ */
503
+ updateConfig(config: Partial<AtlasConfig>): void {
504
+ if (config.learning) {
505
+ this.learning.updateConfig(config.learning);
506
+ }
507
+ if (config.router) {
508
+ this.router.updateConfig(config.router);
509
+ }
510
+ this.config = { ...this.config, ...config };
511
+ }
512
+
513
+ /**
514
+ * Close Atlas (flush data to disk)
515
+ */
516
+ async close(): Promise<void> {
517
+ // Stop MCP server if running
518
+ await this.stopMCPServer();
519
+
520
+ // Flush learning pipeline
521
+ if (this.learning.getAccumulatedCount() > 0) {
522
+ await this.learning.runBatchLearning();
523
+ }
524
+ // Close memory system
525
+ await this.memory.close();
526
+ }
527
+ }
528
+
529
+ /**
530
+ * Create an Atlas instance
531
+ */
532
+ export function createAtlas(config?: Partial<AtlasConfig>): Atlas {
533
+ return new Atlas(config);
534
+ }
535
+
536
+ /**
537
+ * Create an Atlas instance with an LLM provider
538
+ * @deprecated Use createAtlasWithAgents() for real action execution
539
+ */
540
+ export function createAtlasWithProvider(
541
+ provider: LLMProvider,
542
+ config?: Partial<AtlasConfig>
543
+ ): Atlas {
544
+ const atlas = new Atlas(config);
545
+ atlas.setProvider(provider);
546
+ return atlas;
547
+ }
548
+
549
+ /**
550
+ * Create an Atlas instance with AgentManager backends
551
+ * This is the recommended way to create Atlas for production use
552
+ */
553
+ export function createAtlasWithAgents(
554
+ backends: AgentBackend[],
555
+ config?: Partial<AtlasConfig>
556
+ ): Atlas {
557
+ const atlas = new Atlas(config);
558
+ atlas.setAgentManager(backends);
559
+ return atlas;
560
+ }