@roackb2/heddle 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +2 -2
  2. package/dist/src/cli/ask.js +2 -2
  3. package/dist/src/cli/ask.js.map +1 -1
  4. package/dist/src/cli/chat/adapters/slash-command-context.js +2 -2
  5. package/dist/src/cli/chat/adapters/slash-command-context.js.map +1 -1
  6. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.d.ts.map +1 -1
  7. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.js +4 -4
  8. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.js.map +1 -1
  9. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.d.ts +2 -3
  10. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.d.ts.map +1 -1
  11. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.js.map +1 -1
  12. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.d.ts.map +1 -1
  13. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js +12 -8
  14. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js.map +1 -1
  15. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.d.ts.map +1 -1
  16. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.js +16 -12
  17. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.js.map +1 -1
  18. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts +5 -4
  19. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts.map +1 -1
  20. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.js.map +1 -1
  21. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts.map +1 -1
  22. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js +4 -5
  23. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js.map +1 -1
  24. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts.map +1 -1
  25. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js +11 -7
  26. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js.map +1 -1
  27. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts +9 -3
  28. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
  29. package/dist/src/cli/chat/hooks/useChatStatusSummary.js +2 -2
  30. package/dist/src/cli/chat/hooks/useChatStatusSummary.js.map +1 -1
  31. package/dist/src/cli/chat/state/compaction.d.ts +2 -1
  32. package/dist/src/cli/chat/state/compaction.d.ts.map +1 -1
  33. package/dist/src/cli/chat/state/compaction.js +1 -1
  34. package/dist/src/cli/chat/state/compaction.js.map +1 -1
  35. package/dist/src/cli/chat/submit.d.ts.map +1 -1
  36. package/dist/src/cli/chat/submit.js +13 -11
  37. package/dist/src/cli/chat/submit.js.map +1 -1
  38. package/dist/src/cli/chat/utils/format.d.ts +0 -4
  39. package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
  40. package/dist/src/cli/chat/utils/format.js +0 -5
  41. package/dist/src/cli/chat/utils/format.js.map +1 -1
  42. package/dist/src/cli/chat/utils/runtime.d.ts +0 -2
  43. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  44. package/dist/src/cli/chat/utils/runtime.js +0 -2
  45. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  46. package/dist/src/cli/main.js +1 -22
  47. package/dist/src/cli/main.js.map +1 -1
  48. package/dist/src/core/chat/engine/compaction/constants.d.ts +15 -0
  49. package/dist/src/core/chat/engine/compaction/constants.d.ts.map +1 -0
  50. package/dist/src/core/chat/engine/compaction/constants.js +15 -0
  51. package/dist/src/core/chat/engine/compaction/constants.js.map +1 -0
  52. package/dist/src/core/chat/engine/compaction/context-builder.d.ts +10 -0
  53. package/dist/src/core/chat/engine/compaction/context-builder.d.ts.map +1 -0
  54. package/dist/src/core/chat/engine/compaction/context-builder.js +47 -0
  55. package/dist/src/core/chat/engine/compaction/context-builder.js.map +1 -0
  56. package/dist/src/core/chat/engine/compaction/index.d.ts +3 -0
  57. package/dist/src/core/chat/engine/compaction/index.d.ts.map +1 -0
  58. package/dist/src/core/chat/engine/compaction/index.js +2 -0
  59. package/dist/src/core/chat/engine/compaction/index.js.map +1 -0
  60. package/dist/src/core/chat/engine/compaction/service.d.ts +21 -0
  61. package/dist/src/core/chat/engine/compaction/service.d.ts.map +1 -0
  62. package/dist/src/core/chat/engine/compaction/service.js +189 -0
  63. package/dist/src/core/chat/engine/compaction/service.js.map +1 -0
  64. package/dist/src/core/chat/engine/compaction/split-policy.d.ts +14 -0
  65. package/dist/src/core/chat/engine/compaction/split-policy.d.ts.map +1 -0
  66. package/dist/src/core/chat/engine/compaction/split-policy.js +52 -0
  67. package/dist/src/core/chat/engine/compaction/split-policy.js.map +1 -0
  68. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.d.ts +9 -0
  69. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.d.ts.map +1 -0
  70. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.js +35 -0
  71. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.js.map +1 -0
  72. package/dist/src/core/chat/engine/compaction/summarizer/index.d.ts +3 -0
  73. package/dist/src/core/chat/engine/compaction/summarizer/index.d.ts.map +1 -0
  74. package/dist/src/core/chat/engine/compaction/summarizer/index.js +2 -0
  75. package/dist/src/core/chat/engine/compaction/summarizer/index.js.map +1 -0
  76. package/dist/src/core/chat/engine/compaction/summarizer/prompt.d.ts +2 -0
  77. package/dist/src/core/chat/engine/compaction/summarizer/prompt.d.ts.map +1 -0
  78. package/dist/src/core/chat/engine/compaction/summarizer/prompt.js +31 -0
  79. package/dist/src/core/chat/engine/compaction/summarizer/prompt.js.map +1 -0
  80. package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts +14 -0
  81. package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts.map +1 -0
  82. package/dist/src/core/chat/engine/compaction/summarizer/service.js +70 -0
  83. package/dist/src/core/chat/engine/compaction/summarizer/service.js.map +1 -0
  84. package/dist/src/core/chat/engine/compaction/summarizer/types.d.ts +19 -0
  85. package/dist/src/core/chat/engine/compaction/summarizer/types.d.ts.map +1 -0
  86. package/dist/src/core/chat/engine/compaction/summarizer/types.js +2 -0
  87. package/dist/src/core/chat/engine/compaction/summarizer/types.js.map +1 -0
  88. package/dist/src/core/chat/engine/compaction/summary-message.d.ts +18 -0
  89. package/dist/src/core/chat/engine/compaction/summary-message.d.ts.map +1 -0
  90. package/dist/src/core/chat/engine/compaction/summary-message.js +46 -0
  91. package/dist/src/core/chat/engine/compaction/summary-message.js.map +1 -0
  92. package/dist/src/core/chat/engine/compaction/text.d.ts +9 -0
  93. package/dist/src/core/chat/engine/compaction/text.d.ts.map +1 -0
  94. package/dist/src/core/chat/engine/compaction/text.js +26 -0
  95. package/dist/src/core/chat/engine/compaction/text.js.map +1 -0
  96. package/dist/src/core/chat/engine/compaction/token-estimator.d.ts +14 -0
  97. package/dist/src/core/chat/engine/compaction/token-estimator.d.ts.map +1 -0
  98. package/dist/src/core/chat/engine/compaction/token-estimator.js +41 -0
  99. package/dist/src/core/chat/engine/compaction/token-estimator.js.map +1 -0
  100. package/dist/src/core/chat/engine/compaction/transcript-renderer.d.ts +10 -0
  101. package/dist/src/core/chat/engine/compaction/transcript-renderer.d.ts.map +1 -0
  102. package/dist/src/core/chat/engine/compaction/transcript-renderer.js +62 -0
  103. package/dist/src/core/chat/engine/compaction/transcript-renderer.js.map +1 -0
  104. package/dist/src/core/chat/engine/compaction/types.d.ts +66 -0
  105. package/dist/src/core/chat/engine/compaction/types.d.ts.map +1 -0
  106. package/dist/src/core/chat/engine/compaction/types.js +2 -0
  107. package/dist/src/core/chat/engine/compaction/types.js.map +1 -0
  108. package/dist/src/core/chat/engine/index.d.ts +2 -2
  109. package/dist/src/core/chat/engine/index.d.ts.map +1 -1
  110. package/dist/src/core/chat/engine/index.js +1 -1
  111. package/dist/src/core/chat/engine/index.js.map +1 -1
  112. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.d.ts +27 -0
  113. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.d.ts.map +1 -0
  114. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.js +146 -0
  115. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.js.map +1 -0
  116. package/dist/src/core/chat/engine/sessions/archives/index.d.ts +3 -0
  117. package/dist/src/core/chat/engine/sessions/archives/index.d.ts.map +1 -0
  118. package/dist/src/core/chat/engine/sessions/archives/index.js +2 -0
  119. package/dist/src/core/chat/engine/sessions/archives/index.js.map +1 -0
  120. package/dist/src/core/chat/engine/sessions/archives/types.d.ts +19 -0
  121. package/dist/src/core/chat/engine/sessions/archives/types.d.ts.map +1 -0
  122. package/dist/src/core/chat/engine/sessions/archives/types.js +2 -0
  123. package/dist/src/core/chat/engine/sessions/archives/types.js.map +1 -0
  124. package/dist/src/core/chat/engine/sessions/leases/index.d.ts +3 -0
  125. package/dist/src/core/chat/engine/sessions/leases/index.d.ts.map +1 -0
  126. package/dist/src/core/chat/engine/sessions/leases/index.js +2 -0
  127. package/dist/src/core/chat/engine/sessions/leases/index.js.map +1 -0
  128. package/dist/src/core/chat/engine/sessions/leases/leases.d.ts +25 -0
  129. package/dist/src/core/chat/engine/sessions/leases/leases.d.ts.map +1 -0
  130. package/dist/src/core/chat/engine/sessions/leases/leases.js +74 -0
  131. package/dist/src/core/chat/engine/sessions/leases/leases.js.map +1 -0
  132. package/dist/src/core/chat/engine/sessions/leases/types.d.ts +12 -0
  133. package/dist/src/core/chat/engine/sessions/leases/types.d.ts.map +1 -0
  134. package/dist/src/core/chat/engine/sessions/leases/types.js +2 -0
  135. package/dist/src/core/chat/engine/sessions/leases/types.js.map +1 -0
  136. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts +2 -2
  137. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts.map +1 -1
  138. package/dist/src/core/chat/engine/sessions/preferences/service.js +1 -1
  139. package/dist/src/core/chat/engine/sessions/preferences/service.js.map +1 -1
  140. package/dist/src/core/chat/engine/sessions/records/conversation-lines.d.ts +12 -0
  141. package/dist/src/core/chat/engine/sessions/records/conversation-lines.d.ts.map +1 -0
  142. package/dist/src/core/chat/engine/sessions/records/conversation-lines.js +28 -0
  143. package/dist/src/core/chat/engine/sessions/records/conversation-lines.js.map +1 -0
  144. package/dist/src/core/chat/engine/sessions/records/index.d.ts +5 -0
  145. package/dist/src/core/chat/engine/sessions/records/index.d.ts.map +1 -0
  146. package/dist/src/core/chat/engine/sessions/records/index.js +4 -0
  147. package/dist/src/core/chat/engine/sessions/records/index.js.map +1 -0
  148. package/dist/src/core/chat/engine/sessions/records/records.d.ts +21 -0
  149. package/dist/src/core/chat/engine/sessions/records/records.d.ts.map +1 -0
  150. package/dist/src/core/chat/engine/sessions/records/records.js +91 -0
  151. package/dist/src/core/chat/engine/sessions/records/records.js.map +1 -0
  152. package/dist/src/core/chat/engine/sessions/records/titles.d.ts +15 -0
  153. package/dist/src/core/chat/engine/sessions/records/titles.d.ts.map +1 -0
  154. package/dist/src/core/chat/engine/sessions/records/titles.js +19 -0
  155. package/dist/src/core/chat/engine/sessions/records/titles.js.map +1 -0
  156. package/dist/src/core/chat/engine/sessions/records/types.d.ts +35 -0
  157. package/dist/src/core/chat/engine/sessions/records/types.d.ts.map +1 -0
  158. package/dist/src/core/chat/engine/sessions/records/types.js +2 -0
  159. package/dist/src/core/chat/engine/sessions/records/types.js.map +1 -0
  160. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.d.ts +23 -0
  161. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.d.ts.map +1 -0
  162. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.js +61 -0
  163. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.js.map +1 -0
  164. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.d.ts +369 -0
  165. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.d.ts.map +1 -0
  166. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.js +262 -0
  167. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.js.map +1 -0
  168. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.d.ts +22 -34
  169. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.d.ts.map +1 -1
  170. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.js +168 -439
  171. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.js.map +1 -1
  172. package/dist/src/core/chat/engine/sessions/repository/index.d.ts +3 -0
  173. package/dist/src/core/chat/engine/sessions/repository/index.d.ts.map +1 -0
  174. package/dist/src/core/chat/engine/sessions/repository/index.js +2 -0
  175. package/dist/src/core/chat/engine/sessions/repository/index.js.map +1 -0
  176. package/dist/src/core/chat/engine/sessions/repository/types.d.ts +33 -0
  177. package/dist/src/core/chat/engine/sessions/repository/types.d.ts.map +1 -0
  178. package/dist/src/core/chat/engine/sessions/repository/types.js +2 -0
  179. package/dist/src/core/chat/engine/sessions/repository/types.js.map +1 -0
  180. package/dist/src/core/chat/engine/sessions/service.d.ts +3 -5
  181. package/dist/src/core/chat/engine/sessions/service.d.ts.map +1 -1
  182. package/dist/src/core/chat/engine/sessions/service.js +22 -26
  183. package/dist/src/core/chat/engine/sessions/service.js.map +1 -1
  184. package/dist/src/core/chat/engine/sessions/types.d.ts +6 -0
  185. package/dist/src/core/chat/engine/sessions/types.d.ts.map +1 -0
  186. package/dist/src/core/chat/engine/sessions/types.js +2 -0
  187. package/dist/src/core/chat/engine/sessions/types.js.map +1 -0
  188. package/dist/src/core/chat/engine/turns/context/index.d.ts +3 -0
  189. package/dist/src/core/chat/engine/turns/context/index.d.ts.map +1 -0
  190. package/dist/src/core/chat/engine/turns/context/index.js +2 -0
  191. package/dist/src/core/chat/engine/turns/context/index.js.map +1 -0
  192. package/dist/src/core/chat/engine/turns/context/turn-context-builder.d.ts +8 -0
  193. package/dist/src/core/chat/engine/turns/context/turn-context-builder.d.ts.map +1 -0
  194. package/dist/src/core/chat/engine/turns/context/turn-context-builder.js +36 -0
  195. package/dist/src/core/chat/engine/turns/context/turn-context-builder.js.map +1 -0
  196. package/dist/src/core/chat/engine/turns/context/types.d.ts +28 -0
  197. package/dist/src/core/chat/engine/turns/context/types.d.ts.map +1 -0
  198. package/dist/src/core/chat/engine/turns/context/types.js +2 -0
  199. package/dist/src/core/chat/engine/turns/context/types.js.map +1 -0
  200. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.d.ts +10 -0
  201. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.d.ts.map +1 -0
  202. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.js +29 -0
  203. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.js.map +1 -0
  204. package/dist/src/core/chat/engine/turns/failure/index.d.ts +3 -0
  205. package/dist/src/core/chat/engine/turns/failure/index.d.ts.map +1 -0
  206. package/dist/src/core/chat/engine/turns/failure/index.js +2 -0
  207. package/dist/src/core/chat/engine/turns/failure/index.js.map +1 -0
  208. package/dist/src/core/chat/engine/turns/failure/types.d.ts +5 -0
  209. package/dist/src/core/chat/engine/turns/failure/types.d.ts.map +1 -0
  210. package/dist/src/core/chat/engine/turns/failure/types.js +2 -0
  211. package/dist/src/core/chat/engine/turns/failure/types.js.map +1 -0
  212. package/dist/src/core/chat/engine/turns/host/host-normalizer.d.ts +9 -0
  213. package/dist/src/core/chat/engine/turns/host/host-normalizer.d.ts.map +1 -0
  214. package/dist/src/core/chat/engine/turns/host/host-normalizer.js +51 -0
  215. package/dist/src/core/chat/engine/turns/host/host-normalizer.js.map +1 -0
  216. package/dist/src/core/chat/engine/turns/host/index.d.ts +3 -0
  217. package/dist/src/core/chat/engine/turns/host/index.d.ts.map +1 -0
  218. package/dist/src/core/chat/engine/turns/host/index.js +2 -0
  219. package/dist/src/core/chat/engine/turns/host/index.js.map +1 -0
  220. package/dist/src/core/chat/engine/turns/host/types.d.ts +17 -0
  221. package/dist/src/core/chat/engine/turns/host/types.d.ts.map +1 -0
  222. package/dist/src/core/chat/engine/turns/host/types.js +2 -0
  223. package/dist/src/core/chat/engine/turns/host/types.js.map +1 -0
  224. package/dist/src/core/chat/engine/turns/memory/index.d.ts +3 -0
  225. package/dist/src/core/chat/engine/turns/memory/index.d.ts.map +1 -0
  226. package/dist/src/core/chat/engine/turns/memory/index.js +2 -0
  227. package/dist/src/core/chat/engine/turns/memory/index.js.map +1 -0
  228. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts +17 -0
  229. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts.map +1 -0
  230. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js +126 -0
  231. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js.map +1 -0
  232. package/dist/src/core/chat/engine/turns/memory/types.d.ts +29 -0
  233. package/dist/src/core/chat/engine/turns/memory/types.d.ts.map +1 -0
  234. package/dist/src/core/chat/engine/turns/memory/types.js +2 -0
  235. package/dist/src/core/chat/engine/turns/memory/types.js.map +1 -0
  236. package/dist/src/core/chat/engine/turns/persistence/index.d.ts +4 -0
  237. package/dist/src/core/chat/engine/turns/persistence/index.d.ts.map +1 -0
  238. package/dist/src/core/chat/engine/turns/persistence/index.js +3 -0
  239. package/dist/src/core/chat/engine/turns/persistence/index.js.map +1 -0
  240. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.d.ts +9 -0
  241. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.d.ts.map +1 -0
  242. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.js +60 -0
  243. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.js.map +1 -0
  244. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.d.ts +10 -0
  245. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.d.ts.map +1 -0
  246. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.js +50 -0
  247. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.js.map +1 -0
  248. package/dist/src/core/chat/engine/turns/persistence/types.d.ts +69 -0
  249. package/dist/src/core/chat/engine/turns/persistence/types.d.ts.map +1 -0
  250. package/dist/src/core/chat/engine/turns/persistence/types.js +2 -0
  251. package/dist/src/core/chat/engine/turns/persistence/types.js.map +1 -0
  252. package/dist/src/core/chat/engine/turns/preflight/index.d.ts +3 -0
  253. package/dist/src/core/chat/engine/turns/preflight/index.d.ts.map +1 -0
  254. package/dist/src/core/chat/engine/turns/preflight/index.js +2 -0
  255. package/dist/src/core/chat/engine/turns/preflight/index.js.map +1 -0
  256. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.d.ts +14 -0
  257. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.d.ts.map +1 -0
  258. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.js +85 -0
  259. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.js.map +1 -0
  260. package/dist/src/core/chat/engine/turns/preflight/types.d.ts +48 -0
  261. package/dist/src/core/chat/engine/turns/preflight/types.d.ts.map +1 -0
  262. package/dist/src/core/chat/engine/turns/preflight/types.js +2 -0
  263. package/dist/src/core/chat/engine/turns/preflight/types.js.map +1 -0
  264. package/dist/src/core/chat/engine/turns/runtime/index.d.ts +3 -0
  265. package/dist/src/core/chat/engine/turns/runtime/index.d.ts.map +1 -0
  266. package/dist/src/core/chat/engine/turns/runtime/index.js +2 -0
  267. package/dist/src/core/chat/engine/turns/runtime/index.js.map +1 -0
  268. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts +14 -0
  269. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -0
  270. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +69 -0
  271. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -0
  272. package/dist/src/core/chat/engine/turns/runtime/types.d.ts +24 -0
  273. package/dist/src/core/chat/engine/turns/runtime/types.d.ts.map +1 -0
  274. package/dist/src/core/chat/engine/turns/runtime/types.js +2 -0
  275. package/dist/src/core/chat/engine/turns/runtime/types.js.map +1 -0
  276. package/dist/src/core/chat/engine/turns/service.d.ts +8 -2
  277. package/dist/src/core/chat/engine/turns/service.d.ts.map +1 -1
  278. package/dist/src/core/chat/engine/turns/service.js +139 -25
  279. package/dist/src/core/chat/engine/turns/service.js.map +1 -1
  280. package/dist/src/core/chat/engine/turns/trace/index.d.ts +3 -0
  281. package/dist/src/core/chat/engine/turns/trace/index.d.ts.map +1 -0
  282. package/dist/src/core/chat/engine/turns/trace/index.js +2 -0
  283. package/dist/src/core/chat/engine/turns/trace/index.js.map +1 -0
  284. package/dist/src/core/chat/engine/turns/trace/trace-writer.d.ts +8 -0
  285. package/dist/src/core/chat/engine/turns/trace/trace-writer.d.ts.map +1 -0
  286. package/dist/src/core/chat/engine/turns/trace/trace-writer.js +14 -0
  287. package/dist/src/core/chat/engine/turns/trace/trace-writer.js.map +1 -0
  288. package/dist/src/core/chat/engine/turns/trace/types.d.ts +6 -0
  289. package/dist/src/core/chat/engine/turns/trace/types.d.ts.map +1 -0
  290. package/dist/src/core/chat/engine/turns/trace/types.js +2 -0
  291. package/dist/src/core/chat/engine/turns/trace/types.js.map +1 -0
  292. package/dist/src/core/chat/engine/turns/types.d.ts +44 -0
  293. package/dist/src/core/chat/engine/turns/types.d.ts.map +1 -0
  294. package/dist/src/core/chat/engine/turns/types.js +2 -0
  295. package/dist/src/core/chat/engine/turns/types.js.map +1 -0
  296. package/dist/src/core/chat/engine/types.d.ts +10 -15
  297. package/dist/src/core/chat/engine/types.d.ts.map +1 -1
  298. package/dist/src/core/chat/types.d.ts +18 -14
  299. package/dist/src/core/chat/types.d.ts.map +1 -1
  300. package/dist/src/index.d.ts +2 -2
  301. package/dist/src/index.d.ts.map +1 -1
  302. package/dist/src/index.js +1 -1
  303. package/dist/src/index.js.map +1 -1
  304. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.d.ts.map +1 -1
  305. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.js +38 -12
  306. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.js.map +1 -1
  307. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.d.ts +2 -2
  308. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.d.ts.map +1 -1
  309. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js +19 -18
  310. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js.map +1 -1
  311. package/dist/src/server/features/control-plane/types.d.ts +23 -11
  312. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  313. package/dist/src/web/assets/{MonacoDiffViewer-D0Ed6GCN.js → MonacoDiffViewer-F3AOHIps.js} +1 -1
  314. package/dist/src/web/assets/{index-B_9nk8kS.js → index-D6aK1OFb.js} +2 -2
  315. package/dist/src/web/index.html +1 -1
  316. package/package.json +7 -7
  317. package/dist/src/cli/session.d.ts +0 -11
  318. package/dist/src/cli/session.d.ts.map +0 -1
  319. package/dist/src/cli/session.js +0 -30
  320. package/dist/src/cli/session.js.map +0 -1
  321. package/dist/src/core/chat/engine/history/compaction.d.ts +0 -56
  322. package/dist/src/core/chat/engine/history/compaction.d.ts.map +0 -1
  323. package/dist/src/core/chat/engine/history/compaction.js +0 -546
  324. package/dist/src/core/chat/engine/history/compaction.js.map +0 -1
  325. package/dist/src/core/chat/engine/sessions/archive.d.ts +0 -19
  326. package/dist/src/core/chat/engine/sessions/archive.d.ts.map +0 -1
  327. package/dist/src/core/chat/engine/sessions/archive.js +0 -129
  328. package/dist/src/core/chat/engine/sessions/archive.js.map +0 -1
  329. package/dist/src/core/chat/engine/sessions/conversation-lines.d.ts +0 -4
  330. package/dist/src/core/chat/engine/sessions/conversation-lines.d.ts.map +0 -1
  331. package/dist/src/core/chat/engine/sessions/conversation-lines.js +0 -26
  332. package/dist/src/core/chat/engine/sessions/conversation-lines.js.map +0 -1
  333. package/dist/src/core/chat/engine/sessions/lease.d.ts +0 -23
  334. package/dist/src/core/chat/engine/sessions/lease.d.ts.map +0 -1
  335. package/dist/src/core/chat/engine/sessions/lease.js +0 -72
  336. package/dist/src/core/chat/engine/sessions/lease.js.map +0 -1
  337. package/dist/src/core/chat/engine/sessions/session-record.d.ts +0 -16
  338. package/dist/src/core/chat/engine/sessions/session-record.d.ts.map +0 -1
  339. package/dist/src/core/chat/engine/sessions/session-record.js +0 -60
  340. package/dist/src/core/chat/engine/sessions/session-record.js.map +0 -1
  341. package/dist/src/core/chat/engine/sessions/title.d.ts +0 -15
  342. package/dist/src/core/chat/engine/sessions/title.d.ts.map +0 -1
  343. package/dist/src/core/chat/engine/sessions/title.js +0 -17
  344. package/dist/src/core/chat/engine/sessions/title.js.map +0 -1
  345. package/dist/src/core/chat/engine/turns/context.d.ts +0 -27
  346. package/dist/src/core/chat/engine/turns/context.d.ts.map +0 -1
  347. package/dist/src/core/chat/engine/turns/context.js +0 -42
  348. package/dist/src/core/chat/engine/turns/context.js.map +0 -1
  349. package/dist/src/core/chat/engine/turns/host-bridge.d.ts +0 -37
  350. package/dist/src/core/chat/engine/turns/host-bridge.d.ts.map +0 -1
  351. package/dist/src/core/chat/engine/turns/host-bridge.js +0 -20
  352. package/dist/src/core/chat/engine/turns/host-bridge.js.map +0 -1
  353. package/dist/src/core/chat/engine/turns/host.d.ts +0 -3
  354. package/dist/src/core/chat/engine/turns/host.d.ts.map +0 -1
  355. package/dist/src/core/chat/engine/turns/host.js +0 -42
  356. package/dist/src/core/chat/engine/turns/host.js.map +0 -1
  357. package/dist/src/core/chat/engine/turns/memory-maintenance.d.ts +0 -33
  358. package/dist/src/core/chat/engine/turns/memory-maintenance.d.ts.map +0 -1
  359. package/dist/src/core/chat/engine/turns/memory-maintenance.js +0 -121
  360. package/dist/src/core/chat/engine/turns/memory-maintenance.js.map +0 -1
  361. package/dist/src/core/chat/engine/turns/persistence.d.ts +0 -25
  362. package/dist/src/core/chat/engine/turns/persistence.d.ts.map +0 -1
  363. package/dist/src/core/chat/engine/turns/persistence.js +0 -46
  364. package/dist/src/core/chat/engine/turns/persistence.js.map +0 -1
  365. package/dist/src/core/chat/engine/turns/preflight.d.ts +0 -56
  366. package/dist/src/core/chat/engine/turns/preflight.d.ts.map +0 -1
  367. package/dist/src/core/chat/engine/turns/preflight.js +0 -97
  368. package/dist/src/core/chat/engine/turns/preflight.js.map +0 -1
  369. package/dist/src/core/chat/engine/turns/result.d.ts +0 -38
  370. package/dist/src/core/chat/engine/turns/result.d.ts.map +0 -1
  371. package/dist/src/core/chat/engine/turns/result.js +0 -62
  372. package/dist/src/core/chat/engine/turns/result.js.map +0 -1
  373. package/dist/src/core/chat/engine/turns/run-conversation-turn.d.ts +0 -47
  374. package/dist/src/core/chat/engine/turns/run-conversation-turn.d.ts.map +0 -1
  375. package/dist/src/core/chat/engine/turns/run-conversation-turn.js +0 -136
  376. package/dist/src/core/chat/engine/turns/run-conversation-turn.js.map +0 -1
  377. package/dist/src/core/chat/engine/turns/runtime.d.ts +0 -28
  378. package/dist/src/core/chat/engine/turns/runtime.d.ts.map +0 -1
  379. package/dist/src/core/chat/engine/turns/runtime.js +0 -62
  380. package/dist/src/core/chat/engine/turns/runtime.js.map +0 -1
  381. package/dist/src/core/chat/engine/turns/trace.d.ts +0 -3
  382. package/dist/src/core/chat/engine/turns/trace.d.ts.map +0 -1
  383. package/dist/src/core/chat/engine/turns/trace.js +0 -9
  384. package/dist/src/core/chat/engine/turns/trace.js.map +0 -1
  385. package/dist/src/core/chat/failure-messages.d.ts +0 -6
  386. package/dist/src/core/chat/failure-messages.d.ts.map +0 -1
  387. package/dist/src/core/chat/failure-messages.js +0 -24
  388. package/dist/src/core/chat/failure-messages.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Small formatting helpers for compaction prompts and compacted history text.
