threadwell 0.0.0 → 0.0.2

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 (861) hide show
  1. package/CHANGELOG.md +4170 -0
  2. package/README.md +393 -4
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +9 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/bun/restore-sandbox-env.d.ts +13 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +32 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +53 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +341 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts +14 -0
  20. package/dist/cli/config-selector.d.ts.map +1 -0
  21. package/dist/cli/config-selector.js +31 -0
  22. package/dist/cli/config-selector.js.map +1 -0
  23. package/dist/cli/file-processor.d.ts +15 -0
  24. package/dist/cli/file-processor.d.ts.map +1 -0
  25. package/dist/cli/file-processor.js +83 -0
  26. package/dist/cli/file-processor.js.map +1 -0
  27. package/dist/cli/initial-message.d.ts +18 -0
  28. package/dist/cli/initial-message.d.ts.map +1 -0
  29. package/dist/cli/initial-message.js +22 -0
  30. package/dist/cli/initial-message.js.map +1 -0
  31. package/dist/cli/list-models.d.ts +9 -0
  32. package/dist/cli/list-models.d.ts.map +1 -0
  33. package/dist/cli/list-models.js +98 -0
  34. package/dist/cli/list-models.js.map +1 -0
  35. package/dist/cli/session-picker.d.ts +9 -0
  36. package/dist/cli/session-picker.d.ts.map +1 -0
  37. package/dist/cli/session-picker.js +35 -0
  38. package/dist/cli/session-picker.js.map +1 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +19 -3
  42. package/dist/cli.js.map +1 -0
  43. package/dist/config.d.ts +93 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +404 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/core/agent-session-runtime.d.ts +117 -0
  48. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  49. package/dist/core/agent-session-runtime.js +300 -0
  50. package/dist/core/agent-session-runtime.js.map +1 -0
  51. package/dist/core/agent-session-services.d.ts +86 -0
  52. package/dist/core/agent-session-services.d.ts.map +1 -0
  53. package/dist/core/agent-session-services.js +117 -0
  54. package/dist/core/agent-session-services.js.map +1 -0
  55. package/dist/core/agent-session.d.ts +659 -0
  56. package/dist/core/agent-session.d.ts.map +1 -0
  57. package/dist/core/agent-session.js +3210 -0
  58. package/dist/core/agent-session.js.map +1 -0
  59. package/dist/core/auth-guidance.d.ts +5 -0
  60. package/dist/core/auth-guidance.d.ts.map +1 -0
  61. package/dist/core/auth-guidance.js +21 -0
  62. package/dist/core/auth-guidance.js.map +1 -0
  63. package/dist/core/auth-storage.d.ts +141 -0
  64. package/dist/core/auth-storage.d.ts.map +1 -0
  65. package/dist/core/auth-storage.js +441 -0
  66. package/dist/core/auth-storage.js.map +1 -0
  67. package/dist/core/bash-executor.d.ts +32 -0
  68. package/dist/core/bash-executor.d.ts.map +1 -0
  69. package/dist/core/bash-executor.js +111 -0
  70. package/dist/core/bash-executor.js.map +1 -0
  71. package/dist/core/compaction/branch-summarization.d.ts +88 -0
  72. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  73. package/dist/core/compaction/branch-summarization.js +243 -0
  74. package/dist/core/compaction/branch-summarization.js.map +1 -0
  75. package/dist/core/compaction/compaction.d.ts +121 -0
  76. package/dist/core/compaction/compaction.d.ts.map +1 -0
  77. package/dist/core/compaction/compaction.js +615 -0
  78. package/dist/core/compaction/compaction.js.map +1 -0
  79. package/dist/core/compaction/index.d.ts +7 -0
  80. package/dist/core/compaction/index.d.ts.map +1 -0
  81. package/dist/core/compaction/index.js +7 -0
  82. package/dist/core/compaction/index.js.map +1 -0
  83. package/dist/core/compaction/utils.d.ts +38 -0
  84. package/dist/core/compaction/utils.d.ts.map +1 -0
  85. package/dist/core/compaction/utils.js +153 -0
  86. package/dist/core/compaction/utils.js.map +1 -0
  87. package/dist/core/continuity/continuity-files.d.ts +79 -0
  88. package/dist/core/continuity/continuity-files.d.ts.map +1 -0
  89. package/dist/core/continuity/continuity-files.js +326 -0
  90. package/dist/core/continuity/continuity-files.js.map +1 -0
  91. package/dist/core/continuity/continuity-intent-router.d.ts +9 -0
  92. package/dist/core/continuity/continuity-intent-router.d.ts.map +1 -0
  93. package/dist/core/continuity/continuity-intent-router.js +96 -0
  94. package/dist/core/continuity/continuity-intent-router.js.map +1 -0
  95. package/dist/core/continuity/continuity-manager.d.ts +28 -0
  96. package/dist/core/continuity/continuity-manager.d.ts.map +1 -0
  97. package/dist/core/continuity/continuity-manager.js +288 -0
  98. package/dist/core/continuity/continuity-manager.js.map +1 -0
  99. package/dist/core/continuity/continuity-service.d.ts +22 -0
  100. package/dist/core/continuity/continuity-service.d.ts.map +1 -0
  101. package/dist/core/continuity/continuity-service.js +34 -0
  102. package/dist/core/continuity/continuity-service.js.map +1 -0
  103. package/dist/core/continuity/index.d.ts +5 -0
  104. package/dist/core/continuity/index.d.ts.map +1 -0
  105. package/dist/core/continuity/index.js +5 -0
  106. package/dist/core/continuity/index.js.map +1 -0
  107. package/dist/core/defaults.d.ts +3 -0
  108. package/dist/core/defaults.d.ts.map +1 -0
  109. package/dist/core/defaults.js +2 -0
  110. package/dist/core/defaults.js.map +1 -0
  111. package/dist/core/diagnostics.d.ts +15 -0
  112. package/dist/core/diagnostics.d.ts.map +1 -0
  113. package/dist/core/diagnostics.js +2 -0
  114. package/dist/core/diagnostics.js.map +1 -0
  115. package/dist/core/event-bus.d.ts +9 -0
  116. package/dist/core/event-bus.d.ts.map +1 -0
  117. package/dist/core/event-bus.js +25 -0
  118. package/dist/core/event-bus.js.map +1 -0
  119. package/dist/core/exec.d.ts +29 -0
  120. package/dist/core/exec.d.ts.map +1 -0
  121. package/dist/core/exec.js +75 -0
  122. package/dist/core/exec.js.map +1 -0
  123. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  124. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  125. package/dist/core/export-html/ansi-to-html.js +249 -0
  126. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  127. package/dist/core/export-html/index.d.ts +37 -0
  128. package/dist/core/export-html/index.d.ts.map +1 -0
  129. package/dist/core/export-html/index.js +224 -0
  130. package/dist/core/export-html/index.js.map +1 -0
  131. package/dist/core/export-html/template.css +1066 -0
  132. package/dist/core/export-html/template.html +55 -0
  133. package/dist/core/export-html/template.js +1834 -0
  134. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  135. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  136. package/dist/core/export-html/tool-renderer.js +108 -0
  137. package/dist/core/export-html/tool-renderer.js.map +1 -0
  138. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  139. package/dist/core/export-html/vendor/marked.min.js +6 -0
  140. package/dist/core/extensions/index.d.ts +12 -0
  141. package/dist/core/extensions/index.d.ts.map +1 -0
  142. package/dist/core/extensions/index.js +9 -0
  143. package/dist/core/extensions/index.js.map +1 -0
  144. package/dist/core/extensions/loader.d.ts +24 -0
  145. package/dist/core/extensions/loader.d.ts.map +1 -0
  146. package/dist/core/extensions/loader.js +485 -0
  147. package/dist/core/extensions/loader.js.map +1 -0
  148. package/dist/core/extensions/runner.d.ts +159 -0
  149. package/dist/core/extensions/runner.d.ts.map +1 -0
  150. package/dist/core/extensions/runner.js +824 -0
  151. package/dist/core/extensions/runner.js.map +1 -0
  152. package/dist/core/extensions/types.d.ts +1173 -0
  153. package/dist/core/extensions/types.d.ts.map +1 -0
  154. package/dist/core/extensions/types.js +45 -0
  155. package/dist/core/extensions/types.js.map +1 -0
  156. package/dist/core/extensions/wrapper.d.ts +20 -0
  157. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  158. package/dist/core/extensions/wrapper.js +22 -0
  159. package/dist/core/extensions/wrapper.js.map +1 -0
  160. package/dist/core/footer-data-provider.d.ts +72 -0
  161. package/dist/core/footer-data-provider.d.ts.map +1 -0
  162. package/dist/core/footer-data-provider.js +374 -0
  163. package/dist/core/footer-data-provider.js.map +1 -0
  164. package/dist/core/identity.d.ts +8 -0
  165. package/dist/core/identity.d.ts.map +1 -0
  166. package/dist/core/identity.js +8 -0
  167. package/dist/core/identity.js.map +1 -0
  168. package/dist/core/index.d.ts +12 -0
  169. package/dist/core/index.d.ts.map +1 -0
  170. package/dist/core/index.js +12 -0
  171. package/dist/core/index.js.map +1 -0
  172. package/dist/core/keybindings.d.ts +353 -0
  173. package/dist/core/keybindings.d.ts.map +1 -0
  174. package/dist/core/keybindings.js +295 -0
  175. package/dist/core/keybindings.js.map +1 -0
  176. package/dist/core/memory/adr/adr-candidates.d.ts +15 -0
  177. package/dist/core/memory/adr/adr-candidates.d.ts.map +1 -0
  178. package/dist/core/memory/adr/adr-candidates.js +63 -0
  179. package/dist/core/memory/adr/adr-candidates.js.map +1 -0
  180. package/dist/core/memory/adr/adr-format.d.ts +31 -0
  181. package/dist/core/memory/adr/adr-format.d.ts.map +1 -0
  182. package/dist/core/memory/adr/adr-format.js +138 -0
  183. package/dist/core/memory/adr/adr-format.js.map +1 -0
  184. package/dist/core/memory/adr/adr-service.d.ts +19 -0
  185. package/dist/core/memory/adr/adr-service.d.ts.map +1 -0
  186. package/dist/core/memory/adr/adr-service.js +63 -0
  187. package/dist/core/memory/adr/adr-service.js.map +1 -0
  188. package/dist/core/memory/adr/index.d.ts +4 -0
  189. package/dist/core/memory/adr/index.d.ts.map +1 -0
  190. package/dist/core/memory/adr/index.js +4 -0
  191. package/dist/core/memory/adr/index.js.map +1 -0
  192. package/dist/core/memory/content-ref.d.ts +22 -0
  193. package/dist/core/memory/content-ref.d.ts.map +1 -0
  194. package/dist/core/memory/content-ref.js +34 -0
  195. package/dist/core/memory/content-ref.js.map +1 -0
  196. package/dist/core/memory/context/context-candidates.d.ts +9 -0
  197. package/dist/core/memory/context/context-candidates.d.ts.map +1 -0
  198. package/dist/core/memory/context/context-candidates.js +64 -0
  199. package/dist/core/memory/context/context-candidates.js.map +1 -0
  200. package/dist/core/memory/context/context-diagnostics.d.ts +12 -0
  201. package/dist/core/memory/context/context-diagnostics.d.ts.map +1 -0
  202. package/dist/core/memory/context/context-diagnostics.js +50 -0
  203. package/dist/core/memory/context/context-diagnostics.js.map +1 -0
  204. package/dist/core/memory/context/context-format.d.ts +41 -0
  205. package/dist/core/memory/context/context-format.d.ts.map +1 -0
  206. package/dist/core/memory/context/context-format.js +199 -0
  207. package/dist/core/memory/context/context-format.js.map +1 -0
  208. package/dist/core/memory/context/index.d.ts +4 -0
  209. package/dist/core/memory/context/index.d.ts.map +1 -0
  210. package/dist/core/memory/context/index.js +4 -0
  211. package/dist/core/memory/context/index.js.map +1 -0
  212. package/dist/core/memory/context-pressure.d.ts +15 -0
  213. package/dist/core/memory/context-pressure.d.ts.map +1 -0
  214. package/dist/core/memory/context-pressure.js +36 -0
  215. package/dist/core/memory/context-pressure.js.map +1 -0
  216. package/dist/core/memory/continuity-import.d.ts +6 -0
  217. package/dist/core/memory/continuity-import.d.ts.map +1 -0
  218. package/dist/core/memory/continuity-import.js +63 -0
  219. package/dist/core/memory/continuity-import.js.map +1 -0
  220. package/dist/core/memory/dedupe.d.ts +10 -0
  221. package/dist/core/memory/dedupe.d.ts.map +1 -0
  222. package/dist/core/memory/dedupe.js +36 -0
  223. package/dist/core/memory/dedupe.js.map +1 -0
  224. package/dist/core/memory/embedding-adapter.d.ts +20 -0
  225. package/dist/core/memory/embedding-adapter.d.ts.map +1 -0
  226. package/dist/core/memory/embedding-adapter.js +11 -0
  227. package/dist/core/memory/embedding-adapter.js.map +1 -0
  228. package/dist/core/memory/event-summary.d.ts +7 -0
  229. package/dist/core/memory/event-summary.d.ts.map +1 -0
  230. package/dist/core/memory/event-summary.js +23 -0
  231. package/dist/core/memory/event-summary.js.map +1 -0
  232. package/dist/core/memory/feature/feature-format.d.ts +30 -0
  233. package/dist/core/memory/feature/feature-format.d.ts.map +1 -0
  234. package/dist/core/memory/feature/feature-format.js +121 -0
  235. package/dist/core/memory/feature/feature-format.js.map +1 -0
  236. package/dist/core/memory/feature/index.d.ts +2 -0
  237. package/dist/core/memory/feature/index.d.ts.map +1 -0
  238. package/dist/core/memory/feature/index.js +2 -0
  239. package/dist/core/memory/feature/index.js.map +1 -0
  240. package/dist/core/memory/ignore.d.ts +5 -0
  241. package/dist/core/memory/ignore.d.ts.map +1 -0
  242. package/dist/core/memory/ignore.js +26 -0
  243. package/dist/core/memory/ignore.js.map +1 -0
  244. package/dist/core/memory/index.d.ts +21 -0
  245. package/dist/core/memory/index.d.ts.map +1 -0
  246. package/dist/core/memory/index.js +20 -0
  247. package/dist/core/memory/index.js.map +1 -0
  248. package/dist/core/memory/memory-anchors.d.ts +11 -0
  249. package/dist/core/memory/memory-anchors.d.ts.map +1 -0
  250. package/dist/core/memory/memory-anchors.js +35 -0
  251. package/dist/core/memory/memory-anchors.js.map +1 -0
  252. package/dist/core/memory/memory-identity.d.ts +11 -0
  253. package/dist/core/memory/memory-identity.d.ts.map +1 -0
  254. package/dist/core/memory/memory-identity.js +19 -0
  255. package/dist/core/memory/memory-identity.js.map +1 -0
  256. package/dist/core/memory/memory-retrieval.d.ts +55 -0
  257. package/dist/core/memory/memory-retrieval.d.ts.map +1 -0
  258. package/dist/core/memory/memory-retrieval.js +128 -0
  259. package/dist/core/memory/memory-retrieval.js.map +1 -0
  260. package/dist/core/memory/memory-schema.d.ts +11 -0
  261. package/dist/core/memory/memory-schema.d.ts.map +1 -0
  262. package/dist/core/memory/memory-schema.js +111 -0
  263. package/dist/core/memory/memory-schema.js.map +1 -0
  264. package/dist/core/memory/memory-service.d.ts +35 -0
  265. package/dist/core/memory/memory-service.d.ts.map +1 -0
  266. package/dist/core/memory/memory-service.js +125 -0
  267. package/dist/core/memory/memory-service.js.map +1 -0
  268. package/dist/core/memory/memory-store.d.ts +37 -0
  269. package/dist/core/memory/memory-store.d.ts.map +1 -0
  270. package/dist/core/memory/memory-store.js +109 -0
  271. package/dist/core/memory/memory-store.js.map +1 -0
  272. package/dist/core/memory/memory-types.d.ts +55 -0
  273. package/dist/core/memory/memory-types.d.ts.map +1 -0
  274. package/dist/core/memory/memory-types.js +2 -0
  275. package/dist/core/memory/memory-types.js.map +1 -0
  276. package/dist/core/memory/redaction.d.ts +4 -0
  277. package/dist/core/memory/redaction.d.ts.map +1 -0
  278. package/dist/core/memory/redaction.js +49 -0
  279. package/dist/core/memory/redaction.js.map +1 -0
  280. package/dist/core/memory/sqlite-memory-store.d.ts +30 -0
  281. package/dist/core/memory/sqlite-memory-store.d.ts.map +1 -0
  282. package/dist/core/memory/sqlite-memory-store.js +300 -0
  283. package/dist/core/memory/sqlite-memory-store.js.map +1 -0
  284. package/dist/core/memory/startup-order.d.ts +9 -0
  285. package/dist/core/memory/startup-order.d.ts.map +1 -0
  286. package/dist/core/memory/startup-order.js +39 -0
  287. package/dist/core/memory/startup-order.js.map +1 -0
  288. package/dist/core/messages.d.ts +77 -0
  289. package/dist/core/messages.d.ts.map +1 -0
  290. package/dist/core/messages.js +123 -0
  291. package/dist/core/messages.js.map +1 -0
  292. package/dist/core/model-registry.d.ts +150 -0
  293. package/dist/core/model-registry.d.ts.map +1 -0
  294. package/dist/core/model-registry.js +727 -0
  295. package/dist/core/model-registry.js.map +1 -0
  296. package/dist/core/model-resolver.d.ts +110 -0
  297. package/dist/core/model-resolver.d.ts.map +1 -0
  298. package/dist/core/model-resolver.js +494 -0
  299. package/dist/core/model-resolver.js.map +1 -0
  300. package/dist/core/output-guard.d.ts +6 -0
  301. package/dist/core/output-guard.d.ts.map +1 -0
  302. package/dist/core/output-guard.js +59 -0
  303. package/dist/core/output-guard.js.map +1 -0
  304. package/dist/core/package-manager.d.ts +198 -0
  305. package/dist/core/package-manager.d.ts.map +1 -0
  306. package/dist/core/package-manager.js +1961 -0
  307. package/dist/core/package-manager.js.map +1 -0
  308. package/dist/core/prompt-templates.d.ts +52 -0
  309. package/dist/core/prompt-templates.d.ts.map +1 -0
  310. package/dist/core/prompt-templates.js +250 -0
  311. package/dist/core/prompt-templates.js.map +1 -0
  312. package/dist/core/provider-display-names.d.ts +2 -0
  313. package/dist/core/provider-display-names.d.ts.map +1 -0
  314. package/dist/core/provider-display-names.js +32 -0
  315. package/dist/core/provider-display-names.js.map +1 -0
  316. package/dist/core/resolve-config-value.d.ts +23 -0
  317. package/dist/core/resolve-config-value.d.ts.map +1 -0
  318. package/dist/core/resolve-config-value.js +126 -0
  319. package/dist/core/resolve-config-value.js.map +1 -0
  320. package/dist/core/resource-loader.d.ts +194 -0
  321. package/dist/core/resource-loader.d.ts.map +1 -0
  322. package/dist/core/resource-loader.js +731 -0
  323. package/dist/core/resource-loader.js.map +1 -0
  324. package/dist/core/sdk.d.ts +107 -0
  325. package/dist/core/sdk.d.ts.map +1 -0
  326. package/dist/core/sdk.js +282 -0
  327. package/dist/core/sdk.js.map +1 -0
  328. package/dist/core/session-cwd.d.ts +19 -0
  329. package/dist/core/session-cwd.d.ts.map +1 -0
  330. package/dist/core/session-cwd.js +38 -0
  331. package/dist/core/session-cwd.js.map +1 -0
  332. package/dist/core/session-manager.d.ts +333 -0
  333. package/dist/core/session-manager.d.ts.map +1 -0
  334. package/dist/core/session-manager.js +1109 -0
  335. package/dist/core/session-manager.js.map +1 -0
  336. package/dist/core/settings-manager.d.ts +295 -0
  337. package/dist/core/settings-manager.d.ts.map +1 -0
  338. package/dist/core/settings-manager.js +842 -0
  339. package/dist/core/settings-manager.js.map +1 -0
  340. package/dist/core/skills.d.ts +60 -0
  341. package/dist/core/skills.d.ts.map +1 -0
  342. package/dist/core/skills.js +404 -0
  343. package/dist/core/skills.js.map +1 -0
  344. package/dist/core/slash-commands.d.ts +14 -0
  345. package/dist/core/slash-commands.d.ts.map +1 -0
  346. package/dist/core/slash-commands.js +32 -0
  347. package/dist/core/slash-commands.js.map +1 -0
  348. package/dist/core/source-info.d.ts +18 -0
  349. package/dist/core/source-info.d.ts.map +1 -0
  350. package/dist/core/source-info.js +19 -0
  351. package/dist/core/source-info.js.map +1 -0
  352. package/dist/core/system-prompt.d.ts +28 -0
  353. package/dist/core/system-prompt.d.ts.map +1 -0
  354. package/dist/core/system-prompt.js +120 -0
  355. package/dist/core/system-prompt.js.map +1 -0
  356. package/dist/core/telemetry.d.ts +3 -0
  357. package/dist/core/telemetry.d.ts.map +1 -0
  358. package/dist/core/telemetry.js +9 -0
  359. package/dist/core/telemetry.js.map +1 -0
  360. package/dist/core/timings.d.ts +8 -0
  361. package/dist/core/timings.d.ts.map +1 -0
  362. package/dist/core/timings.js +31 -0
  363. package/dist/core/timings.js.map +1 -0
  364. package/dist/core/tools/bash.d.ts +68 -0
  365. package/dist/core/tools/bash.d.ts.map +1 -0
  366. package/dist/core/tools/bash.js +335 -0
  367. package/dist/core/tools/bash.js.map +1 -0
  368. package/dist/core/tools/edit-diff.d.ts +85 -0
  369. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  370. package/dist/core/tools/edit-diff.js +338 -0
  371. package/dist/core/tools/edit-diff.js.map +1 -0
  372. package/dist/core/tools/edit.d.ts +49 -0
  373. package/dist/core/tools/edit.d.ts.map +1 -0
  374. package/dist/core/tools/edit.js +324 -0
  375. package/dist/core/tools/edit.js.map +1 -0
  376. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  377. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  378. package/dist/core/tools/file-mutation-queue.js +37 -0
  379. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  380. package/dist/core/tools/find.d.ts +35 -0
  381. package/dist/core/tools/find.d.ts.map +1 -0
  382. package/dist/core/tools/find.js +298 -0
  383. package/dist/core/tools/find.js.map +1 -0
  384. package/dist/core/tools/grep.d.ts +37 -0
  385. package/dist/core/tools/grep.d.ts.map +1 -0
  386. package/dist/core/tools/grep.js +304 -0
  387. package/dist/core/tools/grep.js.map +1 -0
  388. package/dist/core/tools/index.d.ts +40 -0
  389. package/dist/core/tools/index.d.ts.map +1 -0
  390. package/dist/core/tools/index.js +112 -0
  391. package/dist/core/tools/index.js.map +1 -0
  392. package/dist/core/tools/ls.d.ts +37 -0
  393. package/dist/core/tools/ls.d.ts.map +1 -0
  394. package/dist/core/tools/ls.js +169 -0
  395. package/dist/core/tools/ls.js.map +1 -0
  396. package/dist/core/tools/output-accumulator.d.ts +50 -0
  397. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  398. package/dist/core/tools/output-accumulator.js +178 -0
  399. package/dist/core/tools/output-accumulator.js.map +1 -0
  400. package/dist/core/tools/path-utils.d.ts +8 -0
  401. package/dist/core/tools/path-utils.d.ts.map +1 -0
  402. package/dist/core/tools/path-utils.js +81 -0
  403. package/dist/core/tools/path-utils.js.map +1 -0
  404. package/dist/core/tools/read.d.ts +35 -0
  405. package/dist/core/tools/read.d.ts.map +1 -0
  406. package/dist/core/tools/read.js +288 -0
  407. package/dist/core/tools/read.js.map +1 -0
  408. package/dist/core/tools/render-utils.d.ts +21 -0
  409. package/dist/core/tools/render-utils.d.ts.map +1 -0
  410. package/dist/core/tools/render-utils.js +49 -0
  411. package/dist/core/tools/render-utils.js.map +1 -0
  412. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  413. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  414. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  415. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  416. package/dist/core/tools/truncate.d.ts +70 -0
  417. package/dist/core/tools/truncate.d.ts.map +1 -0
  418. package/dist/core/tools/truncate.js +205 -0
  419. package/dist/core/tools/truncate.js.map +1 -0
  420. package/dist/core/tools/write.d.ts +26 -0
  421. package/dist/core/tools/write.d.ts.map +1 -0
  422. package/dist/core/tools/write.js +213 -0
  423. package/dist/core/tools/write.js.map +1 -0
  424. package/dist/index.d.ts +28 -0
  425. package/dist/index.d.ts.map +1 -0
  426. package/dist/index.js +41 -0
  427. package/dist/index.js.map +1 -0
  428. package/dist/main.d.ts +12 -0
  429. package/dist/main.d.ts.map +1 -0
  430. package/dist/main.js +583 -0
  431. package/dist/main.js.map +1 -0
  432. package/dist/migrations.d.ts +31 -0
  433. package/dist/migrations.d.ts.map +1 -0
  434. package/dist/migrations.js +279 -0
  435. package/dist/migrations.js.map +1 -0
  436. package/dist/modes/index.d.ts +9 -0
  437. package/dist/modes/index.d.ts.map +1 -0
  438. package/dist/modes/index.js +8 -0
  439. package/dist/modes/index.js.map +1 -0
  440. package/dist/modes/interactive/assets/clankolas.png +0 -0
  441. package/dist/modes/interactive/components/armin.d.ts +34 -0
  442. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  443. package/dist/modes/interactive/components/armin.js +333 -0
  444. package/dist/modes/interactive/components/armin.js.map +1 -0
  445. package/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  446. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  447. package/dist/modes/interactive/components/assistant-message.js +122 -0
  448. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  449. package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
  450. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  451. package/dist/modes/interactive/components/bash-execution.js +182 -0
  452. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  453. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  454. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  455. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  456. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  457. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  458. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  459. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  460. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  461. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  462. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  463. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  464. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  465. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  466. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  467. package/dist/modes/interactive/components/config-selector.js +481 -0
  468. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  469. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  470. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  471. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  472. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  473. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  474. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  475. package/dist/modes/interactive/components/custom-editor.js +70 -0
  476. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  477. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  478. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  479. package/dist/modes/interactive/components/custom-message.js +79 -0
  480. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  481. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  482. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  483. package/dist/modes/interactive/components/daxnuts.js +140 -0
  484. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  485. package/dist/modes/interactive/components/diff.d.ts +12 -0
  486. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  487. package/dist/modes/interactive/components/diff.js +133 -0
  488. package/dist/modes/interactive/components/diff.js.map +1 -0
  489. package/dist/modes/interactive/components/dynamic-border.d.ts +26 -0
  490. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  491. package/dist/modes/interactive/components/dynamic-border.js +58 -0
  492. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  493. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  494. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  495. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  496. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  497. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  498. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  499. package/dist/modes/interactive/components/extension-editor.js +111 -0
  500. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  501. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  502. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  503. package/dist/modes/interactive/components/extension-input.js +61 -0
  504. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  505. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  506. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  507. package/dist/modes/interactive/components/extension-selector.js +78 -0
  508. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  509. package/dist/modes/interactive/components/flexible-viewport-spacer.d.ts +10 -0
  510. package/dist/modes/interactive/components/flexible-viewport-spacer.d.ts.map +1 -0
  511. package/dist/modes/interactive/components/flexible-viewport-spacer.js +20 -0
  512. package/dist/modes/interactive/components/flexible-viewport-spacer.js.map +1 -0
  513. package/dist/modes/interactive/components/footer.d.ts +27 -0
  514. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  515. package/dist/modes/interactive/components/footer.js +272 -0
  516. package/dist/modes/interactive/components/footer.js.map +1 -0
  517. package/dist/modes/interactive/components/index.d.ts +32 -0
  518. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  519. package/dist/modes/interactive/components/index.js +33 -0
  520. package/dist/modes/interactive/components/index.js.map +1 -0
  521. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -0
  522. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  523. package/dist/modes/interactive/components/keybinding-hints.js +22 -0
  524. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  525. package/dist/modes/interactive/components/login-dialog.d.ts +46 -0
  526. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  527. package/dist/modes/interactive/components/login-dialog.js +160 -0
  528. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  529. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  530. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  531. package/dist/modes/interactive/components/model-selector.js +271 -0
  532. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  533. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  534. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  535. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  536. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  537. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  538. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  539. package/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  540. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  541. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  542. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  543. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  544. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  545. package/dist/modes/interactive/components/session-selector.d.ts +96 -0
  546. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  547. package/dist/modes/interactive/components/session-selector.js +861 -0
  548. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  549. package/dist/modes/interactive/components/settings-selector.d.ts +73 -0
  550. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  551. package/dist/modes/interactive/components/settings-selector.js +531 -0
  552. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  553. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  554. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  555. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  556. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  557. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  558. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  559. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  560. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  561. package/dist/modes/interactive/components/split-info-card.d.ts +18 -0
  562. package/dist/modes/interactive/components/split-info-card.d.ts.map +1 -0
  563. package/dist/modes/interactive/components/split-info-card.js +82 -0
  564. package/dist/modes/interactive/components/split-info-card.js.map +1 -0
  565. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  566. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  567. package/dist/modes/interactive/components/theme-selector.js +50 -0
  568. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  569. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  570. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  571. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  572. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  573. package/dist/modes/interactive/components/tool-execution.d.ts +66 -0
  574. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  575. package/dist/modes/interactive/components/tool-execution.js +313 -0
  576. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  577. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  578. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  579. package/dist/modes/interactive/components/tree-selector.js +1092 -0
  580. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  581. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  582. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  583. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  584. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  585. package/dist/modes/interactive/components/user-message.d.ts +10 -0
  586. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  587. package/dist/modes/interactive/components/user-message.js +29 -0
  588. package/dist/modes/interactive/components/user-message.js.map +1 -0
  589. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  590. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  591. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  592. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  593. package/dist/modes/interactive/interactive-mode.d.ts +369 -0
  594. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  595. package/dist/modes/interactive/interactive-mode.js +4899 -0
  596. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  597. package/dist/modes/interactive/theme/dark.json +85 -0
  598. package/dist/modes/interactive/theme/light.json +84 -0
  599. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  600. package/dist/modes/interactive/theme/theme.d.ts +81 -0
  601. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  602. package/dist/modes/interactive/theme/theme.js +971 -0
  603. package/dist/modes/interactive/theme/theme.js.map +1 -0
  604. package/dist/modes/print-mode.d.ts +28 -0
  605. package/dist/modes/print-mode.d.ts.map +1 -0
  606. package/dist/modes/print-mode.js +131 -0
  607. package/dist/modes/print-mode.js.map +1 -0
  608. package/dist/modes/rpc/jsonl.d.ts +17 -0
  609. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  610. package/dist/modes/rpc/jsonl.js +49 -0
  611. package/dist/modes/rpc/jsonl.js.map +1 -0
  612. package/dist/modes/rpc/rpc-client.d.ts +224 -0
  613. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  614. package/dist/modes/rpc/rpc-client.js +410 -0
  615. package/dist/modes/rpc/rpc-client.js.map +1 -0
  616. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  617. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  618. package/dist/modes/rpc/rpc-mode.js +601 -0
  619. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  620. package/dist/modes/rpc/rpc-types.d.ts +419 -0
  621. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  622. package/dist/modes/rpc/rpc-types.js +8 -0
  623. package/dist/modes/rpc/rpc-types.js.map +1 -0
  624. package/dist/package-manager-cli.d.ts +4 -0
  625. package/dist/package-manager-cli.d.ts.map +1 -0
  626. package/dist/package-manager-cli.js +460 -0
  627. package/dist/package-manager-cli.js.map +1 -0
  628. package/dist/utils/changelog.d.ts +21 -0
  629. package/dist/utils/changelog.d.ts.map +1 -0
  630. package/dist/utils/changelog.js +87 -0
  631. package/dist/utils/changelog.js.map +1 -0
  632. package/dist/utils/child-process.d.ts +12 -0
  633. package/dist/utils/child-process.d.ts.map +1 -0
  634. package/dist/utils/child-process.js +86 -0
  635. package/dist/utils/child-process.js.map +1 -0
  636. package/dist/utils/clipboard-image.d.ts +11 -0
  637. package/dist/utils/clipboard-image.d.ts.map +1 -0
  638. package/dist/utils/clipboard-image.js +245 -0
  639. package/dist/utils/clipboard-image.js.map +1 -0
  640. package/dist/utils/clipboard-native.d.ts +8 -0
  641. package/dist/utils/clipboard-native.d.ts.map +1 -0
  642. package/dist/utils/clipboard-native.js +14 -0
  643. package/dist/utils/clipboard-native.js.map +1 -0
  644. package/dist/utils/clipboard-text.d.ts +4 -0
  645. package/dist/utils/clipboard-text.d.ts.map +1 -0
  646. package/dist/utils/clipboard-text.js +37 -0
  647. package/dist/utils/clipboard-text.js.map +1 -0
  648. package/dist/utils/clipboard.d.ts +2 -0
  649. package/dist/utils/clipboard.d.ts.map +1 -0
  650. package/dist/utils/clipboard.js +117 -0
  651. package/dist/utils/clipboard.js.map +1 -0
  652. package/dist/utils/exif-orientation.d.ts +5 -0
  653. package/dist/utils/exif-orientation.d.ts.map +1 -0
  654. package/dist/utils/exif-orientation.js +158 -0
  655. package/dist/utils/exif-orientation.js.map +1 -0
  656. package/dist/utils/frontmatter.d.ts +8 -0
  657. package/dist/utils/frontmatter.d.ts.map +1 -0
  658. package/dist/utils/frontmatter.js +26 -0
  659. package/dist/utils/frontmatter.js.map +1 -0
  660. package/dist/utils/fs-watch.d.ts +5 -0
  661. package/dist/utils/fs-watch.d.ts.map +1 -0
  662. package/dist/utils/fs-watch.js +25 -0
  663. package/dist/utils/fs-watch.js.map +1 -0
  664. package/dist/utils/git.d.ts +26 -0
  665. package/dist/utils/git.d.ts.map +1 -0
  666. package/dist/utils/git.js +163 -0
  667. package/dist/utils/git.js.map +1 -0
  668. package/dist/utils/image-convert.d.ts +9 -0
  669. package/dist/utils/image-convert.d.ts.map +1 -0
  670. package/dist/utils/image-convert.js +39 -0
  671. package/dist/utils/image-convert.js.map +1 -0
  672. package/dist/utils/image-resize.d.ts +36 -0
  673. package/dist/utils/image-resize.d.ts.map +1 -0
  674. package/dist/utils/image-resize.js +137 -0
  675. package/dist/utils/image-resize.js.map +1 -0
  676. package/dist/utils/mime.d.ts +2 -0
  677. package/dist/utils/mime.d.ts.map +1 -0
  678. package/dist/utils/mime.js +26 -0
  679. package/dist/utils/mime.js.map +1 -0
  680. package/dist/utils/paths.d.ts +14 -0
  681. package/dist/utils/paths.d.ts.map +1 -0
  682. package/dist/utils/paths.js +34 -0
  683. package/dist/utils/paths.js.map +1 -0
  684. package/dist/utils/photon.d.ts +21 -0
  685. package/dist/utils/photon.d.ts.map +1 -0
  686. package/dist/utils/photon.js +121 -0
  687. package/dist/utils/photon.js.map +1 -0
  688. package/dist/utils/shell.d.ts +30 -0
  689. package/dist/utils/shell.d.ts.map +1 -0
  690. package/dist/utils/shell.js +190 -0
  691. package/dist/utils/shell.js.map +1 -0
  692. package/dist/utils/sleep.d.ts +5 -0
  693. package/dist/utils/sleep.d.ts.map +1 -0
  694. package/dist/utils/sleep.js +17 -0
  695. package/dist/utils/sleep.js.map +1 -0
  696. package/dist/utils/threadwell-user-agent.d.ts +2 -0
  697. package/dist/utils/threadwell-user-agent.d.ts.map +1 -0
  698. package/dist/utils/threadwell-user-agent.js +5 -0
  699. package/dist/utils/threadwell-user-agent.js.map +1 -0
  700. package/dist/utils/tools-manager.d.ts +3 -0
  701. package/dist/utils/tools-manager.d.ts.map +1 -0
  702. package/dist/utils/tools-manager.js +256 -0
  703. package/dist/utils/tools-manager.js.map +1 -0
  704. package/dist/utils/version-check.d.ts +14 -0
  705. package/dist/utils/version-check.d.ts.map +1 -0
  706. package/dist/utils/version-check.js +77 -0
  707. package/dist/utils/version-check.js.map +1 -0
  708. package/docs/compaction.md +394 -0
  709. package/docs/custom-provider.md +646 -0
  710. package/docs/development.md +71 -0
  711. package/docs/docs.json +148 -0
  712. package/docs/extensions.md +2596 -0
  713. package/docs/images/doom-extension.png +0 -0
  714. package/docs/images/exy.png +0 -0
  715. package/docs/images/interactive-mode.png +0 -0
  716. package/docs/images/tree-view.png +0 -0
  717. package/docs/index.md +64 -0
  718. package/docs/json.md +82 -0
  719. package/docs/keybindings.md +197 -0
  720. package/docs/memory.md +484 -0
  721. package/docs/models.md +474 -0
  722. package/docs/packages.md +223 -0
  723. package/docs/prompt-templates.md +88 -0
  724. package/docs/providers.md +241 -0
  725. package/docs/quickstart.md +142 -0
  726. package/docs/rpc.md +1407 -0
  727. package/docs/sdk.md +1149 -0
  728. package/docs/session-format.md +412 -0
  729. package/docs/sessions.md +137 -0
  730. package/docs/settings.md +378 -0
  731. package/docs/shell-aliases.md +13 -0
  732. package/docs/skills.md +232 -0
  733. package/docs/terminal-setup.md +106 -0
  734. package/docs/termux.md +127 -0
  735. package/docs/themes.md +295 -0
  736. package/docs/tmux.md +61 -0
  737. package/docs/tui.md +918 -0
  738. package/docs/usage.md +277 -0
  739. package/docs/windows.md +17 -0
  740. package/examples/README.md +25 -0
  741. package/examples/extensions/README.md +208 -0
  742. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  743. package/examples/extensions/bash-spawn-hook.ts +30 -0
  744. package/examples/extensions/bookmark.ts +50 -0
  745. package/examples/extensions/border-status-editor.ts +147 -0
  746. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  747. package/examples/extensions/claude-rules.ts +86 -0
  748. package/examples/extensions/commands.ts +72 -0
  749. package/examples/extensions/confirm-destructive.ts +59 -0
  750. package/examples/extensions/custom-compaction.ts +127 -0
  751. package/examples/extensions/custom-footer.ts +64 -0
  752. package/examples/extensions/custom-header.ts +73 -0
  753. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  754. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  755. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  756. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  757. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  758. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  759. package/examples/extensions/dirty-repo-guard.ts +56 -0
  760. package/examples/extensions/doom-overlay/README.md +46 -0
  761. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  762. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  763. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  764. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  765. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  766. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  767. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  768. package/examples/extensions/doom-overlay/index.ts +74 -0
  769. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  770. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  771. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  772. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  773. package/examples/extensions/dynamic-resources/index.ts +15 -0
  774. package/examples/extensions/dynamic-tools.ts +74 -0
  775. package/examples/extensions/event-bus.ts +43 -0
  776. package/examples/extensions/file-trigger.ts +41 -0
  777. package/examples/extensions/git-checkpoint.ts +53 -0
  778. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  779. package/examples/extensions/handoff.ts +191 -0
  780. package/examples/extensions/hello.ts +26 -0
  781. package/examples/extensions/hidden-thinking-label.ts +53 -0
  782. package/examples/extensions/inline-bash.ts +94 -0
  783. package/examples/extensions/input-transform.ts +43 -0
  784. package/examples/extensions/interactive-shell.ts +196 -0
  785. package/examples/extensions/mac-system-theme.ts +47 -0
  786. package/examples/extensions/message-renderer.ts +59 -0
  787. package/examples/extensions/minimal-mode.ts +426 -0
  788. package/examples/extensions/modal-editor.ts +85 -0
  789. package/examples/extensions/model-status.ts +31 -0
  790. package/examples/extensions/notify.ts +55 -0
  791. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  792. package/examples/extensions/overlay-test.ts +150 -0
  793. package/examples/extensions/permission-gate.ts +34 -0
  794. package/examples/extensions/pirate.ts +47 -0
  795. package/examples/extensions/plan-mode/README.md +65 -0
  796. package/examples/extensions/plan-mode/index.ts +340 -0
  797. package/examples/extensions/plan-mode/utils.ts +168 -0
  798. package/examples/extensions/preset.ts +436 -0
  799. package/examples/extensions/prompt-customizer.ts +97 -0
  800. package/examples/extensions/protected-paths.ts +30 -0
  801. package/examples/extensions/provider-payload.ts +18 -0
  802. package/examples/extensions/qna.ts +122 -0
  803. package/examples/extensions/question.ts +264 -0
  804. package/examples/extensions/questionnaire.ts +427 -0
  805. package/examples/extensions/rainbow-editor.ts +88 -0
  806. package/examples/extensions/reload-runtime.ts +37 -0
  807. package/examples/extensions/rpc-demo.ts +118 -0
  808. package/examples/extensions/sandbox/index.ts +321 -0
  809. package/examples/extensions/sandbox/package-lock.json +92 -0
  810. package/examples/extensions/sandbox/package.json +19 -0
  811. package/examples/extensions/send-user-message.ts +97 -0
  812. package/examples/extensions/session-name.ts +27 -0
  813. package/examples/extensions/shutdown-command.ts +63 -0
  814. package/examples/extensions/snake.ts +343 -0
  815. package/examples/extensions/space-invaders.ts +560 -0
  816. package/examples/extensions/ssh.ts +220 -0
  817. package/examples/extensions/status-line.ts +32 -0
  818. package/examples/extensions/structured-output.ts +65 -0
  819. package/examples/extensions/subagent/README.md +172 -0
  820. package/examples/extensions/subagent/agents/planner.md +37 -0
  821. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  822. package/examples/extensions/subagent/agents/scout.md +50 -0
  823. package/examples/extensions/subagent/agents/worker.md +24 -0
  824. package/examples/extensions/subagent/agents.ts +126 -0
  825. package/examples/extensions/subagent/index.ts +987 -0
  826. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  827. package/examples/extensions/subagent/prompts/implement.md +10 -0
  828. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  829. package/examples/extensions/summarize.ts +206 -0
  830. package/examples/extensions/system-prompt-header.ts +17 -0
  831. package/examples/extensions/tic-tac-toe.ts +1008 -0
  832. package/examples/extensions/timed-confirm.ts +70 -0
  833. package/examples/extensions/titlebar-spinner.ts +58 -0
  834. package/examples/extensions/todo.ts +297 -0
  835. package/examples/extensions/tool-override.ts +144 -0
  836. package/examples/extensions/tools.ts +141 -0
  837. package/examples/extensions/trigger-compact.ts +50 -0
  838. package/examples/extensions/truncated-tool.ts +195 -0
  839. package/examples/extensions/widget-placement.ts +9 -0
  840. package/examples/extensions/with-deps/index.ts +32 -0
  841. package/examples/extensions/with-deps/package-lock.json +31 -0
  842. package/examples/extensions/with-deps/package.json +22 -0
  843. package/examples/extensions/working-indicator.ts +123 -0
  844. package/examples/extensions/working-message-test.ts +25 -0
  845. package/examples/rpc-extension-ui.ts +632 -0
  846. package/examples/sdk/01-minimal.ts +22 -0
  847. package/examples/sdk/02-custom-model.ts +49 -0
  848. package/examples/sdk/03-custom-prompt.ts +62 -0
  849. package/examples/sdk/04-skills.ts +55 -0
  850. package/examples/sdk/05-tools.ts +44 -0
  851. package/examples/sdk/06-extensions.ts +90 -0
  852. package/examples/sdk/07-context-files.ts +42 -0
  853. package/examples/sdk/08-prompt-templates.ts +51 -0
  854. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  855. package/examples/sdk/10-settings.ts +53 -0
  856. package/examples/sdk/11-sessions.ts +48 -0
  857. package/examples/sdk/12-full-control.ts +73 -0
  858. package/examples/sdk/13-session-runtime.ts +67 -0
  859. package/examples/sdk/README.md +147 -0
  860. package/package.json +101 -33
  861. package/LICENSE +0 -21
