@roackb2/heddle 1.2.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 (519) hide show
  1. package/README.md +11 -3
  2. package/dist/src/cli/ask.d.ts +11 -1
  3. package/dist/src/cli/ask.d.ts.map +1 -1
  4. package/dist/src/cli/ask.js +168 -204
  5. package/dist/src/cli/ask.js.map +1 -1
  6. package/dist/src/cli/chat/App.js +7 -4
  7. package/dist/src/cli/chat/App.js.map +1 -1
  8. package/dist/src/cli/chat/adapters/slash-command-context.js +2 -2
  9. package/dist/src/cli/chat/adapters/slash-command-context.js.map +1 -1
  10. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.d.ts +5 -18
  11. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.d.ts.map +1 -1
  12. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.js +13 -125
  13. package/dist/src/cli/chat/hooks/controllers/run/tui-agent-turn-result.js.map +1 -1
  14. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.d.ts +7 -8
  15. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.d.ts.map +1 -1
  16. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.js +12 -24
  17. package/dist/src/cli/chat/hooks/controllers/run/tui-compaction-status.js.map +1 -1
  18. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.d.ts +3 -3
  19. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.d.ts.map +1 -1
  20. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js +22 -18
  21. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js.map +1 -1
  22. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.d.ts +4 -4
  23. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.d.ts.map +1 -1
  24. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js +34 -30
  25. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js.map +1 -1
  26. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.d.ts +3 -0
  27. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.d.ts.map +1 -1
  28. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.js +24 -19
  29. package/dist/src/cli/chat/hooks/controllers/run/tui-ordinary-turn.js.map +1 -1
  30. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts +3 -3
  31. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts.map +1 -1
  32. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.js +23 -23
  33. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.js.map +1 -1
  34. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts +5 -4
  35. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.d.ts.map +1 -1
  36. package/dist/src/cli/chat/hooks/controllers/run/tui-tool-approval.js.map +1 -1
  37. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts +5 -2
  38. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts.map +1 -1
  39. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js +24 -14
  40. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js.map +1 -1
  41. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts +2 -0
  42. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts.map +1 -1
  43. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js +23 -29
  44. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js.map +1 -1
  45. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.d.ts +4 -3
  46. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.d.ts.map +1 -1
  47. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.js +10 -9
  48. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.js.map +1 -1
  49. package/dist/src/cli/chat/hooks/useChatDrift.d.ts +4 -4
  50. package/dist/src/cli/chat/hooks/useChatDrift.d.ts.map +1 -1
  51. package/dist/src/cli/chat/hooks/useChatDrift.js +7 -6
  52. package/dist/src/cli/chat/hooks/useChatDrift.js.map +1 -1
  53. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +3 -0
  54. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  55. package/dist/src/cli/chat/hooks/useChatSessions.js +30 -23
  56. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  57. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts +9 -3
  58. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
  59. package/dist/src/cli/chat/hooks/useChatStatusSummary.js +2 -2
  60. package/dist/src/cli/chat/hooks/useChatStatusSummary.js.map +1 -1
  61. package/dist/src/cli/chat/state/compaction.d.ts +2 -1
  62. package/dist/src/cli/chat/state/compaction.d.ts.map +1 -1
  63. package/dist/src/cli/chat/state/compaction.js +1 -1
  64. package/dist/src/cli/chat/state/compaction.js.map +1 -1
  65. package/dist/src/cli/chat/submit.d.ts +3 -4
  66. package/dist/src/cli/chat/submit.d.ts.map +1 -1
  67. package/dist/src/cli/chat/submit.js +29 -65
  68. package/dist/src/cli/chat/submit.js.map +1 -1
  69. package/dist/src/cli/chat/utils/format.d.ts +0 -4
  70. package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
  71. package/dist/src/cli/chat/utils/format.js +0 -5
  72. package/dist/src/cli/chat/utils/format.js.map +1 -1
  73. package/dist/src/cli/chat/utils/runtime.d.ts +0 -2
  74. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  75. package/dist/src/cli/chat/utils/runtime.js +0 -2
  76. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  77. package/dist/src/cli/daemon.d.ts +2 -2
  78. package/dist/src/cli/daemon.d.ts.map +1 -1
  79. package/dist/src/cli/daemon.js +2 -2
  80. package/dist/src/cli/daemon.js.map +1 -1
  81. package/dist/src/cli/main.js +4 -25
  82. package/dist/src/cli/main.js.map +1 -1
  83. package/dist/src/cli/remote/control-plane-client.d.ts +8 -4
  84. package/dist/src/cli/remote/control-plane-client.d.ts.map +1 -1
  85. package/dist/src/core/chat/engine/compaction/constants.d.ts +15 -0
  86. package/dist/src/core/chat/engine/compaction/constants.d.ts.map +1 -0
  87. package/dist/src/core/chat/engine/compaction/constants.js +15 -0
  88. package/dist/src/core/chat/engine/compaction/constants.js.map +1 -0
  89. package/dist/src/core/chat/engine/compaction/context-builder.d.ts +10 -0
  90. package/dist/src/core/chat/engine/compaction/context-builder.d.ts.map +1 -0
  91. package/dist/src/core/chat/engine/compaction/context-builder.js +47 -0
  92. package/dist/src/core/chat/engine/compaction/context-builder.js.map +1 -0
  93. package/dist/src/core/chat/engine/compaction/index.d.ts +3 -0
  94. package/dist/src/core/chat/engine/compaction/index.d.ts.map +1 -0
  95. package/dist/src/core/chat/engine/compaction/index.js +2 -0
  96. package/dist/src/core/chat/engine/compaction/index.js.map +1 -0
  97. package/dist/src/core/chat/engine/compaction/service.d.ts +21 -0
  98. package/dist/src/core/chat/engine/compaction/service.d.ts.map +1 -0
  99. package/dist/src/core/chat/engine/compaction/service.js +189 -0
  100. package/dist/src/core/chat/engine/compaction/service.js.map +1 -0
  101. package/dist/src/core/chat/engine/compaction/split-policy.d.ts +14 -0
  102. package/dist/src/core/chat/engine/compaction/split-policy.d.ts.map +1 -0
  103. package/dist/src/core/chat/engine/compaction/split-policy.js +52 -0
  104. package/dist/src/core/chat/engine/compaction/split-policy.js.map +1 -0
  105. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.d.ts +9 -0
  106. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.d.ts.map +1 -0
  107. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.js +35 -0
  108. package/dist/src/core/chat/engine/compaction/summarizer/context-builder.js.map +1 -0
  109. package/dist/src/core/chat/engine/compaction/summarizer/index.d.ts +3 -0
  110. package/dist/src/core/chat/engine/compaction/summarizer/index.d.ts.map +1 -0
  111. package/dist/src/core/chat/engine/compaction/summarizer/index.js +2 -0
  112. package/dist/src/core/chat/engine/compaction/summarizer/index.js.map +1 -0
  113. package/dist/src/core/chat/engine/compaction/summarizer/prompt.d.ts +2 -0
  114. package/dist/src/core/chat/engine/compaction/summarizer/prompt.d.ts.map +1 -0
  115. package/dist/src/core/chat/engine/compaction/summarizer/prompt.js +31 -0
  116. package/dist/src/core/chat/engine/compaction/summarizer/prompt.js.map +1 -0
  117. package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts +14 -0
  118. package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts.map +1 -0
  119. package/dist/src/core/chat/engine/compaction/summarizer/service.js +70 -0
  120. package/dist/src/core/chat/engine/compaction/summarizer/service.js.map +1 -0
  121. package/dist/src/core/chat/engine/compaction/summarizer/types.d.ts +19 -0
  122. package/dist/src/core/chat/engine/compaction/summarizer/types.d.ts.map +1 -0
  123. package/dist/src/core/chat/engine/compaction/summarizer/types.js +2 -0
  124. package/dist/src/core/chat/engine/compaction/summarizer/types.js.map +1 -0
  125. package/dist/src/core/chat/engine/compaction/summary-message.d.ts +18 -0
  126. package/dist/src/core/chat/engine/compaction/summary-message.d.ts.map +1 -0
  127. package/dist/src/core/chat/engine/compaction/summary-message.js +46 -0
  128. package/dist/src/core/chat/engine/compaction/summary-message.js.map +1 -0
  129. package/dist/src/core/chat/engine/compaction/text.d.ts +9 -0
  130. package/dist/src/core/chat/engine/compaction/text.d.ts.map +1 -0
  131. package/dist/src/core/chat/engine/compaction/text.js +26 -0
  132. package/dist/src/core/chat/engine/compaction/text.js.map +1 -0
  133. package/dist/src/core/chat/engine/compaction/token-estimator.d.ts +14 -0
  134. package/dist/src/core/chat/engine/compaction/token-estimator.d.ts.map +1 -0
  135. package/dist/src/core/chat/engine/compaction/token-estimator.js +41 -0
  136. package/dist/src/core/chat/engine/compaction/token-estimator.js.map +1 -0
  137. package/dist/src/core/chat/engine/compaction/transcript-renderer.d.ts +10 -0
  138. package/dist/src/core/chat/engine/compaction/transcript-renderer.d.ts.map +1 -0
  139. package/dist/src/core/chat/engine/compaction/transcript-renderer.js +62 -0
  140. package/dist/src/core/chat/engine/compaction/transcript-renderer.js.map +1 -0
  141. package/dist/src/core/chat/engine/compaction/types.d.ts +66 -0
  142. package/dist/src/core/chat/engine/compaction/types.d.ts.map +1 -0
  143. package/dist/src/core/chat/engine/compaction/types.js +2 -0
  144. package/dist/src/core/chat/engine/compaction/types.js.map +1 -0
  145. package/dist/src/core/chat/engine/conversation-engine.d.ts.map +1 -1
  146. package/dist/src/core/chat/engine/conversation-engine.js +4 -8
  147. package/dist/src/core/chat/engine/conversation-engine.js.map +1 -1
  148. package/dist/src/core/chat/engine/index.d.ts +3 -3
  149. package/dist/src/core/chat/engine/index.d.ts.map +1 -1
  150. package/dist/src/core/chat/engine/index.js +1 -1
  151. package/dist/src/core/chat/engine/index.js.map +1 -1
  152. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.d.ts +27 -0
  153. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.d.ts.map +1 -0
  154. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.js +146 -0
  155. package/dist/src/core/chat/engine/sessions/archives/file-chat-archive-repository.js.map +1 -0
  156. package/dist/src/core/chat/engine/sessions/archives/index.d.ts +3 -0
  157. package/dist/src/core/chat/engine/sessions/archives/index.d.ts.map +1 -0
  158. package/dist/src/core/chat/engine/sessions/archives/index.js +2 -0
  159. package/dist/src/core/chat/engine/sessions/archives/index.js.map +1 -0
  160. package/dist/src/core/chat/engine/sessions/archives/types.d.ts +19 -0
  161. package/dist/src/core/chat/engine/sessions/archives/types.d.ts.map +1 -0
  162. package/dist/src/core/chat/engine/sessions/archives/types.js +2 -0
  163. package/dist/src/core/chat/engine/sessions/archives/types.js.map +1 -0
  164. package/dist/src/core/chat/engine/sessions/leases/index.d.ts +3 -0
  165. package/dist/src/core/chat/engine/sessions/leases/index.d.ts.map +1 -0
  166. package/dist/src/core/chat/engine/sessions/leases/index.js +2 -0
  167. package/dist/src/core/chat/engine/sessions/leases/index.js.map +1 -0
  168. package/dist/src/core/chat/engine/sessions/leases/leases.d.ts +25 -0
  169. package/dist/src/core/chat/engine/sessions/leases/leases.d.ts.map +1 -0
  170. package/dist/src/core/chat/engine/sessions/leases/leases.js +74 -0
  171. package/dist/src/core/chat/engine/sessions/leases/leases.js.map +1 -0
  172. package/dist/src/core/chat/engine/sessions/leases/types.d.ts +12 -0
  173. package/dist/src/core/chat/engine/sessions/leases/types.d.ts.map +1 -0
  174. package/dist/src/core/chat/engine/sessions/leases/types.js +2 -0
  175. package/dist/src/core/chat/engine/sessions/leases/types.js.map +1 -0
  176. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts +2 -2
  177. package/dist/src/core/chat/engine/sessions/preferences/service.d.ts.map +1 -1
  178. package/dist/src/core/chat/engine/sessions/preferences/service.js +1 -1
  179. package/dist/src/core/chat/engine/sessions/preferences/service.js.map +1 -1
  180. package/dist/src/core/chat/engine/sessions/records/conversation-lines.d.ts +12 -0
  181. package/dist/src/core/chat/engine/sessions/records/conversation-lines.d.ts.map +1 -0
  182. package/dist/src/core/chat/engine/sessions/records/conversation-lines.js +28 -0
  183. package/dist/src/core/chat/engine/sessions/records/conversation-lines.js.map +1 -0
  184. package/dist/src/core/chat/engine/sessions/records/index.d.ts +5 -0
  185. package/dist/src/core/chat/engine/sessions/records/index.d.ts.map +1 -0
  186. package/dist/src/core/chat/engine/sessions/records/index.js +4 -0
  187. package/dist/src/core/chat/engine/sessions/records/index.js.map +1 -0
  188. package/dist/src/core/chat/engine/sessions/records/records.d.ts +21 -0
  189. package/dist/src/core/chat/engine/sessions/records/records.d.ts.map +1 -0
  190. package/dist/src/core/chat/engine/sessions/records/records.js +91 -0
  191. package/dist/src/core/chat/engine/sessions/records/records.js.map +1 -0
  192. package/dist/src/core/chat/engine/sessions/records/titles.d.ts +15 -0
  193. package/dist/src/core/chat/engine/sessions/records/titles.d.ts.map +1 -0
  194. package/dist/src/core/chat/engine/sessions/records/titles.js +19 -0
  195. package/dist/src/core/chat/engine/sessions/records/titles.js.map +1 -0
  196. package/dist/src/core/chat/engine/sessions/records/types.d.ts +35 -0
  197. package/dist/src/core/chat/engine/sessions/records/types.d.ts.map +1 -0
  198. package/dist/src/core/chat/engine/sessions/records/types.js +2 -0
  199. package/dist/src/core/chat/engine/sessions/records/types.js.map +1 -0
  200. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.d.ts +23 -0
  201. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.d.ts.map +1 -0
  202. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.js +61 -0
  203. package/dist/src/core/chat/engine/sessions/repository/chat-session-codec.js.map +1 -0
  204. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.d.ts +369 -0
  205. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.d.ts.map +1 -0
  206. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.js +262 -0
  207. package/dist/src/core/chat/engine/sessions/repository/chat-session-schemas.js.map +1 -0
  208. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.d.ts +22 -33
  209. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.d.ts.map +1 -1
  210. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.js +168 -431
  211. package/dist/src/core/chat/engine/sessions/repository/file-chat-session-repository.js.map +1 -1
  212. package/dist/src/core/chat/engine/sessions/repository/index.d.ts +3 -0
  213. package/dist/src/core/chat/engine/sessions/repository/index.d.ts.map +1 -0
  214. package/dist/src/core/chat/engine/sessions/repository/index.js +2 -0
  215. package/dist/src/core/chat/engine/sessions/repository/index.js.map +1 -0
  216. package/dist/src/core/chat/engine/sessions/repository/types.d.ts +33 -0
  217. package/dist/src/core/chat/engine/sessions/repository/types.d.ts.map +1 -0
  218. package/dist/src/core/chat/engine/sessions/repository/types.js +2 -0
  219. package/dist/src/core/chat/engine/sessions/repository/types.js.map +1 -0
  220. package/dist/src/core/chat/engine/sessions/service.d.ts +41 -9
  221. package/dist/src/core/chat/engine/sessions/service.d.ts.map +1 -1
  222. package/dist/src/core/chat/engine/sessions/service.js +243 -107
  223. package/dist/src/core/chat/engine/sessions/service.js.map +1 -1
  224. package/dist/src/core/chat/engine/sessions/types.d.ts +6 -0
  225. package/dist/src/core/chat/engine/sessions/types.d.ts.map +1 -0
  226. package/dist/src/core/chat/engine/sessions/types.js +2 -0
  227. package/dist/src/core/chat/engine/sessions/types.js.map +1 -0
  228. package/dist/src/core/chat/engine/turns/context/index.d.ts +3 -0
  229. package/dist/src/core/chat/engine/turns/context/index.d.ts.map +1 -0
  230. package/dist/src/core/chat/engine/turns/context/index.js +2 -0
  231. package/dist/src/core/chat/engine/turns/context/index.js.map +1 -0
  232. package/dist/src/core/chat/engine/turns/context/turn-context-builder.d.ts +8 -0
  233. package/dist/src/core/chat/engine/turns/context/turn-context-builder.d.ts.map +1 -0
  234. package/dist/src/core/chat/engine/turns/context/turn-context-builder.js +36 -0
  235. package/dist/src/core/chat/engine/turns/context/turn-context-builder.js.map +1 -0
  236. package/dist/src/core/chat/engine/turns/context/types.d.ts +28 -0
  237. package/dist/src/core/chat/engine/turns/context/types.d.ts.map +1 -0
  238. package/dist/src/core/chat/engine/turns/context/types.js +2 -0
  239. package/dist/src/core/chat/engine/turns/context/types.js.map +1 -0
  240. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.d.ts +10 -0
  241. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.d.ts.map +1 -0
  242. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.js +29 -0
  243. package/dist/src/core/chat/engine/turns/failure/failure-message-formatter.js.map +1 -0
  244. package/dist/src/core/chat/engine/turns/failure/index.d.ts +3 -0
  245. package/dist/src/core/chat/engine/turns/failure/index.d.ts.map +1 -0
  246. package/dist/src/core/chat/engine/turns/failure/index.js +2 -0
  247. package/dist/src/core/chat/engine/turns/failure/index.js.map +1 -0
  248. package/dist/src/core/chat/engine/turns/failure/types.d.ts +5 -0
  249. package/dist/src/core/chat/engine/turns/failure/types.d.ts.map +1 -0
  250. package/dist/src/core/chat/engine/turns/failure/types.js +2 -0
  251. package/dist/src/core/chat/engine/turns/failure/types.js.map +1 -0
  252. package/dist/src/core/chat/engine/turns/host/host-normalizer.d.ts +9 -0
  253. package/dist/src/core/chat/engine/turns/host/host-normalizer.d.ts.map +1 -0
  254. package/dist/src/core/chat/engine/turns/host/host-normalizer.js +51 -0
  255. package/dist/src/core/chat/engine/turns/host/host-normalizer.js.map +1 -0
  256. package/dist/src/core/chat/engine/turns/host/index.d.ts +3 -0
  257. package/dist/src/core/chat/engine/turns/host/index.d.ts.map +1 -0
  258. package/dist/src/core/chat/engine/turns/host/index.js +2 -0
  259. package/dist/src/core/chat/engine/turns/host/index.js.map +1 -0
  260. package/dist/src/core/chat/engine/turns/host/types.d.ts +17 -0
  261. package/dist/src/core/chat/engine/turns/host/types.d.ts.map +1 -0
  262. package/dist/src/core/chat/engine/turns/host/types.js +2 -0
  263. package/dist/src/core/chat/engine/turns/host/types.js.map +1 -0
  264. package/dist/src/core/chat/engine/turns/memory/index.d.ts +3 -0
  265. package/dist/src/core/chat/engine/turns/memory/index.d.ts.map +1 -0
  266. package/dist/src/core/chat/engine/turns/memory/index.js +2 -0
  267. package/dist/src/core/chat/engine/turns/memory/index.js.map +1 -0
  268. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts +17 -0
  269. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts.map +1 -0
  270. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js +126 -0
  271. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js.map +1 -0
  272. package/dist/src/core/chat/engine/turns/memory/types.d.ts +29 -0
  273. package/dist/src/core/chat/engine/turns/memory/types.d.ts.map +1 -0
  274. package/dist/src/core/chat/engine/turns/memory/types.js +2 -0
  275. package/dist/src/core/chat/engine/turns/memory/types.js.map +1 -0
  276. package/dist/src/core/chat/engine/turns/persistence/index.d.ts +4 -0
  277. package/dist/src/core/chat/engine/turns/persistence/index.d.ts.map +1 -0
  278. package/dist/src/core/chat/engine/turns/persistence/index.js +3 -0
  279. package/dist/src/core/chat/engine/turns/persistence/index.js.map +1 -0
  280. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.d.ts +9 -0
  281. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.d.ts.map +1 -0
  282. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.js +60 -0
  283. package/dist/src/core/chat/engine/turns/persistence/turn-artifacts.js.map +1 -0
  284. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.d.ts +10 -0
  285. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.d.ts.map +1 -0
  286. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.js +50 -0
  287. package/dist/src/core/chat/engine/turns/persistence/turn-persistence-service.js.map +1 -0
  288. package/dist/src/core/chat/engine/turns/persistence/types.d.ts +69 -0
  289. package/dist/src/core/chat/engine/turns/persistence/types.d.ts.map +1 -0
  290. package/dist/src/core/chat/engine/turns/persistence/types.js +2 -0
  291. package/dist/src/core/chat/engine/turns/persistence/types.js.map +1 -0
  292. package/dist/src/core/chat/engine/turns/preflight/index.d.ts +3 -0
  293. package/dist/src/core/chat/engine/turns/preflight/index.d.ts.map +1 -0
  294. package/dist/src/core/chat/engine/turns/preflight/index.js +2 -0
  295. package/dist/src/core/chat/engine/turns/preflight/index.js.map +1 -0
  296. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.d.ts +14 -0
  297. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.d.ts.map +1 -0
  298. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.js +85 -0
  299. package/dist/src/core/chat/engine/turns/preflight/turn-preflight-service.js.map +1 -0
  300. package/dist/src/core/chat/engine/turns/preflight/types.d.ts +48 -0
  301. package/dist/src/core/chat/engine/turns/preflight/types.d.ts.map +1 -0
  302. package/dist/src/core/chat/engine/turns/preflight/types.js +2 -0
  303. package/dist/src/core/chat/engine/turns/preflight/types.js.map +1 -0
  304. package/dist/src/core/chat/engine/turns/runtime/index.d.ts +3 -0
  305. package/dist/src/core/chat/engine/turns/runtime/index.d.ts.map +1 -0
  306. package/dist/src/core/chat/engine/turns/runtime/index.js +2 -0
  307. package/dist/src/core/chat/engine/turns/runtime/index.js.map +1 -0
  308. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts +14 -0
  309. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -0
  310. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +69 -0
  311. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -0
  312. package/dist/src/core/chat/engine/turns/runtime/types.d.ts +24 -0
  313. package/dist/src/core/chat/engine/turns/runtime/types.d.ts.map +1 -0
  314. package/dist/src/core/chat/engine/turns/runtime/types.js +2 -0
  315. package/dist/src/core/chat/engine/turns/runtime/types.js.map +1 -0
  316. package/dist/src/core/chat/engine/turns/service.d.ts +16 -5
  317. package/dist/src/core/chat/engine/turns/service.d.ts.map +1 -1
  318. package/dist/src/core/chat/engine/turns/service.js +155 -40
  319. package/dist/src/core/chat/engine/turns/service.js.map +1 -1
  320. package/dist/src/core/chat/engine/turns/trace/index.d.ts +3 -0
  321. package/dist/src/core/chat/engine/turns/trace/index.d.ts.map +1 -0
  322. package/dist/src/core/chat/engine/turns/trace/index.js +2 -0
  323. package/dist/src/core/chat/engine/turns/trace/index.js.map +1 -0
  324. package/dist/src/core/chat/engine/turns/trace/trace-writer.d.ts +8 -0
  325. package/dist/src/core/chat/engine/turns/trace/trace-writer.d.ts.map +1 -0
  326. package/dist/src/core/chat/engine/turns/trace/trace-writer.js +14 -0
  327. package/dist/src/core/chat/engine/turns/trace/trace-writer.js.map +1 -0
  328. package/dist/src/core/chat/engine/turns/trace/types.d.ts +6 -0
  329. package/dist/src/core/chat/engine/turns/trace/types.d.ts.map +1 -0
  330. package/dist/src/core/chat/engine/turns/trace/types.js +2 -0
  331. package/dist/src/core/chat/engine/turns/trace/types.js.map +1 -0
  332. package/dist/src/core/chat/engine/turns/types.d.ts +44 -0
  333. package/dist/src/core/chat/engine/turns/types.d.ts.map +1 -0
  334. package/dist/src/core/chat/engine/turns/types.js +2 -0
  335. package/dist/src/core/chat/engine/turns/types.js.map +1 -0
  336. package/dist/src/core/chat/engine/types.d.ts +57 -17
  337. package/dist/src/core/chat/engine/types.d.ts.map +1 -1
  338. package/dist/src/core/chat/types.d.ts +20 -14
  339. package/dist/src/core/chat/types.d.ts.map +1 -1
  340. package/dist/src/core/prompts/system-prompt.d.ts.map +1 -1
  341. package/dist/src/core/prompts/system-prompt.js +1 -0
  342. package/dist/src/core/prompts/system-prompt.js.map +1 -1
  343. package/dist/src/index.d.ts +3 -3
  344. package/dist/src/index.d.ts.map +1 -1
  345. package/dist/src/index.js +1 -1
  346. package/dist/src/index.js.map +1 -1
  347. package/dist/src/server/app.js +3 -3
  348. package/dist/src/server/app.js.map +1 -1
  349. package/dist/src/server/features/control-plane/{services → controllers}/ask.d.ts +5 -1
  350. package/dist/src/server/features/control-plane/controllers/ask.d.ts.map +1 -0
  351. package/dist/src/server/features/control-plane/controllers/ask.js +68 -0
  352. package/dist/src/server/features/control-plane/controllers/ask.js.map +1 -0
  353. package/dist/src/server/features/control-plane/controllers/chat-session-events.d.ts +26 -0
  354. package/dist/src/server/features/control-plane/controllers/chat-session-events.d.ts.map +1 -0
  355. package/dist/src/server/features/control-plane/controllers/chat-session-events.js +49 -0
  356. package/dist/src/server/features/control-plane/controllers/chat-session-events.js.map +1 -0
  357. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.d.ts +12 -0
  358. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.d.ts.map +1 -0
  359. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.js +207 -0
  360. package/dist/src/server/features/control-plane/controllers/chat-session-presenter.js.map +1 -0
  361. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.d.ts +63 -0
  362. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.d.ts.map +1 -0
  363. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js +286 -0
  364. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js.map +1 -0
  365. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.d.ts +13 -0
  366. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.d.ts.map +1 -0
  367. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js +196 -0
  368. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js.map +1 -0
  369. package/dist/src/server/features/control-plane/controllers/control-plane-state.d.ts +7 -0
  370. package/dist/src/server/features/control-plane/controllers/control-plane-state.d.ts.map +1 -0
  371. package/dist/src/server/features/control-plane/controllers/control-plane-state.js +64 -0
  372. package/dist/src/server/features/control-plane/controllers/control-plane-state.js.map +1 -0
  373. package/dist/src/server/features/control-plane/controllers/heartbeat.d.ts +12 -0
  374. package/dist/src/server/features/control-plane/controllers/heartbeat.d.ts.map +1 -0
  375. package/dist/src/server/features/control-plane/controllers/heartbeat.js +59 -0
  376. package/dist/src/server/features/control-plane/controllers/heartbeat.js.map +1 -0
  377. package/dist/src/server/features/control-plane/controllers/layout-snapshots.d.ts +13 -0
  378. package/dist/src/server/features/control-plane/controllers/layout-snapshots.d.ts.map +1 -0
  379. package/dist/src/server/features/control-plane/controllers/layout-snapshots.js +70 -0
  380. package/dist/src/server/features/control-plane/controllers/layout-snapshots.js.map +1 -0
  381. package/dist/src/server/features/control-plane/controllers/memory.d.ts +25 -0
  382. package/dist/src/server/features/control-plane/controllers/memory.d.ts.map +1 -0
  383. package/dist/src/server/features/control-plane/controllers/memory.js +44 -0
  384. package/dist/src/server/features/control-plane/controllers/memory.js.map +1 -0
  385. package/dist/src/server/features/control-plane/controllers/workspace-diff.d.ts +18 -0
  386. package/dist/src/server/features/control-plane/controllers/workspace-diff.d.ts.map +1 -0
  387. package/dist/src/server/features/control-plane/controllers/workspace-diff.js +260 -0
  388. package/dist/src/server/features/control-plane/controllers/workspace-diff.js.map +1 -0
  389. package/dist/src/server/features/control-plane/controllers/workspace-files.d.ts +38 -0
  390. package/dist/src/server/features/control-plane/controllers/workspace-files.d.ts.map +1 -0
  391. package/dist/src/server/features/control-plane/controllers/workspace-files.js +139 -0
  392. package/dist/src/server/features/control-plane/controllers/workspace-files.js.map +1 -0
  393. package/dist/src/server/features/control-plane/helpers/read-values.d.ts +7 -0
  394. package/dist/src/server/features/control-plane/helpers/read-values.d.ts.map +1 -0
  395. package/dist/src/server/features/control-plane/helpers/read-values.js +26 -0
  396. package/dist/src/server/features/control-plane/helpers/read-values.js.map +1 -0
  397. package/dist/src/server/features/control-plane/router.d.ts +8 -4
  398. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  399. package/dist/src/server/features/control-plane/router.js +59 -40
  400. package/dist/src/server/features/control-plane/router.js.map +1 -1
  401. package/dist/src/server/features/control-plane/types.d.ts +25 -11
  402. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  403. package/dist/src/server/index.d.ts +1 -1
  404. package/dist/src/server/index.d.ts.map +1 -1
  405. package/dist/src/server/index.js +1 -1
  406. package/dist/src/server/index.js.map +1 -1
  407. package/dist/src/server/router.d.ts +8 -4
  408. package/dist/src/server/router.d.ts.map +1 -1
  409. package/dist/src/web/assets/{MonacoDiffViewer-vifX8i2F.js → MonacoDiffViewer-F3AOHIps.js} +1 -1
  410. package/dist/src/web/assets/{index-vEln1ViW.js → index-D6aK1OFb.js} +2 -2
  411. package/dist/src/web/index.html +1 -1
  412. package/package.json +12 -8
  413. package/dist/src/cli/session.d.ts +0 -11
  414. package/dist/src/cli/session.d.ts.map +0 -1
  415. package/dist/src/cli/session.js +0 -30
  416. package/dist/src/cli/session.js.map +0 -1
  417. package/dist/src/core/chat/engine/history/compaction.d.ts +0 -56
  418. package/dist/src/core/chat/engine/history/compaction.d.ts.map +0 -1
  419. package/dist/src/core/chat/engine/history/compaction.js +0 -546
  420. package/dist/src/core/chat/engine/history/compaction.js.map +0 -1
  421. package/dist/src/core/chat/engine/sessions/archive.d.ts +0 -19
  422. package/dist/src/core/chat/engine/sessions/archive.d.ts.map +0 -1
  423. package/dist/src/core/chat/engine/sessions/archive.js +0 -129
  424. package/dist/src/core/chat/engine/sessions/archive.js.map +0 -1
  425. package/dist/src/core/chat/engine/sessions/conversation-lines.d.ts +0 -4
  426. package/dist/src/core/chat/engine/sessions/conversation-lines.d.ts.map +0 -1
  427. package/dist/src/core/chat/engine/sessions/conversation-lines.js +0 -26
  428. package/dist/src/core/chat/engine/sessions/conversation-lines.js.map +0 -1
  429. package/dist/src/core/chat/engine/sessions/lease.d.ts +0 -23
  430. package/dist/src/core/chat/engine/sessions/lease.d.ts.map +0 -1
  431. package/dist/src/core/chat/engine/sessions/lease.js +0 -72
  432. package/dist/src/core/chat/engine/sessions/lease.js.map +0 -1
  433. package/dist/src/core/chat/engine/sessions/session-record.d.ts +0 -15
  434. package/dist/src/core/chat/engine/sessions/session-record.d.ts.map +0 -1
  435. package/dist/src/core/chat/engine/sessions/session-record.js +0 -59
  436. package/dist/src/core/chat/engine/sessions/session-record.js.map +0 -1
  437. package/dist/src/core/chat/engine/sessions/title.d.ts +0 -15
  438. package/dist/src/core/chat/engine/sessions/title.d.ts.map +0 -1
  439. package/dist/src/core/chat/engine/sessions/title.js +0 -17
  440. package/dist/src/core/chat/engine/sessions/title.js.map +0 -1
  441. package/dist/src/core/chat/engine/turns/context.d.ts +0 -25
  442. package/dist/src/core/chat/engine/turns/context.d.ts.map +0 -1
  443. package/dist/src/core/chat/engine/turns/context.js +0 -42
  444. package/dist/src/core/chat/engine/turns/context.js.map +0 -1
  445. package/dist/src/core/chat/engine/turns/host-bridge.d.ts +0 -37
  446. package/dist/src/core/chat/engine/turns/host-bridge.d.ts.map +0 -1
  447. package/dist/src/core/chat/engine/turns/host-bridge.js +0 -20
  448. package/dist/src/core/chat/engine/turns/host-bridge.js.map +0 -1
  449. package/dist/src/core/chat/engine/turns/host.d.ts +0 -3
  450. package/dist/src/core/chat/engine/turns/host.d.ts.map +0 -1
  451. package/dist/src/core/chat/engine/turns/host.js +0 -42
  452. package/dist/src/core/chat/engine/turns/host.js.map +0 -1
  453. package/dist/src/core/chat/engine/turns/memory-maintenance.d.ts +0 -33
  454. package/dist/src/core/chat/engine/turns/memory-maintenance.d.ts.map +0 -1
  455. package/dist/src/core/chat/engine/turns/memory-maintenance.js +0 -121
  456. package/dist/src/core/chat/engine/turns/memory-maintenance.js.map +0 -1
  457. package/dist/src/core/chat/engine/turns/persistence.d.ts +0 -25
  458. package/dist/src/core/chat/engine/turns/persistence.d.ts.map +0 -1
  459. package/dist/src/core/chat/engine/turns/persistence.js +0 -46
  460. package/dist/src/core/chat/engine/turns/persistence.js.map +0 -1
  461. package/dist/src/core/chat/engine/turns/preflight.d.ts +0 -56
  462. package/dist/src/core/chat/engine/turns/preflight.d.ts.map +0 -1
  463. package/dist/src/core/chat/engine/turns/preflight.js +0 -97
  464. package/dist/src/core/chat/engine/turns/preflight.js.map +0 -1
  465. package/dist/src/core/chat/engine/turns/result.d.ts +0 -38
  466. package/dist/src/core/chat/engine/turns/result.d.ts.map +0 -1
  467. package/dist/src/core/chat/engine/turns/result.js +0 -62
  468. package/dist/src/core/chat/engine/turns/result.js.map +0 -1
  469. package/dist/src/core/chat/engine/turns/run-conversation-turn.d.ts +0 -37
  470. package/dist/src/core/chat/engine/turns/run-conversation-turn.d.ts.map +0 -1
  471. package/dist/src/core/chat/engine/turns/run-conversation-turn.js +0 -126
  472. package/dist/src/core/chat/engine/turns/run-conversation-turn.js.map +0 -1
  473. package/dist/src/core/chat/engine/turns/runtime.d.ts +0 -28
  474. package/dist/src/core/chat/engine/turns/runtime.d.ts.map +0 -1
  475. package/dist/src/core/chat/engine/turns/runtime.js +0 -62
  476. package/dist/src/core/chat/engine/turns/runtime.js.map +0 -1
  477. package/dist/src/core/chat/engine/turns/trace.d.ts +0 -3
  478. package/dist/src/core/chat/engine/turns/trace.d.ts.map +0 -1
  479. package/dist/src/core/chat/engine/turns/trace.js +0 -9
  480. package/dist/src/core/chat/engine/turns/trace.js.map +0 -1
  481. package/dist/src/core/chat/failure-messages.d.ts +0 -6
  482. package/dist/src/core/chat/failure-messages.d.ts.map +0 -1
  483. package/dist/src/core/chat/failure-messages.js +0 -24
  484. package/dist/src/core/chat/failure-messages.js.map +0 -1
  485. package/dist/src/server/features/control-plane/services/ask.d.ts.map +0 -1
  486. package/dist/src/server/features/control-plane/services/ask.js +0 -66
  487. package/dist/src/server/features/control-plane/services/ask.js.map +0 -1
  488. package/dist/src/server/features/control-plane/services/chat-session-events.d.ts +0 -26
  489. package/dist/src/server/features/control-plane/services/chat-session-events.d.ts.map +0 -1
  490. package/dist/src/server/features/control-plane/services/chat-session-events.js +0 -61
  491. package/dist/src/server/features/control-plane/services/chat-session-events.js.map +0 -1
  492. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +0 -59
  493. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +0 -1
  494. package/dist/src/server/features/control-plane/services/chat-sessions.js +0 -661
  495. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +0 -1
  496. package/dist/src/server/features/control-plane/services/control-plane-state.d.ts +0 -4
  497. package/dist/src/server/features/control-plane/services/control-plane-state.d.ts.map +0 -1
  498. package/dist/src/server/features/control-plane/services/control-plane-state.js +0 -56
  499. package/dist/src/server/features/control-plane/services/control-plane-state.js.map +0 -1
  500. package/dist/src/server/features/control-plane/services/heartbeat.d.ts +0 -9
  501. package/dist/src/server/features/control-plane/services/heartbeat.d.ts.map +0 -1
  502. package/dist/src/server/features/control-plane/services/heartbeat.js +0 -57
  503. package/dist/src/server/features/control-plane/services/heartbeat.js.map +0 -1
  504. package/dist/src/server/features/control-plane/services/layout-snapshots.d.ts +0 -6
  505. package/dist/src/server/features/control-plane/services/layout-snapshots.d.ts.map +0 -1
  506. package/dist/src/server/features/control-plane/services/layout-snapshots.js +0 -68
  507. package/dist/src/server/features/control-plane/services/layout-snapshots.js.map +0 -1
  508. package/dist/src/server/features/control-plane/services/memory.d.ts +0 -22
  509. package/dist/src/server/features/control-plane/services/memory.d.ts.map +0 -1
  510. package/dist/src/server/features/control-plane/services/memory.js +0 -36
  511. package/dist/src/server/features/control-plane/services/memory.js.map +0 -1
  512. package/dist/src/server/features/control-plane/services/workspace-diff.d.ts +0 -4
  513. package/dist/src/server/features/control-plane/services/workspace-diff.d.ts.map +0 -1
  514. package/dist/src/server/features/control-plane/services/workspace-diff.js +0 -258
  515. package/dist/src/server/features/control-plane/services/workspace-diff.js.map +0 -1
  516. package/dist/src/server/features/control-plane/services/workspace-files.d.ts +0 -27
  517. package/dist/src/server/features/control-plane/services/workspace-files.d.ts.map +0 -1
  518. package/dist/src/server/features/control-plane/services/workspace-files.js +0 -137
  519. package/dist/src/server/features/control-plane/services/workspace-files.js.map +0 -1
