@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,167 @@
1
+ import type { EventBus, Logger, JSONValue } from "@chances-ai/runtime";
2
+ import type { Tool, ToolRegistry } from "../tools/index.js";
3
+ /** Re-exported so plugin authors can write `import type { Tool } from
4
+ * "@chances-ai/plugin-api"` and skip a second workspace dep. The types still
5
+ * physically live in `@chances-ai/tools`. */
6
+ export type { Tool, ToolCategory, ToolContext, ToolResult } from "../tools/index.js";
7
+ /**
8
+ * Hooks let plugins observe/mutate the turn lifecycle. Built-in features use the
9
+ * exact same map as third-party plugins — there is no second-class plugin API.
10
+ */
11
+ export interface HookMap {
12
+ beforePrompt?: (input: {
13
+ prompt: string;
14
+ }) => void | Promise<void>;
15
+ beforeToolCall?: (input: {
16
+ name: string;
17
+ args: JSONValue;
18
+ }) => void | Promise<void>;
19
+ afterToolCall?: (input: {
20
+ name: string;
21
+ ok: boolean;
22
+ output: string;
23
+ }) => void | Promise<void>;
24
+ afterResponse?: (input: {
25
+ text: string;
26
+ }) => void | Promise<void>;
27
+ }
28
+ /**
29
+ * Opens a modal overlay in the host TUI and resolves once the user makes a
30
+ * selection (or cancels with `null`). The `render` factory is called by the
31
+ * host and should return a TUI element (e.g. an Ink JSX element) wired to
32
+ * call `resolve(value)` on user input. The type `unknown` for the return
33
+ * keeps plugin-api free of `react`/`ink` deps — the host is responsible for
34
+ * the actual rendering. When `openModal` is absent on the SlashContext, the
35
+ * dispatcher is running in text mode (`-p` / non-TTY); slash commands must
36
+ * fall back to a non-interactive code path.
37
+ */
38
+ export type OpenModal = <T>(render: (resolve: (value: T | null) => void) => unknown) => Promise<T | null>;
39
+ /**
40
+ * What a slash command receives at dispatch time. Extends PluginContext with
41
+ * an optional TUI-only `openModal`. Text-mode dispatch (`chances -p "/foo"`)
42
+ * leaves it undefined; the slash command branches on its presence.
43
+ */
44
+ export interface SlashContext extends PluginContext {
45
+ openModal?: OpenModal;
46
+ }
47
+ /**
48
+ * (5.4) Richer slash result. A command returns this (instead of a bare string)
49
+ * when it wants to **submit a prompt as a model turn** rather than just display
50
+ * output — the MCP prompt commands (`/<server>:<prompt>`) use `submitPrompt` to
51
+ * feed the server's rendered prompt into `engine.runTurn`. `output` is the
52
+ * display line (same semantics as returning a string). Returning a plain
53
+ * `string` is still the common case and is unchanged.
54
+ */
55
+ export interface SlashRunResult {
56
+ /** Display line (info, unless the command threw). */
57
+ output?: string;
58
+ /** When set, the entry point runs a model turn with this text AFTER the
59
+ * slash dispatch returns. The text is NOT mention-expanded (it may be
60
+ * untrusted MCP-server output — codex 5.4 R1 M3). */
61
+ submitPrompt?: string;
62
+ }
63
+ export interface SlashCommand {
64
+ name: string;
65
+ description: string;
66
+ /** (5.10 A3) Ghost-text shown after the name in the slash typeahead, e.g.
67
+ * `"<provider> <url>"`. Display-only — does not affect `run`'s `args`. */
68
+ argumentHint?: string;
69
+ /** (5.10 A3) Hide from the typeahead menu (still dispatchable if typed in
70
+ * full). For internal/rarely-typed commands. */
71
+ isHidden?: boolean;
72
+ /** (5.10 A3) Alternate names. Reserved metadata — alias *matching* is not yet
73
+ * wired into the typeahead (additive; lands when a command needs it). */
74
+ aliases?: string[];
75
+ /** Optional return value is displayed by the dispatcher (TUI info line, CLI
76
+ * stdout). Commands that emit their own output via `ctx.bus`/`ctx.logger`
77
+ * can return void. Return a {@link SlashRunResult} to submit a model turn
78
+ * (`submitPrompt`) in addition to / instead of display output. To signal
79
+ * failure, throw — the dispatcher catches it and surfaces the message with
80
+ * `isError: true`. The `ctx.openModal` field is present only when running
81
+ * inside a TUI host; text-mode dispatch leaves it undefined so commands can
82
+ * fall back gracefully. */
83
+ run(args: string[], ctx: SlashContext): string | void | SlashRunResult | Promise<string | void | SlashRunResult>;
84
+ }
85
+ /** Splits a raw input line like `"/echo hi there "` into `{ name, args }`,
86
+ * tolerating leading whitespace after the slash and stray internal/trailing
87
+ * whitespace. An input of just `"/"` produces `{ name: "", args: [] }`; callers
88
+ * should treat an empty name as "unknown command". */
89
+ export declare function parseSlashInput(line: string): {
90
+ name: string;
91
+ args: string[];
92
+ };
93
+ export interface SlashDispatchResult {
94
+ /** True when a command was found and ran (even if it threw or returned an error string). */
95
+ ok: boolean;
96
+ /** Optional display output; undefined when the command emitted via bus/logger only. */
97
+ output?: string;
98
+ /** True when `output` should be styled as an error. */
99
+ isError?: boolean;
100
+ /** (5.4) When set, the entry point should run a model turn with this text
101
+ * (NOT mention-expanded — codex R1 M3). Carried from `SlashRunResult`. */
102
+ submitPrompt?: string;
103
+ }
104
+ /** What a plugin receives at load time. */
105
+ export interface PluginContext {
106
+ bus: EventBus;
107
+ logger: Logger;
108
+ registerHook<K extends keyof HookMap>(name: K, handler: NonNullable<HookMap[K]>): void;
109
+ registerSlashCommand(command: SlashCommand): void;
110
+ /** Registers a tool that the engine can dispatch like a built-in. Names share
111
+ * one namespace with built-ins; the last registration wins. Throws if the
112
+ * PluginHost was constructed without a ToolRegistry. */
113
+ registerTool(tool: Tool): void;
114
+ }
115
+ export interface Plugin {
116
+ name: string;
117
+ version?: string;
118
+ onLoad(ctx: PluginContext): void | Promise<void>;
119
+ onDispose?(): void | Promise<void>;
120
+ }
121
+ /** Identity helper that gives plugin authors type inference. */
122
+ export declare function definePlugin(plugin: Plugin): Plugin;
123
+ /** Collects hooks/commands/tools from plugins and runs hook chains in registration order. */
124
+ export declare class PluginHost {
125
+ private readonly bus;
126
+ private readonly logger;
127
+ private readonly tools?;
128
+ private readonly plugins;
129
+ private readonly hooks;
130
+ private readonly commands;
131
+ /** `tools` is optional so test fixtures don't have to wire one up; callers
132
+ * whose plugins use `registerTool` must supply it. */
133
+ constructor(bus: EventBus, logger: Logger, tools?: ToolRegistry | undefined);
134
+ /** Builds a PluginContext. When an `undos` array is passed, every mutation
135
+ * pushes a rollback into it so `load()` can unwind on a throw; the default
136
+ * empty array means "no rollback" (used by `dispatchSlash`, where slash
137
+ * commands intentionally keep any state they register). */
138
+ private context;
139
+ /**
140
+ * Loads a plugin. If `onLoad` throws, any hooks/commands the plugin managed
141
+ * to register before the failure are rolled back so the host is never left in
142
+ * a partially-initialized state.
143
+ */
144
+ load(plugin: Plugin): Promise<void>;
145
+ runHook<K extends keyof HookMap>(name: K, input: Parameters<NonNullable<HookMap[K]>>[0]): Promise<void>;
146
+ slashCommand(name: string): SlashCommand | undefined;
147
+ slashCommands(): SlashCommand[];
148
+ /**
149
+ * Runs a registered slash command. Returns `{ ok: false }` when no command
150
+ * matches the name. A command that throws is reported as `{ ok: true, output:
151
+ * "...", isError: true }` so the caller can render the failure inline without
152
+ * the command derailing the host process.
153
+ *
154
+ * `tui` is the TUI host's modal hook — pass it when dispatching from an Ink
155
+ * loop so slash commands can open pickers; omit it for `-p` / non-TTY
156
+ * dispatch and commands will detect text-mode via the missing
157
+ * `ctx.openModal` and fall back accordingly.
158
+ */
159
+ dispatchSlash(name: string, args: string[], tui?: {
160
+ openModal: OpenModal;
161
+ }): Promise<SlashDispatchResult>;
162
+ /** Disposes plugins in reverse-load order. One plugin's failing `onDispose`
163
+ * must not prevent later plugins from running theirs — we swallow + log each
164
+ * failure individually. */
165
+ dispose(): Promise<void>;
166
+ }
167
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /** Splits a raw input line like `"/echo hi there "` into `{ name, args }`,
2
+ * tolerating leading whitespace after the slash and stray internal/trailing
3
+ * whitespace. An input of just `"/"` produces `{ name: "", args: [] }`; callers
4
+ * should treat an empty name as "unknown command". */
5
+ export function parseSlashInput(line) {
6
+ const parts = line.replace(/^\//, "").trim().split(/\s+/).filter(Boolean);
7
+ return { name: parts[0] ?? "", args: parts.slice(1) };
8
+ }
9
+ /** Identity helper that gives plugin authors type inference. */
10
+ export function definePlugin(plugin) {
11
+ return plugin;
12
+ }
13
+ /** Collects hooks/commands/tools from plugins and runs hook chains in registration order. */
14
+ export class PluginHost {
15
+ bus;
16
+ logger;
17
+ tools;
18
+ plugins = [];
19
+ hooks = {};
20
+ commands = new Map();
21
+ /** `tools` is optional so test fixtures don't have to wire one up; callers
22
+ * whose plugins use `registerTool` must supply it. */
23
+ constructor(bus, logger, tools) {
24
+ this.bus = bus;
25
+ this.logger = logger;
26
+ this.tools = tools;
27
+ }
28
+ /** Builds a PluginContext. When an `undos` array is passed, every mutation
29
+ * pushes a rollback into it so `load()` can unwind on a throw; the default
30
+ * empty array means "no rollback" (used by `dispatchSlash`, where slash
31
+ * commands intentionally keep any state they register). */
32
+ context(undos = []) {
33
+ return {
34
+ bus: this.bus,
35
+ logger: this.logger,
36
+ registerHook: (name, handler) => {
37
+ const arr = (this.hooks[name] ??= []);
38
+ arr.push(handler);
39
+ undos.push(() => {
40
+ const i = arr.indexOf(handler);
41
+ if (i >= 0)
42
+ arr.splice(i, 1);
43
+ });
44
+ },
45
+ registerSlashCommand: (command) => {
46
+ const prior = this.commands.get(command.name);
47
+ this.commands.set(command.name, command);
48
+ undos.push(() => {
49
+ if (this.commands.get(command.name) === command) {
50
+ if (prior)
51
+ this.commands.set(command.name, prior);
52
+ else
53
+ this.commands.delete(command.name);
54
+ }
55
+ });
56
+ },
57
+ registerTool: (tool) => {
58
+ if (!this.tools) {
59
+ throw new Error("PluginHost was built without a ToolRegistry; cannot register tools");
60
+ }
61
+ const registry = this.tools;
62
+ const prior = registry.get(tool.name);
63
+ registry.register(tool);
64
+ undos.push(() => {
65
+ if (registry.get(tool.name) === tool) {
66
+ if (prior)
67
+ registry.register(prior);
68
+ else
69
+ registry.unregister(tool.name);
70
+ }
71
+ });
72
+ },
73
+ };
74
+ }
75
+ /**
76
+ * Loads a plugin. If `onLoad` throws, any hooks/commands the plugin managed
77
+ * to register before the failure are rolled back so the host is never left in
78
+ * a partially-initialized state.
79
+ */
80
+ async load(plugin) {
81
+ const undos = [];
82
+ try {
83
+ await plugin.onLoad(this.context(undos));
84
+ this.plugins.push(plugin);
85
+ }
86
+ catch (e) {
87
+ for (const undo of undos.reverse())
88
+ undo();
89
+ throw e;
90
+ }
91
+ }
92
+ async runHook(name, input) {
93
+ for (const handler of this.hooks[name] ?? []) {
94
+ await handler(input);
95
+ }
96
+ }
97
+ slashCommand(name) {
98
+ return this.commands.get(name);
99
+ }
100
+ slashCommands() {
101
+ return [...this.commands.values()];
102
+ }
103
+ /**
104
+ * Runs a registered slash command. Returns `{ ok: false }` when no command
105
+ * matches the name. A command that throws is reported as `{ ok: true, output:
106
+ * "...", isError: true }` so the caller can render the failure inline without
107
+ * the command derailing the host process.
108
+ *
109
+ * `tui` is the TUI host's modal hook — pass it when dispatching from an Ink
110
+ * loop so slash commands can open pickers; omit it for `-p` / non-TTY
111
+ * dispatch and commands will detect text-mode via the missing
112
+ * `ctx.openModal` and fall back accordingly.
113
+ */
114
+ async dispatchSlash(name, args, tui) {
115
+ const cmd = this.commands.get(name);
116
+ if (!cmd)
117
+ return { ok: false };
118
+ try {
119
+ const ctx = { ...this.context(), openModal: tui?.openModal };
120
+ const result = await cmd.run(args, ctx);
121
+ // (5.4) Three return shapes: string (display), void (self-emitted), or
122
+ // SlashRunResult ({output?, submitPrompt?}). Map them onto the dispatch
123
+ // result; legacy string/void callers are unaffected.
124
+ if (typeof result === "string")
125
+ return { ok: true, output: result };
126
+ if (result && typeof result === "object") {
127
+ return { ok: true, output: result.output, submitPrompt: result.submitPrompt };
128
+ }
129
+ return { ok: true, output: undefined };
130
+ }
131
+ catch (e) {
132
+ const message = e instanceof Error ? e.message : String(e);
133
+ this.logger.warn(`slash /${name} failed: ${message}`);
134
+ return { ok: true, output: message, isError: true };
135
+ }
136
+ }
137
+ /** Disposes plugins in reverse-load order. One plugin's failing `onDispose`
138
+ * must not prevent later plugins from running theirs — we swallow + log each
139
+ * failure individually. */
140
+ async dispose() {
141
+ for (const p of [...this.plugins].reverse()) {
142
+ try {
143
+ await p.onDispose?.();
144
+ }
145
+ catch (e) {
146
+ this.logger.warn(`plugin ${p.name} onDispose failed: ${e.message}`);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin-api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type Plugin } from "../plugin-api/index.js";
2
+ export interface LoggerPluginOptions {
3
+ /** Absolute path of the transcript file to append to. */
4
+ path: string;
5
+ /** Max chars per logged prompt / tool output / assistant reply. Default 500. */
6
+ previewChars?: number;
7
+ /** DI seam: lets tests capture lines without touching disk. */
8
+ appender?: (line: string) => void;
9
+ }
10
+ /**
11
+ * Reference plugin: appends a human-readable transcript of each turn — prompts,
12
+ * tool calls, tool results, and assistant replies — to a configured file.
13
+ *
14
+ * Exists primarily as a worked example of the plugin API:
15
+ * - exercises every entry in HookMap;
16
+ * - registers a slash command (`/transcript`);
17
+ * - uses dependency injection (the `appender` option) so the hooks can be
18
+ * tested without a real filesystem.
19
+ */
20
+ export declare function loggerPlugin(options: LoggerPluginOptions): Plugin;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-logger/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAAsB,MAAM,wBAAwB,CAAC;AAGvF,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAkCjE"}
@@ -0,0 +1,59 @@
1
+ import { appendFileSync, mkdirSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { definePlugin } from "../plugin-api/index.js";
4
+ /**
5
+ * Reference plugin: appends a human-readable transcript of each turn — prompts,
6
+ * tool calls, tool results, and assistant replies — to a configured file.
7
+ *
8
+ * Exists primarily as a worked example of the plugin API:
9
+ * - exercises every entry in HookMap;
10
+ * - registers a slash command (`/transcript`);
11
+ * - uses dependency injection (the `appender` option) so the hooks can be
12
+ * tested without a real filesystem.
13
+ */
14
+ export function loggerPlugin(options) {
15
+ const previewLen = options.previewChars ?? 500;
16
+ const append = options.appender ?? defaultAppender(options.path);
17
+ const stamp = () => new Date().toISOString();
18
+ return definePlugin({
19
+ name: "logger",
20
+ version: "1.0.0",
21
+ onLoad(ctx) {
22
+ append(`\n=== Session opened ${stamp()} ===\n`);
23
+ ctx.registerHook("beforePrompt", ({ prompt }) => {
24
+ append(`[${stamp()}] > ${oneLine(prompt, previewLen)}\n`);
25
+ });
26
+ ctx.registerHook("beforeToolCall", ({ name, args }) => {
27
+ append(`[${stamp()}] tool→ ${name} ${jsonPreview(args)}\n`);
28
+ });
29
+ ctx.registerHook("afterToolCall", ({ name, ok, output }) => {
30
+ append(`[${stamp()}] tool← ${name} ${ok ? "ok" : "fail"}: ${oneLine(output, previewLen)}\n`);
31
+ });
32
+ ctx.registerHook("afterResponse", ({ text }) => {
33
+ append(`[${stamp()}] < ${oneLine(text, previewLen)}\n`);
34
+ });
35
+ ctx.registerSlashCommand({
36
+ name: "transcript",
37
+ description: "Print the transcript file path",
38
+ run: () => `Transcript: ${options.path}`,
39
+ });
40
+ },
41
+ });
42
+ }
43
+ function defaultAppender(path) {
44
+ return (line) => {
45
+ mkdirSync(dirname(path), { recursive: true });
46
+ appendFileSync(path, line);
47
+ };
48
+ }
49
+ function oneLine(text, max) {
50
+ const flat = text.replace(/\s+/g, " ").trim();
51
+ return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
52
+ }
53
+ function jsonPreview(value) {
54
+ const s = JSON.stringify(value);
55
+ if (!s)
56
+ return "{}";
57
+ return s.length > 200 ? `${s.slice(0, 199)}…` : s;
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin-logger/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import type { Message } from "../ai/index.js";
2
+ export interface TurnRecord {
3
+ turnId: string;
4
+ at: string;
5
+ messages: Message[];
6
+ }
7
+ export interface SessionState {
8
+ id: string;
9
+ title: string;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ turns: TurnRecord[];
13
+ /** Last model the user was on for this session. Restored on resume so the
14
+ * next turn after a `/resume` reuses what the user actually picked, not the
15
+ * global default. Optional so v2.x sessions still load (the field is missing
16
+ * from older files). */
17
+ model?: {
18
+ provider?: string;
19
+ model?: string;
20
+ };
21
+ }
22
+ /** Memento: a point-in-time snapshot the session can be restored to. */
23
+ export interface Checkpoint {
24
+ turnIndex: number;
25
+ state: SessionState;
26
+ }
27
+ /** Persists sessions as JSON under <workspaceRoot>/.chances/sessions. */
28
+ export declare class SessionStore {
29
+ private readonly dir;
30
+ constructor(workspaceRoot: string);
31
+ save(state: SessionState): void;
32
+ load(id: string): SessionState | undefined;
33
+ list(): SessionState[];
34
+ }
35
+ /**
36
+ * Owns the session lifecycle (state machine): create/resume, append turns,
37
+ * flatten to a provider message list, checkpoint and restore.
38
+ */
39
+ export declare class SessionManager {
40
+ private readonly store?;
41
+ private state;
42
+ private constructor();
43
+ static create(title?: string, store?: SessionStore): SessionManager;
44
+ static resume(id: string, store: SessionStore): SessionManager | undefined;
45
+ /**
46
+ * (5.5) Creates a NEW session pre-seeded with a deep clone of `parent`'s
47
+ * completed turns — the seam behind the `task` tool's `context: "fork"` mode.
48
+ *
49
+ * Three invariants make this safe:
50
+ * - **New id, no `SessionStore`.** The child is a distinct session that can
51
+ * never `save()` over the parent's `<id>.json` on disk (mirrors
52
+ * `create("subagent")`, which also omits the store). All mutation stays in
53
+ * the child's own in-memory state.
54
+ * - **Whole turns, never a mid-turn slice.** chances-cli persists an
55
+ * assistant message carrying `tool-call` parts and its `tool` results in
56
+ * one atomic turn (see `engine.ts` end-of-turn `appendTurn`), so copying at
57
+ * turn granularity keeps every `tool-call` paired with its result — the
58
+ * provider's no-orphan-`tool_use` invariant holds for free.
59
+ * - **The session `model` field is NOT carried.** The forked child's model is
60
+ * chosen by the caller (persona override or inherited parent selection),
61
+ * not by the parent session's last `/model` choice. `snapshot()` deep-clones
62
+ * the whole state; we keep only `turns`.
63
+ */
64
+ static forkFrom(parent: SessionManager, title?: string): SessionManager;
65
+ get id(): string;
66
+ /** All messages across turns, ready to send to a provider. */
67
+ messages(): Message[];
68
+ appendTurn(messages: Message[]): TurnRecord;
69
+ /** Records the user's current model choice so `/resume` can restore it.
70
+ * Persisted immediately; not gated behind the next `appendTurn`. */
71
+ setModel(model: {
72
+ provider?: string;
73
+ model?: string;
74
+ } | undefined): void;
75
+ /** Returns the persisted model choice for this session, if any. */
76
+ modelChoice(): {
77
+ provider?: string;
78
+ model?: string;
79
+ } | undefined;
80
+ /**
81
+ * Empties this session's turn list. Used by `/clear` when the user wants a
82
+ * fresh conversation without losing the session metadata (id/title). The
83
+ * underlying file is rewritten so a `/resume` of this id will land on an
84
+ * empty conversation.
85
+ */
86
+ clearTurns(): void;
87
+ /**
88
+ * (3.5) Applies a pure transform to every turn in the prefix
89
+ * (all but the last `keepRecentTurns` turns). Used by the Stage 1
90
+ * pruner — the transform receives one turn's messages, returns
91
+ * the rewritten messages. The turn's `turnId` / `at` are
92
+ * unchanged so persistence keeps its identity; the synthetic
93
+ * `compact-*` turn (from `compactTurns`) is treated like any
94
+ * other turn for indexing purposes.
95
+ *
96
+ * `keepRecentTurns` is clamped to `[0, turns.length]`. When
97
+ * `keepRecentTurns >= turns.length`, this is a no-op (nothing to
98
+ * prune). When 0, every turn including the most recent is fed to
99
+ * the transform.
100
+ *
101
+ * Idempotent if the transform is idempotent (the pruner's marker
102
+ * replacement is — second pass sees the marker, fails the
103
+ * delta>0 check, leaves it alone).
104
+ */
105
+ pruneTurns(keepRecentTurns: number, transform: (messages: Message[]) => Message[]): void;
106
+ /**
107
+ * Replaces all but the last `keepLastN` turns with a single synthetic
108
+ * "system context" turn carrying `summary` as a user-role message. Why
109
+ * user-role rather than system-role: providers vary in how they handle
110
+ * mid-conversation system messages, but every provider accepts a long-form
111
+ * user message as historical context. The synthetic turn's `turnId` is
112
+ * tagged `compact-*` so debuggers can spot it.
113
+ *
114
+ * `keepLastN` is clamped to `[0, turns.length]` — passing a larger N keeps
115
+ * everything (compaction is a no-op), passing 0 collapses the whole
116
+ * conversation into the summary. The summary itself must be non-empty;
117
+ * callers should bail before invoking this when the summarizer returned
118
+ * nothing.
119
+ */
120
+ compactTurns(summary: string, keepLastN: number): void;
121
+ checkpoint(): Checkpoint;
122
+ restore(checkpoint: Checkpoint): void;
123
+ snapshot(): SessionState;
124
+ }
125
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB;;;4BAGwB;IACxB,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,yEAAyE;AACzE,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,aAAa,EAAE,MAAM;IAKjC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI/B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAU1C,IAAI,IAAI,YAAY,EAAE;CAYvB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAGgB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAFhE,OAAO,CAAC,KAAK,CAAe;IAE5B,OAAO;IAIP,MAAM,CAAC,MAAM,CAAC,KAAK,SAAY,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,cAAc;IAQtE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS;IAK1E;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,SAAa,GAAG,cAAc;IAQ3E,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,8DAA8D;IAC9D,QAAQ,IAAI,OAAO,EAAE;IAIrB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU;IAQ3C;wEACoE;IACpE,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI;IAMxE,mEAAmE;IACnE,WAAW,IAAI;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAIhE;;;;;OAKG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,GAAG,IAAI;IAmBxF;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAqBtD,UAAU,IAAI,UAAU;IAIxB,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAKrC,QAAQ,IAAI,YAAY;CAGzB"}