@@ -0,0 +1,300 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { existsSync, mkdirSync, renameSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ import Database from "better-sqlite3";
5
+ import { getDefaultMemoryPriority } from "./memory-schema.js";
6
+ const CURRENT_SCHEMA_VERSION = 1;
7
+ function parseJsonArray(value) {
8
+ if (!value)
9
+ return undefined;
10
+ try {
11
+ const parsed = JSON.parse(value);
12
+ return Array.isArray(parsed) && parsed.every((entry) => typeof entry === "string") ? parsed : undefined;
13
+ }
14
+ catch {
15
+ return undefined;
16
+ }
17
+ }
18
+ function parseMetadata(value) {
19
+ if (!value)
20
+ return undefined;
21
+ try {
22
+ const parsed = JSON.parse(value);
23
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
24
+ return undefined;
25
+ const metadata = {};
26
+ for (const [key, entry] of Object.entries(parsed)) {
27
+ if (typeof entry === "string" || typeof entry === "number" || typeof entry === "boolean" || entry === null) {
28
+ metadata[key] = entry;
29
+ }
30
+ }
31
+ return metadata;
32
+ }
33
+ catch {
34
+ return undefined;
35
+ }
36
+ }
37
+ function rowToEvent(row) {
38
+ return {
39
+ id: row.id,
40
+ projectId: row.project_id,
41
+ sessionId: row.session_id,
42
+ type: row.type,
43
+ summary: row.summary,
44
+ content: row.content ?? undefined,
45
+ priority: row.priority,
46
+ filePaths: parseJsonArray(row.file_paths),
47
+ tags: parseJsonArray(row.tags),
48
+ metadata: parseMetadata(row.metadata),
49
+ createdAt: row.created_at,
50
+ };
51
+ }
52
+ export class SqliteMemoryStore {
53
+ kind = "sqlite";
54
+ dbPath;
55
+ db;
56
+ session;
57
+ writeQueue = Promise.resolve();
58
+ constructor(options) {
59
+ this.dbPath = options.dbPath;
60
+ }
61
+ async initialize(session) {
62
+ this.session = session;
63
+ this.open();
64
+ this.ensureProject(session);
65
+ this.ensureSession(session);
66
+ }
67
+ async recordEvent(session, event) {
68
+ return this.enqueueWrite(() => {
69
+ const db = this.open();
70
+ this.ensureProject(session);
71
+ this.ensureSession(session);
72
+ const memoryEvent = {
73
+ ...event,
74
+ id: randomUUID(),
75
+ projectId: session.projectId,
76
+ sessionId: session.sessionId,
77
+ priority: event.priority ?? getDefaultMemoryPriority(event.type),
78
+ createdAt: event.createdAt ?? new Date().toISOString(),
79
+ };
80
+ db.prepare(`INSERT INTO memory_events (id, project_id, session_id, type, summary, content, priority, file_paths, tags, metadata, created_at)
81
+ VALUES (@id, @projectId, @sessionId, @type, @summary, @content, @priority, @filePaths, @tags, @metadata, @createdAt)`).run({
82
+ ...memoryEvent,
83
+ content: memoryEvent.content ?? null,
84
+ filePaths: memoryEvent.filePaths ? JSON.stringify(memoryEvent.filePaths) : null,
85
+ tags: memoryEvent.tags ? JSON.stringify(memoryEvent.tags) : null,
86
+ metadata: memoryEvent.metadata ? JSON.stringify(memoryEvent.metadata) : null,
87
+ });
88
+ return memoryEvent;
89
+ });
90
+ }
91
+ async search(request) {
92
+ const db = this.open();
93
+ const limit = request.limit ?? 10;
94
+ const query = request.query.trim();
95
+ if (!query) {
96
+ const rows = db
97
+ .prepare(`SELECT * FROM memory_events
98
+ WHERE (@projectId IS NULL OR project_id = @projectId)
99
+ AND (@sessionId IS NULL OR session_id = @sessionId)
100
+ ORDER BY priority DESC, created_at DESC
101
+ LIMIT @limit`)
102
+ .all({ projectId: request.projectId ?? null, sessionId: request.sessionId ?? null, limit });
103
+ return rows.map((row, index) => ({
104
+ event: rowToEvent(row),
105
+ score: limit - index,
106
+ reason: "sqlite priority/recency match",
107
+ }));
108
+ }
109
+ const rows = db
110
+ .prepare(`SELECT memory_events.*, bm25(memory_events_fts) AS rank
111
+ FROM memory_events_fts
112
+ JOIN memory_events ON memory_events_fts.rowid = memory_events.rowid
113
+ WHERE memory_events_fts MATCH @query
114
+ AND (@projectId IS NULL OR memory_events.project_id = @projectId)
115
+ AND (@sessionId IS NULL OR memory_events.session_id = @sessionId)
116
+ ORDER BY rank ASC, memory_events.priority DESC, memory_events.created_at DESC
117
+ LIMIT @limit`)
118
+ .all({ projectId: request.projectId ?? null, sessionId: request.sessionId ?? null, query, limit });
119
+ return rows.map((row) => ({
120
+ event: rowToEvent(row),
121
+ score: -row.rank + row.priority,
122
+ reason: "sqlite fts5 bm25 match",
123
+ }));
124
+ }
125
+ async getRecent(projectId, limit) {
126
+ const rows = this.open()
127
+ .prepare("SELECT * FROM memory_events WHERE project_id = ? ORDER BY created_at DESC LIMIT ?")
128
+ .all(projectId, limit);
129
+ return rows.map(rowToEvent);
130
+ }
131
+ async deleteEvent(projectId, eventId) {
132
+ return this.enqueueWrite(() => {
133
+ const result = this.open()
134
+ .prepare("DELETE FROM memory_events WHERE project_id = ? AND id = ?")
135
+ .run(projectId, eventId);
136
+ return result.changes > 0;
137
+ });
138
+ }
139
+ async purgeProject(projectId) {
140
+ return this.enqueueWrite(() => {
141
+ const result = this.open().prepare("DELETE FROM memory_events WHERE project_id = ?").run(projectId);
142
+ return result.changes;
143
+ });
144
+ }
145
+ async getStatus() {
146
+ const db = this.open();
147
+ const row = db.prepare("SELECT COUNT(*) AS count FROM memory_events").get();
148
+ return {
149
+ enabled: true,
150
+ projectId: this.session?.projectId,
151
+ sessionId: this.session?.sessionId,
152
+ eventCount: row.count,
153
+ store: this.kind,
154
+ };
155
+ }
156
+ async close() {
157
+ this.db?.close();
158
+ this.db = undefined;
159
+ }
160
+ open() {
161
+ if (this.db)
162
+ return this.db;
163
+ mkdirSync(dirname(this.dbPath), { recursive: true });
164
+ try {
165
+ this.db = this.openDatabase();
166
+ this.configureDatabase(this.db);
167
+ return this.db;
168
+ }
169
+ catch (error) {
170
+ this.db?.close();
171
+ this.db = undefined;
172
+ if (!existsSync(this.dbPath))
173
+ throw error;
174
+ const corruptPath = `${this.dbPath}.corrupt.${Date.now()}`;
175
+ renameSync(this.dbPath, corruptPath);
176
+ this.db = this.openDatabase();
177
+ this.configureDatabase(this.db);
178
+ return this.db;
179
+ }
180
+ }
181
+ configureDatabase(db) {
182
+ db.pragma("journal_mode = WAL");
183
+ db.pragma("busy_timeout = 5000");
184
+ this.runMigrations(db);
185
+ }
186
+ runMigrations(db) {
187
+ db.exec(`
188
+ CREATE TABLE IF NOT EXISTS memory_schema_version (
189
+ version INTEGER NOT NULL
190
+ );
191
+ `);
192
+ const versionRow = db.prepare("SELECT version FROM memory_schema_version LIMIT 1").get();
193
+ const version = versionRow?.version ?? 0;
194
+ if (version < 1) {
195
+ db.exec(`
196
+ CREATE TABLE IF NOT EXISTS memory_projects (
197
+ project_id TEXT PRIMARY KEY,
198
+ root_path TEXT NOT NULL,
199
+ git_remote TEXT,
200
+ current_branch TEXT,
201
+ created_at TEXT NOT NULL,
202
+ last_seen_at TEXT NOT NULL
203
+ );
204
+
205
+ CREATE TABLE IF NOT EXISTS memory_sessions (
206
+ session_id TEXT PRIMARY KEY,
207
+ project_id TEXT NOT NULL,
208
+ cwd TEXT NOT NULL,
209
+ continuity_session_id TEXT,
210
+ model TEXT,
211
+ provider TEXT,
212
+ started_at TEXT NOT NULL,
213
+ last_seen_at TEXT NOT NULL,
214
+ ended_at TEXT,
215
+ FOREIGN KEY(project_id) REFERENCES memory_projects(project_id)
216
+ );
217
+
218
+ CREATE TABLE IF NOT EXISTS memory_events (
219
+ id TEXT PRIMARY KEY,
220
+ project_id TEXT NOT NULL,
221
+ session_id TEXT NOT NULL,
222
+ type TEXT NOT NULL,
223
+ summary TEXT NOT NULL,
224
+ content TEXT,
225
+ priority INTEGER NOT NULL,
226
+ file_paths TEXT,
227
+ tags TEXT,
228
+ metadata TEXT,
229
+ created_at TEXT NOT NULL,
230
+ FOREIGN KEY(project_id) REFERENCES memory_projects(project_id),
231
+ FOREIGN KEY(session_id) REFERENCES memory_sessions(session_id)
232
+ );
233
+
234
+ CREATE INDEX IF NOT EXISTS idx_memory_events_project_created ON memory_events(project_id, created_at DESC);
235
+ CREATE INDEX IF NOT EXISTS idx_memory_events_session_created ON memory_events(session_id, created_at DESC);
236
+ CREATE INDEX IF NOT EXISTS idx_memory_events_type_priority ON memory_events(type, priority DESC);
237
+
238
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_events_fts USING fts5(
239
+ summary,
240
+ content,
241
+ tags,
242
+ content='memory_events',
243
+ content_rowid='rowid'
244
+ );
245
+
246
+ CREATE TRIGGER IF NOT EXISTS memory_events_ai AFTER INSERT ON memory_events BEGIN
247
+ INSERT INTO memory_events_fts(rowid, summary, content, tags)
248
+ VALUES (new.rowid, new.summary, IFNULL(new.content, ''), IFNULL(new.tags, ''));
249
+ END;
250
+
251
+ CREATE TRIGGER IF NOT EXISTS memory_events_ad AFTER DELETE ON memory_events BEGIN
252
+ INSERT INTO memory_events_fts(memory_events_fts, rowid, summary, content, tags)
253
+ VALUES('delete', old.rowid, old.summary, IFNULL(old.content, ''), IFNULL(old.tags, ''));
254
+ END;
255
+
256
+ CREATE TRIGGER IF NOT EXISTS memory_events_au AFTER UPDATE ON memory_events BEGIN
257
+ INSERT INTO memory_events_fts(memory_events_fts, rowid, summary, content, tags)
258
+ VALUES('delete', old.rowid, old.summary, IFNULL(old.content, ''), IFNULL(old.tags, ''));
259
+ INSERT INTO memory_events_fts(rowid, summary, content, tags)
260
+ VALUES (new.rowid, new.summary, IFNULL(new.content, ''), IFNULL(new.tags, ''));
261
+ END;
262
+ `);
263
+ db.prepare("DELETE FROM memory_schema_version").run();
264
+ db.prepare("INSERT INTO memory_schema_version (version) VALUES (?)").run(CURRENT_SCHEMA_VERSION);
265
+ }
266
+ }
267
+ openDatabase() {
268
+ return new Database(this.dbPath);
269
+ }
270
+ async enqueueWrite(operation) {
271
+ const pending = this.writeQueue.then(operation, operation);
272
+ this.writeQueue = pending.then(() => undefined, () => undefined);
273
+ return pending;
274
+ }
275
+ ensureProject(session) {
276
+ const now = new Date().toISOString();
277
+ this.open()
278
+ .prepare(`INSERT INTO memory_projects (project_id, root_path, git_remote, current_branch, created_at, last_seen_at)
279
+ VALUES (@projectId, @rootPath, NULL, NULL, @now, @now)
280
+ ON CONFLICT(project_id) DO UPDATE SET last_seen_at = excluded.last_seen_at`)
281
+ .run({ projectId: session.projectId, rootPath: session.cwd, now });
282
+ }
283
+ ensureSession(session) {
284
+ const now = new Date().toISOString();
285
+ this.open()
286
+ .prepare(`INSERT INTO memory_sessions (session_id, project_id, cwd, continuity_session_id, model, provider, started_at, last_seen_at)
287
+ VALUES (@sessionId, @projectId, @cwd, @continuitySessionId, @model, @provider, @now, @now)
288
+ ON CONFLICT(session_id) DO UPDATE SET last_seen_at = excluded.last_seen_at`)
289
+ .run({
290
+ sessionId: session.sessionId,
291
+ projectId: session.projectId,
292
+ cwd: session.cwd,
293
+ continuitySessionId: session.continuitySessionId ?? null,
294
+ model: session.model ?? null,
295
+ provider: session.provider ?? null,
296
+ now,
297
+ });
298
+ }
299
+ }
300
+ //# sourceMappingURL=sqlite-memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-memory-store.js","sourceRoot":"","sources":["../../../src/core/memory/sqlite-memory-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, renameSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport Database from \"better-sqlite3\";\nimport { getDefaultMemoryPriority } from \"./memory-schema.js\";\nimport type { MemoryStore } from \"./memory-store.js\";\nimport type {\n\tMemoryEvent,\n\tMemoryEventInput,\n\tMemorySearchRequest,\n\tMemorySearchResult,\n\tMemorySessionIdentity,\n\tMemoryStatus,\n} from \"./memory-types.js\";\n\nconst CURRENT_SCHEMA_VERSION = 1;\n\ninterface SqliteMemoryStoreOptions {\n\tdbPath: string;\n}\n\ninterface EventRow {\n\tid: string;\n\tproject_id: string;\n\tsession_id: string;\n\ttype: MemoryEvent[\"type\"];\n\tsummary: string;\n\tcontent: string | null;\n\tpriority: number;\n\tfile_paths: string | null;\n\ttags: string | null;\n\tmetadata: string | null;\n\tcreated_at: string;\n}\n\nfunction parseJsonArray(value: string | null): string[] | undefined {\n\tif (!value) return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(value) as unknown;\n\t\treturn Array.isArray(parsed) && parsed.every((entry) => typeof entry === \"string\") ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction parseMetadata(value: string | null): Record<string, string | number | boolean | null> | undefined {\n\tif (!value) return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(value) as unknown;\n\t\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return undefined;\n\t\tconst metadata: Record<string, string | number | boolean | null> = {};\n\t\tfor (const [key, entry] of Object.entries(parsed)) {\n\t\t\tif (typeof entry === \"string\" || typeof entry === \"number\" || typeof entry === \"boolean\" || entry === null) {\n\t\t\t\tmetadata[key] = entry;\n\t\t\t}\n\t\t}\n\t\treturn metadata;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction rowToEvent(row: EventRow): MemoryEvent {\n\treturn {\n\t\tid: row.id,\n\t\tprojectId: row.project_id,\n\t\tsessionId: row.session_id,\n\t\ttype: row.type,\n\t\tsummary: row.summary,\n\t\tcontent: row.content ?? undefined,\n\t\tpriority: row.priority as MemoryEvent[\"priority\"],\n\t\tfilePaths: parseJsonArray(row.file_paths),\n\t\ttags: parseJsonArray(row.tags),\n\t\tmetadata: parseMetadata(row.metadata),\n\t\tcreatedAt: row.created_at,\n\t};\n}\n\nexport class SqliteMemoryStore implements MemoryStore {\n\treadonly kind = \"sqlite\";\n\tprivate readonly dbPath: string;\n\tprivate db: Database.Database | undefined;\n\tprivate session: MemorySessionIdentity | undefined;\n\tprivate writeQueue: Promise<void> = Promise.resolve();\n\n\tconstructor(options: SqliteMemoryStoreOptions) {\n\t\tthis.dbPath = options.dbPath;\n\t}\n\n\tasync initialize(session: MemorySessionIdentity): Promise<void> {\n\t\tthis.session = session;\n\t\tthis.open();\n\t\tthis.ensureProject(session);\n\t\tthis.ensureSession(session);\n\t}\n\n\tasync recordEvent(session: MemorySessionIdentity, event: MemoryEventInput): Promise<MemoryEvent> {\n\t\treturn this.enqueueWrite(() => {\n\t\t\tconst db = this.open();\n\t\t\tthis.ensureProject(session);\n\t\t\tthis.ensureSession(session);\n\t\t\tconst memoryEvent: MemoryEvent = {\n\t\t\t\t...event,\n\t\t\t\tid: randomUUID(),\n\t\t\t\tprojectId: session.projectId,\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t\tpriority: event.priority ?? getDefaultMemoryPriority(event.type),\n\t\t\t\tcreatedAt: event.createdAt ?? new Date().toISOString(),\n\t\t\t};\n\t\t\tdb.prepare(\n\t\t\t\t`INSERT INTO memory_events (id, project_id, session_id, type, summary, content, priority, file_paths, tags, metadata, created_at)\n\t\t\t\t VALUES (@id, @projectId, @sessionId, @type, @summary, @content, @priority, @filePaths, @tags, @metadata, @createdAt)`,\n\t\t\t).run({\n\t\t\t\t...memoryEvent,\n\t\t\t\tcontent: memoryEvent.content ?? null,\n\t\t\t\tfilePaths: memoryEvent.filePaths ? JSON.stringify(memoryEvent.filePaths) : null,\n\t\t\t\ttags: memoryEvent.tags ? JSON.stringify(memoryEvent.tags) : null,\n\t\t\t\tmetadata: memoryEvent.metadata ? JSON.stringify(memoryEvent.metadata) : null,\n\t\t\t});\n\t\t\treturn memoryEvent;\n\t\t});\n\t}\n\n\tasync search(request: MemorySearchRequest): Promise<MemorySearchResult[]> {\n\t\tconst db = this.open();\n\t\tconst limit = request.limit ?? 10;\n\t\tconst query = request.query.trim();\n\t\tif (!query) {\n\t\t\tconst rows = db\n\t\t\t\t.prepare(\n\t\t\t\t\t`SELECT * FROM memory_events\n\t\t\t\t\t WHERE (@projectId IS NULL OR project_id = @projectId)\n\t\t\t\t\t AND (@sessionId IS NULL OR session_id = @sessionId)\n\t\t\t\t\t ORDER BY priority DESC, created_at DESC\n\t\t\t\t\t LIMIT @limit`,\n\t\t\t\t)\n\t\t\t\t.all({ projectId: request.projectId ?? null, sessionId: request.sessionId ?? null, limit }) as EventRow[];\n\t\t\treturn rows.map((row, index) => ({\n\t\t\t\tevent: rowToEvent(row),\n\t\t\t\tscore: limit - index,\n\t\t\t\treason: \"sqlite priority/recency match\",\n\t\t\t}));\n\t\t}\n\n\t\tconst rows = db\n\t\t\t.prepare(\n\t\t\t\t`SELECT memory_events.*, bm25(memory_events_fts) AS rank\n\t\t\t\t FROM memory_events_fts\n\t\t\t\t JOIN memory_events ON memory_events_fts.rowid = memory_events.rowid\n\t\t\t\t WHERE memory_events_fts MATCH @query\n\t\t\t\t AND (@projectId IS NULL OR memory_events.project_id = @projectId)\n\t\t\t\t AND (@sessionId IS NULL OR memory_events.session_id = @sessionId)\n\t\t\t\t ORDER BY rank ASC, memory_events.priority DESC, memory_events.created_at DESC\n\t\t\t\t LIMIT @limit`,\n\t\t\t)\n\t\t\t.all({ projectId: request.projectId ?? null, sessionId: request.sessionId ?? null, query, limit }) as Array<\n\t\t\tEventRow & { rank: number }\n\t\t>;\n\t\treturn rows.map((row) => ({\n\t\t\tevent: rowToEvent(row),\n\t\t\tscore: -row.rank + row.priority,\n\t\t\treason: \"sqlite fts5 bm25 match\",\n\t\t}));\n\t}\n\n\tasync getRecent(projectId: string, limit: number): Promise<MemoryEvent[]> {\n\t\tconst rows = this.open()\n\t\t\t.prepare(\"SELECT * FROM memory_events WHERE project_id = ? ORDER BY created_at DESC LIMIT ?\")\n\t\t\t.all(projectId, limit) as EventRow[];\n\t\treturn rows.map(rowToEvent);\n\t}\n\n\tasync deleteEvent(projectId: string, eventId: string): Promise<boolean> {\n\t\treturn this.enqueueWrite(() => {\n\t\t\tconst result = this.open()\n\t\t\t\t.prepare(\"DELETE FROM memory_events WHERE project_id = ? AND id = ?\")\n\t\t\t\t.run(projectId, eventId);\n\t\t\treturn result.changes > 0;\n\t\t});\n\t}\n\n\tasync purgeProject(projectId: string): Promise<number> {\n\t\treturn this.enqueueWrite(() => {\n\t\t\tconst result = this.open().prepare(\"DELETE FROM memory_events WHERE project_id = ?\").run(projectId);\n\t\t\treturn result.changes;\n\t\t});\n\t}\n\n\tasync getStatus(): Promise<MemoryStatus> {\n\t\tconst db = this.open();\n\t\tconst row = db.prepare(\"SELECT COUNT(*) AS count FROM memory_events\").get() as { count: number };\n\t\treturn {\n\t\t\tenabled: true,\n\t\t\tprojectId: this.session?.projectId,\n\t\t\tsessionId: this.session?.sessionId,\n\t\t\teventCount: row.count,\n\t\t\tstore: this.kind,\n\t\t};\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.db?.close();\n\t\tthis.db = undefined;\n\t}\n\n\tprivate open(): Database.Database {\n\t\tif (this.db) return this.db;\n\t\tmkdirSync(dirname(this.dbPath), { recursive: true });\n\t\ttry {\n\t\t\tthis.db = this.openDatabase();\n\t\t\tthis.configureDatabase(this.db);\n\t\t\treturn this.db;\n\t\t} catch (error) {\n\t\t\tthis.db?.close();\n\t\t\tthis.db = undefined;\n\t\t\tif (!existsSync(this.dbPath)) throw error;\n\t\t\tconst corruptPath = `${this.dbPath}.corrupt.${Date.now()}`;\n\t\t\trenameSync(this.dbPath, corruptPath);\n\t\t\tthis.db = this.openDatabase();\n\t\t\tthis.configureDatabase(this.db);\n\t\t\treturn this.db;\n\t\t}\n\t}\n\n\tprivate configureDatabase(db: Database.Database): void {\n\t\tdb.pragma(\"journal_mode = WAL\");\n\t\tdb.pragma(\"busy_timeout = 5000\");\n\t\tthis.runMigrations(db);\n\t}\n\n\tprivate runMigrations(db: Database.Database): void {\n\t\tdb.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS memory_schema_version (\n\t\t\t\tversion INTEGER NOT NULL\n\t\t\t);\n\t\t`);\n\t\tconst versionRow = db.prepare(\"SELECT version FROM memory_schema_version LIMIT 1\").get() as\n\t\t\t| { version: number }\n\t\t\t| undefined;\n\t\tconst version = versionRow?.version ?? 0;\n\t\tif (version < 1) {\n\t\t\tdb.exec(`\n\t\t\t\tCREATE TABLE IF NOT EXISTS memory_projects (\n\t\t\t\t\tproject_id TEXT PRIMARY KEY,\n\t\t\t\t\troot_path TEXT NOT NULL,\n\t\t\t\t\tgit_remote TEXT,\n\t\t\t\t\tcurrent_branch TEXT,\n\t\t\t\t\tcreated_at TEXT NOT NULL,\n\t\t\t\t\tlast_seen_at TEXT NOT NULL\n\t\t\t\t);\n\n\t\t\t\tCREATE TABLE IF NOT EXISTS memory_sessions (\n\t\t\t\t\tsession_id TEXT PRIMARY KEY,\n\t\t\t\t\tproject_id TEXT NOT NULL,\n\t\t\t\t\tcwd TEXT NOT NULL,\n\t\t\t\t\tcontinuity_session_id TEXT,\n\t\t\t\t\tmodel TEXT,\n\t\t\t\t\tprovider TEXT,\n\t\t\t\t\tstarted_at TEXT NOT NULL,\n\t\t\t\t\tlast_seen_at TEXT NOT NULL,\n\t\t\t\t\tended_at TEXT,\n\t\t\t\t\tFOREIGN KEY(project_id) REFERENCES memory_projects(project_id)\n\t\t\t\t);\n\n\t\t\t\tCREATE TABLE IF NOT EXISTS memory_events (\n\t\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\t\tproject_id TEXT NOT NULL,\n\t\t\t\t\tsession_id TEXT NOT NULL,\n\t\t\t\t\ttype TEXT NOT NULL,\n\t\t\t\t\tsummary TEXT NOT NULL,\n\t\t\t\t\tcontent TEXT,\n\t\t\t\t\tpriority INTEGER NOT NULL,\n\t\t\t\t\tfile_paths TEXT,\n\t\t\t\t\ttags TEXT,\n\t\t\t\t\tmetadata TEXT,\n\t\t\t\t\tcreated_at TEXT NOT NULL,\n\t\t\t\t\tFOREIGN KEY(project_id) REFERENCES memory_projects(project_id),\n\t\t\t\t\tFOREIGN KEY(session_id) REFERENCES memory_sessions(session_id)\n\t\t\t\t);\n\n\t\t\t\tCREATE INDEX IF NOT EXISTS idx_memory_events_project_created ON memory_events(project_id, created_at DESC);\n\t\t\t\tCREATE INDEX IF NOT EXISTS idx_memory_events_session_created ON memory_events(session_id, created_at DESC);\n\t\t\t\tCREATE INDEX IF NOT EXISTS idx_memory_events_type_priority ON memory_events(type, priority DESC);\n\n\t\t\t\tCREATE VIRTUAL TABLE IF NOT EXISTS memory_events_fts USING fts5(\n\t\t\t\t\tsummary,\n\t\t\t\t\tcontent,\n\t\t\t\t\ttags,\n\t\t\t\t\tcontent='memory_events',\n\t\t\t\t\tcontent_rowid='rowid'\n\t\t\t\t);\n\n\t\t\t\tCREATE TRIGGER IF NOT EXISTS memory_events_ai AFTER INSERT ON memory_events BEGIN\n\t\t\t\t\tINSERT INTO memory_events_fts(rowid, summary, content, tags)\n\t\t\t\t\tVALUES (new.rowid, new.summary, IFNULL(new.content, ''), IFNULL(new.tags, ''));\n\t\t\t\tEND;\n\n\t\t\t\tCREATE TRIGGER IF NOT EXISTS memory_events_ad AFTER DELETE ON memory_events BEGIN\n\t\t\t\t\tINSERT INTO memory_events_fts(memory_events_fts, rowid, summary, content, tags)\n\t\t\t\t\tVALUES('delete', old.rowid, old.summary, IFNULL(old.content, ''), IFNULL(old.tags, ''));\n\t\t\t\tEND;\n\n\t\t\t\tCREATE TRIGGER IF NOT EXISTS memory_events_au AFTER UPDATE ON memory_events BEGIN\n\t\t\t\t\tINSERT INTO memory_events_fts(memory_events_fts, rowid, summary, content, tags)\n\t\t\t\t\tVALUES('delete', old.rowid, old.summary, IFNULL(old.content, ''), IFNULL(old.tags, ''));\n\t\t\t\t\tINSERT INTO memory_events_fts(rowid, summary, content, tags)\n\t\t\t\t\tVALUES (new.rowid, new.summary, IFNULL(new.content, ''), IFNULL(new.tags, ''));\n\t\t\t\tEND;\n\t\t\t`);\n\t\t\tdb.prepare(\"DELETE FROM memory_schema_version\").run();\n\t\t\tdb.prepare(\"INSERT INTO memory_schema_version (version) VALUES (?)\").run(CURRENT_SCHEMA_VERSION);\n\t\t}\n\t}\n\n\tprivate openDatabase(): Database.Database {\n\t\treturn new Database(this.dbPath);\n\t}\n\n\tprivate async enqueueWrite<T>(operation: () => T): Promise<T> {\n\t\tconst pending = this.writeQueue.then(operation, operation);\n\t\tthis.writeQueue = pending.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t);\n\t\treturn pending;\n\t}\n\n\tprivate ensureProject(session: MemorySessionIdentity): void {\n\t\tconst now = new Date().toISOString();\n\t\tthis.open()\n\t\t\t.prepare(\n\t\t\t\t`INSERT INTO memory_projects (project_id, root_path, git_remote, current_branch, created_at, last_seen_at)\n\t\t\t\t VALUES (@projectId, @rootPath, NULL, NULL, @now, @now)\n\t\t\t\t ON CONFLICT(project_id) DO UPDATE SET last_seen_at = excluded.last_seen_at`,\n\t\t\t)\n\t\t\t.run({ projectId: session.projectId, rootPath: session.cwd, now });\n\t}\n\n\tprivate ensureSession(session: MemorySessionIdentity): void {\n\t\tconst now = new Date().toISOString();\n\t\tthis.open()\n\t\t\t.prepare(\n\t\t\t\t`INSERT INTO memory_sessions (session_id, project_id, cwd, continuity_session_id, model, provider, started_at, last_seen_at)\n\t\t\t\t VALUES (@sessionId, @projectId, @cwd, @continuitySessionId, @model, @provider, @now, @now)\n\t\t\t\t ON CONFLICT(session_id) DO UPDATE SET last_seen_at = excluded.last_seen_at`,\n\t\t\t)\n\t\t\t.run({\n\t\t\t\tsessionId: session.sessionId,\n\t\t\t\tprojectId: session.projectId,\n\t\t\t\tcwd: session.cwd,\n\t\t\t\tcontinuitySessionId: session.continuitySessionId ?? null,\n\t\t\t\tmodel: session.model ?? null,\n\t\t\t\tprovider: session.provider ?? null,\n\t\t\t\tnow,\n\t\t\t});\n\t}\n}\n"]}
@@ -0,0 +1,9 @@
1
+ export type ThreadwellStartupReadLayer = "settings" | "continuity" | "event_memory" | "context" | "adrs" | "retrieval_capsule";
2
+ export interface ThreadwellStartupReadStep {
3
+ layer: ThreadwellStartupReadLayer;
4
+ description: string;
5
+ optional: boolean;
6
+ }
7
+ export declare const THREADWELL_STARTUP_READ_ORDER: readonly ThreadwellStartupReadStep[];
8
+ export declare function renderStartupReadOrder(): string;
9
+ //# sourceMappingURL=startup-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-order.d.ts","sourceRoot":"","sources":["../../../src/core/memory/startup-order.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GACnC,UAAU,GACV,YAAY,GACZ,cAAc,GACd,SAAS,GACT,MAAM,GACN,mBAAmB,CAAC;AAEvB,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,0BAA0B,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,6BAA6B,EAAE,SAAS,yBAAyB,EA+BpE,CAAC;AAEX,wBAAgB,sBAAsB,IAAI,MAAM,CAO/C","sourcesContent":["export type ThreadwellStartupReadLayer =\n\t| \"settings\"\n\t| \"continuity\"\n\t| \"event_memory\"\n\t| \"context\"\n\t| \"adrs\"\n\t| \"retrieval_capsule\";\n\nexport interface ThreadwellStartupReadStep {\n\tlayer: ThreadwellStartupReadLayer;\n\tdescription: string;\n\toptional: boolean;\n}\n\nexport const THREADWELL_STARTUP_READ_ORDER: readonly ThreadwellStartupReadStep[] = [\n\t{\n\t\tlayer: \"settings\",\n\t\tdescription: \"Read continuity and memory settings before installing providers or stores.\",\n\t\toptional: false,\n\t},\n\t{\n\t\tlayer: \"continuity\",\n\t\tdescription: \"Load operational continuity first so current task, blockers, and next action stay authoritative.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"event_memory\",\n\t\tdescription: \"Open event memory store after settings and before retrieval.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"context\",\n\t\tdescription: \"Read CONTEXT.md as semantic vocabulary, preserving manual edits.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"adrs\",\n\t\tdescription: \"Read accepted ADRs as durable current decisions; ignore superseded decisions for active context.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"retrieval_capsule\",\n\t\tdescription: \"Build a bounded cited capsule from continuity, memory, context terms, and active ADRs.\",\n\t\toptional: true,\n\t},\n] as const;\n\nexport function renderStartupReadOrder(): string {\n\treturn [\n\t\t\"Threadwell startup read order:\",\n\t\t...THREADWELL_STARTUP_READ_ORDER.map(\n\t\t\t(step, index) => `${index + 1}. ${step.layer}${step.optional ? \" (optional)\" : \"\"}: ${step.description}`,\n\t\t),\n\t].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,39 @@
1
+ export const THREADWELL_STARTUP_READ_ORDER = [
2
+ {
3
+ layer: "settings",
4
+ description: "Read continuity and memory settings before installing providers or stores.",
5
+ optional: false,
6
+ },
7
+ {
8
+ layer: "continuity",
9
+ description: "Load operational continuity first so current task, blockers, and next action stay authoritative.",
10
+ optional: true,
11
+ },
12
+ {
13
+ layer: "event_memory",
14
+ description: "Open event memory store after settings and before retrieval.",
15
+ optional: true,
16
+ },
17
+ {
18
+ layer: "context",
19
+ description: "Read CONTEXT.md as semantic vocabulary, preserving manual edits.",
20
+ optional: true,
21
+ },
22
+ {
23
+ layer: "adrs",
24
+ description: "Read accepted ADRs as durable current decisions; ignore superseded decisions for active context.",
25
+ optional: true,
26
+ },
27
+ {
28
+ layer: "retrieval_capsule",
29
+ description: "Build a bounded cited capsule from continuity, memory, context terms, and active ADRs.",
30
+ optional: true,
31
+ },
32
+ ];
33
+ export function renderStartupReadOrder() {
34
+ return [
35
+ "Threadwell startup read order:",
36
+ ...THREADWELL_STARTUP_READ_ORDER.map((step, index) => `${index + 1}. ${step.layer}${step.optional ? " (optional)" : ""}: ${step.description}`),
37
+ ].join("\n");
38
+ }
39
+ //# sourceMappingURL=startup-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-order.js","sourceRoot":"","sources":["../../../src/core/memory/startup-order.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,6BAA6B,GAAyC;IAClF;QACC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,4EAA4E;QACzF,QAAQ,EAAE,KAAK;KACf;IACD;QACC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,kGAAkG;QAC/G,QAAQ,EAAE,IAAI;KACd;IACD;QACC,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE,IAAI;KACd;IACD;QACC,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,kEAAkE;QAC/E,QAAQ,EAAE,IAAI;KACd;IACD;QACC,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,kGAAkG;QAC/G,QAAQ,EAAE,IAAI;KACd;IACD;QACC,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,wFAAwF;QACrG,QAAQ,EAAE,IAAI;KACd;CACQ,CAAC;AAEX,MAAM,UAAU,sBAAsB,GAAW;IAChD,OAAO;QACN,gCAAgC;QAChC,GAAG,6BAA6B,CAAC,GAAG,CACnC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACxG;KACD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACb","sourcesContent":["export type ThreadwellStartupReadLayer =\n\t| \"settings\"\n\t| \"continuity\"\n\t| \"event_memory\"\n\t| \"context\"\n\t| \"adrs\"\n\t| \"retrieval_capsule\";\n\nexport interface ThreadwellStartupReadStep {\n\tlayer: ThreadwellStartupReadLayer;\n\tdescription: string;\n\toptional: boolean;\n}\n\nexport const THREADWELL_STARTUP_READ_ORDER: readonly ThreadwellStartupReadStep[] = [\n\t{\n\t\tlayer: \"settings\",\n\t\tdescription: \"Read continuity and memory settings before installing providers or stores.\",\n\t\toptional: false,\n\t},\n\t{\n\t\tlayer: \"continuity\",\n\t\tdescription: \"Load operational continuity first so current task, blockers, and next action stay authoritative.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"event_memory\",\n\t\tdescription: \"Open event memory store after settings and before retrieval.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"context\",\n\t\tdescription: \"Read CONTEXT.md as semantic vocabulary, preserving manual edits.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"adrs\",\n\t\tdescription: \"Read accepted ADRs as durable current decisions; ignore superseded decisions for active context.\",\n\t\toptional: true,\n\t},\n\t{\n\t\tlayer: \"retrieval_capsule\",\n\t\tdescription: \"Build a bounded cited capsule from continuity, memory, context terms, and active ADRs.\",\n\t\toptional: true,\n\t},\n] as const;\n\nexport function renderStartupReadOrder(): string {\n\treturn [\n\t\t\"Threadwell startup read order:\",\n\t\t...THREADWELL_STARTUP_READ_ORDER.map(\n\t\t\t(step, index) => `${index + 1}. ${step.layer}${step.optional ? \" (optional)\" : \"\"}: ${step.description}`,\n\t\t),\n\t].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Custom message types and transformers for the coding agent.
3
+ *
4
+ * Extends the base AgentMessage type with coding-agent specific message types,
5
+ * and provides a transformer to convert them to LLM-compatible messages.
6
+ */
7
+ import type { AgentMessage } from "@threadwell/agent-core";
8
+ import type { ImageContent, Message, TextContent } from "@threadwell/ai";
9
+ export declare const COMPACTION_SUMMARY_PREFIX = "The conversation history before this point was compacted into the following summary:\n\n<summary>\n";
10
+ export declare const COMPACTION_SUMMARY_SUFFIX = "\n</summary>";
11
+ export declare const BRANCH_SUMMARY_PREFIX = "The following is a summary of a branch that this conversation came back from:\n\n<summary>\n";
12
+ export declare const BRANCH_SUMMARY_SUFFIX = "</summary>";
13
+ /**
14
+ * Message type for bash executions via the ! command.
15
+ */
16
+ export interface BashExecutionMessage {
17
+ role: "bashExecution";
18
+ command: string;
19
+ output: string;
20
+ exitCode: number | undefined;
21
+ cancelled: boolean;
22
+ truncated: boolean;
23
+ fullOutputPath?: string;
24
+ timestamp: number;
25
+ /** If true, this message is excluded from LLM context (!! prefix) */
26
+ excludeFromContext?: boolean;
27
+ }
28
+ /**
29
+ * Message type for extension-injected messages via sendMessage().
30
+ * These are custom messages that extensions can inject into the conversation.
31
+ */
32
+ export interface CustomMessage<T = unknown> {
33
+ role: "custom";
34
+ customType: string;
35
+ content: string | (TextContent | ImageContent)[];
36
+ display: boolean;
37
+ details?: T;
38
+ timestamp: number;
39
+ }
40
+ export interface BranchSummaryMessage {
41
+ role: "branchSummary";
42
+ summary: string;
43
+ fromId: string;
44
+ timestamp: number;
45
+ }
46
+ export interface CompactionSummaryMessage {
47
+ role: "compactionSummary";
48
+ summary: string;
49
+ tokensBefore: number;
50
+ timestamp: number;
51
+ }
52
+ declare module "@threadwell/agent-core" {
53
+ interface CustomAgentMessages {
54
+ bashExecution: BashExecutionMessage;
55
+ custom: CustomMessage;
56
+ branchSummary: BranchSummaryMessage;
57
+ compactionSummary: CompactionSummaryMessage;
58
+ }
59
+ }
60
+ /**
61
+ * Convert a BashExecutionMessage to user message text for LLM context.
62
+ */
63
+ export declare function bashExecutionToText(msg: BashExecutionMessage): string;
64
+ export declare function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage;
65
+ export declare function createCompactionSummaryMessage(summary: string, tokensBefore: number, timestamp: string): CompactionSummaryMessage;
66
+ /** Convert CustomMessageEntry to AgentMessage format */
67
+ export declare function createCustomMessage(customType: string, content: string | (TextContent | ImageContent)[], display: boolean, details: unknown | undefined, timestamp: string): CustomMessage;
68
+ /**
69
+ * Transform AgentMessages (including custom types) to LLM-compatible Messages.
70
+ *
71
+ * This is used by:
72
+ * - Agent's transormToLlm option (for prompt calls and queued messages)
73
+ * - Compaction's generateSummary (for summarization)
74
+ * - Custom extensions and tools
75
+ */
76
+ export declare function convertToLlm(messages: AgentMessage[]): Message[];
77
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEzE,eAAO,MAAM,yBAAyB,wGAGrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,iBAC3B,CAAC;AAEZ,eAAO,MAAM,qBAAqB,iGAGjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CAClB;AAGD,OAAO,QAAQ,wBAAwB,CAAC,CAAC;IACxC,UAAU,mBAAmB;QAC5B,aAAa,EAAE,oBAAoB,CAAC;QACpC,MAAM,EAAE,aAAa,CAAC;QACtB,aAAa,EAAE,oBAAoB,CAAC;QACpC,iBAAiB,EAAE,wBAAwB,CAAC;KAC5C;CACD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAgBrE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAOnH;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GACf,wBAAwB,CAO1B;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,EAChD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,GACf,aAAa,CASf;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CA+ChE","sourcesContent":["/**\n * Custom message types and transformers for the coding agent.\n *\n * Extends the base AgentMessage type with coding-agent specific message types,\n * and provides a transformer to convert them to LLM-compatible messages.\n */\n\nimport type { AgentMessage } from \"@threadwell/agent-core\";\nimport type { ImageContent, Message, TextContent } from \"@threadwell/ai\";\n\nexport const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:\n\n<summary>\n`;\n\nexport const COMPACTION_SUMMARY_SUFFIX = `\n</summary>`;\n\nexport const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:\n\n<summary>\n`;\n\nexport const BRANCH_SUMMARY_SUFFIX = `</summary>`;\n\n/**\n * Message type for bash executions via the ! command.\n */\nexport interface BashExecutionMessage {\n\trole: \"bashExecution\";\n\tcommand: string;\n\toutput: string;\n\texitCode: number | undefined;\n\tcancelled: boolean;\n\ttruncated: boolean;\n\tfullOutputPath?: string;\n\ttimestamp: number;\n\t/** If true, this message is excluded from LLM context (!! prefix) */\n\texcludeFromContext?: boolean;\n}\n\n/**\n * Message type for extension-injected messages via sendMessage().\n * These are custom messages that extensions can inject into the conversation.\n */\nexport interface CustomMessage<T = unknown> {\n\trole: \"custom\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdisplay: boolean;\n\tdetails?: T;\n\ttimestamp: number;\n}\n\nexport interface BranchSummaryMessage {\n\trole: \"branchSummary\";\n\tsummary: string;\n\tfromId: string;\n\ttimestamp: number;\n}\n\nexport interface CompactionSummaryMessage {\n\trole: \"compactionSummary\";\n\tsummary: string;\n\ttokensBefore: number;\n\ttimestamp: number;\n}\n\n// Extend CustomAgentMessages via declaration merging\ndeclare module \"@threadwell/agent-core\" {\n\tinterface CustomAgentMessages {\n\t\tbashExecution: BashExecutionMessage;\n\t\tcustom: CustomMessage;\n\t\tbranchSummary: BranchSummaryMessage;\n\t\tcompactionSummary: CompactionSummaryMessage;\n\t}\n}\n\n/**\n * Convert a BashExecutionMessage to user message text for LLM context.\n */\nexport function bashExecutionToText(msg: BashExecutionMessage): string {\n\tlet text = `Ran \\`${msg.command}\\`\\n`;\n\tif (msg.output) {\n\t\ttext += `\\`\\`\\`\\n${msg.output}\\n\\`\\`\\``;\n\t} else {\n\t\ttext += \"(no output)\";\n\t}\n\tif (msg.cancelled) {\n\t\ttext += \"\\n\\n(command cancelled)\";\n\t} else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {\n\t\ttext += `\\n\\nCommand exited with code ${msg.exitCode}`;\n\t}\n\tif (msg.truncated && msg.fullOutputPath) {\n\t\ttext += `\\n\\n[Output truncated. Full output: ${msg.fullOutputPath}]`;\n\t}\n\treturn text;\n}\n\nexport function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage {\n\treturn {\n\t\trole: \"branchSummary\",\n\t\tsummary,\n\t\tfromId,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\nexport function createCompactionSummaryMessage(\n\tsummary: string,\n\ttokensBefore: number,\n\ttimestamp: string,\n): CompactionSummaryMessage {\n\treturn {\n\t\trole: \"compactionSummary\",\n\t\tsummary: summary,\n\t\ttokensBefore,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\n/** Convert CustomMessageEntry to AgentMessage format */\nexport function createCustomMessage(\n\tcustomType: string,\n\tcontent: string | (TextContent | ImageContent)[],\n\tdisplay: boolean,\n\tdetails: unknown | undefined,\n\ttimestamp: string,\n): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType,\n\t\tcontent,\n\t\tdisplay,\n\t\tdetails,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\n/**\n * Transform AgentMessages (including custom types) to LLM-compatible Messages.\n *\n * This is used by:\n * - Agent's transormToLlm option (for prompt calls and queued messages)\n * - Compaction's generateSummary (for summarization)\n * - Custom extensions and tools\n */\nexport function convertToLlm(messages: AgentMessage[]): Message[] {\n\treturn messages\n\t\t.map((m): Message | undefined => {\n\t\t\tswitch (m.role) {\n\t\t\t\tcase \"bashExecution\":\n\t\t\t\t\t// Skip messages excluded from context (!! prefix)\n\t\t\t\t\tif (m.excludeFromContext) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: bashExecutionToText(m) }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"custom\": {\n\t\t\t\t\tconst content = typeof m.content === \"string\" ? [{ type: \"text\" as const, text: m.content }] : m.content;\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase \"branchSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"compactionSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\" as const, text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"user\":\n\t\t\t\tcase \"assistant\":\n\t\t\t\tcase \"toolResult\":\n\t\t\t\t\treturn m;\n\t\t\t\tdefault:\n\t\t\t\t\t// biome-ignore lint/correctness/noSwitchDeclarations: fine\n\t\t\t\t\tconst _exhaustiveCheck: never = m;\n\t\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})\n\t\t.filter((m) => m !== undefined);\n}\n"]}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Custom message types and transformers for the coding agent.
3
+ *
4
+ * Extends the base AgentMessage type with coding-agent specific message types,
5
+ * and provides a transformer to convert them to LLM-compatible messages.
6
+ */
7
+ export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
8
+
9
+ <summary>
10
+ `;
11
+ export const COMPACTION_SUMMARY_SUFFIX = `
12
+ </summary>`;
13
+ export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
14
+
15
+ <summary>
16
+ `;
17
+ export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
18
+ /**
19
+ * Convert a BashExecutionMessage to user message text for LLM context.
20
+ */
21
+ export function bashExecutionToText(msg) {
22
+ let text = `Ran \`${msg.command}\`\n`;
23
+ if (msg.output) {
24
+ text += `\`\`\`\n${msg.output}\n\`\`\``;
25
+ }
26
+ else {
27
+ text += "(no output)";
28
+ }
29
+ if (msg.cancelled) {
30
+ text += "\n\n(command cancelled)";
31
+ }
32
+ else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {
33
+ text += `\n\nCommand exited with code ${msg.exitCode}`;
34
+ }
35
+ if (msg.truncated && msg.fullOutputPath) {
36
+ text += `\n\n[Output truncated. Full output: ${msg.fullOutputPath}]`;
37
+ }
38
+ return text;
39
+ }
40
+ export function createBranchSummaryMessage(summary, fromId, timestamp) {
41
+ return {
42
+ role: "branchSummary",
43
+ summary,
44
+ fromId,
45
+ timestamp: new Date(timestamp).getTime(),
46
+ };
47
+ }
48
+ export function createCompactionSummaryMessage(summary, tokensBefore, timestamp) {
49
+ return {
50
+ role: "compactionSummary",
51
+ summary: summary,
52
+ tokensBefore,
53
+ timestamp: new Date(timestamp).getTime(),
54
+ };
55
+ }
56
+ /** Convert CustomMessageEntry to AgentMessage format */
57
+ export function createCustomMessage(customType, content, display, details, timestamp) {
58
+ return {
59
+ role: "custom",
60
+ customType,
61
+ content,
62
+ display,
63
+ details,
64
+ timestamp: new Date(timestamp).getTime(),
65
+ };
66
+ }
67
+ /**
68
+ * Transform AgentMessages (including custom types) to LLM-compatible Messages.
69
+ *
70
+ * This is used by:
71
+ * - Agent's transormToLlm option (for prompt calls and queued messages)
72
+ * - Compaction's generateSummary (for summarization)
73
+ * - Custom extensions and tools
74
+ */
75
+ export function convertToLlm(messages) {
76
+ return messages
77
+ .map((m) => {
78
+ switch (m.role) {
79
+ case "bashExecution":
80
+ // Skip messages excluded from context (!! prefix)
81
+ if (m.excludeFromContext) {
82
+ return undefined;
83
+ }
84
+ return {
85
+ role: "user",
86
+ content: [{ type: "text", text: bashExecutionToText(m) }],
87
+ timestamp: m.timestamp,
88
+ };
89
+ case "custom": {
90
+ const content = typeof m.content === "string" ? [{ type: "text", text: m.content }] : m.content;
91
+ return {
92
+ role: "user",
93
+ content,
94
+ timestamp: m.timestamp,
95
+ };
96
+ }
97
+ case "branchSummary":
98
+ return {
99
+ role: "user",
100
+ content: [{ type: "text", text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],
101
+ timestamp: m.timestamp,
102
+ };
103
+ case "compactionSummary":
104
+ return {
105
+ role: "user",
106
+ content: [
107
+ { type: "text", text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },
108
+ ],
109
+ timestamp: m.timestamp,
110
+ };
111
+ case "user":
112
+ case "assistant":
113
+ case "toolResult":
114
+ return m;
115
+ default:
116
+ // biome-ignore lint/correctness/noSwitchDeclarations: fine
117
+ const _exhaustiveCheck = m;
118
+ return undefined;
119
+ }
120
+ })
121
+ .filter((m) => m !== undefined);
122
+ }
123
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Custom message types and transformers for the coding agent.\n *\n * Extends the base AgentMessage type with coding-agent specific message types,\n * and provides a transformer to convert them to LLM-compatible messages.\n */\n\nimport type { AgentMessage } from \"@threadwell/agent-core\";\nimport type { ImageContent, Message, TextContent } from \"@threadwell/ai\";\n\nexport const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:\n\n<summary>\n`;\n\nexport const COMPACTION_SUMMARY_SUFFIX = `\n</summary>`;\n\nexport const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:\n\n<summary>\n`;\n\nexport const BRANCH_SUMMARY_SUFFIX = `</summary>`;\n\n/**\n * Message type for bash executions via the ! command.\n */\nexport interface BashExecutionMessage {\n\trole: \"bashExecution\";\n\tcommand: string;\n\toutput: string;\n\texitCode: number | undefined;\n\tcancelled: boolean;\n\ttruncated: boolean;\n\tfullOutputPath?: string;\n\ttimestamp: number;\n\t/** If true, this message is excluded from LLM context (!! prefix) */\n\texcludeFromContext?: boolean;\n}\n\n/**\n * Message type for extension-injected messages via sendMessage().\n * These are custom messages that extensions can inject into the conversation.\n */\nexport interface CustomMessage<T = unknown> {\n\trole: \"custom\";\n\tcustomType: string;\n\tcontent: string | (TextContent | ImageContent)[];\n\tdisplay: boolean;\n\tdetails?: T;\n\ttimestamp: number;\n}\n\nexport interface BranchSummaryMessage {\n\trole: \"branchSummary\";\n\tsummary: string;\n\tfromId: string;\n\ttimestamp: number;\n}\n\nexport interface CompactionSummaryMessage {\n\trole: \"compactionSummary\";\n\tsummary: string;\n\ttokensBefore: number;\n\ttimestamp: number;\n}\n\n// Extend CustomAgentMessages via declaration merging\ndeclare module \"@threadwell/agent-core\" {\n\tinterface CustomAgentMessages {\n\t\tbashExecution: BashExecutionMessage;\n\t\tcustom: CustomMessage;\n\t\tbranchSummary: BranchSummaryMessage;\n\t\tcompactionSummary: CompactionSummaryMessage;\n\t}\n}\n\n/**\n * Convert a BashExecutionMessage to user message text for LLM context.\n */\nexport function bashExecutionToText(msg: BashExecutionMessage): string {\n\tlet text = `Ran \\`${msg.command}\\`\\n`;\n\tif (msg.output) {\n\t\ttext += `\\`\\`\\`\\n${msg.output}\\n\\`\\`\\``;\n\t} else {\n\t\ttext += \"(no output)\";\n\t}\n\tif (msg.cancelled) {\n\t\ttext += \"\\n\\n(command cancelled)\";\n\t} else if (msg.exitCode !== null && msg.exitCode !== undefined && msg.exitCode !== 0) {\n\t\ttext += `\\n\\nCommand exited with code ${msg.exitCode}`;\n\t}\n\tif (msg.truncated && msg.fullOutputPath) {\n\t\ttext += `\\n\\n[Output truncated. Full output: ${msg.fullOutputPath}]`;\n\t}\n\treturn text;\n}\n\nexport function createBranchSummaryMessage(summary: string, fromId: string, timestamp: string): BranchSummaryMessage {\n\treturn {\n\t\trole: \"branchSummary\",\n\t\tsummary,\n\t\tfromId,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\nexport function createCompactionSummaryMessage(\n\tsummary: string,\n\ttokensBefore: number,\n\ttimestamp: string,\n): CompactionSummaryMessage {\n\treturn {\n\t\trole: \"compactionSummary\",\n\t\tsummary: summary,\n\t\ttokensBefore,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\n/** Convert CustomMessageEntry to AgentMessage format */\nexport function createCustomMessage(\n\tcustomType: string,\n\tcontent: string | (TextContent | ImageContent)[],\n\tdisplay: boolean,\n\tdetails: unknown | undefined,\n\ttimestamp: string,\n): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType,\n\t\tcontent,\n\t\tdisplay,\n\t\tdetails,\n\t\ttimestamp: new Date(timestamp).getTime(),\n\t};\n}\n\n/**\n * Transform AgentMessages (including custom types) to LLM-compatible Messages.\n *\n * This is used by:\n * - Agent's transormToLlm option (for prompt calls and queued messages)\n * - Compaction's generateSummary (for summarization)\n * - Custom extensions and tools\n */\nexport function convertToLlm(messages: AgentMessage[]): Message[] {\n\treturn messages\n\t\t.map((m): Message | undefined => {\n\t\t\tswitch (m.role) {\n\t\t\t\tcase \"bashExecution\":\n\t\t\t\t\t// Skip messages excluded from context (!! prefix)\n\t\t\t\t\tif (m.excludeFromContext) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: bashExecutionToText(m) }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"custom\": {\n\t\t\t\t\tconst content = typeof m.content === \"string\" ? [{ type: \"text\" as const, text: m.content }] : m.content;\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase \"branchSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [{ type: \"text\" as const, text: BRANCH_SUMMARY_PREFIX + m.summary + BRANCH_SUMMARY_SUFFIX }],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"compactionSummary\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{ type: \"text\" as const, text: COMPACTION_SUMMARY_PREFIX + m.summary + COMPACTION_SUMMARY_SUFFIX },\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttimestamp: m.timestamp,\n\t\t\t\t\t};\n\t\t\t\tcase \"user\":\n\t\t\t\tcase \"assistant\":\n\t\t\t\tcase \"toolResult\":\n\t\t\t\t\treturn m;\n\t\t\t\tdefault:\n\t\t\t\t\t// biome-ignore lint/correctness/noSwitchDeclarations: fine\n\t\t\t\t\tconst _exhaustiveCheck: never = m;\n\t\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})\n\t\t.filter((m) => m !== undefined);\n}\n"]}