@@ -1,661 +0,0 @@
1
- /**
2
- * Control-plane chat session application service.
3
- *
4
- * Current compromise:
5
- * some session create/update/read flows in this host service still call the
6
- * file session repository directly. The intended direction is for shared
7
- * session semantics to move into the core session service, with this layer
8
- * limited to control-plane-specific orchestration and projections.
9
- */
10
- import { EventEmitter } from 'node:events';
11
- import { existsSync, readFileSync } from 'node:fs';
12
- import { join } from 'node:path';
13
- import { createChatSession } from '../../../../core/chat/engine/sessions/session-record.js';
14
- import { readChatSession, readChatSessionCatalog, saveChatSessions } from '../../../../core/chat/engine/sessions/repository/file-chat-session-repository.js';
15
- import { DEFAULT_OPENAI_MODEL } from '../../../../core/config.js';
16
- import { credentialModeFromSource, resolveCompatibleActiveModel } from '../../../../core/llm/model-policy.js';
17
- import { inferProviderFromModel } from '../../../../core/llm/providers.js';
18
- import { parseUnifiedDiffFiles } from '../../../../core/review/diff-domain.js';
19
- import { hasProviderCredentialForModel, resolveProviderCredentialSourceForModel } from '../../../../core/runtime/api-keys.js';
20
- import { buildConversationMessages } from '../../../../core/chat/engine/sessions/conversation-lines.js';
21
- import { runConversationTurn } from '../../../../core/chat/engine/index.js';
22
- import { requestToolApproval } from '../../../../core/approvals/surface.js';
23
- import { createControlPlanePendingApprovalView, createControlPlaneSessionEventPublisher, } from './chat-session-events.js';
24
- export function createControlPlaneChatSession(args) {
25
- const existing = readChatSessionViews(args.sessionStoragePath);
26
- const nextNumber = existing.length + 1;
27
- const model = resolveControlPlaneSessionCreationModel(args);
28
- const credentialRuntime = {
29
- preferApiKey: args.preferApiKey,
30
- credentialStorePath: args.credentialStorePath,
31
- };
32
- const session = createChatSession({
33
- id: `session-${Date.now()}`,
34
- name: args.suggestedName?.trim() || `Session ${nextNumber}`,
35
- apiKeyPresent: args.apiKeyPresent ?? hasProviderCredentialForModel(model, credentialRuntime),
36
- model,
37
- workspaceId: args.workspaceId,
38
- });
39
- const currentSessions = readChatSessionCatalog(args.sessionStoragePath)
40
- .map((entry) => readChatSession(args.sessionStoragePath, entry.id, hasProviderCredentialForModel(model, credentialRuntime)))
41
- .filter((candidate) => Boolean(candidate));
42
- saveChatSessions(args.sessionStoragePath, [session, ...currentSessions]);
43
- return projectChatSessionDetail(session)[0];
44
- }
45
- function resolveControlPlaneSessionCreationModel(args) {
46
- const activeModel = firstNonEmpty(args.model, process.env.OPENAI_MODEL, process.env.ANTHROPIC_MODEL) ?? DEFAULT_OPENAI_MODEL;
47
- const provider = inferProviderFromModel(activeModel);
48
- const credentialMode = credentialModeFromSource(resolveProviderCredentialSourceForModel(activeModel, {
49
- preferApiKey: args.preferApiKey,
50
- credentialStorePath: args.credentialStorePath,
51
- }));
52
- return resolveCompatibleActiveModel({
53
- activeModel,
54
- provider,
55
- credentialMode,
56
- }).model;
57
- }
58
- function firstNonEmpty(...values) {
59
- return values.find((value) => typeof value === 'string' && value.trim().length > 0);
60
- }
61
- export function updateControlPlaneChatSessionSettings(args) {
62
- const currentSessions = readChatSessionCatalog(args.sessionStoragePath)
63
- .map((entry) => readChatSession(args.sessionStoragePath, entry.id, true))
64
- .filter((candidate) => Boolean(candidate));
65
- const nextSessions = currentSessions.map((session) => (session.id === args.sessionId ?
66
- {
67
- ...session,
68
- model: args.model ?? session.model,
69
- reasoningEffort: args.reasoningEffort === null ? undefined : args.reasoningEffort ?? session.reasoningEffort,
70
- driftEnabled: args.driftEnabled ?? session.driftEnabled,
71
- updatedAt: new Date().toISOString(),
72
- }
73
- : session));
74
- const updated = nextSessions.find((session) => session.id === args.sessionId);
75
- if (!updated) {
76
- throw new Error(`Chat session not found: ${args.sessionId}`);
77
- }
78
- saveChatSessions(args.sessionStoragePath, nextSessions);
79
- return projectChatSessionDetail(updated)[0];
80
- }
81
- const sessionEventBus = new EventEmitter();
82
- const pendingApprovals = new Map();
83
- const inFlightRuns = new Map();
84
- export async function submitChatPrompt(args) {
85
- if (inFlightRuns.has(args.sessionId)) {
86
- throw new Error('A run is already in progress for this session.');
87
- }
88
- if (process.env.HEDDLE_E2E_FAKE_AGENT === '1') {
89
- return runFakeE2eSessionPrompt(args);
90
- }
91
- const controller = new AbortController();
92
- inFlightRuns.set(args.sessionId, controller);
93
- const events = createControlPlaneSessionEventPublisher({
94
- eventBus: sessionEventBus,
95
- sessionId: args.sessionId,
96
- });
97
- try {
98
- const result = await runConversationTurn({
99
- workspaceRoot: args.workspaceRoot,
100
- stateRoot: args.stateRoot,
101
- sessionStoragePath: args.sessionStoragePath,
102
- traceDir: join(args.stateRoot, 'traces'),
103
- sessionId: args.sessionId,
104
- prompt: args.continuePrompt ?? args.prompt,
105
- apiKey: args.apiKey,
106
- preferApiKey: args.preferApiKey,
107
- systemContext: args.systemContext,
108
- memoryMaintenanceMode: args.memoryMaintenanceMode,
109
- abortSignal: controller.signal,
110
- leaseOwner: args.leaseOwner,
111
- host: {
112
- events: {
113
- onAgentLoopEvent: events.hostPort.events?.onAgentLoopEvent,
114
- },
115
- compaction: {
116
- onPreflightCompactionStatus: events.hostPort.compaction?.onPreflightCompactionStatus,
117
- onFinalCompactionStatus: events.hostPort.compaction?.onFinalCompactionStatus,
118
- },
119
- approvals: {
120
- requestToolApproval: async ({ call, tool }) => {
121
- const decision = await requestToolApproval({
122
- call,
123
- tool,
124
- createView: createControlPlanePendingApprovalView,
125
- storePending: ({ view, resolve }) => {
126
- pendingApprovals.set(args.sessionId, {
127
- approval: view,
128
- resolve,
129
- });
130
- },
131
- publish: (_view, callForEvent) => {
132
- events.publishApprovalRequested(callForEvent);
133
- },
134
- });
135
- pendingApprovals.delete(args.sessionId);
136
- return decision;
137
- },
138
- },
139
- },
140
- });
141
- return {
142
- ...result,
143
- session: projectChatSessionDetail(result.session)[0] ?? null,
144
- };
145
- }
146
- finally {
147
- pendingApprovals.delete(args.sessionId);
148
- inFlightRuns.delete(args.sessionId);
149
- }
150
- }
151
- export async function continueChatPrompt(args) {
152
- const session = readChatSession(args.sessionStoragePath, args.sessionId, true);
153
- if (!session) {
154
- throw new Error(`Chat session not found: ${args.sessionId}`);
155
- }
156
- if (!session.history.length || !session.lastContinuePrompt) {
157
- throw new Error('There is no interrupted or prior run to continue yet.');
158
- }
159
- return await submitChatPrompt({
160
- ...args,
161
- prompt: 'Continue from where you left off.',
162
- continuePrompt: session.lastContinuePrompt,
163
- });
164
- }
165
- async function runFakeE2eSessionPrompt(args) {
166
- const session = readChatSession(args.sessionStoragePath, args.sessionId, true);
167
- if (!session) {
168
- throw new Error(`Chat session not found: ${args.sessionId}`);
169
- }
170
- const timestamp = new Date().toISOString();
171
- const assistantText = `Mocked E2E agent response: ${args.prompt}`;
172
- const nextHistory = [
173
- ...session.history,
174
- { role: 'user', content: args.prompt },
175
- { role: 'assistant', content: assistantText },
176
- ];
177
- const nextTurn = {
178
- id: `e2e-turn-${Date.now()}`,
179
- prompt: args.prompt,
180
- outcome: 'done',
181
- summary: assistantText,
182
- steps: 1,
183
- traceFile: 'e2e-fake-trace.jsonl',
184
- events: ['Mocked E2E session run completed.'],
185
- };
186
- const updatedSession = {
187
- ...session,
188
- history: nextHistory,
189
- messages: buildConversationMessages(nextHistory),
190
- turns: [...session.turns, nextTurn].slice(-8),
191
- updatedAt: timestamp,
192
- lastContinuePrompt: args.prompt,
193
- lease: undefined,
194
- };
195
- saveChatSessions(args.sessionStoragePath, readChatSessionCatalog(args.sessionStoragePath)
196
- .map((entry) => readChatSession(args.sessionStoragePath, entry.id, true))
197
- .filter((candidate) => Boolean(candidate))
198
- .map((candidate) => candidate.id === session.id ? updatedSession : candidate));
199
- sessionEventBus.emit(args.sessionId, {
200
- sessionId: args.sessionId,
201
- timestamp,
202
- event: {
203
- type: 'trace',
204
- runId: `e2e-${args.sessionId}`,
205
- timestamp,
206
- event: {
207
- type: 'run.finished',
208
- outcome: 'done',
209
- summary: assistantText,
210
- step: 1,
211
- timestamp,
212
- },
213
- },
214
- });
215
- return {
216
- outcome: 'done',
217
- summary: assistantText,
218
- session: projectChatSessionDetail(updatedSession)[0] ?? null,
219
- };
220
- }
221
- export function subscribeToControlPlaneSessionEvents(sessionId, listener) {
222
- sessionEventBus.on(sessionId, listener);
223
- return () => {
224
- sessionEventBus.off(sessionId, listener);
225
- };
226
- }
227
- export function getPendingControlPlaneApproval(sessionId) {
228
- return pendingApprovals.get(sessionId)?.approval;
229
- }
230
- export function isControlPlaneSessionRunning(sessionId) {
231
- return inFlightRuns.has(sessionId);
232
- }
233
- export function cancelControlPlaneSessionRun(sessionId) {
234
- const controller = inFlightRuns.get(sessionId);
235
- if (!controller) {
236
- return false;
237
- }
238
- controller.abort();
239
- pendingApprovals.delete(sessionId);
240
- return true;
241
- }
242
- export function resolvePendingControlPlaneApproval(sessionId, decision) {
243
- const pending = pendingApprovals.get(sessionId);
244
- if (!pending) {
245
- return false;
246
- }
247
- pendingApprovals.delete(sessionId);
248
- pending.resolve(decision);
249
- return true;
250
- }
251
- export function readChatSessionViews(sessionStoragePath) {
252
- return readChatSessionCatalog(sessionStoragePath)
253
- .flatMap(projectChatSessionView)
254
- .sort((left, right) => (right.updatedAt ?? '').localeCompare(left.updatedAt ?? ''));
255
- }
256
- export function readChatSessionDetail(sessionStoragePath, id) {
257
- const session = readChatSession(sessionStoragePath, id, true);
258
- return session ? projectChatSessionDetail(session)[0] : undefined;
259
- }
260
- export function readChatTurnReview(sessionStoragePath, sessionId, turnId) {
261
- const session = readChatSessionDetail(sessionStoragePath, sessionId);
262
- const turn = session?.turns.find((candidate) => candidate.id === turnId);
263
- if (!turn) {
264
- return undefined;
265
- }
266
- return loadChatTurnReview(turn.traceFile);
267
- }
268
- export function resolveChatSessionFilePath(stateRoot, sessionId) {
269
- return join(stateRoot, 'chat-sessions', `${sessionId}.json`);
270
- }
271
- export function projectChatSessionView(raw) {
272
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
273
- return [];
274
- }
275
- const candidate = raw;
276
- const id = typeof candidate.id === 'string' ? candidate.id : undefined;
277
- const name = typeof candidate.name === 'string' ? candidate.name : undefined;
278
- if (!id || !name) {
279
- return [];
280
- }
281
- const turns = Array.isArray(candidate.turns) ? candidate.turns : [];
282
- const messages = Array.isArray(candidate.messages) ? candidate.messages : [];
283
- const lastTurn = readObject(turns.at(-1));
284
- const context = readObject(candidate.context);
285
- const archives = Array.isArray(candidate.archives) ? candidate.archives.map(readObject).filter(Boolean) : [];
286
- const rawCompactionStatus = readString(context?.compactionStatus);
287
- const compactionStatus = rawCompactionStatus === 'idle' || rawCompactionStatus === 'running' || rawCompactionStatus === 'failed' ?
288
- rawCompactionStatus
289
- : undefined;
290
- const contextView = context ?
291
- omitUndefined({
292
- estimatedHistoryTokens: readNumber(context.estimatedHistoryTokens),
293
- estimatedRequestTokens: readNumber(context.estimatedRequestTokens),
294
- lastRunInputTokens: readNumber(context.lastRunInputTokens),
295
- lastRunOutputTokens: readNumber(context.lastRunOutputTokens),
296
- lastRunTotalTokens: readNumber(context.lastRunTotalTokens),
297
- compactedMessages: readNumber(context.compactedMessages),
298
- compactedAt: readString(context.compactedAt),
299
- compactionStatus,
300
- compactionError: readString(context.compactionError),
301
- archiveCount: readNumber(context.archiveCount),
302
- currentSummaryPath: readString(context.currentSummaryPath),
303
- lastArchivePath: readString(context.lastArchivePath),
304
- })
305
- : undefined;
306
- const archiveViews = archives.flatMap((archive) => {
307
- const archiveObject = readObject(archive);
308
- if (!archiveObject) {
309
- return [];
310
- }
311
- const id = readString(archiveObject.id);
312
- const path = readString(archiveObject.path);
313
- const summaryPath = readString(archiveObject.summaryPath);
314
- const messageCount = readNumber(archiveObject.messageCount);
315
- const createdAt = readString(archiveObject.createdAt);
316
- if (!id || !path || !summaryPath || messageCount === undefined || !createdAt) {
317
- return [];
318
- }
319
- return [omitUndefined({
320
- id,
321
- path,
322
- summaryPath,
323
- shortDescription: readString(archiveObject.shortDescription),
324
- messageCount,
325
- createdAt,
326
- summaryModel: readString(archiveObject.summaryModel),
327
- })];
328
- });
329
- return [omitUndefined({
330
- id,
331
- name,
332
- workspaceId: readString(candidate.workspaceId),
333
- createdAt: readString(candidate.createdAt),
334
- updatedAt: readString(candidate.updatedAt),
335
- model: readString(candidate.model),
336
- reasoningEffort: readReasoningEffort(candidate.reasoningEffort),
337
- driftEnabled: typeof candidate.driftEnabled === 'boolean' ? candidate.driftEnabled : undefined,
338
- driftLevel: readLatestDriftLevel(turns),
339
- messageCount: messages.length,
340
- turnCount: turns.length,
341
- lastPrompt: readString(lastTurn?.prompt),
342
- lastOutcome: readString(lastTurn?.outcome),
343
- lastSummary: readString(lastTurn?.summary),
344
- context: contextView && Object.keys(contextView).length > 0 ? contextView : undefined,
345
- archives: archiveViews.length > 0 ? archiveViews : undefined,
346
- })];
347
- }
348
- function readReasoningEffort(value) {
349
- return value === 'low' || value === 'medium' || value === 'high' || value === 'ultrahigh' ? value : undefined;
350
- }
351
- function readLatestDriftLevel(turns) {
352
- for (let index = turns.length - 1; index >= 0; index--) {
353
- const turn = readObject(turns[index]);
354
- const traceFile = readString(turn?.traceFile);
355
- const driftLevel = traceFile ? readLatestDriftLevelFromTrace(traceFile) : undefined;
356
- if (driftLevel) {
357
- return driftLevel;
358
- }
359
- }
360
- return undefined;
361
- }
362
- function omitUndefined(value) {
363
- return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
364
- }
365
- function readLatestDriftLevelFromTrace(traceFile) {
366
- if (!traceFile || !existsSync(traceFile)) {
367
- return undefined;
368
- }
369
- try {
370
- const parsed = JSON.parse(readFileSync(traceFile, 'utf8'));
371
- if (!Array.isArray(parsed)) {
372
- return undefined;
373
- }
374
- for (let index = parsed.length - 1; index >= 0; index--) {
375
- const event = readObject(parsed[index]);
376
- if (event?.type !== 'cyberloop.annotation') {
377
- continue;
378
- }
379
- const driftLevel = readString(event.driftLevel);
380
- if (driftLevel === 'unknown' || driftLevel === 'low' || driftLevel === 'medium' || driftLevel === 'high') {
381
- return driftLevel;
382
- }
383
- }
384
- }
385
- catch {
386
- return undefined;
387
- }
388
- return undefined;
389
- }
390
- export function projectChatSessionDetail(raw) {
391
- const base = projectChatSessionView(raw)[0];
392
- if (!base || !raw || typeof raw !== 'object' || Array.isArray(raw)) {
393
- return [];
394
- }
395
- const candidate = raw;
396
- const messages = Array.isArray(candidate.messages) ? candidate.messages.flatMap(projectChatSessionMessage) : [];
397
- const turns = Array.isArray(candidate.turns) ? candidate.turns.flatMap(projectChatTurnView) : [];
398
- return [{
399
- ...base,
400
- messages,
401
- turns,
402
- lastContinuePrompt: readString(candidate.lastContinuePrompt),
403
- }];
404
- }
405
- function projectChatSessionMessage(raw) {
406
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
407
- return [];
408
- }
409
- const candidate = raw;
410
- const id = readString(candidate.id);
411
- const role = candidate.role === 'user' || candidate.role === 'assistant' ? candidate.role : undefined;
412
- const text = readString(candidate.text);
413
- if (!id || !role || !text) {
414
- return [];
415
- }
416
- return [{
417
- id,
418
- role,
419
- text,
420
- isStreaming: readBoolean(candidate.isStreaming),
421
- isPending: readBoolean(candidate.isPending),
422
- }];
423
- }
424
- function projectChatTurnView(raw) {
425
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
426
- return [];
427
- }
428
- const candidate = raw;
429
- const id = readString(candidate.id);
430
- const prompt = readString(candidate.prompt);
431
- const outcome = readString(candidate.outcome);
432
- const summary = readString(candidate.summary);
433
- const traceFile = readString(candidate.traceFile);
434
- const steps = readNumber(candidate.steps);
435
- const events = Array.isArray(candidate.events) ? candidate.events.filter((event) => typeof event === 'string') : [];
436
- if (!id || !prompt || !outcome || !summary || !traceFile || steps === undefined) {
437
- return [];
438
- }
439
- return [{
440
- id,
441
- prompt,
442
- outcome,
443
- summary,
444
- steps,
445
- traceFile,
446
- events,
447
- }];
448
- }
449
- function loadChatTurnReview(traceFile) {
450
- if (!traceFile || !existsSync(traceFile)) {
451
- return undefined;
452
- }
453
- try {
454
- const parsed = JSON.parse(readFileSync(traceFile, 'utf8'));
455
- if (!Array.isArray(parsed)) {
456
- return undefined;
457
- }
458
- const reviewCommands = [];
459
- const verificationCommands = [];
460
- const mutationCommands = [];
461
- const approvals = [];
462
- const files = new Map();
463
- let diffExcerpt;
464
- let finalSummary;
465
- for (const entry of parsed) {
466
- const event = readObject(entry);
467
- const type = readString(event?.type);
468
- if (!event || !type) {
469
- continue;
470
- }
471
- if (type === 'tool.result') {
472
- const tool = readString(event.tool) ?? 'unknown';
473
- const result = readObject(event.result);
474
- if (tool === 'edit_file' && readBoolean(result?.ok) === true) {
475
- const output = readObject(result?.output);
476
- const file = projectEditFileReview(output);
477
- if (file) {
478
- addChangedFile(files, file);
479
- }
480
- }
481
- const output = readObject(result?.output);
482
- const evidence = output ? projectCommandEvidence(tool, output) : undefined;
483
- if (!evidence) {
484
- continue;
485
- }
486
- if (isReviewCommand(evidence.command)) {
487
- reviewCommands.push(evidence);
488
- if (!diffExcerpt && /^git diff(?:\s|$)/.test(evidence.command) && evidence.stdout) {
489
- diffExcerpt = evidence.stdout;
490
- }
491
- if (/^git diff(?:\s|$)/.test(evidence.command) && evidence.stdout) {
492
- for (const file of parseGitDiffFiles(evidence.stdout)) {
493
- addChangedFile(files, file);
494
- }
495
- }
496
- continue;
497
- }
498
- if (isVerificationCommand(evidence.command)) {
499
- verificationCommands.push(evidence);
500
- continue;
501
- }
502
- if (tool === 'run_shell_mutate') {
503
- mutationCommands.push(evidence);
504
- }
505
- continue;
506
- }
507
- if (type === 'tool.call') {
508
- const call = readObject(event.call);
509
- const tool = readString(call?.tool);
510
- if (tool !== 'edit_file') {
511
- continue;
512
- }
513
- const input = readObject(call?.input);
514
- const path = readString(input?.path);
515
- mutationCommands.push({
516
- tool,
517
- command: path ? `edit_file ${path}` : 'edit_file',
518
- });
519
- continue;
520
- }
521
- if (type === 'tool.approval_resolved') {
522
- const call = readObject(event.call);
523
- const tool = readString(call?.tool);
524
- if (!tool) {
525
- continue;
526
- }
527
- const input = readObject(call?.input);
528
- approvals.push({
529
- tool,
530
- command: readString(input?.command) ?? readString(input?.path),
531
- approved: readBoolean(event.approved) ?? false,
532
- reason: readString(event.reason),
533
- timestamp: readString(event.timestamp),
534
- });
535
- continue;
536
- }
537
- if (type === 'run.finished') {
538
- finalSummary = readString(event.summary) ?? finalSummary;
539
- }
540
- }
541
- return {
542
- traceFile,
543
- diffExcerpt,
544
- finalSummary,
545
- files: [...files.values()],
546
- reviewCommands: dedupeEvidence(reviewCommands),
547
- verificationCommands: dedupeEvidence(verificationCommands),
548
- mutationCommands: dedupeEvidence(mutationCommands),
549
- approvals,
550
- };
551
- }
552
- catch {
553
- return undefined;
554
- }
555
- }
556
- function projectCommandEvidence(tool, output) {
557
- const command = readString(output.command);
558
- if (!command) {
559
- return undefined;
560
- }
561
- return {
562
- tool,
563
- command,
564
- exitCode: readNumber(output.exitCode),
565
- stdout: normalizeCommandText(readString(output.stdout)),
566
- stderr: normalizeCommandText(readString(output.stderr)),
567
- };
568
- }
569
- function dedupeEvidence(evidence) {
570
- const seen = new Set();
571
- return evidence.filter((entry) => {
572
- const key = `${entry.tool}:${entry.command}`;
573
- if (seen.has(key)) {
574
- return false;
575
- }
576
- seen.add(key);
577
- return true;
578
- });
579
- }
580
- function isReviewCommand(command) {
581
- return /^git (?:status\b|diff\b|show\b|branch\b|remote\b)/.test(command);
582
- }
583
- function isVerificationCommand(command) {
584
- return /^(?:yarn|npm|pnpm|bun|vitest|jest|tsx|tsc|go test|cargo test|pytest|ruff|eslint)\b/.test(command);
585
- }
586
- function projectEditFileReview(output) {
587
- if (!output) {
588
- return undefined;
589
- }
590
- const path = readString(output.path);
591
- const diff = readObject(output.diff);
592
- const patch = normalizeCommandText(readString(diff?.diff));
593
- if (!path) {
594
- return undefined;
595
- }
596
- return {
597
- path,
598
- status: statusFromEditAction(readString(output.action)),
599
- source: 'edit_file',
600
- patch,
601
- diff: patch ? parseUnifiedDiffFiles(patch).find((file) => file.path === path || file.oldPath === path) : undefined,
602
- truncated: readBoolean(diff?.truncated),
603
- };
604
- }
605
- function statusFromEditAction(action) {
606
- switch (action) {
607
- case 'created':
608
- return 'added';
609
- case 'overwritten':
610
- case 'replaced':
611
- return 'modified';
612
- default:
613
- return 'unknown';
614
- }
615
- }
616
- function parseGitDiffFiles(diff) {
617
- return parseUnifiedDiffFiles(diff).map((file) => ({
618
- path: file.path,
619
- status: file.status === 'copied' ? 'modified' : file.status,
620
- source: 'git_diff',
621
- patch: normalizeCommandText(file.patch),
622
- diff: file,
623
- truncated: file.binary === true,
624
- }));
625
- }
626
- function addChangedFile(files, file) {
627
- const existing = files.get(file.path);
628
- if (!existing) {
629
- files.set(file.path, file);
630
- return;
631
- }
632
- if (existing.source === 'edit_file') {
633
- return;
634
- }
635
- if (file.source === 'edit_file' || (!existing.patch && file.patch)) {
636
- files.set(file.path, file);
637
- }
638
- }
639
- function normalizeCommandText(value) {
640
- if (!value) {
641
- return undefined;
642
- }
643
- const trimmed = value.trim();
644
- if (!trimmed) {
645
- return undefined;
646
- }
647
- return trimmed.length > 2400 ? `${trimmed.slice(0, 2399)}…` : trimmed;
648
- }
649
- function readObject(value) {
650
- return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
651
- }
652
- function readString(value) {
653
- return typeof value === 'string' ? value : undefined;
654
- }
655
- function readBoolean(value) {
656
- return typeof value === 'boolean' ? value : undefined;
657
- }
658
- function readNumber(value) {
659
- return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
660
- }
661
- //# sourceMappingURL=chat-sessions.js.map