kagent-ts 0.1.3 → 0.1.5

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 (349) hide show
  1. package/LICENSE +68 -21
  2. package/README.md +27 -371
  3. package/dist/compression/progressive-compressor.d.ts +66 -0
  4. package/dist/compression/progressive-compressor.d.ts.map +1 -0
  5. package/dist/compression/progressive-compressor.js +367 -0
  6. package/dist/compression/progressive-compressor.js.map +1 -0
  7. package/dist/compression/types.d.ts +1 -5
  8. package/dist/compression/types.d.ts.map +1 -1
  9. package/dist/context/context-manager.d.ts +34 -15
  10. package/dist/context/context-manager.d.ts.map +1 -1
  11. package/dist/context/context-manager.js +78 -28
  12. package/dist/context/context-manager.js.map +1 -1
  13. package/dist/context/types.d.ts +20 -4
  14. package/dist/context/types.d.ts.map +1 -1
  15. package/dist/core/agent.d.ts +407 -35
  16. package/dist/core/agent.d.ts.map +1 -1
  17. package/dist/core/agent.js +685 -70
  18. package/dist/core/agent.js.map +1 -1
  19. package/dist/core/fusion-agent.d.ts +207 -0
  20. package/dist/core/fusion-agent.d.ts.map +1 -0
  21. package/dist/core/fusion-agent.js +769 -0
  22. package/dist/core/fusion-agent.js.map +1 -0
  23. package/dist/core/hooks.d.ts +19 -7
  24. package/dist/core/hooks.d.ts.map +1 -1
  25. package/dist/core/plan-solve-agent.d.ts +1 -15
  26. package/dist/core/plan-solve-agent.d.ts.map +1 -1
  27. package/dist/core/plan-solve-agent.js +144 -117
  28. package/dist/core/plan-solve-agent.js.map +1 -1
  29. package/dist/core/react-agent.d.ts +0 -13
  30. package/dist/core/react-agent.d.ts.map +1 -1
  31. package/dist/core/react-agent.js +128 -101
  32. package/dist/core/react-agent.js.map +1 -1
  33. package/dist/core/response-schema.d.ts +65 -0
  34. package/dist/core/response-schema.d.ts.map +1 -1
  35. package/dist/core/response-schema.js +174 -1
  36. package/dist/core/response-schema.js.map +1 -1
  37. package/dist/core/system-prompts.d.ts +27 -0
  38. package/dist/core/system-prompts.d.ts.map +1 -0
  39. package/dist/core/system-prompts.js +112 -0
  40. package/dist/core/system-prompts.js.map +1 -0
  41. package/dist/eval/benchmark.d.ts +81 -0
  42. package/dist/eval/benchmark.d.ts.map +1 -0
  43. package/dist/eval/benchmark.js +292 -0
  44. package/dist/eval/benchmark.js.map +1 -0
  45. package/dist/eval/eval-runner.d.ts +79 -0
  46. package/dist/eval/eval-runner.d.ts.map +1 -0
  47. package/dist/eval/eval-runner.js +252 -0
  48. package/dist/eval/eval-runner.js.map +1 -0
  49. package/dist/eval/index.d.ts +7 -0
  50. package/dist/eval/index.d.ts.map +1 -0
  51. package/dist/eval/index.js +13 -0
  52. package/dist/eval/index.js.map +1 -0
  53. package/dist/eval/tool-call-evaluator.d.ts +72 -0
  54. package/dist/eval/tool-call-evaluator.d.ts.map +1 -0
  55. package/dist/eval/tool-call-evaluator.js +265 -0
  56. package/dist/eval/tool-call-evaluator.js.map +1 -0
  57. package/dist/eval/types.d.ts +219 -0
  58. package/dist/eval/types.d.ts.map +1 -0
  59. package/dist/eval/types.js +3 -0
  60. package/dist/eval/types.js.map +1 -0
  61. package/dist/index.d.ts +61 -14
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +121 -8
  64. package/dist/index.js.map +1 -1
  65. package/dist/llm/anthropic-provider.d.ts +141 -0
  66. package/dist/llm/anthropic-provider.d.ts.map +1 -0
  67. package/dist/llm/anthropic-provider.js +486 -0
  68. package/dist/llm/anthropic-provider.js.map +1 -0
  69. package/dist/llm/errors.d.ts +26 -0
  70. package/dist/llm/errors.d.ts.map +1 -0
  71. package/dist/llm/errors.js +19 -0
  72. package/dist/llm/errors.js.map +1 -0
  73. package/dist/llm/factory.d.ts +73 -0
  74. package/dist/llm/factory.d.ts.map +1 -0
  75. package/dist/llm/factory.js +77 -0
  76. package/dist/llm/factory.js.map +1 -0
  77. package/dist/llm/fallback-provider.d.ts +47 -0
  78. package/dist/llm/fallback-provider.d.ts.map +1 -0
  79. package/dist/llm/fallback-provider.js +91 -0
  80. package/dist/llm/fallback-provider.js.map +1 -0
  81. package/dist/llm/interface.d.ts +54 -11
  82. package/dist/llm/interface.d.ts.map +1 -1
  83. package/dist/llm/interface.js +34 -0
  84. package/dist/llm/interface.js.map +1 -1
  85. package/dist/llm/model-router.d.ts +126 -0
  86. package/dist/llm/model-router.d.ts.map +1 -0
  87. package/dist/llm/model-router.js +178 -0
  88. package/dist/llm/model-router.js.map +1 -0
  89. package/dist/llm/openai-provider.d.ts +8 -32
  90. package/dist/llm/openai-provider.d.ts.map +1 -1
  91. package/dist/llm/openai-provider.js +27 -60
  92. package/dist/llm/openai-provider.js.map +1 -1
  93. package/dist/llm/rate-limiter.d.ts +41 -0
  94. package/dist/llm/rate-limiter.d.ts.map +1 -0
  95. package/dist/llm/rate-limiter.js +93 -0
  96. package/dist/llm/rate-limiter.js.map +1 -0
  97. package/dist/llm/retry.d.ts +26 -0
  98. package/dist/llm/retry.d.ts.map +1 -0
  99. package/dist/llm/retry.js +44 -0
  100. package/dist/llm/retry.js.map +1 -0
  101. package/dist/llm/token-budget.d.ts +97 -0
  102. package/dist/llm/token-budget.d.ts.map +1 -0
  103. package/dist/llm/token-budget.js +115 -0
  104. package/dist/llm/token-budget.js.map +1 -0
  105. package/dist/logging/index.d.ts +2 -0
  106. package/dist/logging/index.d.ts.map +1 -0
  107. package/dist/logging/index.js +7 -0
  108. package/dist/logging/index.js.map +1 -0
  109. package/dist/logging/logger.d.ts +38 -0
  110. package/dist/logging/logger.d.ts.map +1 -0
  111. package/dist/logging/logger.js +34 -0
  112. package/dist/logging/logger.js.map +1 -0
  113. package/dist/mcp/index.d.ts +4 -0
  114. package/dist/mcp/index.d.ts.map +1 -0
  115. package/dist/mcp/index.js +8 -0
  116. package/dist/mcp/index.js.map +1 -0
  117. package/dist/mcp/mcp-client-manager.d.ts +72 -0
  118. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  119. package/dist/mcp/mcp-client-manager.js +235 -0
  120. package/dist/mcp/mcp-client-manager.js.map +1 -0
  121. package/dist/mcp/mcp-types.d.ts +58 -0
  122. package/dist/mcp/mcp-types.d.ts.map +1 -0
  123. package/dist/mcp/mcp-types.js +20 -0
  124. package/dist/mcp/mcp-types.js.map +1 -0
  125. package/dist/memory/index.d.ts +3 -0
  126. package/dist/memory/index.d.ts.map +1 -0
  127. package/dist/memory/index.js +6 -0
  128. package/dist/memory/index.js.map +1 -0
  129. package/dist/memory/memory-manager.d.ts +119 -0
  130. package/dist/memory/memory-manager.d.ts.map +1 -0
  131. package/dist/memory/memory-manager.js +334 -0
  132. package/dist/memory/memory-manager.js.map +1 -0
  133. package/dist/messages/types.d.ts +2 -0
  134. package/dist/messages/types.d.ts.map +1 -1
  135. package/dist/orchestrator/index.d.ts +5 -0
  136. package/dist/orchestrator/index.d.ts.map +1 -0
  137. package/dist/orchestrator/index.js +13 -0
  138. package/dist/orchestrator/index.js.map +1 -0
  139. package/dist/orchestrator/json-extractor.d.ts +18 -0
  140. package/dist/orchestrator/json-extractor.d.ts.map +1 -0
  141. package/dist/orchestrator/json-extractor.js +111 -0
  142. package/dist/orchestrator/json-extractor.js.map +1 -0
  143. package/dist/orchestrator/orchestrator-agent.d.ts +152 -0
  144. package/dist/orchestrator/orchestrator-agent.d.ts.map +1 -0
  145. package/dist/orchestrator/orchestrator-agent.js +675 -0
  146. package/dist/orchestrator/orchestrator-agent.js.map +1 -0
  147. package/dist/orchestrator/orchestrator-response.d.ts +40 -0
  148. package/dist/orchestrator/orchestrator-response.d.ts.map +1 -0
  149. package/dist/orchestrator/orchestrator-response.js +275 -0
  150. package/dist/orchestrator/orchestrator-response.js.map +1 -0
  151. package/dist/orchestrator/orchestrator-types.d.ts +116 -0
  152. package/dist/orchestrator/orchestrator-types.d.ts.map +1 -0
  153. package/dist/orchestrator/orchestrator-types.js +3 -0
  154. package/dist/orchestrator/orchestrator-types.js.map +1 -0
  155. package/dist/preferences/preference-manager.d.ts +8 -3
  156. package/dist/preferences/preference-manager.d.ts.map +1 -1
  157. package/dist/preferences/preference-manager.js +17 -4
  158. package/dist/preferences/preference-manager.js.map +1 -1
  159. package/dist/rag/chroma-store.d.ts +52 -0
  160. package/dist/rag/chroma-store.d.ts.map +1 -0
  161. package/dist/rag/chroma-store.js +110 -0
  162. package/dist/rag/chroma-store.js.map +1 -0
  163. package/dist/rag/document-loader.d.ts +21 -0
  164. package/dist/rag/document-loader.d.ts.map +1 -0
  165. package/dist/rag/document-loader.js +129 -0
  166. package/dist/rag/document-loader.js.map +1 -0
  167. package/dist/rag/embedding-provider.d.ts +36 -0
  168. package/dist/rag/embedding-provider.d.ts.map +1 -0
  169. package/dist/rag/embedding-provider.js +74 -0
  170. package/dist/rag/embedding-provider.js.map +1 -0
  171. package/dist/rag/index.d.ts +17 -0
  172. package/dist/rag/index.d.ts.map +1 -0
  173. package/dist/rag/index.js +27 -0
  174. package/dist/rag/index.js.map +1 -0
  175. package/dist/rag/keyword-index.d.ts +53 -0
  176. package/dist/rag/keyword-index.d.ts.map +1 -0
  177. package/dist/rag/keyword-index.js +161 -0
  178. package/dist/rag/keyword-index.js.map +1 -0
  179. package/dist/rag/llm-reranker.d.ts +36 -0
  180. package/dist/rag/llm-reranker.d.ts.map +1 -0
  181. package/dist/rag/llm-reranker.js +95 -0
  182. package/dist/rag/llm-reranker.js.map +1 -0
  183. package/dist/rag/rag-manager.d.ts +54 -0
  184. package/dist/rag/rag-manager.d.ts.map +1 -0
  185. package/dist/rag/rag-manager.js +179 -0
  186. package/dist/rag/rag-manager.js.map +1 -0
  187. package/dist/rag/rag-types.d.ts +143 -0
  188. package/dist/rag/rag-types.d.ts.map +1 -0
  189. package/dist/rag/rag-types.js +9 -0
  190. package/dist/rag/rag-types.js.map +1 -0
  191. package/dist/rag/rrf.d.ts +47 -0
  192. package/dist/rag/rrf.d.ts.map +1 -0
  193. package/dist/rag/rrf.js +70 -0
  194. package/dist/rag/rrf.js.map +1 -0
  195. package/dist/rag/search-knowledge.d.ts +24 -0
  196. package/dist/rag/search-knowledge.d.ts.map +1 -0
  197. package/dist/rag/search-knowledge.js +86 -0
  198. package/dist/rag/search-knowledge.js.map +1 -0
  199. package/dist/rag/text-splitter.d.ts +25 -0
  200. package/dist/rag/text-splitter.d.ts.map +1 -0
  201. package/dist/rag/text-splitter.js +136 -0
  202. package/dist/rag/text-splitter.js.map +1 -0
  203. package/dist/rag/vector-store.d.ts +34 -0
  204. package/dist/rag/vector-store.d.ts.map +1 -0
  205. package/dist/rag/vector-store.js +73 -0
  206. package/dist/rag/vector-store.js.map +1 -0
  207. package/dist/reflection/error-notebook.d.ts +125 -0
  208. package/dist/reflection/error-notebook.d.ts.map +1 -0
  209. package/dist/reflection/error-notebook.js +368 -0
  210. package/dist/reflection/error-notebook.js.map +1 -0
  211. package/dist/reflection/index.d.ts +8 -0
  212. package/dist/reflection/index.d.ts.map +1 -0
  213. package/dist/reflection/index.js +12 -0
  214. package/dist/reflection/index.js.map +1 -0
  215. package/dist/reflection/memory-reflector.d.ts +97 -0
  216. package/dist/reflection/memory-reflector.d.ts.map +1 -0
  217. package/dist/reflection/memory-reflector.js +215 -0
  218. package/dist/reflection/memory-reflector.js.map +1 -0
  219. package/dist/reflection/reflection-agent.d.ts +105 -0
  220. package/dist/reflection/reflection-agent.d.ts.map +1 -0
  221. package/dist/reflection/reflection-agent.js +234 -0
  222. package/dist/reflection/reflection-agent.js.map +1 -0
  223. package/dist/reflection/reflection-hook.d.ts +50 -0
  224. package/dist/reflection/reflection-hook.d.ts.map +1 -0
  225. package/dist/reflection/reflection-hook.js +108 -0
  226. package/dist/reflection/reflection-hook.js.map +1 -0
  227. package/dist/rules/project-rules.d.ts +47 -0
  228. package/dist/rules/project-rules.d.ts.map +1 -0
  229. package/dist/rules/project-rules.js +166 -0
  230. package/dist/rules/project-rules.js.map +1 -0
  231. package/dist/security/boundaries.d.ts +81 -0
  232. package/dist/security/boundaries.d.ts.map +1 -0
  233. package/dist/security/boundaries.js +158 -0
  234. package/dist/security/boundaries.js.map +1 -0
  235. package/dist/security/index.d.ts +2 -0
  236. package/dist/security/index.d.ts.map +1 -0
  237. package/dist/security/index.js +11 -0
  238. package/dist/security/index.js.map +1 -0
  239. package/dist/session/session-types.d.ts +25 -4
  240. package/dist/session/session-types.d.ts.map +1 -1
  241. package/dist/skills/file-skill-loader.d.ts +9 -20
  242. package/dist/skills/file-skill-loader.d.ts.map +1 -1
  243. package/dist/skills/file-skill-loader.js +35 -164
  244. package/dist/skills/file-skill-loader.js.map +1 -1
  245. package/dist/skills/index.d.ts +1 -1
  246. package/dist/skills/index.d.ts.map +1 -1
  247. package/dist/skills/index.js +1 -2
  248. package/dist/skills/index.js.map +1 -1
  249. package/dist/skills/skill-manager.d.ts +22 -29
  250. package/dist/skills/skill-manager.d.ts.map +1 -1
  251. package/dist/skills/skill-manager.js +63 -85
  252. package/dist/skills/skill-manager.js.map +1 -1
  253. package/dist/skills/types.d.ts +4 -16
  254. package/dist/skills/types.d.ts.map +1 -1
  255. package/dist/subagent/index.d.ts +4 -0
  256. package/dist/subagent/index.d.ts.map +1 -0
  257. package/dist/subagent/index.js +8 -0
  258. package/dist/subagent/index.js.map +1 -0
  259. package/dist/subagent/subagent-loader.d.ts +53 -0
  260. package/dist/subagent/subagent-loader.d.ts.map +1 -0
  261. package/dist/subagent/subagent-loader.js +155 -0
  262. package/dist/subagent/subagent-loader.js.map +1 -0
  263. package/dist/subagent/subagent-manager.d.ts +161 -0
  264. package/dist/subagent/subagent-manager.d.ts.map +1 -0
  265. package/dist/subagent/subagent-manager.js +468 -0
  266. package/dist/subagent/subagent-manager.js.map +1 -0
  267. package/dist/subagent/subagent-types.d.ts +77 -0
  268. package/dist/subagent/subagent-types.d.ts.map +1 -0
  269. package/dist/subagent/subagent-types.js +3 -0
  270. package/dist/subagent/subagent-types.js.map +1 -0
  271. package/dist/tools/builtin/bash.d.ts +3 -0
  272. package/dist/tools/builtin/bash.d.ts.map +1 -0
  273. package/dist/tools/builtin/bash.js +87 -0
  274. package/dist/tools/builtin/bash.js.map +1 -0
  275. package/dist/tools/builtin/edit-file.d.ts.map +1 -1
  276. package/dist/tools/builtin/edit-file.js +1 -0
  277. package/dist/tools/builtin/edit-file.js.map +1 -1
  278. package/dist/tools/builtin/index.d.ts +14 -0
  279. package/dist/tools/builtin/index.d.ts.map +1 -1
  280. package/dist/tools/builtin/index.js +45 -1
  281. package/dist/tools/builtin/index.js.map +1 -1
  282. package/dist/tools/builtin/list-errors.d.ts +7 -0
  283. package/dist/tools/builtin/list-errors.d.ts.map +1 -0
  284. package/dist/tools/builtin/list-errors.js +64 -0
  285. package/dist/tools/builtin/list-errors.js.map +1 -0
  286. package/dist/tools/builtin/list-subagents.d.ts +7 -0
  287. package/dist/tools/builtin/list-subagents.d.ts.map +1 -0
  288. package/dist/tools/builtin/list-subagents.js +21 -0
  289. package/dist/tools/builtin/list-subagents.js.map +1 -0
  290. package/dist/tools/builtin/recall.d.ts +11 -0
  291. package/dist/tools/builtin/recall.d.ts.map +1 -0
  292. package/dist/tools/builtin/recall.js +60 -0
  293. package/dist/tools/builtin/recall.js.map +1 -0
  294. package/dist/tools/builtin/remember.d.ts +12 -0
  295. package/dist/tools/builtin/remember.d.ts.map +1 -0
  296. package/dist/tools/builtin/remember.js +72 -0
  297. package/dist/tools/builtin/remember.js.map +1 -0
  298. package/dist/tools/builtin/skill.d.ts +14 -0
  299. package/dist/tools/builtin/skill.d.ts.map +1 -0
  300. package/dist/tools/builtin/skill.js +71 -0
  301. package/dist/tools/builtin/skill.js.map +1 -0
  302. package/dist/tools/builtin/spawn-subagent.d.ts +7 -0
  303. package/dist/tools/builtin/spawn-subagent.d.ts.map +1 -0
  304. package/dist/tools/builtin/spawn-subagent.js +43 -0
  305. package/dist/tools/builtin/spawn-subagent.js.map +1 -0
  306. package/dist/tools/builtin/web-fetch.d.ts +3 -0
  307. package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
  308. package/dist/tools/builtin/web-fetch.js +101 -0
  309. package/dist/tools/builtin/web-fetch.js.map +1 -0
  310. package/dist/tools/builtin/write-file.d.ts.map +1 -1
  311. package/dist/tools/builtin/write-file.js +1 -0
  312. package/dist/tools/builtin/write-file.js.map +1 -1
  313. package/dist/tools/circuit-breaker.d.ts +19 -10
  314. package/dist/tools/circuit-breaker.d.ts.map +1 -1
  315. package/dist/tools/circuit-breaker.js +22 -11
  316. package/dist/tools/circuit-breaker.js.map +1 -1
  317. package/dist/tools/error-tracker.d.ts +28 -44
  318. package/dist/tools/error-tracker.d.ts.map +1 -1
  319. package/dist/tools/error-tracker.js +39 -156
  320. package/dist/tools/error-tracker.js.map +1 -1
  321. package/dist/tools/tool-filter.d.ts +70 -0
  322. package/dist/tools/tool-filter.d.ts.map +1 -0
  323. package/dist/tools/tool-filter.js +92 -0
  324. package/dist/tools/tool-filter.js.map +1 -0
  325. package/dist/tools/tool-output-truncator.d.ts +36 -0
  326. package/dist/tools/tool-output-truncator.d.ts.map +1 -0
  327. package/dist/tools/tool-output-truncator.js +117 -0
  328. package/dist/tools/tool-output-truncator.js.map +1 -0
  329. package/dist/tools/tool-registry.d.ts +25 -9
  330. package/dist/tools/tool-registry.d.ts.map +1 -1
  331. package/dist/tools/tool-registry.js +77 -28
  332. package/dist/tools/tool-registry.js.map +1 -1
  333. package/dist/tools/tool-validator.d.ts +13 -0
  334. package/dist/tools/tool-validator.d.ts.map +1 -0
  335. package/dist/tools/tool-validator.js +116 -0
  336. package/dist/tools/tool-validator.js.map +1 -0
  337. package/dist/tools/types.d.ts +86 -3
  338. package/dist/tools/types.d.ts.map +1 -1
  339. package/dist/tools/types.js +51 -2
  340. package/dist/tools/types.js.map +1 -1
  341. package/dist/trace/trace-logger.d.ts +30 -4
  342. package/dist/trace/trace-logger.d.ts.map +1 -1
  343. package/dist/trace/trace-logger.js +83 -7
  344. package/dist/trace/trace-logger.js.map +1 -1
  345. package/package.json +14 -4
  346. package/dist/compression/sliding-window.d.ts +0 -21
  347. package/dist/compression/sliding-window.d.ts.map +0 -1
  348. package/dist/compression/sliding-window.js +0 -44
  349. package/dist/compression/sliding-window.js.map +0 -1
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MemoryManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const boundaries_1 = require("../security/boundaries");
40
+ // ─── Limits ──────────────────────────────────────────────────────────────────
41
+ const MAX_INDEX_LINES = 200;
42
+ const MAX_INDEX_BYTES = 25 * 1024; // 25 KB
43
+ // ─── MemoryManager ────────────────────────────────────────────────────────────
44
+ /**
45
+ * Long-term memory manager (index + individual files).
46
+ *
47
+ * Storage layout:
48
+ * ```
49
+ * .memory/
50
+ * MEMORY.md ← index (200 lines + 25 KB dual limit)
51
+ * <name>.md ← individual memory files with frontmatter
52
+ * ```
53
+ *
54
+ * Usage:
55
+ * ```ts
56
+ * const mem = new MemoryManager({ storageDir: ".memory" });
57
+ * mem.add({ name: "use-kebab-case", description: "File naming convention",
58
+ * type: "rule", content: "...why and when..." });
59
+ * // Later: inject into system prompt
60
+ * const hint = mem.buildPromptHint();
61
+ * ```
62
+ */
63
+ class MemoryManager {
64
+ index = [];
65
+ storageDir;
66
+ indexFile;
67
+ lastLoadedMtime = 0;
68
+ constructor(storageDir) {
69
+ this.storageDir = path.resolve(storageDir ?? ".memory");
70
+ this.indexFile = path.join(this.storageDir, "MEMORY.md");
71
+ this.ensureDir();
72
+ this.loadIndex();
73
+ }
74
+ // ─── Write ──────────────────────────────────────────────────────────────
75
+ /**
76
+ * Add or update a memory entry.
77
+ *
78
+ * If a memory with the same `name` already exists it is overwritten.
79
+ * When the index exceeds the 200-line / 25 KB limit, the oldest entries
80
+ * are silently removed to make room.
81
+ */
82
+ add(memory) {
83
+ // Write individual file
84
+ const filePath = this.memoryPath(memory.name);
85
+ const fileContent = this.formatFile(memory);
86
+ fs.writeFileSync(filePath, fileContent, "utf-8");
87
+ // Update in-memory index (upsert)
88
+ const existing = this.index.findIndex((e) => e.name === memory.name);
89
+ const entry = {
90
+ name: memory.name,
91
+ description: memory.description,
92
+ type: memory.type,
93
+ };
94
+ if (existing >= 0) {
95
+ this.index[existing] = entry;
96
+ }
97
+ else {
98
+ this.index.push(entry);
99
+ }
100
+ // Prune oldest if over limits
101
+ this.pruneIfNeeded();
102
+ this.persistIndex();
103
+ }
104
+ /**
105
+ * Remove a memory by name.
106
+ */
107
+ remove(name) {
108
+ const idx = this.index.findIndex((e) => e.name === name);
109
+ if (idx === -1)
110
+ return false;
111
+ try {
112
+ fs.unlinkSync(this.memoryPath(name));
113
+ }
114
+ catch { /* already gone */ }
115
+ this.index.splice(idx, 1);
116
+ this.persistIndex();
117
+ return true;
118
+ }
119
+ // ─── Read ───────────────────────────────────────────────────────────────
120
+ /**
121
+ * Check if a memory exists by name.
122
+ */
123
+ has(name) {
124
+ return this.index.some((e) => e.name === name);
125
+ }
126
+ /**
127
+ * Get a single memory by name (loads full content from disk).
128
+ */
129
+ get(name) {
130
+ const entry = this.index.find((e) => e.name === name);
131
+ if (!entry)
132
+ return null;
133
+ return this.loadFile(name);
134
+ }
135
+ /**
136
+ * Get all memories (loads full content from disk).
137
+ */
138
+ getAll() {
139
+ const results = [];
140
+ for (const e of this.index) {
141
+ const m = this.loadFile(e.name);
142
+ if (m)
143
+ results.push(m);
144
+ }
145
+ return results;
146
+ }
147
+ /**
148
+ * Get memories by type.
149
+ */
150
+ getByType(type) {
151
+ return this.getAll().filter((m) => m.type === type);
152
+ }
153
+ /**
154
+ * Total number of memories.
155
+ */
156
+ get count() {
157
+ return this.index.length;
158
+ }
159
+ // ─── Prompt Injection ───────────────────────────────────────────────────
160
+ /**
161
+ * Build a compact system-prompt hint listing memory names + type badges.
162
+ *
163
+ * Full content is loaded on demand via the `recall` tool, keeping the
164
+ * system prompt lean. Each line is ~50 chars so the full index of 200
165
+ * entries stays under ~2500 tokens.
166
+ *
167
+ * The content is LLM-generated (via the `remember` tool), so it is
168
+ * wrapped with {@link wrapUntrusted} boundary markers and scanned for
169
+ * prompt-injection signatures before being returned. This prevents
170
+ * the LLM from accidentally poisoning its own system prompt via
171
+ * memory names.
172
+ */
173
+ buildPromptHint() {
174
+ if (this.index.length === 0)
175
+ return "";
176
+ const names = this.index.map((e) => `- ${e.name} (\`${e.type}\`)`);
177
+ const body = "## Long-Term Memories (" +
178
+ this.index.length +
179
+ " entries — use the `recall` tool to load full content)\n" +
180
+ names.join("\n");
181
+ // Scan for prompt-injection signatures in LLM-generated content.
182
+ // Memory names and descriptions are authored by the LLM via the
183
+ // `remember` tool — they could contain injection text that would
184
+ // poison future runs when re-injected into the system prompt.
185
+ const patterns = (0, boundaries_1.detectInjectionSignatures)(body);
186
+ const warning = (0, boundaries_1.buildInjectionWarning)(patterns, "memory index");
187
+ // Wrap as untrusted data (LLM-authored, not user-authored)
188
+ const wrapped = (0, boundaries_1.wrapUntrusted)("memory-index", body);
189
+ return "\n\n" + warning + wrapped;
190
+ }
191
+ /**
192
+ * Re-read the MEMORY.md index from disk if it was modified since the
193
+ * last load. Returns true when a reload occurred.
194
+ *
195
+ * Individual memory files are NOT reloaded — the index is lightweight,
196
+ * and full memory content is fetched on demand via the `recall` tool.
197
+ */
198
+ reloadIfChanged() {
199
+ try {
200
+ const stat = fs.statSync(this.indexFile);
201
+ if (stat.mtimeMs === this.lastLoadedMtime)
202
+ return false;
203
+ this.lastLoadedMtime = stat.mtimeMs;
204
+ const raw = fs.readFileSync(this.indexFile, "utf-8");
205
+ this.index = this.parseIndex(raw);
206
+ return true;
207
+ }
208
+ catch {
209
+ this.lastLoadedMtime = 0;
210
+ this.index = [];
211
+ return true; // file was deleted — prompt needs updating
212
+ }
213
+ }
214
+ // ─── Persistence ────────────────────────────────────────────────────────
215
+ memoryPath(name) {
216
+ return path.join(this.storageDir, `${name}.md`);
217
+ }
218
+ ensureDir() {
219
+ if (!fs.existsSync(this.storageDir)) {
220
+ fs.mkdirSync(this.storageDir, { recursive: true });
221
+ }
222
+ }
223
+ formatFile(memory) {
224
+ return [
225
+ "---",
226
+ `name: ${memory.name}`,
227
+ `description: ${memory.description}`,
228
+ `type: ${memory.type}`,
229
+ "---",
230
+ "",
231
+ memory.content,
232
+ ].join("\n");
233
+ }
234
+ loadFile(name) {
235
+ try {
236
+ const raw = fs.readFileSync(this.memoryPath(name), "utf-8");
237
+ return this.parseFile(raw);
238
+ }
239
+ catch {
240
+ return null;
241
+ }
242
+ }
243
+ parseFile(raw) {
244
+ const match = raw.match(/^---\n([\s\S]*?)\n---\n\n([\s\S]*)$/);
245
+ if (!match)
246
+ return null;
247
+ const frontmatter = {};
248
+ for (const line of match[1].split("\n")) {
249
+ const kv = line.match(/^(\w+):\s*(.+)$/);
250
+ if (kv)
251
+ frontmatter[kv[1]] = kv[2];
252
+ }
253
+ const name = frontmatter["name"];
254
+ const description = frontmatter["description"];
255
+ const type = frontmatter["type"];
256
+ const content = match[2];
257
+ if (!name || !description || !type)
258
+ return null;
259
+ if (type !== "rule" && type !== "project")
260
+ return null;
261
+ return { name, description, type, content };
262
+ }
263
+ // ─── Index Persistence ──────────────────────────────────────────────────
264
+ persistIndex() {
265
+ const lines = [];
266
+ for (const e of this.index) {
267
+ const line = `- [${e.name}](${e.name}.md) — ${e.description}`;
268
+ lines.push(line);
269
+ }
270
+ const content = lines.join("\n") + (lines.length > 0 ? "\n" : "");
271
+ fs.writeFileSync(this.indexFile, content, "utf-8");
272
+ }
273
+ loadIndex() {
274
+ try {
275
+ const stat = fs.statSync(this.indexFile);
276
+ this.lastLoadedMtime = stat.mtimeMs;
277
+ const raw = fs.readFileSync(this.indexFile, "utf-8");
278
+ this.index = this.parseIndex(raw);
279
+ }
280
+ catch {
281
+ this.lastLoadedMtime = 0;
282
+ this.index = [];
283
+ }
284
+ }
285
+ parseIndex(raw) {
286
+ const entries = [];
287
+ const lines = raw.split("\n");
288
+ for (const line of lines) {
289
+ const match = line.match(/^- \[(.+?)\]\((.+?)\.md\) — (.+)$/);
290
+ if (!match)
291
+ continue;
292
+ const name = match[1];
293
+ const description = match[3];
294
+ // Infer type from the individual file (fallback to "project" if unreadable)
295
+ const type = this.inferType(name);
296
+ entries.push({ name, description, type });
297
+ }
298
+ return entries;
299
+ }
300
+ inferType(name) {
301
+ const m = this.loadFile(name);
302
+ return m?.type ?? "project";
303
+ }
304
+ // ─── Limit Enforcement ──────────────────────────────────────────────────
305
+ /**
306
+ * Silently remove the oldest entries until both the line and byte limits
307
+ * are satisfied. Index entries are ordered oldest-first, so we shift from
308
+ * the front until the computed index content fits.
309
+ */
310
+ pruneIfNeeded() {
311
+ let raw = this.buildIndexContent();
312
+ let lines = raw.split("\n").length;
313
+ let bytes = Buffer.byteLength(raw, "utf-8");
314
+ while (this.index.length > 0 && (lines > MAX_INDEX_LINES || bytes > MAX_INDEX_BYTES)) {
315
+ const removed = this.index.pop();
316
+ try {
317
+ fs.unlinkSync(this.memoryPath(removed.name));
318
+ }
319
+ catch { /* ok */ }
320
+ raw = this.buildIndexContent();
321
+ lines = raw.split("\n").length;
322
+ bytes = Buffer.byteLength(raw, "utf-8");
323
+ }
324
+ }
325
+ buildIndexContent() {
326
+ const lines = [];
327
+ for (const e of this.index) {
328
+ lines.push(`- [${e.name}](${e.name}.md) — ${e.description}`);
329
+ }
330
+ return lines.join("\n") + (lines.length > 0 ? "\n" : "");
331
+ }
332
+ }
333
+ exports.MemoryManager = MemoryManager;
334
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/memory/memory-manager.ts"],"names":[],"mappings":"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"}
@@ -27,5 +27,7 @@ export interface MessageData {
27
27
  name?: string;
28
28
  tool_call_id?: string;
29
29
  tool_calls?: ToolCall[];
30
+ /** Unix timestamp in milliseconds when the message was recorded. */
31
+ timestamp?: number;
30
32
  }