3
+ */
4
+ export declare class CompactionText {
5
+ static truncateSummary(value: string): string;
6
+ static truncateForSummary(value: string, maxChars: number): string;
7
+ static truncateLine(value: string, maxChars: number): string;
8
+ }
9
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/text.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,cAAc;IACzB,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ7C,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQlE,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAQ7D"}
@@ -0,0 +1,26 @@
1
+ import { MAX_ROLLING_SUMMARY_CHARS } from './constants.js';
2
+ /**
3
+ * Small formatting helpers for compaction prompts and compacted history text.
4
+ */
5
+ export class CompactionText {
6
+ static truncateSummary(value) {
7
+ if (value.length <= MAX_ROLLING_SUMMARY_CHARS) {
8
+ return value;
9
+ }
10
+ return `${value.slice(0, MAX_ROLLING_SUMMARY_CHARS - 1).trimEnd()}…`;
11
+ }
12
+ static truncateForSummary(value, maxChars) {
13
+ if (value.length <= maxChars) {
14
+ return value;
15
+ }
16
+ return `${value.slice(0, Math.max(0, maxChars - 80)).trimEnd()}\n\n[truncated ${value.length - maxChars} chars; full content is in the raw archive]`;
17
+ }
18
+ static truncateLine(value, maxChars) {
19
+ const compact = value.replace(/\s+/g, ' ').trim();
20
+ if (compact.length <= maxChars) {
21
+ return compact;
22
+ }
23
+ return `${compact.slice(0, maxChars - 1).trimEnd()}…`;
24
+ }
25
+ }
26
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,eAAe,CAAC,KAAa;QAClC,IAAI,KAAK,CAAC,MAAM,IAAI,yBAAyB,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAyB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,KAAa,EAAE,QAAgB;QACvD,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,kBAAkB,KAAK,CAAC,MAAM,GAAG,QAAQ,6CAA6C,CAAC;IACvJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { ChatMessage } from '../../../../core/llm/types.js';
2
+ import type { ConversationCompactionContextInput } from './types.js';
3
+ /**
4
+ * Owns low-cost token estimates used by compaction thresholds and context stats.
5
+ */
6
+ export declare class ConversationCompactionTokenEstimator {
7
+ static estimateHistory(history: ChatMessage[]): number;
8
+ static estimateRequest(input: Pick<ConversationCompactionContextInput, 'history' | 'runtime' | 'request'>): number;
9
+ static isCompactedSummary(message: ChatMessage): boolean;
10
+ static countNonCompactedMessages(history: ChatMessage[]): number;
11
+ static estimateMessage(message: ChatMessage): number;
12
+ static estimateText(text: string): number;
13
+ }
14
+ //# sourceMappingURL=token-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.d.ts","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/token-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,YAAY,CAAC;AAErE;;GAEG;AACH,qBAAa,oCAAoC;IAC/C,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;IAItD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,kCAAkC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,GAAG,MAAM;IAUlH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAIxD,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;IAIhE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;IAepD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG1C"}
@@ -0,0 +1,41 @@
1
+ import { COMPACTED_HISTORY_MARKER } from './constants.js';
2
+ /**
3
+ * Owns low-cost token estimates used by compaction thresholds and context stats.
4
+ */
5
+ export class ConversationCompactionTokenEstimator {
6
+ static estimateHistory(history) {
7
+ return history.reduce((total, message) => total + ConversationCompactionTokenEstimator.estimateMessage(message), 0);
8
+ }
9
+ static estimateRequest(input) {
10
+ const syntheticGoal = input.request?.goal ?? 'Continue from the current conversation.';
11
+ const systemPromptEstimate = ConversationCompactionTokenEstimator.estimateText([
12
+ syntheticGoal,
13
+ input.runtime.systemContext ?? '',
14
+ input.request?.toolNames?.join(',') ?? '',
15
+ ].join('\n'));
16
+ return systemPromptEstimate + ConversationCompactionTokenEstimator.estimateHistory(input.history) + ConversationCompactionTokenEstimator.estimateText(syntheticGoal) + 24;
17
+ }
18
+ static isCompactedSummary(message) {
19
+ return message.role === 'system' && message.content.startsWith(COMPACTED_HISTORY_MARKER);
20
+ }
21
+ static countNonCompactedMessages(history) {
22
+ return history.filter((message) => !ConversationCompactionTokenEstimator.isCompactedSummary(message)).length;
23
+ }
24
+ static estimateMessage(message) {
25
+ if (ConversationCompactionTokenEstimator.isCompactedSummary(message)) {
26
+ return ConversationCompactionTokenEstimator.estimateText(message.content) + 12;
27
+ }
28
+ switch (message.role) {
29
+ case 'system':
30
+ case 'user':
31
+ case 'tool':
32
+ return ConversationCompactionTokenEstimator.estimateText(message.content) + 12;
33
+ case 'assistant':
34
+ return ConversationCompactionTokenEstimator.estimateText(message.content) + 12 + (message.toolCalls?.length ?? 0) * 24;
35
+ }
36
+ }
37
+ static estimateText(text) {
38
+ return Math.ceil(text.length / 4);
39
+ }
40
+ }
41
+ //# sourceMappingURL=token-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimator.js","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/token-estimator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAG1D;;GAEG;AACH,MAAM,OAAO,oCAAoC;IAC/C,MAAM,CAAC,eAAe,CAAC,OAAsB;QAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,oCAAoC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAkF;QACvG,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,yCAAyC,CAAC;QACvF,MAAM,oBAAoB,GAAG,oCAAoC,CAAC,YAAY,CAAC;YAC7E,aAAa;YACb,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE;YACjC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;SAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,OAAO,oBAAoB,GAAG,oCAAoC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,oCAAoC,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;IAC5K,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,OAAoB;QAC5C,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,OAAsB;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,oCAAoC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/G,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAoB;QACzC,IAAI,oCAAoC,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,OAAO,oCAAoC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjF,CAAC;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM;gBACT,OAAO,oCAAoC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjF,KAAK,WAAW;gBACd,OAAO,oCAAoC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3H,CAAC;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { ChatMessage } from '../../../../core/llm/types.js';
2
+ /**
3
+ * Renders archived messages into a bounded prompt payload for the summarizer.
4
+ */
5
+ export declare class CompactionTranscriptRenderer {
6
+ static render(messages: ChatMessage[], summaryModel: string): string;
7
+ private static resolveTranscriptCharBudget;
8
+ private static renderMessage;
9
+ }
10
+ //# sourceMappingURL=transcript-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-renderer.d.ts","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/transcript-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAYvD;;GAEG;AACH,qBAAa,4BAA4B;IACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAgCpE,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAO1C,OAAO,CAAC,MAAM,CAAC,aAAa;CAyB7B"}
@@ -0,0 +1,62 @@
1
+ import { estimateBuiltInContextWindow } from '../../../../core/llm/openai-models.js';
2
+ import { DEFAULT_CONTEXT_WINDOW_ESTIMATE, MAX_SUMMARIZER_CONTEXT_RATIO, MAX_SUMMARIZER_MESSAGE_CHARS, MAX_SUMMARIZER_TRANSCRIPT_CHARS, MAX_SUMMARIZER_TRANSCRIPT_TOKENS, MIN_SUMMARIZER_MESSAGE_CHARS, } from './constants.js';
3
+ import { CompactionText } from './text.js';
4
+ /**
5
+ * Renders archived messages into a bounded prompt payload for the summarizer.
6
+ */
7
+ export class CompactionTranscriptRenderer {
8
+ static render(messages, summaryModel) {
9
+ if (messages.length === 0) {
10
+ return '(no archived messages)';
11
+ }
12
+ const transcriptCharBudget = CompactionTranscriptRenderer.resolveTranscriptCharBudget(summaryModel);
13
+ const perMessageBudget = Math.max(MIN_SUMMARIZER_MESSAGE_CHARS, Math.min(MAX_SUMMARIZER_MESSAGE_CHARS, Math.floor(transcriptCharBudget / messages.length) - 80));
14
+ const lines = [
15
+ `Summarizer transcript note: raw archive contains ${messages.length} complete messages.`,
16
+ `Each message below is condensed to fit the summarizer request. Read the archive file when exact wording or full tool output matters.`,
17
+ `Summarizer input budget: about ${Math.floor(transcriptCharBudget / 4).toLocaleString()} estimated text tokens.`,
18
+ ];
19
+ let totalChars = lines.join('\n').length;
20
+ for (const [index, message] of messages.entries()) {
21
+ const rendered = `## Message ${index + 1}\n${CompactionTranscriptRenderer.renderMessage(message, perMessageBudget)}`;
22
+ const separator = lines.length > 0 ? '\n\n' : '';
23
+ if (totalChars + separator.length + rendered.length > transcriptCharBudget) {
24
+ lines.push(`\n\nOmitted ${messages.length - index} additional archived messages from summarizer input to stay within request budget. Inspect the raw archive for full detail.`);
25
+ break;
26
+ }
27
+ lines.push(rendered);
28
+ totalChars += separator.length + rendered.length;
29
+ }
30
+ return lines.join('\n\n');
31
+ }
32
+ static resolveTranscriptCharBudget(summaryModel) {
33
+ const contextWindow = estimateBuiltInContextWindow(summaryModel) ?? DEFAULT_CONTEXT_WINDOW_ESTIMATE;
34
+ const budgetByContext = Math.floor(contextWindow * MAX_SUMMARIZER_CONTEXT_RATIO);
35
+ const tokenBudget = Math.min(MAX_SUMMARIZER_TRANSCRIPT_TOKENS, budgetByContext);
36
+ return Math.min(MAX_SUMMARIZER_TRANSCRIPT_CHARS, tokenBudget * 4);
37
+ }
38
+ static renderMessage(message, maxChars) {
39
+ if (message.role === 'assistant') {
40
+ const parts = [
41
+ 'Role: assistant',
42
+ message.content ? `Content excerpt:\n${CompactionText.truncateForSummary(message.content, maxChars)}` : 'Content: (empty)',
43
+ message.toolCalls?.length ?
44
+ `Tool calls:\n${CompactionText.truncateForSummary(JSON.stringify(message.toolCalls, null, 2), maxChars)}`
45
+ : undefined,
46
+ ].filter((part) => Boolean(part));
47
+ return parts.join('\n\n');
48
+ }
49
+ if (message.role === 'tool') {
50
+ return [
51
+ 'Role: tool',
52
+ `Tool call id: ${message.toolCallId}`,
53
+ `Content excerpt:\n${CompactionText.truncateForSummary(message.content, maxChars)}`,
54
+ ].join('\n\n');
55
+ }
56
+ return [
57
+ `Role: ${message.role}`,
58
+ `Content excerpt:\n${CompactionText.truncateForSummary(message.content, maxChars)}`,
59
+ ].join('\n\n');
60
+ }
61
+ }
62
+ //# sourceMappingURL=transcript-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-renderer.js","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/transcript-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { ChatArchiveRecord, ChatContextStats, ChatSession } from '../../../../core/chat/types.js';
2
+ import type { ChatMessage, LlmAdapter, LlmUsage } from '../../../../core/llm/types.js';
3
+ import type { ProviderCredentialSource } from '../../../../core/runtime/api-keys.js';
4
+ export type ConversationCompactionSummarizerOptions = {
5
+ provider?: 'openai' | 'anthropic' | 'active';
6
+ model?: string;
7
+ apiKey?: string;
8
+ llm?: LlmAdapter;
9
+ credentialSource?: ProviderCredentialSource;
10
+ };
11
+ export type ConversationCompactionRuntime = {
12
+ model: string;
13
+ stateRoot: string;
14
+ systemContext?: string;
15
+ };
16
+ export type ConversationCompactionRequest = {
17
+ usage?: LlmUsage;
18
+ toolNames?: string[];
19
+ goal?: string;
20
+ };
21
+ export type ConversationCompactionArchiveState = {
22
+ archives: ChatArchiveRecord[];
23
+ currentSummaryPath?: string;
24
+ lastArchivePath?: string;
25
+ };
26
+ export type ConversationCompactionCompletedArchive = ConversationCompactionArchiveState & {
27
+ compactedMessages: number;
28
+ compactedAt: string;
29
+ };
30
+ export type ConversationCompactionContextInput = {
31
+ history: ChatMessage[];
32
+ runtime: Pick<ConversationCompactionRuntime, 'systemContext'>;
33
+ request?: ConversationCompactionRequest;
34
+ archive: ConversationCompactionArchiveState;
35
+ completed?: ConversationCompactionCompletedArchive;
36
+ status?: {
37
+ state: NonNullable<NonNullable<ChatContextStats['compaction']>['status']>;
38
+ error?: string;
39
+ };
40
+ };
41
+ export type ConversationCompactionOptions = {
42
+ history: ChatMessage[];
43
+ runtime: ConversationCompactionRuntime;
44
+ session: Pick<ChatSession, 'id'>;
45
+ request?: ConversationCompactionRequest;
46
+ force?: boolean;
47
+ summarizer?: ConversationCompactionSummarizerOptions;
48
+ onStatusChange?: (event: ConversationCompactionStatus) => void;
49
+ };
50
+ export type ConversationCompactionResult = {
51
+ history: ChatMessage[];
52
+ context: ChatContextStats;
53
+ archive: ConversationCompactionArchiveState;
54
+ };
55
+ export type ConversationCompactionStatus = {
56
+ status: 'running' | 'finished' | 'failed';
57
+ archivePath?: string;
58
+ summaryPath?: string;
59
+ error?: string;
60
+ };
61
+ export type BuildSessionCompactionRunningContextOptions = {
62
+ session: ChatSession;
63
+ history?: ChatMessage[];
64
+ lastArchivePath?: string;
65
+ };
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/core/chat/engine/compaction/types.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  export { createConversationEngine } from './conversation-engine.js';
2
- export { runConversationTurn, clearConversationTurnLease } from './turns/run-conversation-turn.js';
3
- export type { RunConversationTurnArgs, RunConversationTurnResult } from './turns/run-conversation-turn.js';
2
+ export { EngineConversationTurnService } from './turns/service.js';
3
+ export type { RunConversationTurnArgs, RunConversationTurnResult } from './turns/types.js';
4
4
  export type { AppendConversationMessageInput, ClearConversationTurnLeaseInput, ConversationEngine, ConversationEngineConfig, ConversationEngineHost, ConversationSessionService, ConversationTurnService, CreateConversationSessionInput, ContinueConversationTurnInput, ResetConversationSessionInput, SubmitConversationTurnInput, SubmitConversationTurnResult, UpdateConversationSessionSettingsInput, } from './types.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/chat/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AACnG,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC3G,YAAY,EACV,8BAA8B,EAC9B,+BAA+B,EAC/B,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/chat/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,YAAY,EACV,8BAA8B,EAC9B,+BAA+B,EAC/B,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,sCAAsC,GACvC,MAAM,YAAY,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { createConversationEngine } from './conversation-engine.js';
