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,106 @@
1
+ /**
2
+ * Lightweight file-based storage (Claudeception-inspired)
3
+ * Uses JSON files for simplicity and human-readability
4
+ */
5
+ export interface StorageOptions {
6
+ baseDir: string;
7
+ prettyPrint?: boolean;
8
+ }
9
+ /**
10
+ * Ensure directory exists
11
+ */
12
+ export declare function ensureDir(path: string): Promise<void>;
13
+ /**
14
+ * Save data to a JSON file
15
+ */
16
+ export declare function saveJson<T>(filePath: string, data: T, options?: {
17
+ pretty?: boolean;
18
+ }): Promise<void>;
19
+ /**
20
+ * Load data from a JSON file
21
+ */
22
+ export declare function loadJson<T>(filePath: string): Promise<T | null>;
23
+ /**
24
+ * List files in a directory
25
+ */
26
+ export declare function listFiles(dir: string, extension?: string): Promise<string[]>;
27
+ /**
28
+ * Check if a path exists
29
+ */
30
+ export declare function exists(path: string): Promise<boolean>;
31
+ /**
32
+ * Simple key-value store backed by JSON files
33
+ */
34
+ export declare class JsonStore<T> {
35
+ private baseDir;
36
+ private collection;
37
+ private options;
38
+ private cache;
39
+ private dirty;
40
+ private autoSaveTimer;
41
+ constructor(baseDir: string, collection: string, options?: {
42
+ autoSaveInterval?: number;
43
+ pretty?: boolean;
44
+ });
45
+ /**
46
+ * Get the file path for a key
47
+ */
48
+ private getPath;
49
+ /**
50
+ * Initialize the store and load existing data
51
+ */
52
+ init(): Promise<void>;
53
+ /**
54
+ * Get an item by key
55
+ */
56
+ get(key: string): T | undefined;
57
+ /**
58
+ * Set an item
59
+ */
60
+ set(key: string, value: T): void;
61
+ /**
62
+ * Delete an item
63
+ */
64
+ delete(key: string): boolean;
65
+ /**
66
+ * Check if key exists
67
+ */
68
+ has(key: string): boolean;
69
+ /**
70
+ * Get all items
71
+ */
72
+ values(): T[];
73
+ /**
74
+ * Get all keys
75
+ */
76
+ keys(): string[];
77
+ /**
78
+ * Get all entries
79
+ */
80
+ entries(): Array<[string, T]>;
81
+ /**
82
+ * Get item count
83
+ */
84
+ size(): number;
85
+ /**
86
+ * Flush dirty items to disk
87
+ */
88
+ flush(): Promise<void>;
89
+ /**
90
+ * Save a single item immediately
91
+ */
92
+ save(key: string): Promise<void>;
93
+ /**
94
+ * Close the store (flush and stop auto-save)
95
+ */
96
+ close(): Promise<void>;
97
+ }
98
+ /**
99
+ * Create a store index file (for quick lookups without loading all items)
100
+ */
101
+ export declare function saveIndex(baseDir: string, collection: string, index: Record<string, unknown>): Promise<void>;
102
+ /**
103
+ * Load a store index
104
+ */
105
+ export declare function loadIndex(baseDir: string, collection: string): Promise<Record<string, unknown> | null>;
106
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOrE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,qBAAa,SAAS,CAAC,CAAC;IAMpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IAPjB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,aAAa,CAA+C;gBAG1D,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO;IAGvE;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI/B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAKhC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,IAAI,CAAC,EAAE;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,OAAO,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAI7B;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAGzC"}
@@ -0,0 +1,203 @@
1
+ import { readFile, writeFile, mkdir, readdir, stat } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ /**
5
+ * Ensure directory exists
6
+ */
7
+ export async function ensureDir(path) {
8
+ if (!existsSync(path)) {
9
+ await mkdir(path, { recursive: true });
10
+ }
11
+ }
12
+ /**
13
+ * Save data to a JSON file
14
+ */
15
+ export async function saveJson(filePath, data, options) {
16
+ await ensureDir(dirname(filePath));
17
+ const content = options?.pretty
18
+ ? JSON.stringify(data, null, 2)
19
+ : JSON.stringify(data);
20
+ await writeFile(filePath, content, 'utf-8');
21
+ }
22
+ /**
23
+ * Load data from a JSON file
24
+ */
25
+ export async function loadJson(filePath) {
26
+ try {
27
+ const content = await readFile(filePath, 'utf-8');
28
+ return JSON.parse(content);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /**
35
+ * List files in a directory
36
+ */
37
+ export async function listFiles(dir, extension) {
38
+ try {
39
+ const files = await readdir(dir);
40
+ if (extension) {
41
+ return files.filter((f) => f.endsWith(extension));
42
+ }
43
+ return files;
44
+ }
45
+ catch {
46
+ return [];
47
+ }
48
+ }
49
+ /**
50
+ * Check if a path exists
51
+ */
52
+ export async function exists(path) {
53
+ try {
54
+ await stat(path);
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ /**
62
+ * Simple key-value store backed by JSON files
63
+ */
64
+ export class JsonStore {
65
+ baseDir;
66
+ collection;
67
+ options;
68
+ cache = new Map();
69
+ dirty = new Set();
70
+ autoSaveTimer = null;
71
+ constructor(baseDir, collection, options = {}) {
72
+ this.baseDir = baseDir;
73
+ this.collection = collection;
74
+ this.options = options;
75
+ }
76
+ /**
77
+ * Get the file path for a key
78
+ */
79
+ getPath(key) {
80
+ return join(this.baseDir, this.collection, `${key}.json`);
81
+ }
82
+ /**
83
+ * Initialize the store and load existing data
84
+ */
85
+ async init() {
86
+ const dir = join(this.baseDir, this.collection);
87
+ await ensureDir(dir);
88
+ // Load existing items
89
+ const files = await listFiles(dir, '.json');
90
+ for (const file of files) {
91
+ const key = file.replace('.json', '');
92
+ const data = await loadJson(join(dir, file));
93
+ if (data) {
94
+ this.cache.set(key, data);
95
+ }
96
+ }
97
+ // Start auto-save if configured
98
+ if (this.options.autoSaveInterval) {
99
+ this.autoSaveTimer = setInterval(() => this.flush(), this.options.autoSaveInterval);
100
+ }
101
+ }
102
+ /**
103
+ * Get an item by key
104
+ */
105
+ get(key) {
106
+ return this.cache.get(key);
107
+ }
108
+ /**
109
+ * Set an item
110
+ */
111
+ set(key, value) {
112
+ this.cache.set(key, value);
113
+ this.dirty.add(key);
114
+ }
115
+ /**
116
+ * Delete an item
117
+ */
118
+ delete(key) {
119
+ this.dirty.add(key);
120
+ return this.cache.delete(key);
121
+ }
122
+ /**
123
+ * Check if key exists
124
+ */
125
+ has(key) {
126
+ return this.cache.has(key);
127
+ }
128
+ /**
129
+ * Get all items
130
+ */
131
+ values() {
132
+ return Array.from(this.cache.values());
133
+ }
134
+ /**
135
+ * Get all keys
136
+ */
137
+ keys() {
138
+ return Array.from(this.cache.keys());
139
+ }
140
+ /**
141
+ * Get all entries
142
+ */
143
+ entries() {
144
+ return Array.from(this.cache.entries());
145
+ }
146
+ /**
147
+ * Get item count
148
+ */
149
+ size() {
150
+ return this.cache.size;
151
+ }
152
+ /**
153
+ * Flush dirty items to disk
154
+ */
155
+ async flush() {
156
+ for (const key of this.dirty) {
157
+ const value = this.cache.get(key);
158
+ const path = this.getPath(key);
159
+ if (value === undefined) {
160
+ // Item was deleted - we could delete the file too
161
+ // For now, we'll leave it (soft delete)
162
+ continue;
163
+ }
164
+ await saveJson(path, value, { pretty: this.options.pretty });
165
+ }
166
+ this.dirty.clear();
167
+ }
168
+ /**
169
+ * Save a single item immediately
170
+ */
171
+ async save(key) {
172
+ const value = this.cache.get(key);
173
+ if (value) {
174
+ await saveJson(this.getPath(key), value, { pretty: this.options.pretty });
175
+ this.dirty.delete(key);
176
+ }
177
+ }
178
+ /**
179
+ * Close the store (flush and stop auto-save)
180
+ */
181
+ async close() {
182
+ if (this.autoSaveTimer) {
183
+ clearInterval(this.autoSaveTimer);
184
+ this.autoSaveTimer = null;
185
+ }
186
+ await this.flush();
187
+ }
188
+ }
189
+ /**
190
+ * Create a store index file (for quick lookups without loading all items)
191
+ */
192
+ export async function saveIndex(baseDir, collection, index) {
193
+ const path = join(baseDir, collection, '_index.json');
194
+ await saveJson(path, index, { pretty: true });
195
+ }
196
+ /**
197
+ * Load a store index
198
+ */
199
+ export async function loadIndex(baseDir, collection) {
200
+ const path = join(baseDir, collection, '_index.json');
201
+ return loadJson(path);
202
+ }
203
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Input validation utilities
3
+ * Provides validation helpers for API boundaries
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Validation error with details
8
+ */
9
+ export declare class ValidationError extends Error {
10
+ readonly field: string;
11
+ readonly value: unknown;
12
+ constructor(message: string, field: string, value: unknown);
13
+ }
14
+ /**
15
+ * Validate a string field
16
+ */
17
+ export declare function validateString(value: unknown, field: string, options?: {
18
+ minLength?: number;
19
+ maxLength?: number;
20
+ pattern?: RegExp;
21
+ allowEmpty?: boolean;
22
+ }): string;
23
+ /**
24
+ * Validate an optional string field
25
+ */
26
+ export declare function validateOptionalString(value: unknown, field: string, options?: {
27
+ minLength?: number;
28
+ maxLength?: number;
29
+ pattern?: RegExp;
30
+ }): string | undefined;
31
+ /**
32
+ * Validate a number field
33
+ */
34
+ export declare function validateNumber(value: unknown, field: string, options?: {
35
+ min?: number;
36
+ max?: number;
37
+ integer?: boolean;
38
+ }): number;
39
+ /**
40
+ * Validate an optional number field
41
+ */
42
+ export declare function validateOptionalNumber(value: unknown, field: string, options?: {
43
+ min?: number;
44
+ max?: number;
45
+ integer?: boolean;
46
+ }): number | undefined;
47
+ /**
48
+ * Validate an array field
49
+ */
50
+ export declare function validateArray<T>(value: unknown, field: string, itemValidator: (item: unknown, index: number) => T, options?: {
51
+ minLength?: number;
52
+ maxLength?: number;
53
+ }): T[];
54
+ /**
55
+ * Validate a vector (array of numbers) for embeddings
56
+ */
57
+ export declare function validateVector(value: unknown, field: string, expectedDimension?: number): number[];
58
+ /**
59
+ * Validate task input parameters
60
+ */
61
+ export declare const TaskInputSchema: z.ZodObject<{
62
+ description: z.ZodString;
63
+ domain: z.ZodDefault<z.ZodString>;
64
+ context: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
65
+ constraints: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
66
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ domain: string;
69
+ description: string;
70
+ context: Record<string, unknown>;
71
+ metadata: Record<string, unknown>;
72
+ constraints: string[];
73
+ }, {
74
+ description: string;
75
+ domain?: string | undefined;
76
+ context?: Record<string, unknown> | undefined;
77
+ metadata?: Record<string, unknown> | undefined;
78
+ constraints?: string[] | undefined;
79
+ }>;
80
+ export type TaskInput = z.infer<typeof TaskInputSchema>;
81
+ /**
82
+ * Validate task input
83
+ */
84
+ export declare function validateTaskInput(input: unknown): TaskInput;
85
+ /**
86
+ * Validate trajectory step count
87
+ */
88
+ export declare function validateTrajectoryStepCount(stepCount: number, options?: {
89
+ minSteps?: number;
90
+ maxSteps?: number;
91
+ }): void;
92
+ /**
93
+ * MCP tool argument validation schemas
94
+ */
95
+ export declare const MCPSearchPlaybooksSchema: z.ZodObject<{
96
+ query: z.ZodString;
97
+ domain: z.ZodOptional<z.ZodString>;
98
+ maxResults: z.ZodOptional<z.ZodNumber>;
99
+ }, "strip", z.ZodTypeAny, {
100
+ query: string;
101
+ domain?: string | undefined;
102
+ maxResults?: number | undefined;
103
+ }, {
104
+ query: string;
105
+ domain?: string | undefined;
106
+ maxResults?: number | undefined;
107
+ }>;
108
+ export declare const MCPGetPlaybookDetailsSchema: z.ZodObject<{
109
+ playbookId: z.ZodString;
110
+ }, "strip", z.ZodTypeAny, {
111
+ playbookId: string;
112
+ }, {
113
+ playbookId: string;
114
+ }>;
115
+ export declare const MCPGetPlaybooksByDomainSchema: z.ZodObject<{
116
+ domain: z.ZodString;
117
+ maxResults: z.ZodOptional<z.ZodNumber>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ domain: string;
120
+ maxResults?: number | undefined;
121
+ }, {
122
+ domain: string;
123
+ maxResults?: number | undefined;
124
+ }>;
125
+ /**
126
+ * Validate MCP tool arguments
127
+ */
128
+ export declare function validateMCPArgs<T>(schema: z.ZodSchema<T>, args: unknown, toolName: string): T;
129
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,KAAK,EAAE,MAAM;aACb,KAAK,EAAE,OAAO;gBAF9B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO;CAKjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,MAAM,CAyBR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,MAAM,GAAG,SAAS,CAKpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,MAAM,GAAG,SAAS,CAKpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,EAClD,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,CAAC,EAAE,CAgBL;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,EAAE,CAwBV;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAW3D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,IAAI,CAkBN;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;EAEtC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAC;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GACf,CAAC,CAWH"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Input validation utilities
3
+ * Provides validation helpers for API boundaries
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Validation error with details
8
+ */
9
+ export class ValidationError extends Error {
10
+ field;
11
+ value;
12
+ constructor(message, field, value) {
13
+ super(`Validation error for '${field}': ${message}`);
14
+ this.field = field;
15
+ this.value = value;
16
+ this.name = 'ValidationError';
17
+ }
18
+ }
19
+ /**
20
+ * Validate a string field
21
+ */
22
+ export function validateString(value, field, options) {
23
+ if (typeof value !== 'string') {
24
+ throw new ValidationError(`Expected string, got ${typeof value}`, field, value);
25
+ }
26
+ const str = value;
27
+ const opts = options ?? {};
28
+ if (!opts.allowEmpty && str.trim().length === 0) {
29
+ throw new ValidationError('Cannot be empty', field, value);
30
+ }
31
+ if (opts.minLength !== undefined && str.length < opts.minLength) {
32
+ throw new ValidationError(`Must be at least ${opts.minLength} characters`, field, value);
33
+ }
34
+ if (opts.maxLength !== undefined && str.length > opts.maxLength) {
35
+ throw new ValidationError(`Must be at most ${opts.maxLength} characters`, field, value);
36
+ }
37
+ if (opts.pattern && !opts.pattern.test(str)) {
38
+ throw new ValidationError(`Does not match required pattern`, field, value);
39
+ }
40
+ return str;
41
+ }
42
+ /**
43
+ * Validate an optional string field
44
+ */
45
+ export function validateOptionalString(value, field, options) {
46
+ if (value === undefined || value === null) {
47
+ return undefined;
48
+ }
49
+ return validateString(value, field, options);
50
+ }
51
+ /**
52
+ * Validate a number field
53
+ */
54
+ export function validateNumber(value, field, options) {
55
+ if (typeof value !== 'number' || isNaN(value)) {
56
+ throw new ValidationError(`Expected number, got ${typeof value}`, field, value);
57
+ }
58
+ const opts = options ?? {};
59
+ if (opts.integer && !Number.isInteger(value)) {
60
+ throw new ValidationError('Must be an integer', field, value);
61
+ }
62
+ if (opts.min !== undefined && value < opts.min) {
63
+ throw new ValidationError(`Must be at least ${opts.min}`, field, value);
64
+ }
65
+ if (opts.max !== undefined && value > opts.max) {
66
+ throw new ValidationError(`Must be at most ${opts.max}`, field, value);
67
+ }
68
+ return value;
69
+ }
70
+ /**
71
+ * Validate an optional number field
72
+ */
73
+ export function validateOptionalNumber(value, field, options) {
74
+ if (value === undefined || value === null) {
75
+ return undefined;
76
+ }
77
+ return validateNumber(value, field, options);
78
+ }
79
+ /**
80
+ * Validate an array field
81
+ */
82
+ export function validateArray(value, field, itemValidator, options) {
83
+ if (!Array.isArray(value)) {
84
+ throw new ValidationError(`Expected array, got ${typeof value}`, field, value);
85
+ }
86
+ const opts = options ?? {};
87
+ if (opts.minLength !== undefined && value.length < opts.minLength) {
88
+ throw new ValidationError(`Must have at least ${opts.minLength} items`, field, value);
89
+ }
90
+ if (opts.maxLength !== undefined && value.length > opts.maxLength) {
91
+ throw new ValidationError(`Must have at most ${opts.maxLength} items`, field, value);
92
+ }
93
+ return value.map((item, index) => itemValidator(item, index));
94
+ }
95
+ /**
96
+ * Validate a vector (array of numbers) for embeddings
97
+ */
98
+ export function validateVector(value, field, expectedDimension) {
99
+ if (!Array.isArray(value)) {
100
+ throw new ValidationError(`Expected array, got ${typeof value}`, field, value);
101
+ }
102
+ for (let i = 0; i < value.length; i++) {
103
+ if (typeof value[i] !== 'number' || isNaN(value[i])) {
104
+ throw new ValidationError(`Element at index ${i} is not a valid number`, field, value[i]);
105
+ }
106
+ }
107
+ if (expectedDimension !== undefined && value.length !== expectedDimension) {
108
+ throw new ValidationError(`Expected dimension ${expectedDimension}, got ${value.length}`, field, value);
109
+ }
110
+ return value;
111
+ }
112
+ /**
113
+ * Validate task input parameters
114
+ */
115
+ export const TaskInputSchema = z.object({
116
+ description: z.string().min(1, 'Task description cannot be empty'),
117
+ domain: z.string().default('general'),
118
+ context: z.record(z.unknown()).default({}),
119
+ constraints: z.array(z.string()).default([]),
120
+ metadata: z.record(z.unknown()).default({}),
121
+ });
122
+ /**
123
+ * Validate task input
124
+ */
125
+ export function validateTaskInput(input) {
126
+ const result = TaskInputSchema.safeParse(input);
127
+ if (!result.success) {
128
+ const firstError = result.error.errors[0];
129
+ throw new ValidationError(firstError.message, firstError.path.join('.'), input);
130
+ }
131
+ return result.data;
132
+ }
133
+ /**
134
+ * Validate trajectory step count
135
+ */
136
+ export function validateTrajectoryStepCount(stepCount, options) {
137
+ const opts = options ?? { minSteps: 1, maxSteps: 10000 };
138
+ if (stepCount < (opts.minSteps ?? 1)) {
139
+ throw new ValidationError(`Must have at least ${opts.minSteps ?? 1} steps`, 'steps', stepCount);
140
+ }
141
+ if (opts.maxSteps !== undefined && stepCount > opts.maxSteps) {
142
+ throw new ValidationError(`Must have at most ${opts.maxSteps} steps`, 'steps', stepCount);
143
+ }
144
+ }
145
+ /**
146
+ * MCP tool argument validation schemas
147
+ */
148
+ export const MCPSearchPlaybooksSchema = z.object({
149
+ query: z.string().min(1, 'Query cannot be empty'),
150
+ domain: z.string().optional(),
151
+ maxResults: z.number().int().min(1).max(50).optional(),
152
+ });
153
+ export const MCPGetPlaybookDetailsSchema = z.object({
154
+ playbookId: z.string().min(1, 'Playbook ID cannot be empty'),
155
+ });
156
+ export const MCPGetPlaybooksByDomainSchema = z.object({
157
+ domain: z.string().min(1, 'Domain cannot be empty'),
158
+ maxResults: z.number().int().min(1).max(100).optional(),
159
+ });
160
+ /**
161
+ * Validate MCP tool arguments
162
+ */
163
+ export function validateMCPArgs(schema, args, toolName) {
164
+ const result = schema.safeParse(args);
165
+ if (!result.success) {
166
+ const firstError = result.error.errors[0];
167
+ throw new ValidationError(`Invalid arguments for ${toolName}: ${firstError.message}`, firstError.path.join('.') || 'arguments', args);
168
+ }
169
+ return result.data;
170
+ }
171
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}