31
33
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,IAAI;IACd,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,IAAI;IACd,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,5 @@
1
+ export { OrchestratorAgent } from "./orchestrator-agent";
2
+ export type { OrchestratorAgentConfig } from "./orchestrator-agent";
3
+ export type { TaskNode, TaskNodeStatus, TaskGraph, OrchestrationPlan, SynthesisResult, AdaptResult, OrchestratorSessionState, } from "./orchestrator-types";
4
+ export { parseDecomposeResponse, parseSynthesizeResponse, parseAdaptResponse, buildDecomposePrompt, buildSynthesizePrompt, buildAdaptPrompt, } from "./orchestrator-response";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAdaptPrompt = exports.buildSynthesizePrompt = exports.buildDecomposePrompt = exports.parseAdaptResponse = exports.parseSynthesizeResponse = exports.parseDecomposeResponse = exports.OrchestratorAgent = void 0;
4
+ var orchestrator_agent_1 = require("./orchestrator-agent");
5
+ Object.defineProperty(exports, "OrchestratorAgent", { enumerable: true, get: function () { return orchestrator_agent_1.OrchestratorAgent; } });
6
+ var orchestrator_response_1 = require("./orchestrator-response");
7
+ Object.defineProperty(exports, "parseDecomposeResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseDecomposeResponse; } });
8
+ Object.defineProperty(exports, "parseSynthesizeResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseSynthesizeResponse; } });
9
+ Object.defineProperty(exports, "parseAdaptResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseAdaptResponse; } });
10
+ Object.defineProperty(exports, "buildDecomposePrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildDecomposePrompt; } });
11
+ Object.defineProperty(exports, "buildSynthesizePrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildSynthesizePrompt; } });
12
+ Object.defineProperty(exports, "buildAdaptPrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildAdaptPrompt; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":";;;AAAA,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAW1B,iEAOiC;AAN/B,+HAAA,sBAAsB,OAAA;AACtB,gIAAA,uBAAuB,OAAA;AACvB,2HAAA,kBAAkB,OAAA;AAClB,6HAAA,oBAAoB,OAAA;AACpB,8HAAA,qBAAqB,OAAA;AACrB,yHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared JSON extraction utility.
3
+ *
4
+ * Extracts a JSON object string from LLM output that may contain markdown
5
+ * fences, surrounding prose, or minor formatting issues.
6
+ *
7
+ * This is a copy of the logic in src/core/response-schema.ts kept here to
8
+ * avoid a circular dependency (response-schema.ts imports system-prompt
9
+ * fragments that the orchestrator does not need).
10
+ */
11
+ /**
12
+ * Try to extract a JSON object from a string that may contain
13
+ * markdown, extra text, malformed newlines, or other noise.
14
+ *
15
+ * Returns the JSON string if found, or null.
16
+ */
17
+ export declare function extractJSON(text: string): string | null;
18
+ //# sourceMappingURL=json-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-extractor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/json-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBvD"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Shared JSON extraction utility.
4
+ *
5
+ * Extracts a JSON object string from LLM output that may contain markdown
6
+ * fences, surrounding prose, or minor formatting issues.
7
+ *
8
+ * This is a copy of the logic in src/core/response-schema.ts kept here to
9
+ * avoid a circular dependency (response-schema.ts imports system-prompt
10
+ * fragments that the orchestrator does not need).
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.extractJSON = extractJSON;
14
+ /**
15
+ * Try to extract a JSON object from a string that may contain
16
+ * markdown, extra text, malformed newlines, or other noise.
17
+ *
18
+ * Returns the JSON string if found, or null.
19
+ */
20
+ function extractJSON(text) {
21
+ if (!text)
22
+ return null;
23
+ // Try with progressively more aggressive cleanup
24
+ const variants = [
25
+ text.trim(),
26
+ cleanupJSON(text.trim()),
27
+ text.trim().replace(/\n/g, " ").replace(/\r/g, ""),
28
+ ];
29
+ // De-duplicate variants
30
+ const seen = new Set();
31
+ const uniqueVariants = variants.filter((v) => {
32
+ if (seen.has(v))
33
+ return false;
34
+ seen.add(v);
35
+ return true;
36
+ });
37
+ for (const variant of uniqueVariants) {
38
+ const result = tryExtractJSON(variant);
39
+ if (result)
40
+ return result;
41
+ }
42
+ return null;
43
+ }
44
+ function tryExtractJSON(text) {
45
+ if (isValidJSON(text))
46
+ return text;
47
+ // Try extracting from markdown code blocks: ```json ... ```
48
+ const blockMatch = text.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);
49
+ if (blockMatch && isValidJSON(blockMatch[1]))
50
+ return blockMatch[1];
51
+ // Try finding the first { ... } with balanced braces
52
+ const braceStart = text.indexOf("{");
53
+ if (braceStart >= 0) {
54
+ const fromBrace = text.slice(braceStart);
55
+ const result = extractBalancedBraces(fromBrace);
56
+ if (result)
57
+ return result;
58
+ }
59
+ return null;
60
+ }
61
+ function extractBalancedBraces(text) {
62
+ let depth = 0;
63
+ let inString = false;
64
+ let escapeNext = false;
65
+ for (let i = 0; i < text.length; i++) {
66
+ const ch = text[i];
67
+ if (inString) {
68
+ if (escapeNext) {
69
+ escapeNext = false;
70
+ }
71
+ else if (ch === "\\") {
72
+ escapeNext = true;
73
+ }
74
+ else if (ch === '"') {
75
+ inString = false;
76
+ }
77
+ }
78
+ else {
79
+ if (ch === '"') {
80
+ inString = true;
81
+ escapeNext = false;
82
+ }
83
+ else if (ch === "{") {
84
+ depth++;
85
+ }
86
+ else if (ch === "}") {
87
+ depth--;
88
+ if (depth === 0) {
89
+ const candidate = text.slice(0, i + 1);
90
+ if (isValidJSON(candidate))
91
+ return candidate;
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+ function cleanupJSON(text) {
100
+ return text.replace(/\r\n/g, "\n").replace(/\r/g, "");
101
+ }
102
+ function isValidJSON(text) {
103
+ try {
104
+ JSON.parse(text);
105
+ return true;
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ //# sourceMappingURL=json-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-extractor.js","sourceRoot":"","sources":["../../src/orchestrator/json-extractor.ts"],"names":[],"mappings":"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"}