@chances-ai/engine 24.0.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 (389) hide show
  1. package/dist/agents/discover.d.ts +30 -0
  2. package/dist/agents/discover.d.ts.map +1 -0
  3. package/dist/agents/discover.js +183 -0
  4. package/dist/agents/discover.js.map +1 -0
  5. package/dist/agents/index.d.ts +20 -0
  6. package/dist/agents/index.d.ts.map +1 -0
  7. package/dist/agents/index.js +52 -0
  8. package/dist/agents/index.js.map +1 -0
  9. package/dist/agents/parse.d.ts +61 -0
  10. package/dist/agents/parse.d.ts.map +1 -0
  11. package/dist/agents/parse.js +527 -0
  12. package/dist/agents/parse.js.map +1 -0
  13. package/dist/agents/types.d.ts +52 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +8 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
  18. package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
  19. package/dist/ai/adapters/ai-sdk-stream.js +125 -0
  20. package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
  21. package/dist/ai/adapters/ai-sdk.d.ts +56 -0
  22. package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
  23. package/dist/ai/adapters/ai-sdk.js +112 -0
  24. package/dist/ai/adapters/ai-sdk.js.map +1 -0
  25. package/dist/ai/adapters/mock.d.ts +13 -0
  26. package/dist/ai/adapters/mock.d.ts.map +1 -0
  27. package/dist/ai/adapters/mock.js +54 -0
  28. package/dist/ai/adapters/mock.js.map +1 -0
  29. package/dist/ai/adapters/openai-compatible.d.ts +23 -0
  30. package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
  31. package/dist/ai/adapters/openai-compatible.js +45 -0
  32. package/dist/ai/adapters/openai-compatible.js.map +1 -0
  33. package/dist/ai/cost.d.ts +3 -0
  34. package/dist/ai/cost.d.ts.map +1 -0
  35. package/dist/ai/cost.js +5 -0
  36. package/dist/ai/cost.js.map +1 -0
  37. package/dist/ai/index.d.ts +12 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +11 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/known-models.d.ts +20 -0
  42. package/dist/ai/known-models.d.ts.map +1 -0
  43. package/dist/ai/known-models.js +129 -0
  44. package/dist/ai/known-models.js.map +1 -0
  45. package/dist/ai/registry.d.ts +12 -0
  46. package/dist/ai/registry.d.ts.map +1 -0
  47. package/dist/ai/registry.js +24 -0
  48. package/dist/ai/registry.js.map +1 -0
  49. package/dist/ai/retry.d.ts +11 -0
  50. package/dist/ai/retry.d.ts.map +1 -0
  51. package/dist/ai/retry.js +14 -0
  52. package/dist/ai/retry.js.map +1 -0
  53. package/dist/ai/router.d.ts +25 -0
  54. package/dist/ai/router.d.ts.map +1 -0
  55. package/dist/ai/router.js +36 -0
  56. package/dist/ai/router.js.map +1 -0
  57. package/dist/ai/setup.d.ts +23 -0
  58. package/dist/ai/setup.d.ts.map +1 -0
  59. package/dist/ai/setup.js +47 -0
  60. package/dist/ai/setup.js.map +1 -0
  61. package/dist/ai/summarizer.d.ts +24 -0
  62. package/dist/ai/summarizer.d.ts.map +1 -0
  63. package/dist/ai/summarizer.js +56 -0
  64. package/dist/ai/summarizer.js.map +1 -0
  65. package/dist/ai/types.d.ts +83 -0
  66. package/dist/ai/types.d.ts.map +1 -0
  67. package/dist/ai/types.js +2 -0
  68. package/dist/ai/types.js.map +1 -0
  69. package/dist/core/compaction/circuit-breaker.d.ts +32 -0
  70. package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
  71. package/dist/core/compaction/circuit-breaker.js +42 -0
  72. package/dist/core/compaction/circuit-breaker.js.map +1 -0
  73. package/dist/core/compaction/compactor.d.ts +75 -0
  74. package/dist/core/compaction/compactor.d.ts.map +1 -0
  75. package/dist/core/compaction/compactor.js +261 -0
  76. package/dist/core/compaction/compactor.js.map +1 -0
  77. package/dist/core/compaction/estimate.d.ts +39 -0
  78. package/dist/core/compaction/estimate.d.ts.map +1 -0
  79. package/dist/core/compaction/estimate.js +74 -0
  80. package/dist/core/compaction/estimate.js.map +1 -0
  81. package/dist/core/compaction/index.d.ts +5 -0
  82. package/dist/core/compaction/index.d.ts.map +1 -0
  83. package/dist/core/compaction/index.js +5 -0
  84. package/dist/core/compaction/index.js.map +1 -0
  85. package/dist/core/compaction/prune.d.ts +43 -0
  86. package/dist/core/compaction/prune.d.ts.map +1 -0
  87. package/dist/core/compaction/prune.js +51 -0
  88. package/dist/core/compaction/prune.js.map +1 -0
  89. package/dist/core/engine.d.ts +268 -0
  90. package/dist/core/engine.d.ts.map +1 -0
  91. package/dist/core/engine.js +767 -0
  92. package/dist/core/engine.js.map +1 -0
  93. package/dist/core/index.d.ts +6 -0
  94. package/dist/core/index.d.ts.map +1 -0
  95. package/dist/core/index.js +6 -0
  96. package/dist/core/index.js.map +1 -0
  97. package/dist/core/task-tool.d.ts +175 -0
  98. package/dist/core/task-tool.d.ts.map +1 -0
  99. package/dist/core/task-tool.js +901 -0
  100. package/dist/core/task-tool.js.map +1 -0
  101. package/dist/core/workspace-query.d.ts +83 -0
  102. package/dist/core/workspace-query.d.ts.map +1 -0
  103. package/dist/core/workspace-query.js +217 -0
  104. package/dist/core/workspace-query.js.map +1 -0
  105. package/dist/core/worktree/active-marker.d.ts +31 -0
  106. package/dist/core/worktree/active-marker.d.ts.map +1 -0
  107. package/dist/core/worktree/active-marker.js +109 -0
  108. package/dist/core/worktree/active-marker.js.map +1 -0
  109. package/dist/core/worktree/create.d.ts +40 -0
  110. package/dist/core/worktree/create.d.ts.map +1 -0
  111. package/dist/core/worktree/create.js +121 -0
  112. package/dist/core/worktree/create.js.map +1 -0
  113. package/dist/core/worktree/errors.d.ts +7 -0
  114. package/dist/core/worktree/errors.d.ts.map +1 -0
  115. package/dist/core/worktree/errors.js +11 -0
  116. package/dist/core/worktree/errors.js.map +1 -0
  117. package/dist/core/worktree/gc.d.ts +39 -0
  118. package/dist/core/worktree/gc.d.ts.map +1 -0
  119. package/dist/core/worktree/gc.js +146 -0
  120. package/dist/core/worktree/gc.js.map +1 -0
  121. package/dist/core/worktree/git.d.ts +53 -0
  122. package/dist/core/worktree/git.d.ts.map +1 -0
  123. package/dist/core/worktree/git.js +166 -0
  124. package/dist/core/worktree/git.js.map +1 -0
  125. package/dist/core/worktree/index.d.ts +8 -0
  126. package/dist/core/worktree/index.d.ts.map +1 -0
  127. package/dist/core/worktree/index.js +8 -0
  128. package/dist/core/worktree/index.js.map +1 -0
  129. package/dist/core/worktree/paths.d.ts +26 -0
  130. package/dist/core/worktree/paths.d.ts.map +1 -0
  131. package/dist/core/worktree/paths.js +57 -0
  132. package/dist/core/worktree/paths.js.map +1 -0
  133. package/dist/core/worktree/slug.d.ts +6 -0
  134. package/dist/core/worktree/slug.d.ts.map +1 -0
  135. package/dist/core/worktree/slug.js +21 -0
  136. package/dist/core/worktree/slug.js.map +1 -0
  137. package/dist/local-vault/file-store.d.ts +64 -0
  138. package/dist/local-vault/file-store.d.ts.map +1 -0
  139. package/dist/local-vault/file-store.js +225 -0
  140. package/dist/local-vault/file-store.js.map +1 -0
  141. package/dist/local-vault/index.d.ts +57 -0
  142. package/dist/local-vault/index.d.ts.map +1 -0
  143. package/dist/local-vault/index.js +68 -0
  144. package/dist/local-vault/index.js.map +1 -0
  145. package/dist/local-vault/keychain.d.ts +58 -0
  146. package/dist/local-vault/keychain.d.ts.map +1 -0
  147. package/dist/local-vault/keychain.js +200 -0
  148. package/dist/local-vault/keychain.js.map +1 -0
  149. package/dist/local-vault/mutex.d.ts +20 -0
  150. package/dist/local-vault/mutex.d.ts.map +1 -0
  151. package/dist/local-vault/mutex.js +44 -0
  152. package/dist/local-vault/mutex.js.map +1 -0
  153. package/dist/local-vault/passphrase.d.ts +30 -0
  154. package/dist/local-vault/passphrase.d.ts.map +1 -0
  155. package/dist/local-vault/passphrase.js +72 -0
  156. package/dist/local-vault/passphrase.js.map +1 -0
  157. package/dist/lsp/config.d.ts +34 -0
  158. package/dist/lsp/config.d.ts.map +1 -0
  159. package/dist/lsp/config.js +68 -0
  160. package/dist/lsp/config.js.map +1 -0
  161. package/dist/lsp/detect.d.ts +7 -0
  162. package/dist/lsp/detect.d.ts.map +1 -0
  163. package/dist/lsp/detect.js +78 -0
  164. package/dist/lsp/detect.js.map +1 -0
  165. package/dist/lsp/errors.d.ts +11 -0
  166. package/dist/lsp/errors.d.ts.map +1 -0
  167. package/dist/lsp/errors.js +11 -0
  168. package/dist/lsp/errors.js.map +1 -0
  169. package/dist/lsp/formatters.d.ts +147 -0
  170. package/dist/lsp/formatters.d.ts.map +1 -0
  171. package/dist/lsp/formatters.js +259 -0
  172. package/dist/lsp/formatters.js.map +1 -0
  173. package/dist/lsp/index.d.ts +31 -0
  174. package/dist/lsp/index.d.ts.map +1 -0
  175. package/dist/lsp/index.js +31 -0
  176. package/dist/lsp/index.js.map +1 -0
  177. package/dist/lsp/instance.d.ts +72 -0
  178. package/dist/lsp/instance.d.ts.map +1 -0
  179. package/dist/lsp/instance.js +489 -0
  180. package/dist/lsp/instance.js.map +1 -0
  181. package/dist/lsp/lazy-load.d.ts +27 -0
  182. package/dist/lsp/lazy-load.d.ts.map +1 -0
  183. package/dist/lsp/lazy-load.js +57 -0
  184. package/dist/lsp/lazy-load.js.map +1 -0
  185. package/dist/lsp/manager.d.ts +59 -0
  186. package/dist/lsp/manager.d.ts.map +1 -0
  187. package/dist/lsp/manager.js +242 -0
  188. package/dist/lsp/manager.js.map +1 -0
  189. package/dist/lsp/ops.d.ts +13 -0
  190. package/dist/lsp/ops.d.ts.map +1 -0
  191. package/dist/lsp/ops.js +225 -0
  192. package/dist/lsp/ops.js.map +1 -0
  193. package/dist/lsp/rpc.d.ts +47 -0
  194. package/dist/lsp/rpc.d.ts.map +1 -0
  195. package/dist/lsp/rpc.js +134 -0
  196. package/dist/lsp/rpc.js.map +1 -0
  197. package/dist/lsp/safe-uri.d.ts +18 -0
  198. package/dist/lsp/safe-uri.d.ts.map +1 -0
  199. package/dist/lsp/safe-uri.js +96 -0
  200. package/dist/lsp/safe-uri.js.map +1 -0
  201. package/dist/lsp/types.d.ts +70 -0
  202. package/dist/lsp/types.d.ts.map +1 -0
  203. package/dist/lsp/types.js +16 -0
  204. package/dist/lsp/types.js.map +1 -0
  205. package/dist/mcp/bridge.d.ts +57 -0
  206. package/dist/mcp/bridge.d.ts.map +1 -0
  207. package/dist/mcp/bridge.js +98 -0
  208. package/dist/mcp/bridge.js.map +1 -0
  209. package/dist/mcp/category.d.ts +22 -0
  210. package/dist/mcp/category.d.ts.map +1 -0
  211. package/dist/mcp/category.js +11 -0
  212. package/dist/mcp/category.js.map +1 -0
  213. package/dist/mcp/client.d.ts +228 -0
  214. package/dist/mcp/client.d.ts.map +1 -0
  215. package/dist/mcp/client.js +352 -0
  216. package/dist/mcp/client.js.map +1 -0
  217. package/dist/mcp/content.d.ts +86 -0
  218. package/dist/mcp/content.d.ts.map +1 -0
  219. package/dist/mcp/content.js +147 -0
  220. package/dist/mcp/content.js.map +1 -0
  221. package/dist/mcp/env.d.ts +19 -0
  222. package/dist/mcp/env.d.ts.map +1 -0
  223. package/dist/mcp/env.js +50 -0
  224. package/dist/mcp/env.js.map +1 -0
  225. package/dist/mcp/host.d.ts +199 -0
  226. package/dist/mcp/host.d.ts.map +1 -0
  227. package/dist/mcp/host.js +530 -0
  228. package/dist/mcp/host.js.map +1 -0
  229. package/dist/mcp/index.d.ts +18 -0
  230. package/dist/mcp/index.d.ts.map +1 -0
  231. package/dist/mcp/index.js +17 -0
  232. package/dist/mcp/index.js.map +1 -0
  233. package/dist/mcp/load-mcp-host.d.ts +32 -0
  234. package/dist/mcp/load-mcp-host.d.ts.map +1 -0
  235. package/dist/mcp/load-mcp-host.js +49 -0
  236. package/dist/mcp/load-mcp-host.js.map +1 -0
  237. package/dist/mcp/oauth/callback-server.d.ts +73 -0
  238. package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
  239. package/dist/mcp/oauth/callback-server.js +280 -0
  240. package/dist/mcp/oauth/callback-server.js.map +1 -0
  241. package/dist/mcp/oauth/config-hash.d.ts +24 -0
  242. package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
  243. package/dist/mcp/oauth/config-hash.js +55 -0
  244. package/dist/mcp/oauth/config-hash.js.map +1 -0
  245. package/dist/mcp/oauth/error-normalize.d.ts +39 -0
  246. package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
  247. package/dist/mcp/oauth/error-normalize.js +91 -0
  248. package/dist/mcp/oauth/error-normalize.js.map +1 -0
  249. package/dist/mcp/oauth/provider.d.ts +190 -0
  250. package/dist/mcp/oauth/provider.d.ts.map +1 -0
  251. package/dist/mcp/oauth/provider.js +305 -0
  252. package/dist/mcp/oauth/provider.js.map +1 -0
  253. package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
  254. package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
  255. package/dist/mcp/oauth/refresh-coalescer.js +77 -0
  256. package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
  257. package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
  258. package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
  259. package/dist/mcp/oauth/sdk-shapes.js +21 -0
  260. package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
  261. package/dist/mcp/parse.d.ts +28 -0
  262. package/dist/mcp/parse.d.ts.map +1 -0
  263. package/dist/mcp/parse.js +209 -0
  264. package/dist/mcp/parse.js.map +1 -0
  265. package/dist/mcp/prompts.d.ts +31 -0
  266. package/dist/mcp/prompts.d.ts.map +1 -0
  267. package/dist/mcp/prompts.js +71 -0
  268. package/dist/mcp/prompts.js.map +1 -0
  269. package/dist/mcp/redact.d.ts +62 -0
  270. package/dist/mcp/redact.d.ts.map +1 -0
  271. package/dist/mcp/redact.js +87 -0
  272. package/dist/mcp/redact.js.map +1 -0
  273. package/dist/mcp/resources.d.ts +70 -0
  274. package/dist/mcp/resources.d.ts.map +1 -0
  275. package/dist/mcp/resources.js +170 -0
  276. package/dist/mcp/resources.js.map +1 -0
  277. package/dist/mcp/types.d.ts +123 -0
  278. package/dist/mcp/types.d.ts.map +1 -0
  279. package/dist/mcp/types.js +2 -0
  280. package/dist/mcp/types.js.map +1 -0
  281. package/dist/memory/frontmatter.d.ts +18 -0
  282. package/dist/memory/frontmatter.d.ts.map +1 -0
  283. package/dist/memory/frontmatter.js +81 -0
  284. package/dist/memory/frontmatter.js.map +1 -0
  285. package/dist/memory/index.d.ts +5 -0
  286. package/dist/memory/index.d.ts.map +1 -0
  287. package/dist/memory/index.js +5 -0
  288. package/dist/memory/index.js.map +1 -0
  289. package/dist/memory/store.d.ts +44 -0
  290. package/dist/memory/store.d.ts.map +1 -0
  291. package/dist/memory/store.js +237 -0
  292. package/dist/memory/store.js.map +1 -0
  293. package/dist/memory/tools.d.ts +11 -0
  294. package/dist/memory/tools.d.ts.map +1 -0
  295. package/dist/memory/tools.js +159 -0
  296. package/dist/memory/tools.js.map +1 -0
  297. package/dist/memory/types.d.ts +32 -0
  298. package/dist/memory/types.d.ts.map +1 -0
  299. package/dist/memory/types.js +20 -0
  300. package/dist/memory/types.js.map +1 -0
  301. package/dist/plugin-api/index.d.ts +167 -0
  302. package/dist/plugin-api/index.d.ts.map +1 -0
  303. package/dist/plugin-api/index.js +151 -0
  304. package/dist/plugin-api/index.js.map +1 -0
  305. package/dist/plugin-logger/index.d.ts +21 -0
  306. package/dist/plugin-logger/index.d.ts.map +1 -0
  307. package/dist/plugin-logger/index.js +59 -0
  308. package/dist/plugin-logger/index.js.map +1 -0
  309. package/dist/session/index.d.ts +125 -0
  310. package/dist/session/index.d.ts.map +1 -0
  311. package/dist/session/index.js +202 -0
  312. package/dist/session/index.js.map +1 -0
  313. package/dist/tools/approval.d.ts +33 -0
  314. package/dist/tools/approval.d.ts.map +1 -0
  315. package/dist/tools/approval.js +53 -0
  316. package/dist/tools/approval.js.map +1 -0
  317. package/dist/tools/builtins/_shared.d.ts +94 -0
  318. package/dist/tools/builtins/_shared.d.ts.map +1 -0
  319. package/dist/tools/builtins/_shared.js +246 -0
  320. package/dist/tools/builtins/_shared.js.map +1 -0
  321. package/dist/tools/builtins/ask-user-question.d.ts +27 -0
  322. package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
  323. package/dist/tools/builtins/ask-user-question.js +191 -0
  324. package/dist/tools/builtins/ask-user-question.js.map +1 -0
  325. package/dist/tools/builtins/bash.d.ts +3 -0
  326. package/dist/tools/builtins/bash.d.ts.map +1 -0
  327. package/dist/tools/builtins/bash.js +158 -0
  328. package/dist/tools/builtins/bash.js.map +1 -0
  329. package/dist/tools/builtins/diff.d.ts +3 -0
  330. package/dist/tools/builtins/diff.d.ts.map +1 -0
  331. package/dist/tools/builtins/diff.js +83 -0
  332. package/dist/tools/builtins/diff.js.map +1 -0
  333. package/dist/tools/builtins/edit.d.ts +3 -0
  334. package/dist/tools/builtins/edit.d.ts.map +1 -0
  335. package/dist/tools/builtins/edit.js +40 -0
  336. package/dist/tools/builtins/edit.js.map +1 -0
  337. package/dist/tools/builtins/glob.d.ts +3 -0
  338. package/dist/tools/builtins/glob.d.ts.map +1 -0
  339. package/dist/tools/builtins/glob.js +37 -0
  340. package/dist/tools/builtins/glob.js.map +1 -0
  341. package/dist/tools/builtins/grep.d.ts +3 -0
  342. package/dist/tools/builtins/grep.d.ts.map +1 -0
  343. package/dist/tools/builtins/grep.js +81 -0
  344. package/dist/tools/builtins/grep.js.map +1 -0
  345. package/dist/tools/builtins/lsp.d.ts +3 -0
  346. package/dist/tools/builtins/lsp.d.ts.map +1 -0
  347. package/dist/tools/builtins/lsp.js +102 -0
  348. package/dist/tools/builtins/lsp.js.map +1 -0
  349. package/dist/tools/builtins/pty.d.ts +64 -0
  350. package/dist/tools/builtins/pty.d.ts.map +1 -0
  351. package/dist/tools/builtins/pty.js +536 -0
  352. package/dist/tools/builtins/pty.js.map +1 -0
  353. package/dist/tools/builtins/read.d.ts +3 -0
  354. package/dist/tools/builtins/read.d.ts.map +1 -0
  355. package/dist/tools/builtins/read.js +18 -0
  356. package/dist/tools/builtins/read.js.map +1 -0
  357. package/dist/tools/builtins/web-fetch.d.ts +4 -0
  358. package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
  359. package/dist/tools/builtins/web-fetch.js +353 -0
  360. package/dist/tools/builtins/web-fetch.js.map +1 -0
  361. package/dist/tools/builtins/write.d.ts +3 -0
  362. package/dist/tools/builtins/write.d.ts.map +1 -0
  363. package/dist/tools/builtins/write.js +48 -0
  364. package/dist/tools/builtins/write.js.map +1 -0
  365. package/dist/tools/builtins.d.ts +9 -0
  366. package/dist/tools/builtins.d.ts.map +1 -0
  367. package/dist/tools/builtins.js +29 -0
  368. package/dist/tools/builtins.js.map +1 -0
  369. package/dist/tools/diff.d.ts +18 -0
  370. package/dist/tools/diff.d.ts.map +1 -0
  371. package/dist/tools/diff.js +57 -0
  372. package/dist/tools/diff.js.map +1 -0
  373. package/dist/tools/index.d.ts +10 -0
  374. package/dist/tools/index.d.ts.map +1 -0
  375. package/dist/tools/index.js +9 -0
  376. package/dist/tools/index.js.map +1 -0
  377. package/dist/tools/permission.d.ts +120 -0
  378. package/dist/tools/permission.d.ts.map +1 -0
  379. package/dist/tools/permission.js +208 -0
  380. package/dist/tools/permission.js.map +1 -0
  381. package/dist/tools/registry.d.ts +12 -0
  382. package/dist/tools/registry.d.ts.map +1 -0
  383. package/dist/tools/registry.js +19 -0
  384. package/dist/tools/registry.js.map +1 -0
  385. package/dist/tools/types.d.ts +244 -0
  386. package/dist/tools/types.d.ts.map +1 -0
  387. package/dist/tools/types.js +15 -0
  388. package/dist/tools/types.js.map +1 -0
  389. package/package.json +109 -0