2
- export { runConversationTurn, clearConversationTurnLease } from './turns/run-conversation-turn.js';
2
+ export { EngineConversationTurnService } from './turns/service.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/chat/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/chat/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ChatMessage } from '../../../../../core/llm/types.js';
2
+ import type { ChatArchiveManifest, ChatArchiveRecord } from '../../../../../core/chat/types.js';
3
+ import type { ChatArchivePaths, ChatArchiveRepository } from './types.js';
4
+ export declare class FileChatArchiveRepository implements ChatArchiveRepository {
5
+ private readonly stateRoot;
6
+ private readonly sessionId;
7
+ private readonly paths;
8
+ constructor(args: {
9
+ stateRoot: string;
10
+ sessionId: string;
11
+ });
12
+ derivePaths(): ChatArchivePaths;
13
+ ensureArchiveDir(): ChatArchivePaths;
14
+ loadManifest(): ChatArchiveManifest;
15
+ saveManifest(manifest: ChatArchiveManifest): void;
16
+ writeMessagesJsonl(archiveId: string, messages: ChatMessage[]): string;
17
+ writeSummaryMarkdown(archiveId: string, summary: string): string;
18
+ readSummaryMarkdown(path: string): string | undefined;
19
+ static derivePaths(stateRoot: string, sessionId: string): ChatArchivePaths;
20
+ static createArchiveId(now?: Date): string;
21
+ static appendManifestArchive(current: ChatArchiveManifest, archive: ChatArchiveRecord): ChatArchiveManifest;
22
+ private static emptyManifest;
23
+ private static parseManifest;
24
+ private static parseArchiveRecord;
25
+ private static resolveDisplayPath;
26
+ }
27
+ //# sourceMappingURL=file-chat-archive-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-chat-archive-repository.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/file-chat-archive-repository.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAI1E,qBAAa,yBAA0B,YAAW,qBAAqB;IACrE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAE7B,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAM1D,WAAW,IAAI,gBAAgB;IAI/B,gBAAgB,IAAI,gBAAgB;IAKpC,YAAY,IAAI,mBAAmB;IAanC,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAKjD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM;IAYtE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAQhE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAarD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAY1E,MAAM,CAAC,eAAe,CAAC,GAAG,OAAa,GAAG,MAAM;IAIhD,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,iBAAiB,GACzB,mBAAmB;IAStB,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAmB5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA2BjC,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAOlC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * File-backed chat archive repository.
3
+ *
4
+ * Owns archive paths, manifest persistence, archived transcript files, and
5
+ * rolling-summary markdown files for one chat session. Compaction policy stays
6
+ * in the history module; archive file layout stays here.
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ const ARCHIVE_MANIFEST_VERSION = 1;
11
+ export class FileChatArchiveRepository {
12
+ stateRoot;
13
+ sessionId;
14
+ paths;
15
+ constructor(args) {
16
+ this.stateRoot = args.stateRoot;
17
+ this.sessionId = args.sessionId;
18
+ this.paths = FileChatArchiveRepository.derivePaths(args.stateRoot, args.sessionId);
19
+ }
20
+ derivePaths() {
21
+ return this.paths;
22
+ }
23
+ ensureArchiveDir() {
24
+ mkdirSync(this.paths.archivesDir, { recursive: true });
25
+ return this.paths;
26
+ }
27
+ loadManifest() {
28
+ if (!existsSync(this.paths.manifestPath)) {
29
+ return FileChatArchiveRepository.emptyManifest(this.sessionId);
30
+ }
31
+ try {
32
+ const parsed = JSON.parse(readFileSync(this.paths.manifestPath, 'utf8'));
33
+ return FileChatArchiveRepository.parseManifest(parsed, this.sessionId);
34
+ }
35
+ catch {
36
+ return FileChatArchiveRepository.emptyManifest(this.sessionId);
37
+ }
38
+ }
39
+ saveManifest(manifest) {
40
+ const paths = this.ensureArchiveDir();
41
+ writeFileSync(paths.manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8');
42
+ }
43
+ writeMessagesJsonl(archiveId, messages) {
44
+ const paths = this.ensureArchiveDir();
45
+ const displayPath = `${paths.displayArchivesDir}/${archiveId}.jsonl`;
46
+ const filePath = join(paths.archivesDir, `${archiveId}.jsonl`);
47
+ const body = messages.map((message, index) => JSON.stringify({
48
+ index,
49
+ ...message,
50
+ })).join('\n');
51
+ writeFileSync(filePath, body ? `${body}\n` : '', 'utf8');
52
+ return displayPath;
53
+ }
54
+ writeSummaryMarkdown(archiveId, summary) {
55
+ const paths = this.ensureArchiveDir();
56
+ const displayPath = `${paths.displayArchivesDir}/${archiveId}.summary.md`;
57
+ const filePath = join(paths.archivesDir, `${archiveId}.summary.md`);
58
+ writeFileSync(filePath, summary.endsWith('\n') ? summary : `${summary}\n`, 'utf8');
59
+ return displayPath;
60
+ }
61
+ readSummaryMarkdown(path) {
62
+ const filePath = FileChatArchiveRepository.resolveDisplayPath(path, this.stateRoot);
63
+ if (!existsSync(filePath)) {
64
+ return undefined;
65
+ }
66
+ try {
67
+ return readFileSync(filePath, 'utf8');
68
+ }
69
+ catch {
70
+ return undefined;
71
+ }
72
+ }
73
+ static derivePaths(stateRoot, sessionId) {
74
+ const sessionDir = join(stateRoot, 'chat-sessions', sessionId);
75
+ const archivesDir = join(sessionDir, 'archives');
76
+ return {
77
+ sessionDir,
78
+ archivesDir,
79
+ manifestPath: join(archivesDir, 'manifest.json'),
80
+ displaySessionDir: `.heddle/chat-sessions/${sessionId}`,
81
+ displayArchivesDir: `.heddle/chat-sessions/${sessionId}/archives`,
82
+ };
83
+ }
84
+ static createArchiveId(now = new Date()) {
85
+ return `archive-${now.toISOString().replaceAll(':', '-')}`;
86
+ }
87
+ static appendManifestArchive(current, archive) {
88
+ return {
89
+ version: ARCHIVE_MANIFEST_VERSION,
90
+ sessionId: current.sessionId,
91
+ currentSummaryPath: archive.summaryPath,
92
+ archives: [...current.archives, archive],
93
+ };
94
+ }
95
+ static emptyManifest(sessionId) {
96
+ return {
97
+ version: ARCHIVE_MANIFEST_VERSION,
98
+ sessionId,
99
+ archives: [],
100
+ };
101
+ }
102
+ static parseManifest(value, sessionId) {
103
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
104
+ return FileChatArchiveRepository.emptyManifest(sessionId);
105
+ }
106
+ const candidate = value;
107
+ const archives = Array.isArray(candidate.archives) ?
108
+ candidate.archives.flatMap((archive) => FileChatArchiveRepository.parseArchiveRecord(archive))
109
+ : [];
110
+ return {
111
+ version: ARCHIVE_MANIFEST_VERSION,
112
+ sessionId: typeof candidate.sessionId === 'string' ? candidate.sessionId : sessionId,
113
+ currentSummaryPath: typeof candidate.currentSummaryPath === 'string' ? candidate.currentSummaryPath : undefined,
114
+ archives,
115
+ };
116
+ }
117
+ static parseArchiveRecord(value) {
118
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
119
+ return [];
120
+ }
121
+ const candidate = value;
122
+ if (typeof candidate.id !== 'string'
123
+ || typeof candidate.path !== 'string'
124
+ || typeof candidate.summaryPath !== 'string'
125
+ || typeof candidate.messageCount !== 'number'
126
+ || typeof candidate.createdAt !== 'string') {
127
+ return [];
128
+ }
129
+ return [{
130
+ id: candidate.id,
131
+ path: candidate.path,
132
+ summaryPath: candidate.summaryPath,
133
+ shortDescription: typeof candidate.shortDescription === 'string' ? candidate.shortDescription : undefined,
134
+ messageCount: candidate.messageCount,
135
+ createdAt: candidate.createdAt,
136
+ summaryModel: typeof candidate.summaryModel === 'string' ? candidate.summaryModel : undefined,
137
+ }];
138
+ }
139
+ static resolveDisplayPath(displayPath, stateRoot) {
140
+ if (displayPath.startsWith('.heddle/')) {
141
+ return join(stateRoot, displayPath.slice('.heddle/'.length));
142
+ }
143
+ return displayPath;
144
+ }
145
+ }
146
+ //# sourceMappingURL=file-chat-archive-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-chat-archive-repository.js","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/file-chat-archive-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { FileChatArchiveRepository } from './file-chat-archive-repository.js';
2
+ export type { ChatArchivePaths, ChatArchiveRepository } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { FileChatArchiveRepository } from './file-chat-archive-repository.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ChatMessage } from '../../../../../core/llm/types.js';
2
+ import type { ChatArchiveManifest } from '../../../../../core/chat/types.js';
3
+ export type ChatArchivePaths = {
4
+ sessionDir: string;
5
+ archivesDir: string;
6
+ manifestPath: string;
7
+ displaySessionDir: string;
8
+ displayArchivesDir: string;
9
+ };
10
+ export type ChatArchiveRepository = {
11
+ derivePaths(): ChatArchivePaths;
12
+ ensureArchiveDir(): ChatArchivePaths;
13
+ loadManifest(): ChatArchiveManifest;
14
+ saveManifest(manifest: ChatArchiveManifest): void;
15
+ writeMessagesJsonl(archiveId: string, messages: ChatMessage[]): string;
16
+ writeSummaryMarkdown(archiveId: string, summary: string): string;
17
+ readSummaryMarkdown(path: string): string | undefined;
18
+ };
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,IAAI,gBAAgB,CAAC;IAChC,gBAAgB,IAAI,gBAAgB,CAAC;IACrC,YAAY,IAAI,mBAAmB,CAAC;IACpC,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACvE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACjE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/archives/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { ChatSessionLeases } from './leases.js';
2
+ export type { ChatSessionLeaseConflictOptions, ChatSessionLeaseOwner } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/leases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ChatSessionLeases } from './leases.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/leases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Pure chat-session lease policy.
3
+ *
4
+ * Keep lease freshness, ownership, acquisition, release, and conflict messages
5
+ * here. This class should not perform storage I/O; callers persist the returned
6
+ * session through the owning service or repository.
7
+ */
8
+ import type { ChatSession, ChatSessionLease } from '../../../../../core/chat/types.js';
9
+ import type { ChatSessionLeaseConflictOptions, ChatSessionLeaseOwner } from './types.js';
10
+ export declare class ChatSessionLeases {
11
+ static isFresh(lease: ChatSessionLease | undefined, options?: {
12
+ now?: number;
13
+ staleAfterMs?: number;
14
+ }): boolean;
15
+ static isOwnedByDeadLocalProcess(lease: ChatSessionLease | undefined, options?: {
16
+ isProcessAlive?: (pid: number) => boolean;
17
+ }): boolean;
18
+ static acquire(session: ChatSession, owner: ChatSessionLeaseOwner, options?: {
19
+ now?: number;
20
+ }): ChatSession;
21
+ static release(session: ChatSession, owner?: Pick<ChatSessionLeaseOwner, 'ownerId'>): ChatSession;
22
+ static conflict(session: ChatSession, owner: ChatSessionLeaseOwner, options?: ChatSessionLeaseConflictOptions): string | undefined;
23
+ private static defaultIsProcessAlive;
24
+ }
25
+ //# sourceMappingURL=leases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leases.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/chat/engine/sessions/leases/leases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAKzF,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,OAAO,CACZ,KAAK,EAAE,gBAAgB,GAAG,SAAS,EACnC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO;IAaV,MAAM,CAAC,yBAAyB,CAC9B,KAAK,EAAE,gBAAgB,GAAG,SAAS,EACnC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,GACtD,OAAO;IAeV,MAAM,CAAC,OAAO,CACZ,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,WAAW;IAcd,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GAAG,WAAW;IAWjG,MAAM,CAAC,QAAQ,CACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE,+BAA+B,GACxC,MAAM,GAAG,SAAS;IAiBrB,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAYrC"}