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
@@ -0,0 +1,470 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Cognitive Core CLI
4
+ *
5
+ * Command-line interface for interacting with the cognitive-core learning system.
6
+ * This replaces the MCP server approach, providing a simpler interface for agents
7
+ * to query playbooks and store trajectories.
8
+ *
9
+ * Usage:
10
+ * cognitive-core search <query> [--domain <domain>] [--limit <n>]
11
+ * cognitive-core get <playbook-id>
12
+ * cognitive-core domains
13
+ * cognitive-core stats
14
+ * cognitive-core store <trajectory-file>
15
+ * cognitive-core init [--dir <directory>]
16
+ */
17
+
18
+ import * as fs from 'node:fs/promises';
19
+ import * as path from 'node:path';
20
+ import {
21
+ createMemorySystem,
22
+ createLearningPipeline,
23
+ type MemorySystem,
24
+ type Playbook,
25
+ type Trajectory,
26
+ } from '../index.js';
27
+
28
+ // Default storage directory
29
+ const DEFAULT_STORAGE_DIR = path.join(process.cwd(), '.cognitive-core');
30
+
31
+ interface CLIOptions {
32
+ dir?: string;
33
+ domain?: string;
34
+ limit?: number;
35
+ format?: 'json' | 'text';
36
+ }
37
+
38
+ /**
39
+ * Parse command line arguments
40
+ */
41
+ function parseArgs(args: string[]): { command: string; positional: string[]; options: CLIOptions } {
42
+ const options: CLIOptions = {};
43
+ const positional: string[] = [];
44
+ let command = '';
45
+
46
+ for (let i = 0; i < args.length; i++) {
47
+ const arg = args[i];
48
+
49
+ if (arg === '--dir' && args[i + 1]) {
50
+ options.dir = args[++i];
51
+ } else if (arg === '--domain' && args[i + 1]) {
52
+ options.domain = args[++i];
53
+ } else if (arg === '--limit' && args[i + 1]) {
54
+ options.limit = parseInt(args[++i], 10);
55
+ } else if (arg === '--format' && args[i + 1]) {
56
+ options.format = args[++i] as 'json' | 'text';
57
+ } else if (arg === '--json') {
58
+ options.format = 'json';
59
+ } else if (!arg.startsWith('-')) {
60
+ if (!command) {
61
+ command = arg;
62
+ } else {
63
+ positional.push(arg);
64
+ }
65
+ }
66
+ }
67
+
68
+ return { command, positional, options };
69
+ }
70
+
71
+ /**
72
+ * Initialize and get memory system
73
+ */
74
+ async function getMemorySystem(options: CLIOptions): Promise<MemorySystem> {
75
+ const dir = options.dir || DEFAULT_STORAGE_DIR;
76
+ const memory = createMemorySystem(dir);
77
+ await memory.init();
78
+ return memory;
79
+ }
80
+
81
+ /**
82
+ * Format playbook for display
83
+ */
84
+ function formatPlaybook(playbook: Playbook, verbose = false): string {
85
+ const lines: string[] = [];
86
+ const { successCount, failureCount } = playbook.evolution;
87
+ const totalUses = successCount + failureCount;
88
+ const successRate = totalUses > 0 ? Math.round((successCount / totalUses) * 100) : 0;
89
+
90
+ lines.push(`## ${playbook.name}`);
91
+ lines.push(`ID: ${playbook.id}`);
92
+ lines.push(`Confidence: ${Math.round(playbook.confidence * 100)}%`);
93
+ lines.push(`Success Rate: ${successRate}% (${totalUses} uses)`);
94
+ lines.push(`Domains: ${playbook.applicability.domains.join(', ')}`);
95
+ lines.push('');
96
+ lines.push(`**Strategy**: ${playbook.guidance.strategy}`);
97
+
98
+ if (playbook.guidance.tactics.length > 0) {
99
+ lines.push('**Tactics**:');
100
+ for (const tactic of playbook.guidance.tactics) {
101
+ lines.push(` - ${tactic}`);
102
+ }
103
+ }
104
+
105
+ if (verbose) {
106
+ if (playbook.guidance.steps && playbook.guidance.steps.length > 0) {
107
+ lines.push('**Steps**:');
108
+ for (let i = 0; i < playbook.guidance.steps.length; i++) {
109
+ lines.push(` ${i + 1}. ${playbook.guidance.steps[i]}`);
110
+ }
111
+ }
112
+
113
+ if (playbook.applicability.situations.length > 0) {
114
+ lines.push('**When to use**:');
115
+ for (const sit of playbook.applicability.situations) {
116
+ lines.push(` - ${sit}`);
117
+ }
118
+ }
119
+
120
+ if (playbook.applicability.antiPatterns.length > 0) {
121
+ lines.push('**Avoid when**:');
122
+ for (const anti of playbook.applicability.antiPatterns) {
123
+ lines.push(` - ${anti}`);
124
+ }
125
+ }
126
+
127
+ if (playbook.verification.successIndicators.length > 0) {
128
+ lines.push('**Success indicators**:');
129
+ for (const ind of playbook.verification.successIndicators) {
130
+ lines.push(` - ${ind}`);
131
+ }
132
+ }
133
+ }
134
+
135
+ return lines.join('\n');
136
+ }
137
+
138
+ /**
139
+ * Search playbooks command
140
+ */
141
+ async function searchCommand(
142
+ query: string,
143
+ options: CLIOptions
144
+ ): Promise<void> {
145
+ const memory = await getMemorySystem(options);
146
+
147
+ try {
148
+ const matches = await memory.playbooks.findMatching(query, {
149
+ k: options.limit || 5,
150
+ domains: options.domain ? [options.domain] : undefined,
151
+ minConfidence: 0.3,
152
+ });
153
+
154
+ if (matches.length === 0) {
155
+ if (options.format === 'json') {
156
+ console.log(JSON.stringify({ results: [], message: 'No playbooks found' }));
157
+ } else {
158
+ console.log('No playbooks found matching your query.');
159
+ console.log('Try different search terms or check available domains with: cognitive-core domains');
160
+ }
161
+ return;
162
+ }
163
+
164
+ if (options.format === 'json') {
165
+ const results = matches.map((m) => ({
166
+ id: m.playbook.id,
167
+ name: m.playbook.name,
168
+ score: m.score,
169
+ matchType: m.matchType,
170
+ confidence: m.playbook.confidence,
171
+ strategy: m.playbook.guidance.strategy,
172
+ tactics: m.playbook.guidance.tactics,
173
+ domains: m.playbook.applicability.domains,
174
+ }));
175
+ console.log(JSON.stringify({ results }, null, 2));
176
+ } else {
177
+ console.log(`Found ${matches.length} playbook(s) matching "${query}":\n`);
178
+ for (const match of matches) {
179
+ console.log(`Match: ${Math.round(match.score * 100)}% (${match.matchType})`);
180
+ console.log(formatPlaybook(match.playbook));
181
+ console.log('\n---\n');
182
+ }
183
+ }
184
+ } finally {
185
+ await memory.close();
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Get playbook details command
191
+ */
192
+ async function getCommand(
193
+ playbookId: string,
194
+ options: CLIOptions
195
+ ): Promise<void> {
196
+ const memory = await getMemorySystem(options);
197
+
198
+ try {
199
+ const playbook = await memory.playbooks.get(playbookId);
200
+
201
+ if (!playbook) {
202
+ if (options.format === 'json') {
203
+ console.log(JSON.stringify({ error: `Playbook not found: ${playbookId}` }));
204
+ } else {
205
+ console.error(`Playbook not found: ${playbookId}`);
206
+ }
207
+ process.exit(1);
208
+ }
209
+
210
+ if (options.format === 'json') {
211
+ console.log(JSON.stringify(playbook, null, 2));
212
+ } else {
213
+ console.log(formatPlaybook(playbook, true));
214
+ }
215
+ } finally {
216
+ await memory.close();
217
+ }
218
+ }
219
+
220
+ /**
221
+ * List domains command
222
+ */
223
+ async function domainsCommand(options: CLIOptions): Promise<void> {
224
+ const memory = await getMemorySystem(options);
225
+
226
+ try {
227
+ const allPlaybooks = await memory.playbooks.getAll();
228
+ const domains = new Map<string, number>();
229
+
230
+ for (const playbook of allPlaybooks) {
231
+ for (const domain of playbook.applicability.domains) {
232
+ domains.set(domain, (domains.get(domain) || 0) + 1);
233
+ }
234
+ }
235
+
236
+ const sortedDomains = Array.from(domains.entries())
237
+ .sort((a, b) => b[1] - a[1]);
238
+
239
+ if (sortedDomains.length === 0) {
240
+ if (options.format === 'json') {
241
+ console.log(JSON.stringify({ domains: [] }));
242
+ } else {
243
+ console.log('No domains found. Add playbooks first.');
244
+ }
245
+ return;
246
+ }
247
+
248
+ if (options.format === 'json') {
249
+ console.log(JSON.stringify({
250
+ domains: sortedDomains.map(([name, count]) => ({ name, playbookCount: count })),
251
+ }, null, 2));
252
+ } else {
253
+ console.log('Available domains:\n');
254
+ for (const [domain, count] of sortedDomains) {
255
+ console.log(` ${domain}: ${count} playbook(s)`);
256
+ }
257
+ }
258
+ } finally {
259
+ await memory.close();
260
+ }
261
+ }
262
+
263
+ /**
264
+ * Show stats command
265
+ */
266
+ async function statsCommand(options: CLIOptions): Promise<void> {
267
+ const memory = await getMemorySystem(options);
268
+
269
+ try {
270
+ const stats = await memory.getStats();
271
+ const capacity = await memory.getCapacityStatus();
272
+
273
+ if (options.format === 'json') {
274
+ console.log(JSON.stringify({ stats, capacity }, null, 2));
275
+ } else {
276
+ console.log('Cognitive Core Statistics\n');
277
+ console.log(`Experiences: ${stats.experienceCount}`);
278
+ console.log(`Playbooks: ${stats.playbookCount}`);
279
+ console.log(`Meta-observations: ${stats.metaObservationCount}`);
280
+ console.log('');
281
+ console.log('Capacity:');
282
+ console.log(` Experiences: ${capacity.experiences.current}/${capacity.experiences.limit}`);
283
+ console.log(` Playbooks: ${capacity.playbooks.current}/${capacity.playbooks.limit}`);
284
+ console.log(` Pruning enabled: ${capacity.pruningEnabled}`);
285
+ }
286
+ } finally {
287
+ await memory.close();
288
+ }
289
+ }
290
+
291
+ /**
292
+ * Store trajectory command
293
+ */
294
+ async function storeCommand(
295
+ trajectoryFile: string,
296
+ options: CLIOptions
297
+ ): Promise<void> {
298
+ const memory = await getMemorySystem(options);
299
+ const pipeline = createLearningPipeline(memory);
300
+
301
+ try {
302
+ // Read and parse trajectory file
303
+ const content = await fs.readFile(trajectoryFile, 'utf-8');
304
+ const trajectory: Trajectory = JSON.parse(content);
305
+
306
+ // Process the trajectory
307
+ const result = await pipeline.processTrajectory(trajectory);
308
+
309
+ if (options.format === 'json') {
310
+ console.log(JSON.stringify({
311
+ stored: result.stored,
312
+ trajectoryId: result.trajectoryId,
313
+ analysis: {
314
+ success: result.analysis.success,
315
+ keySteps: result.analysis.keySteps.length,
316
+ errorPatterns: result.analysis.errorPatterns.length,
317
+ abstractable: result.analysis.abstractable,
318
+ },
319
+ }, null, 2));
320
+ } else {
321
+ console.log(`Trajectory stored: ${result.trajectoryId}`);
322
+ console.log(`Success: ${result.analysis.success}`);
323
+ console.log(`Key steps: ${result.analysis.keySteps.length}`);
324
+ console.log(`Abstractable: ${result.analysis.abstractable}`);
325
+
326
+ if (result.analysis.errorPatterns.length > 0) {
327
+ console.log(`Error patterns detected: ${result.analysis.errorPatterns.map((p) => p.type).join(', ')}`);
328
+ }
329
+ }
330
+ } finally {
331
+ await memory.close();
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Initialize command
337
+ */
338
+ async function initCommand(options: CLIOptions): Promise<void> {
339
+ const dir = options.dir || DEFAULT_STORAGE_DIR;
340
+
341
+ // Create directory if it doesn't exist
342
+ await fs.mkdir(dir, { recursive: true });
343
+
344
+ // Initialize memory system
345
+ const memory = createMemorySystem(dir);
346
+ await memory.init();
347
+ await memory.close();
348
+
349
+ if (options.format === 'json') {
350
+ console.log(JSON.stringify({ initialized: true, directory: dir }));
351
+ } else {
352
+ console.log(`Cognitive Core initialized at: ${dir}`);
353
+ console.log('');
354
+ console.log('Next steps:');
355
+ console.log(' 1. Store trajectories: cognitive-core store <trajectory.json>');
356
+ console.log(' 2. Search playbooks: cognitive-core search "your query"');
357
+ console.log(' 3. View stats: cognitive-core stats');
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Show help
363
+ */
364
+ function showHelp(): void {
365
+ console.log(`
366
+ Cognitive Core CLI - Learning system for AI agents
367
+
368
+ Usage:
369
+ cognitive-core <command> [options]
370
+
371
+ Commands:
372
+ search <query> Search for playbooks matching a query
373
+ get <playbook-id> Get detailed information about a specific playbook
374
+ domains List all available domains
375
+ stats Show memory statistics
376
+ store <file> Store a trajectory from a JSON file
377
+ init Initialize the storage directory
378
+
379
+ Options:
380
+ --dir <directory> Storage directory (default: .cognitive-core)
381
+ --domain <domain> Filter search by domain
382
+ --limit <n> Maximum results for search (default: 5)
383
+ --format json Output in JSON format
384
+ --json Shorthand for --format json
385
+
386
+ Examples:
387
+ cognitive-core search "fix typescript errors"
388
+ cognitive-core search "write tests" --domain testing --limit 3
389
+ cognitive-core get playbook-abc123
390
+ cognitive-core domains
391
+ cognitive-core stats --json
392
+ cognitive-core store ./trajectory.json
393
+ cognitive-core init --dir ./my-memory
394
+ `);
395
+ }
396
+
397
+ /**
398
+ * Main entry point
399
+ */
400
+ async function main(): Promise<void> {
401
+ const args = process.argv.slice(2);
402
+ const { command, positional, options } = parseArgs(args);
403
+
404
+ try {
405
+ switch (command) {
406
+ case 'search':
407
+ if (!positional[0]) {
408
+ console.error('Error: search requires a query');
409
+ console.error('Usage: cognitive-core search <query>');
410
+ process.exit(1);
411
+ }
412
+ await searchCommand(positional[0], options);
413
+ break;
414
+
415
+ case 'get':
416
+ if (!positional[0]) {
417
+ console.error('Error: get requires a playbook ID');
418
+ console.error('Usage: cognitive-core get <playbook-id>');
419
+ process.exit(1);
420
+ }
421
+ await getCommand(positional[0], options);
422
+ break;
423
+
424
+ case 'domains':
425
+ await domainsCommand(options);
426
+ break;
427
+
428
+ case 'stats':
429
+ await statsCommand(options);
430
+ break;
431
+
432
+ case 'store':
433
+ if (!positional[0]) {
434
+ console.error('Error: store requires a trajectory file');
435
+ console.error('Usage: cognitive-core store <trajectory.json>');
436
+ process.exit(1);
437
+ }
438
+ await storeCommand(positional[0], options);
439
+ break;
440
+
441
+ case 'init':
442
+ await initCommand(options);
443
+ break;
444
+
445
+ case 'help':
446
+ case '--help':
447
+ case '-h':
448
+ showHelp();
449
+ break;
450
+
451
+ default:
452
+ if (command) {
453
+ console.error(`Unknown command: ${command}`);
454
+ }
455
+ showHelp();
456
+ process.exit(command ? 1 : 0);
457
+ }
458
+ } catch (error) {
459
+ if (options.format === 'json') {
460
+ console.log(JSON.stringify({
461
+ error: error instanceof Error ? error.message : String(error),
462
+ }));
463
+ } else {
464
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
465
+ }
466
+ process.exit(1);
467
+ }
468
+ }
469
+
470
+ main();