@@ -0,0 +1,70 @@
1
+ import type { Tool } from "../tools/index.js";
2
+ import type { McpResource, McpResourceContent } from "./types.js";
3
+ /** A parsed `@<server>:<uri>` mention from user input. */
4
+ export interface ResourceMention {
5
+ ref: string;
6
+ server: string;
7
+ uri: string;
8
+ }
9
+ /** A resource resolved (or attempted) for injection into a turn. */
10
+ export interface McpResolvedResource {
11
+ ref: string;
12
+ server: string;
13
+ uri: string;
14
+ /** Rendered, capped, redacted content. Present on success. */
15
+ text?: string;
16
+ /** Why it couldn't be read (server offline, read error). Mutually exclusive
17
+ * with `text`. Absent + absent text ⇒ caller skipped it (non-member). */
18
+ note?: string;
19
+ }
20
+ /**
21
+ * (5.4 D4) Extract `@<server>:<uri>` mentions. The `@` must start a token
22
+ * (`(^|\s)@`) so an email (`a@b.com`) never matches; the body must contain an
23
+ * internal colon so a bare `@channel` is ignored. We capture the whole
24
+ * non-whitespace run and then strip trailing PROSE punctuation
25
+ * (`. , ; : ! ? ) ]`) — NOT `/`, so a directory-style URI ending in `/` is kept
26
+ * (5.4 R2: the old trailing-`\b` silently truncated `…/tmp/` and `…/a.md.`,
27
+ * which then missed the exact-cached match). Split on the FIRST colon →
28
+ * `(server, uri)`. Deduped by `ref`.
29
+ */
30
+ export declare function extractResourceMentions(text: string): ResourceMention[];
31
+ /**
32
+ * (5.4 D9′) The narrow host surface the resource tools + mention resolver need.
33
+ * `readResource` returns the raw content plus the per-server redactor (the host
34
+ * owns the secret bag); rendering/persistence happens in the tool/resolver which
35
+ * have the workspace root. Throws `AppError` on unknown server / read failure /
36
+ * restart race so callers can surface a clean message.
37
+ */
38
+ export interface McpResourceProvider {
39
+ /** Cached `resources/list` snapshot, optionally filtered to one server. */
40
+ resources(server?: string): McpResource[];
41
+ readResource(server: string, uri: string, signal: AbortSignal): Promise<{
42
+ contents: McpResourceContent[];
43
+ redact: (msg: string) => string;
44
+ }>;
45
+ }
46
+ export interface ResourceToolOptions {
47
+ /** UTF-8 byte cap for inline resource text (`config.mcp.resourceReadMaxBytes`). */
48
+ maxBytes: number;
49
+ }
50
+ /**
51
+ * (5.4 D5/N2) The two GLOBAL resource tools. They are intentionally NOT named
52
+ * `mcp__<server>__<tool>` (that prefix is reserved for bridged server tools) —
53
+ * single underscore + an explicit "global; pass {server, uri}" description so
54
+ * the model doesn't infer a server named `read`.
55
+ */
56
+ export declare function makeResourceTools(provider: McpResourceProvider, opts: ResourceToolOptions): Tool[];
57
+ /**
58
+ * (5.4 D4′/M3/S2) Resolve `@<server>:<uri>` mentions in DIRECTLY-TYPED user
59
+ * input. Only resolves mentions whose `(server, uri)` EXACTLY match the cached
60
+ * `resources/list` (S2 — a known-server prefix + arbitrary URI must go through
61
+ * the gated `mcp_read_resource` tool, never an ungated pre-turn read). Non-
62
+ * members are skipped (left as plain text). Read failures become a `note` and
63
+ * never throw — a bad @-ref must not abort the turn. NOT called on prompt-command
64
+ * output (M3 — the engine passes `expandMentions:false` for that).
65
+ */
66
+ export declare function resolveMcpMentions(provider: McpResourceProvider, prompt: string, signal: AbortSignal, opts: {
67
+ maxBytes: number;
68
+ artifactRoot: string;
69
+ }): Promise<McpResolvedResource[]>;
70
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,IAAI,EAA2B,MAAM,mBAAmB,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGlE,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;8EAC0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAgBvE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC1C,YAAY,CACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,mBAAmB;IAClC,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,CAsFlG;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuBhC"}
@@ -0,0 +1,170 @@
1
+ import { AppError, ErrorCode } from "@chances-ai/runtime";
2
+ import { formatResourceContents, persistResourceBlob } from "./content.js";
3
+ /**
4
+ * (5.4 D4) Extract `@<server>:<uri>` mentions. The `@` must start a token
5
+ * (`(^|\s)@`) so an email (`a@b.com`) never matches; the body must contain an
6
+ * internal colon so a bare `@channel` is ignored. We capture the whole
7
+ * non-whitespace run and then strip trailing PROSE punctuation
8
+ * (`. , ; : ! ? ) ]`) — NOT `/`, so a directory-style URI ending in `/` is kept
9
+ * (5.4 R2: the old trailing-`\b` silently truncated `…/tmp/` and `…/a.md.`,
10
+ * which then missed the exact-cached match). Split on the FIRST colon →
11
+ * `(server, uri)`. Deduped by `ref`.
12
+ */
13
+ export function extractResourceMentions(text) {
14
+ const re = /(^|\s)@(\S+)/g;
15
+ const seen = new Set();
16
+ const out = [];
17
+ let m;
18
+ while ((m = re.exec(text)) !== null) {
19
+ const ref = m[2].replace(/[.,;:!?)\]]+$/, "");
20
+ if (seen.has(ref))
21
+ continue;
22
+ seen.add(ref);
23
+ const colon = ref.indexOf(":");
24
+ if (colon <= 0)
25
+ continue; // no internal colon (or leading colon) → not a mention
26
+ const server = ref.slice(0, colon);
27
+ const uri = ref.slice(colon + 1);
28
+ if (server && uri)
29
+ out.push({ ref, server, uri });
30
+ }
31
+ return out;
32
+ }
33
+ function str(args, key) {
34
+ if (args && typeof args === "object" && !Array.isArray(args)) {
35
+ const v = args[key];
36
+ if (typeof v === "string")
37
+ return v;
38
+ }
39
+ return undefined;
40
+ }
41
+ /**
42
+ * (5.4 D5/N2) The two GLOBAL resource tools. They are intentionally NOT named
43
+ * `mcp__<server>__<tool>` (that prefix is reserved for bridged server tools) —
44
+ * single underscore + an explicit "global; pass {server, uri}" description so
45
+ * the model doesn't infer a server named `read`.
46
+ */
47
+ export function makeResourceTools(provider, opts) {
48
+ const list = {
49
+ name: "mcp_list_resources",
50
+ description: "List resources exposed by connected MCP servers (global; optional {server} filter). " +
51
+ "Returns lines of '<server>:<uri> <name> (<mimeType>)'. Read one with mcp_read_resource.",
52
+ category: "search",
53
+ parameters: {
54
+ type: "object",
55
+ properties: { server: { type: "string", description: "Optional server id filter" } },
56
+ },
57
+ summarize: (args) => {
58
+ const s = str(args, "server");
59
+ return s ? `list MCP resources (server '${s}')` : "list MCP resources";
60
+ },
61
+ async execute(args) {
62
+ const server = str(args, "server");
63
+ const resources = provider.resources(server);
64
+ if (resources.length === 0) {
65
+ return { ok: true, output: server ? `(no resources on server '${server}')` : "(no MCP resources available)" };
66
+ }
67
+ const lines = resources.map((r) => {
68
+ const name = r.name ? ` ${r.name}` : "";
69
+ const mime = r.mimeType ? ` (${r.mimeType})` : "";
70
+ return `${r.server}:${r.uri}${name}${mime}`;
71
+ });
72
+ return { ok: true, output: lines.join("\n") };
73
+ },
74
+ };
75
+ const read = {
76
+ name: "mcp_read_resource",
77
+ description: "Read one MCP resource (global; pass {server, uri}). Text is returned inline (capped); " +
78
+ "binary blobs are saved to disk and referenced by path. Discover URIs with mcp_list_resources.",
79
+ category: "integration",
80
+ parameters: {
81
+ type: "object",
82
+ properties: {
83
+ server: { type: "string", description: "MCP server id" },
84
+ uri: { type: "string", description: "Resource URI" },
85
+ },
86
+ required: ["server", "uri"],
87
+ },
88
+ summarize: (args) => {
89
+ const server = str(args, "server") ?? "?";
90
+ const uri = str(args, "uri") ?? "?";
91
+ return `read resource '${uri}' from MCP server '${server}'`;
92
+ },
93
+ // (5.4 D5/M4) Per-server cache scope: approving reads from server A must
94
+ // not pre-approve server B. The slash lifecycle invalidates
95
+ // `mcp_read_resource/<server>` on restart/remove/logout.
96
+ permission(args, ctx) {
97
+ const server = str(args, "server") ?? "?";
98
+ return {
99
+ name: "mcp_read_resource",
100
+ category: "integration",
101
+ summary: this.summarize(args, ctx),
102
+ args,
103
+ cacheKey: `mcp_read_resource/${server}`,
104
+ };
105
+ },
106
+ async execute(args, ctx) {
107
+ const server = str(args, "server");
108
+ const uri = str(args, "uri");
109
+ if (!server || !uri) {
110
+ return { ok: false, output: "mcp_read_resource requires { server, uri }" };
111
+ }
112
+ try {
113
+ const { contents, redact } = await provider.readResource(server, uri, ctx.signal);
114
+ const root = ctx.parentWorkspaceRoot ?? ctx.workspaceRoot;
115
+ const output = formatResourceContents(contents, {
116
+ redact,
117
+ maxBytes: opts.maxBytes,
118
+ persistBlob: (buf, mime) => persistResourceBlob(root, buf, mime),
119
+ });
120
+ return { ok: true, output: output || "(empty resource)" };
121
+ }
122
+ catch (e) {
123
+ if (ctx.signal.aborted)
124
+ throw new AppError(ErrorCode.Cancelled, "Operation cancelled");
125
+ if (e instanceof AppError && e.code === ErrorCode.Cancelled)
126
+ throw e;
127
+ return { ok: false, output: e.message };
128
+ }
129
+ },
130
+ };
131
+ return [list, read];
132
+ }
133
+ /**
134
+ * (5.4 D4′/M3/S2) Resolve `@<server>:<uri>` mentions in DIRECTLY-TYPED user
135
+ * input. Only resolves mentions whose `(server, uri)` EXACTLY match the cached
136
+ * `resources/list` (S2 — a known-server prefix + arbitrary URI must go through
137
+ * the gated `mcp_read_resource` tool, never an ungated pre-turn read). Non-
138
+ * members are skipped (left as plain text). Read failures become a `note` and
139
+ * never throw — a bad @-ref must not abort the turn. NOT called on prompt-command
140
+ * output (M3 — the engine passes `expandMentions:false` for that).
141
+ */
142
+ export async function resolveMcpMentions(provider, prompt, signal, opts) {
143
+ const mentions = extractResourceMentions(prompt);
144
+ if (mentions.length === 0)
145
+ return [];
146
+ const out = [];
147
+ for (const mention of mentions) {
148
+ const member = provider
149
+ .resources(mention.server)
150
+ .some((r) => r.server === mention.server && r.uri === mention.uri);
151
+ if (!member)
152
+ continue; // S2: only exact cached members; else plain text.
153
+ try {
154
+ const { contents, redact } = await provider.readResource(mention.server, mention.uri, signal);
155
+ const text = formatResourceContents(contents, {
156
+ redact,
157
+ maxBytes: opts.maxBytes,
158
+ persistBlob: (buf, mime) => persistResourceBlob(opts.artifactRoot, buf, mime),
159
+ });
160
+ out.push({ ...mention, text: text || "(empty resource)" });
161
+ }
162
+ catch (e) {
163
+ if (signal.aborted)
164
+ throw new AppError(ErrorCode.Cancelled, "Operation cancelled");
165
+ out.push({ ...mention, note: `could not read: ${e.message}` });
166
+ }
167
+ }
168
+ return out;
169
+ }
170
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Per-server config entry. The two transport flavors we ship in 3.1:
3
+ * - `stdio`: spawn a subprocess and exchange JSON-RPC over stdin/stdout.
4
+ * Default for most filesystem / cli MCP servers.
5
+ * - `http`: hit a streamable-HTTP endpoint. The MCP spec replaces SSE with
6
+ * streamable HTTP, so we don't ship SSE separately.
7
+ *
8
+ * `enabled: false` keeps the entry in config but skips connection on boot —
9
+ * useful for temporarily silencing a flaky server without losing its config.
10
+ */
11
+ export type McpServerConfig = StdioMcpConfig | HttpMcpConfig;
12
+ interface BaseMcpConfig {
13
+ /** Default true. Disabled servers are listed by `/mcp` but never connect. */
14
+ enabled?: boolean;
15
+ /** Per-request timeout in milliseconds; default 30 000. */
16
+ timeoutMs?: number;
17
+ }
18
+ export interface StdioMcpConfig extends BaseMcpConfig {
19
+ type: "stdio";
20
+ command: string;
21
+ args?: string[];
22
+ /** Extra env vars merged onto `process.env` when spawning the subprocess. */
23
+ env?: Record<string, string>;
24
+ cwd?: string;
25
+ }
26
+ export interface HttpMcpConfig extends BaseMcpConfig {
27
+ type: "http";
28
+ url: string;
29
+ headers?: Record<string, string>;
30
+ /** (3.7) Optional OAuth configuration. When present, the host wires
31
+ * the chances OAuth provider into the SDK's streamable-HTTP
32
+ * transport. See `oauth/types.ts` for the discriminated union. */
33
+ auth?: OAuthMcpAuth;
34
+ }
35
+ /**
36
+ * (3.7) OAuth configuration for an HTTP-transport MCP server.
37
+ * Currently `oauth` is the only `kind`; reserved for future variants
38
+ * like `client_credentials` (M2M) without breaking config schema.
39
+ */
40
+ export interface OAuthMcpAuth {
41
+ kind: "oauth";
42
+ /** Optional explicit auth-server metadata URL. When absent, the SDK
43
+ * probes RFC 9728 → RFC 8414 starting from `serverConfig.url`. */
44
+ authServerMetadataUrl?: string;
45
+ /** Pre-registered OAuth client ID. When absent, Dynamic Client
46
+ * Registration (RFC 7591) runs on first flow. */
47
+ clientId?: string;
48
+ /** Pre-registered client secret. Only meaningful with `clientId`. */
49
+ clientSecret?: string;
50
+ /** OAuth scopes requested at consent. Empty array = the IdP's default. */
51
+ scopes?: readonly string[];
52
+ /** Override loopback callback port. When set, port-fallback is
53
+ * DISABLED (oh-my-pi commit `c246d88db` lesson — silent fallback
54
+ * breaks exact-URI-match with registered redirect_uri). */
55
+ callbackPort?: number;
56
+ }
57
+ /**
58
+ * Per-server lifecycle snapshot. Surfaced through `McpHost.status()` so the
59
+ * `/mcp` slash command can render a meaningful list — including failed
60
+ * servers, not just running ones (otherwise users can't tell why a tool
61
+ * disappeared).
62
+ */
63
+ export interface McpServerStatus {
64
+ id: string;
65
+ state: "starting" | "ready" | "failed" | "disabled" | "disposed";
66
+ /** Populated when `state === "failed"`. */
67
+ error?: string;
68
+ /** Tools discovered after a successful `tools/list`. Undefined when not yet ready. */
69
+ toolCount?: number;
70
+ /** Names of tools registered into the engine's ToolRegistry. */
71
+ toolNames?: readonly string[];
72
+ }
73
+ /** Result of `/mcp test <name>` — a one-shot connect + list + dispose. */
74
+ export interface McpTestResult {
75
+ ok: boolean;
76
+ /** When ok: the discovered tool names. Otherwise: the error reason. */
77
+ output: string;
78
+ }
79
+ /**
80
+ * (5.4) A resource a server advertises via `resources/list`. We keep the
81
+ * subset we surface; servers may carry more (annotations, size). `server` is
82
+ * stamped by the host so a flat resource list across servers stays attributable
83
+ * (the `@<server>:<uri>` mention + `mcp_read_resource({server, uri})` both need it).
84
+ */
85
+ export interface McpResource {
86
+ /** Owning server id — stamped by the host, not the wire. */
87
+ server: string;
88
+ uri: string;
89
+ name?: string;
90
+ description?: string;
91
+ mimeType?: string;
92
+ }
93
+ /** One content item from `resources/read`. Text xor blob (base64). */
94
+ export interface McpResourceContent {
95
+ uri?: string;
96
+ mimeType?: string;
97
+ text?: string;
98
+ /** base64 — persisted to disk by the reader, never inlined into context. */
99
+ blob?: string;
100
+ }
101
+ /** A declared argument of a server prompt (`prompts/list`). */
102
+ export interface McpPromptArgument {
103
+ name: string;
104
+ description?: string;
105
+ required?: boolean;
106
+ }
107
+ /**
108
+ * (5.4) A prompt a server advertises via `prompts/list`. `server` is stamped by
109
+ * the host. Surfaced as the slash command `/<server>:<name>`.
110
+ */
111
+ export interface McpPrompt {
112
+ server: string;
113
+ name: string;
114
+ description?: string;
115
+ arguments?: McpPromptArgument[];
116
+ }
117
+ /** One message from `prompts/get` — role + MCP content part(s). */
118
+ export interface McpPromptMessage {
119
+ role: "user" | "assistant";
120
+ content: unknown;
121
+ }
122
+ export {};
123
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { type MemoryType } from "./types.js";
2
+ /**
3
+ * Minimal YAML-frontmatter reader. We intentionally don't pull in a YAML lib —
4
+ * the schema is fixed (name / description / type, all single-line strings), so
5
+ * a line-by-line parser is both smaller and safer (no surprise type coercion).
6
+ */
7
+ export interface ParsedFrontmatter {
8
+ name: string;
9
+ description: string;
10
+ type: MemoryType;
11
+ }
12
+ export interface ParsedMemoryFile {
13
+ frontmatter: ParsedFrontmatter;
14
+ body: string;
15
+ }
16
+ export declare function parseMemoryFile(raw: string): ParsedMemoryFile | null;
17
+ export declare function formatMemoryFile(fm: ParsedFrontmatter, body: string): string;
18
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/memory/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA8BpE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB5E"}
@@ -0,0 +1,81 @@
1
+ import { isMemoryType } from "./types.js";
2
+ const FRONTMATTER_DELIM = "---";
3
+ export function parseMemoryFile(raw) {
4
+ const lines = raw.split(/\r?\n/);
5
+ if (lines[0]?.trim() !== FRONTMATTER_DELIM)
6
+ return null;
7
+ let end = -1;
8
+ for (let i = 1; i < lines.length; i++) {
9
+ if (lines[i]?.trim() === FRONTMATTER_DELIM) {
10
+ end = i;
11
+ break;
12
+ }
13
+ }
14
+ if (end < 0)
15
+ return null;
16
+ const fm = {};
17
+ for (let i = 1; i < end; i++) {
18
+ const line = lines[i] ?? "";
19
+ if (!line.trim() || line.trim().startsWith("#"))
20
+ continue;
21
+ const colon = line.indexOf(":");
22
+ if (colon < 0)
23
+ continue;
24
+ const key = line.slice(0, colon).trim();
25
+ const value = unquote(line.slice(colon + 1).trim());
26
+ if (key)
27
+ fm[key] = value;
28
+ }
29
+ const name = fm["name"];
30
+ const description = fm["description"] ?? "";
31
+ const type = fm["type"];
32
+ if (!name || !type || !isMemoryType(type))
33
+ return null;
34
+ // Strip the leading blank line that follows the closing `---`, and the
35
+ // trailing newline that POSIX-friendly file writers always append, so callers
36
+ // get the *content* without round-trip artifacts.
37
+ const body = lines.slice(end + 1).join("\n").replace(/^\n+/, "").replace(/\n+$/g, "");
38
+ return { frontmatter: { name, description, type }, body };
39
+ }
40
+ export function formatMemoryFile(fm, body) {
41
+ // Frontmatter values are single-line — collapse whitespace so a stray newline
42
+ // in name/description can't break the YAML scalar. Body keeps its newlines.
43
+ const safeName = singleLine(fm.name);
44
+ const safeDescription = singleLine(fm.description);
45
+ const trimmedBody = body.replace(/\r/g, "").replace(/\n+$/g, "");
46
+ return [
47
+ FRONTMATTER_DELIM,
48
+ `name: ${quoteIfNeeded(safeName)}`,
49
+ `description: ${quoteIfNeeded(safeDescription)}`,
50
+ `type: ${fm.type}`,
51
+ FRONTMATTER_DELIM,
52
+ "",
53
+ trimmedBody,
54
+ "",
55
+ ].join("\n");
56
+ }
57
+ function singleLine(s) {
58
+ return s.replace(/\s+/g, " ").trim();
59
+ }
60
+ function unquote(s) {
61
+ if (s.length >= 2 && s.startsWith("'") && s.endsWith("'")) {
62
+ // YAML single-quoted scalar: `''` is an escaped single quote.
63
+ return s.slice(1, -1).replace(/''/g, "'");
64
+ }
65
+ if (s.length >= 2 && s.startsWith('"') && s.endsWith('"')) {
66
+ return s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\");
67
+ }
68
+ return s;
69
+ }
70
+ function quoteIfNeeded(s) {
71
+ // Quote when YAML would otherwise misread the value: a leading special char or
72
+ // an internal colon. We always emit single-quoted form (only `'` itself needs
73
+ // escaping) so the unquote path doesn't have to handle YAML's full escape set.
74
+ if (s === "")
75
+ return "''";
76
+ if (/^[\s\-?:,\[\]{}#&*!|>'"%@`]/.test(s) || s.includes(":")) {
77
+ return `'${s.replace(/'/g, "''")}'`;
78
+ }
79
+ return s;
80
+ }
81
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/memory/frontmatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { MEMORY_TYPES, MEMORY_SCOPES, isMemoryType, isMemoryScope, type MemoryType, type MemoryScope, type MemoryEntry, } from "./types.js";
2
+ export { MemoryStore, slugify, type MemoryStoreOptions, type SaveInput } from "./store.js";
3
+ export { parseMemoryFile, formatMemoryFile, type ParsedFrontmatter, type ParsedMemoryFile } from "./frontmatter.js";
4
+ export { memoryTools } from "./tools.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { MEMORY_TYPES, MEMORY_SCOPES, isMemoryType, isMemoryScope, } from "./types.js";
2
+ export { MemoryStore, slugify } from "./store.js";
3
+ export { parseMemoryFile, formatMemoryFile } from "./frontmatter.js";
4
+ export { memoryTools } from "./tools.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GAId,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,OAAO,EAA2C,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAiD,MAAM,kBAAkB,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { type MemoryEntry, type MemoryScope, type MemoryType } from "./types.js";
2
+ export interface MemoryStoreOptions {
3
+ workspaceRoot: string;
4
+ homeDir: string;
5
+ }
6
+ export interface SaveInput {
7
+ type: MemoryType;
8
+ name: string;
9
+ description?: string;
10
+ body: string;
11
+ }
12
+ /**
13
+ * Concurrency note (v1): mutations are sync-per-process but not locked across
14
+ * parallel CLI processes. Two simultaneous saves can interleave such that the
15
+ * last MEMORY.md index rewrite reflects a stale `list()`. At v1 scale (single
16
+ * interactive CLI, occasional `-p` invocation) the worst case is a stale
17
+ * index until the next mutation — not data loss, since each entry file write
18
+ * is atomic and slugs collision-suffix. A per-scope lock file is queued for
19
+ * v2 alongside the relevance ranker (when memory becomes hot-path enough to
20
+ * race on).
21
+ */
22
+ export declare class MemoryStore {
23
+ private readonly dirs;
24
+ constructor(opts: MemoryStoreOptions);
25
+ /** Resolved on-disk directory for the given scope. Public so tools can show paths. */
26
+ dirFor(scope: MemoryScope): string;
27
+ list(scope?: MemoryScope): MemoryEntry[];
28
+ save(input: SaveInput, scope: MemoryScope): MemoryEntry;
29
+ /** Returns true if the slug existed and was removed. */
30
+ delete(slug: string, scope: MemoryScope): boolean;
31
+ /**
32
+ * Resolves a slug collision by walking `base`, `base-2`, `base-3`, ... until
33
+ * we find a slot that's either (a) empty or (b) holds an entry with the same
34
+ * name+type (in which case overwrite is the intended behavior — same memory
35
+ * being updated). This prevents two distinct memories whose names normalize
36
+ * to the same slug from silently clobbering each other.
37
+ */
38
+ private uniqueSlugFor;
39
+ /** System-prompt injection block. Empty string when nothing is saved. */
40
+ asSystemContext(): string;
41
+ private rewriteIndex;
42
+ }
43
+ export declare function slugify(s: string): string;
44
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AASpB,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;gBAEvC,IAAI,EAAE,kBAAkB;IAOpC,sFAAsF;IACtF,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IAIlC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE;IA2BxC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,WAAW;IAcvD,wDAAwD;IACxD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAUjD;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAmBrB,yEAAyE;IACzE,eAAe,IAAI,MAAM;IAUzB,OAAO,CAAC,YAAY;CA+BrB;AA8DD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQzC"}