@dexto/core 1.7.2 → 1.8.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 (533) hide show
  1. package/dist/agent/DextoAgent.cjs +157 -62
  2. package/dist/agent/DextoAgent.d.ts +71 -17
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +161 -63
  5. package/dist/agent/agent-options.d.ts +6 -10
  6. package/dist/agent/agent-options.d.ts.map +1 -1
  7. package/dist/agent/agentCard.js +1 -1
  8. package/dist/agent/error-codes.js +1 -1
  9. package/dist/agent/errors.js +1 -1
  10. package/dist/agent/index.d.ts +1 -0
  11. package/dist/agent/index.d.ts.map +1 -1
  12. package/dist/agent/index.js +1 -1
  13. package/dist/agent/schemas.d.ts +2 -2
  14. package/dist/agent/schemas.js +1 -1
  15. package/dist/agent/state-manager.js +1 -1
  16. package/dist/approval/error-codes.cjs +1 -1
  17. package/dist/approval/error-codes.d.ts +1 -1
  18. package/dist/approval/error-codes.d.ts.map +1 -1
  19. package/dist/approval/error-codes.js +2 -2
  20. package/dist/approval/errors.cjs +2 -5
  21. package/dist/approval/errors.d.ts.map +1 -1
  22. package/dist/approval/errors.js +3 -6
  23. package/dist/approval/factory.cjs +19 -4
  24. package/dist/approval/factory.d.ts +4 -1
  25. package/dist/approval/factory.d.ts.map +1 -1
  26. package/dist/approval/factory.js +19 -5
  27. package/dist/approval/index.d.ts +1 -1
  28. package/dist/approval/index.d.ts.map +1 -1
  29. package/dist/approval/index.js +1 -1
  30. package/dist/approval/manager.cjs +168 -26
  31. package/dist/approval/manager.d.ts +46 -12
  32. package/dist/approval/manager.d.ts.map +1 -1
  33. package/dist/approval/manager.js +177 -29
  34. package/dist/approval/schemas.cjs +26 -26
  35. package/dist/approval/schemas.d.ts +29 -29
  36. package/dist/approval/schemas.d.ts.map +1 -1
  37. package/dist/approval/schemas.js +23 -23
  38. package/dist/approval/types.cjs +5 -5
  39. package/dist/approval/types.d.ts +18 -18
  40. package/dist/approval/types.d.ts.map +1 -1
  41. package/dist/approval/types.js +6 -6
  42. package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
  43. package/dist/config/index.cjs +75 -0
  44. package/dist/config/index.d.ts +15 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +50 -0
  47. package/dist/context/compaction/overflow.js +1 -1
  48. package/dist/context/compaction/strategies/noop.js +1 -1
  49. package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
  50. package/dist/context/content-clone.cjs +131 -0
  51. package/dist/context/content-clone.d.ts +7 -0
  52. package/dist/context/content-clone.d.ts.map +1 -0
  53. package/dist/context/content-clone.js +104 -0
  54. package/dist/context/error-codes.js +1 -1
  55. package/dist/context/errors.js +1 -1
  56. package/dist/context/index.cjs +2 -0
  57. package/dist/context/index.d.ts +1 -0
  58. package/dist/context/index.d.ts.map +1 -1
  59. package/dist/context/index.js +2 -1
  60. package/dist/context/manager.cjs +44 -33
  61. package/dist/context/manager.d.ts +7 -7
  62. package/dist/context/manager.d.ts.map +1 -1
  63. package/dist/context/manager.js +45 -34
  64. package/dist/context/media-helpers.js +1 -1
  65. package/dist/context/schemas.cjs +77 -0
  66. package/dist/context/schemas.d.ts +5 -0
  67. package/dist/context/schemas.d.ts.map +1 -0
  68. package/dist/context/schemas.js +53 -0
  69. package/dist/context/types.js +1 -1
  70. package/dist/context/utils.cjs +70 -69
  71. package/dist/context/utils.d.ts +3 -3
  72. package/dist/context/utils.d.ts.map +1 -1
  73. package/dist/context/utils.js +71 -70
  74. package/dist/errors/DextoBaseError.js +1 -1
  75. package/dist/errors/DextoRuntimeError.js +1 -1
  76. package/dist/errors/DextoValidationError.js +1 -1
  77. package/dist/errors/index.js +1 -1
  78. package/dist/errors/result-bridge.js +1 -1
  79. package/dist/errors/types.js +1 -1
  80. package/dist/events/index.cjs +9 -1
  81. package/dist/events/index.d.ts +20 -8
  82. package/dist/events/index.d.ts.map +1 -1
  83. package/dist/events/index.js +10 -2
  84. package/dist/hooks/builtins/content-policy.js +1 -1
  85. package/dist/hooks/builtins/response-sanitizer.js +1 -1
  86. package/dist/hooks/error-codes.js +1 -1
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/hooks/manager.cjs +1 -1
  89. package/dist/hooks/manager.d.ts +2 -2
  90. package/dist/hooks/manager.d.ts.map +1 -1
  91. package/dist/hooks/manager.js +2 -2
  92. package/dist/hooks/types.d.ts +2 -2
  93. package/dist/hooks/types.d.ts.map +1 -1
  94. package/dist/index.browser.js +1 -1
  95. package/dist/index.cjs +2 -0
  96. package/dist/index.d.ts +1 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +2 -1
  99. package/dist/llm/curation-config.js +1 -1
  100. package/dist/llm/curation.js +1 -1
  101. package/dist/llm/error-codes.js +1 -1
  102. package/dist/llm/errors.js +1 -1
  103. package/dist/llm/executor/index.cjs +32 -0
  104. package/dist/llm/executor/index.d.ts +2 -0
  105. package/dist/llm/executor/index.d.ts.map +1 -0
  106. package/dist/llm/executor/index.js +11 -0
  107. package/dist/llm/executor/provider-options.js +1 -1
  108. package/dist/llm/executor/stream-processor.cjs +28 -139
  109. package/dist/llm/executor/stream-processor.d.ts +2 -13
  110. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  111. package/dist/llm/executor/stream-processor.js +29 -140
  112. package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
  113. package/dist/llm/executor/tool-definitions.d.ts +4 -0
  114. package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
  115. package/dist/llm/executor/tool-definitions.js +22 -0
  116. package/dist/llm/executor/tool-output-truncator.js +1 -1
  117. package/dist/llm/executor/turn-executor.cjs +1093 -458
  118. package/dist/llm/executor/turn-executor.d.ts +269 -43
  119. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  120. package/dist/llm/executor/turn-executor.js +1079 -405
  121. package/dist/llm/executor/types.d.ts +6 -0
  122. package/dist/llm/executor/types.d.ts.map +1 -1
  123. package/dist/llm/formatters/vercel.js +1 -1
  124. package/dist/llm/index.cjs +2 -0
  125. package/dist/llm/index.d.ts +1 -0
  126. package/dist/llm/index.d.ts.map +1 -1
  127. package/dist/llm/index.js +2 -1
  128. package/dist/llm/providers/codex-app-server.cjs +22 -2
  129. package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
  130. package/dist/llm/providers/codex-app-server.js +23 -3
  131. package/dist/llm/providers/codex-base-url.js +1 -1
  132. package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
  133. package/dist/llm/providers/local/downloader.js +1 -1
  134. package/dist/llm/providers/local/error-codes.js +1 -1
  135. package/dist/llm/providers/local/errors.js +1 -1
  136. package/dist/llm/providers/local/gpu-detector.js +1 -1
  137. package/dist/llm/providers/local/index.js +1 -1
  138. package/dist/llm/providers/local/node-llama-provider.js +1 -1
  139. package/dist/llm/providers/local/ollama-provider.js +1 -1
  140. package/dist/llm/providers/local/registry.js +1 -1
  141. package/dist/llm/providers/local/schemas.js +1 -1
  142. package/dist/llm/providers/openrouter-model-registry.js +1 -1
  143. package/dist/llm/reasoning/anthropic-betas.js +1 -1
  144. package/dist/llm/reasoning/anthropic-thinking.js +1 -1
  145. package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
  146. package/dist/llm/reasoning/profile.js +1 -1
  147. package/dist/llm/reasoning/profiles/anthropic.js +1 -1
  148. package/dist/llm/reasoning/profiles/bedrock.js +1 -1
  149. package/dist/llm/reasoning/profiles/google.js +1 -1
  150. package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
  151. package/dist/llm/reasoning/profiles/openai.js +1 -1
  152. package/dist/llm/reasoning/profiles/openrouter.js +1 -1
  153. package/dist/llm/reasoning/profiles/shared.js +1 -1
  154. package/dist/llm/reasoning/profiles/vertex.js +1 -1
  155. package/dist/llm/registry/auto-update.js +1 -1
  156. package/dist/llm/registry/index.js +1 -1
  157. package/dist/llm/registry/models.generated.js +1 -1
  158. package/dist/llm/registry/models.manual.js +1 -1
  159. package/dist/llm/registry/sync.js +1 -1
  160. package/dist/llm/resolver.js +1 -1
  161. package/dist/llm/schemas.js +1 -1
  162. package/dist/llm/services/factory.cjs +5 -4
  163. package/dist/llm/services/factory.d.ts +3 -3
  164. package/dist/llm/services/factory.d.ts.map +1 -1
  165. package/dist/llm/services/factory.js +6 -5
  166. package/dist/llm/services/types.d.ts +10 -1
  167. package/dist/llm/services/types.d.ts.map +1 -1
  168. package/dist/llm/services/vercel.cjs +23 -8
  169. package/dist/llm/services/vercel.d.ts +11 -7
  170. package/dist/llm/services/vercel.d.ts.map +1 -1
  171. package/dist/llm/services/vercel.js +24 -9
  172. package/dist/llm/types.js +1 -1
  173. package/dist/llm/usage-metadata.cjs +20 -3
  174. package/dist/llm/usage-metadata.d.ts +1 -0
  175. package/dist/llm/usage-metadata.d.ts.map +1 -1
  176. package/dist/llm/usage-metadata.js +19 -3
  177. package/dist/llm/usage-scope.js +1 -1
  178. package/dist/llm/usage-summary.js +1 -1
  179. package/dist/llm/validation.js +1 -1
  180. package/dist/logger/browser.js +1 -1
  181. package/dist/logger/default-logger-factory.js +1 -1
  182. package/dist/logger/factory.js +1 -1
  183. package/dist/logger/index.js +1 -1
  184. package/dist/logger/logger.js +1 -1
  185. package/dist/logger/v2/dexto-logger.js +1 -1
  186. package/dist/logger/v2/error-codes.js +1 -1
  187. package/dist/logger/v2/errors.js +1 -1
  188. package/dist/logger/v2/schemas.js +1 -1
  189. package/dist/logger/v2/test-utils.js +1 -1
  190. package/dist/logger/v2/transport-factory.js +1 -1
  191. package/dist/logger/v2/transports/console-transport.js +1 -1
  192. package/dist/logger/v2/transports/file-transport.js +1 -1
  193. package/dist/logger/v2/transports/silent-transport.js +1 -1
  194. package/dist/logger/v2/types.js +1 -1
  195. package/dist/mcp/bundled-config.js +1 -1
  196. package/dist/mcp/error-codes.js +1 -1
  197. package/dist/mcp/errors.js +1 -1
  198. package/dist/mcp/index.js +1 -1
  199. package/dist/mcp/manager.js +1 -1
  200. package/dist/mcp/mcp-client.js +1 -1
  201. package/dist/mcp/resolver.js +1 -1
  202. package/dist/mcp/schemas.js +1 -1
  203. package/dist/memory/error-codes.js +1 -1
  204. package/dist/memory/errors.js +1 -1
  205. package/dist/memory/index.js +1 -1
  206. package/dist/memory/manager.cjs +7 -27
  207. package/dist/memory/manager.d.ts +4 -12
  208. package/dist/memory/manager.d.ts.map +1 -1
  209. package/dist/memory/manager.js +8 -28
  210. package/dist/memory/schemas.js +1 -1
  211. package/dist/prompts/error-codes.js +1 -1
  212. package/dist/prompts/errors.js +1 -1
  213. package/dist/prompts/index.js +1 -1
  214. package/dist/prompts/name-validation.js +1 -1
  215. package/dist/prompts/prompt-manager.cjs +9 -38
  216. package/dist/prompts/prompt-manager.d.ts +2 -10
  217. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  218. package/dist/prompts/prompt-manager.js +10 -39
  219. package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
  220. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  221. package/dist/prompts/providers/config-prompt-provider.js +9 -88
  222. package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
  223. package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
  224. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  225. package/dist/prompts/providers/custom-prompt-provider.js +22 -23
  226. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  227. package/dist/prompts/schemas.cjs +2 -24
  228. package/dist/prompts/schemas.d.ts +0 -52
  229. package/dist/prompts/schemas.d.ts.map +1 -1
  230. package/dist/prompts/schemas.js +3 -25
  231. package/dist/prompts/types.d.ts +5 -32
  232. package/dist/prompts/types.d.ts.map +1 -1
  233. package/dist/prompts/utils.js +1 -1
  234. package/dist/resources/agent-resources-provider.js +1 -1
  235. package/dist/resources/error-codes.js +1 -1
  236. package/dist/resources/errors.js +1 -1
  237. package/dist/resources/handlers/blob-handler.cjs +14 -11
  238. package/dist/resources/handlers/blob-handler.d.ts +4 -4
  239. package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
  240. package/dist/resources/handlers/blob-handler.js +15 -12
  241. package/dist/resources/handlers/factory.cjs +3 -3
  242. package/dist/resources/handlers/factory.js +4 -4
  243. package/dist/resources/handlers/filesystem-handler.js +1 -1
  244. package/dist/resources/handlers/types.d.ts +2 -2
  245. package/dist/resources/handlers/types.d.ts.map +1 -1
  246. package/dist/resources/index.js +1 -1
  247. package/dist/resources/manager.cjs +10 -7
  248. package/dist/resources/manager.d.ts +4 -4
  249. package/dist/resources/manager.d.ts.map +1 -1
  250. package/dist/resources/manager.js +11 -8
  251. package/dist/resources/reference-parser.js +1 -1
  252. package/dist/resources/schemas.cjs +1 -1
  253. package/dist/resources/schemas.d.ts +2 -2
  254. package/dist/resources/schemas.js +2 -2
  255. package/dist/runtime/host-runtime.js +1 -1
  256. package/dist/runtime/index.cjs +3 -0
  257. package/dist/runtime/index.d.ts +2 -0
  258. package/dist/runtime/index.d.ts.map +1 -1
  259. package/dist/runtime/index.js +3 -1
  260. package/dist/runtime/run-context.js +1 -1
  261. package/dist/search/index.js +1 -1
  262. package/dist/search/search-service.cjs +6 -13
  263. package/dist/search/search-service.d.ts +5 -3
  264. package/dist/search/search-service.d.ts.map +1 -1
  265. package/dist/search/search-service.js +7 -14
  266. package/dist/session/chat-session.cjs +264 -108
  267. package/dist/session/chat-session.d.ts +75 -21
  268. package/dist/session/chat-session.d.ts.map +1 -1
  269. package/dist/session/chat-session.js +268 -108
  270. package/dist/session/error-codes.js +1 -1
  271. package/dist/session/errors.js +1 -1
  272. package/dist/session/index.cjs +19 -2
  273. package/dist/session/index.d.ts +4 -3
  274. package/dist/session/index.d.ts.map +1 -1
  275. package/dist/session/index.js +19 -3
  276. package/dist/session/message-queue.cjs +82 -51
  277. package/dist/session/message-queue.d.ts +13 -8
  278. package/dist/session/message-queue.d.ts.map +1 -1
  279. package/dist/session/message-queue.js +83 -52
  280. package/dist/session/queue-clone.cjs +50 -0
  281. package/dist/session/queue-clone.d.ts +5 -0
  282. package/dist/session/queue-clone.d.ts.map +1 -0
  283. package/dist/session/queue-clone.js +25 -0
  284. package/dist/session/schemas.cjs +74 -2
  285. package/dist/session/schemas.d.ts +94 -0
  286. package/dist/session/schemas.d.ts.map +1 -1
  287. package/dist/session/schemas.js +69 -2
  288. package/dist/session/session-manager.cjs +107 -123
  289. package/dist/session/session-manager.d.ts +7 -6
  290. package/dist/session/session-manager.d.ts.map +1 -1
  291. package/dist/session/session-manager.js +108 -124
  292. package/dist/session/title-generator.cjs +14 -26
  293. package/dist/session/title-generator.d.ts +4 -6
  294. package/dist/session/title-generator.d.ts.map +1 -1
  295. package/dist/session/title-generator.js +16 -28
  296. package/dist/session/types.cjs +28 -0
  297. package/dist/session/types.d.ts +5 -1
  298. package/dist/session/types.d.ts.map +1 -1
  299. package/dist/session/types.js +19 -0
  300. package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
  301. package/dist/skills/index.d.ts +4 -0
  302. package/dist/skills/index.d.ts.map +1 -0
  303. package/dist/skills/index.js +7 -0
  304. package/dist/skills/skill-manager.cjs +76 -0
  305. package/dist/skills/skill-manager.d.ts +13 -0
  306. package/dist/skills/skill-manager.d.ts.map +1 -0
  307. package/dist/skills/skill-manager.js +53 -0
  308. package/dist/skills/types.d.ts +24 -0
  309. package/dist/skills/types.d.ts.map +1 -0
  310. package/dist/skills/workspace-skill-source.cjs +120 -0
  311. package/dist/skills/workspace-skill-source.d.ts +16 -0
  312. package/dist/skills/workspace-skill-source.d.ts.map +1 -0
  313. package/dist/skills/workspace-skill-source.js +97 -0
  314. package/dist/storage/approvals/types.cjs +38 -0
  315. package/dist/storage/approvals/types.d.ts +54 -0
  316. package/dist/storage/approvals/types.d.ts.map +1 -0
  317. package/dist/storage/approvals/types.js +14 -0
  318. package/dist/storage/artifacts/types.d.ts +73 -0
  319. package/dist/storage/artifacts/types.d.ts.map +1 -0
  320. package/dist/storage/conversation/database.cjs +233 -0
  321. package/dist/storage/conversation/database.d.ts +38 -0
  322. package/dist/storage/conversation/database.d.ts.map +1 -0
  323. package/dist/storage/conversation/database.js +210 -0
  324. package/dist/storage/conversation/types.cjs +16 -0
  325. package/dist/storage/conversation/types.d.ts +21 -0
  326. package/dist/storage/conversation/types.d.ts.map +1 -0
  327. package/dist/storage/conversation/types.js +0 -0
  328. package/dist/storage/database/types.d.ts +4 -0
  329. package/dist/storage/database/types.d.ts.map +1 -1
  330. package/dist/storage/error-codes.js +1 -1
  331. package/dist/storage/errors.cjs +6 -6
  332. package/dist/storage/errors.d.ts +2 -2
  333. package/dist/storage/errors.js +7 -7
  334. package/dist/storage/index.cjs +42 -5
  335. package/dist/storage/index.d.ts +19 -8
  336. package/dist/storage/index.d.ts.map +1 -1
  337. package/dist/storage/index.js +39 -4
  338. package/dist/storage/memories/types.cjs +16 -0
  339. package/dist/storage/memories/types.d.ts +17 -0
  340. package/dist/storage/memories/types.d.ts.map +1 -0
  341. package/dist/storage/memories/types.js +0 -0
  342. package/dist/storage/message-queue/types.cjs +16 -0
  343. package/dist/storage/message-queue/types.d.ts +15 -0
  344. package/dist/storage/message-queue/types.d.ts.map +1 -0
  345. package/dist/storage/message-queue/types.js +0 -0
  346. package/dist/storage/prompts/types.cjs +16 -0
  347. package/dist/storage/prompts/types.d.ts +14 -0
  348. package/dist/storage/prompts/types.d.ts.map +1 -0
  349. package/dist/storage/prompts/types.js +0 -0
  350. package/dist/storage/runtime-events/types.cjs +16 -0
  351. package/dist/storage/runtime-events/types.d.ts +19 -0
  352. package/dist/storage/runtime-events/types.d.ts.map +1 -0
  353. package/dist/storage/runtime-events/types.js +0 -0
  354. package/dist/storage/sessions/types.cjs +16 -0
  355. package/dist/storage/sessions/types.d.ts +19 -0
  356. package/dist/storage/sessions/types.d.ts.map +1 -0
  357. package/dist/storage/sessions/types.js +0 -0
  358. package/dist/storage/stores/backend.cjs +702 -0
  359. package/dist/storage/stores/backend.d.ts +303 -0
  360. package/dist/storage/stores/backend.d.ts.map +1 -0
  361. package/dist/storage/stores/backend.js +677 -0
  362. package/dist/storage/stores/in-memory.cjs +510 -0
  363. package/dist/storage/stores/in-memory.d.ts +11 -0
  364. package/dist/storage/stores/in-memory.d.ts.map +1 -0
  365. package/dist/storage/stores/in-memory.js +487 -0
  366. package/dist/storage/stores/types.cjs +16 -0
  367. package/dist/storage/stores/types.d.ts +36 -0
  368. package/dist/storage/stores/types.d.ts.map +1 -0
  369. package/dist/storage/stores/types.js +0 -0
  370. package/dist/storage/tool-executions/types.cjs +127 -0
  371. package/dist/storage/tool-executions/types.d.ts +193 -0
  372. package/dist/storage/tool-executions/types.d.ts.map +1 -0
  373. package/dist/storage/tool-executions/types.js +96 -0
  374. package/dist/storage/tool-preferences/types.cjs +16 -0
  375. package/dist/storage/tool-preferences/types.d.ts +29 -0
  376. package/dist/storage/tool-preferences/types.d.ts.map +1 -0
  377. package/dist/storage/tool-preferences/types.js +0 -0
  378. package/dist/storage/tool-state/types.cjs +16 -0
  379. package/dist/storage/tool-state/types.d.ts +20 -0
  380. package/dist/storage/tool-state/types.d.ts.map +1 -0
  381. package/dist/storage/tool-state/types.js +0 -0
  382. package/dist/storage/workspaces/types.cjs +16 -0
  383. package/dist/storage/workspaces/types.d.ts +19 -0
  384. package/dist/storage/workspaces/types.d.ts.map +1 -0
  385. package/dist/storage/workspaces/types.js +0 -0
  386. package/dist/systemPrompt/contributors.cjs +10 -14
  387. package/dist/systemPrompt/contributors.d.ts +3 -3
  388. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  389. package/dist/systemPrompt/contributors.js +11 -15
  390. package/dist/systemPrompt/error-codes.js +1 -1
  391. package/dist/systemPrompt/errors.js +1 -1
  392. package/dist/systemPrompt/in-built-prompts.js +1 -1
  393. package/dist/systemPrompt/index.js +1 -1
  394. package/dist/systemPrompt/manager.js +1 -1
  395. package/dist/systemPrompt/registry.js +1 -1
  396. package/dist/systemPrompt/schemas.js +1 -1
  397. package/dist/telemetry/decorators.js +1 -1
  398. package/dist/telemetry/error-codes.js +1 -1
  399. package/dist/telemetry/errors.js +1 -1
  400. package/dist/telemetry/exporters.js +1 -1
  401. package/dist/telemetry/index.js +1 -1
  402. package/dist/telemetry/schemas.js +1 -1
  403. package/dist/telemetry/telemetry.js +1 -1
  404. package/dist/telemetry/utils.js +1 -1
  405. package/dist/test-utils/in-memory-storage.cjs +9 -17
  406. package/dist/test-utils/in-memory-storage.js +9 -16
  407. package/dist/test-utils/session-state-stores.cjs +21 -24
  408. package/dist/test-utils/session-state-stores.js +22 -24
  409. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
  410. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
  411. package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
  412. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
  413. package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
  414. package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
  415. package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
  416. package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
  417. package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
  418. package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
  419. package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
  420. package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
  421. package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
  422. package/dist/tools/approval/session-tool-policy.cjs +269 -0
  423. package/dist/tools/approval/session-tool-policy.d.ts +43 -0
  424. package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
  425. package/dist/tools/approval/session-tool-policy.js +245 -0
  426. package/dist/tools/define-tool.js +1 -1
  427. package/dist/tools/display-types.js +1 -1
  428. package/dist/tools/error-codes.cjs +3 -3
  429. package/dist/tools/error-codes.d.ts +4 -4
  430. package/dist/tools/error-codes.d.ts.map +1 -1
  431. package/dist/tools/error-codes.js +4 -4
  432. package/dist/tools/errors.cjs +12 -12
  433. package/dist/tools/errors.d.ts +6 -6
  434. package/dist/tools/errors.d.ts.map +1 -1
  435. package/dist/tools/errors.js +13 -13
  436. package/dist/tools/index.cjs +3 -0
  437. package/dist/tools/index.d.ts +3 -0
  438. package/dist/tools/index.d.ts.map +1 -1
  439. package/dist/tools/index.js +3 -1
  440. package/dist/tools/pattern-utils.js +1 -1
  441. package/dist/tools/presentation/tool-presentation.cjs +182 -0
  442. package/dist/tools/presentation/tool-presentation.d.ts +51 -0
  443. package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
  444. package/dist/tools/presentation/tool-presentation.js +159 -0
  445. package/dist/tools/presentation.js +1 -1
  446. package/dist/tools/schemas.cjs +5 -10
  447. package/dist/tools/schemas.d.ts +1 -4
  448. package/dist/tools/schemas.d.ts.map +1 -1
  449. package/dist/tools/schemas.js +6 -11
  450. package/dist/tools/session-tool-preferences-store.cjs +12 -28
  451. package/dist/tools/session-tool-preferences-store.d.ts +4 -7
  452. package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
  453. package/dist/tools/session-tool-preferences-store.js +12 -29
  454. package/dist/tools/tool-call-metadata.js +1 -1
  455. package/dist/tools/tool-manager.cjs +871 -834
  456. package/dist/tools/tool-manager.d.ts +94 -96
  457. package/dist/tools/tool-manager.d.ts.map +1 -1
  458. package/dist/tools/tool-manager.js +876 -833
  459. package/dist/tools/types.d.ts +10 -14
  460. package/dist/tools/types.d.ts.map +1 -1
  461. package/dist/utils/api-key-resolver.js +1 -1
  462. package/dist/utils/async-context.js +1 -1
  463. package/dist/utils/debug.js +1 -1
  464. package/dist/utils/defer.js +1 -1
  465. package/dist/utils/env.js +1 -1
  466. package/dist/utils/error-conversion.js +1 -1
  467. package/dist/utils/execution-context.js +1 -1
  468. package/dist/utils/fs-walk.js +1 -1
  469. package/dist/utils/path.js +1 -1
  470. package/dist/utils/redactor.js +1 -1
  471. package/dist/utils/result.js +1 -1
  472. package/dist/utils/safe-stringify.js +1 -1
  473. package/dist/utils/schema.js +1 -1
  474. package/dist/utils/service-initializer.cjs +37 -33
  475. package/dist/utils/service-initializer.d.ts +9 -5
  476. package/dist/utils/service-initializer.d.ts.map +1 -1
  477. package/dist/utils/service-initializer.js +38 -34
  478. package/dist/utils/zod-schema-converter.js +1 -1
  479. package/dist/workspace/error-codes.cjs +5 -1
  480. package/dist/workspace/error-codes.d.ts +4 -0
  481. package/dist/workspace/error-codes.d.ts.map +1 -1
  482. package/dist/workspace/error-codes.js +6 -2
  483. package/dist/workspace/errors.cjs +43 -0
  484. package/dist/workspace/errors.d.ts +9 -0
  485. package/dist/workspace/errors.d.ts.map +1 -1
  486. package/dist/workspace/errors.js +44 -1
  487. package/dist/workspace/index.d.ts +1 -1
  488. package/dist/workspace/index.d.ts.map +1 -1
  489. package/dist/workspace/index.js +1 -1
  490. package/dist/workspace/manager.cjs +21 -29
  491. package/dist/workspace/manager.d.ts +6 -6
  492. package/dist/workspace/manager.d.ts.map +1 -1
  493. package/dist/workspace/manager.js +22 -30
  494. package/dist/workspace/types.d.ts +47 -0
  495. package/dist/workspace/types.d.ts.map +1 -1
  496. package/package.json +114 -2
  497. package/dist/approval/session-approval-store.cjs +0 -91
  498. package/dist/approval/session-approval-store.d.ts +0 -37
  499. package/dist/approval/session-approval-store.d.ts.map +0 -1
  500. package/dist/approval/session-approval-store.js +0 -68
  501. package/dist/session/history/database.cjs +0 -232
  502. package/dist/session/history/database.d.ts +0 -41
  503. package/dist/session/history/database.d.ts.map +0 -1
  504. package/dist/session/history/database.js +0 -209
  505. package/dist/session/history/factory.d.ts +0 -11
  506. package/dist/session/history/factory.d.ts.map +0 -1
  507. package/dist/session/history/factory.js +0 -8
  508. package/dist/session/history/memory.d.ts +0 -22
  509. package/dist/session/history/memory.d.ts.map +0 -1
  510. package/dist/session/history/memory.js +0 -34
  511. package/dist/session/history/types.d.ts +0 -26
  512. package/dist/session/history/types.d.ts.map +0 -1
  513. package/dist/session/message-queue-store.cjs +0 -75
  514. package/dist/session/message-queue-store.d.ts +0 -16
  515. package/dist/session/message-queue-store.d.ts.map +0 -1
  516. package/dist/session/message-queue-store.js +0 -52
  517. package/dist/storage/storage-manager.cjs +0 -209
  518. package/dist/storage/storage-manager.d.ts +0 -77
  519. package/dist/storage/storage-manager.d.ts.map +0 -1
  520. package/dist/storage/storage-manager.js +0 -186
  521. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
  522. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
  523. package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
  524. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
  525. package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
  526. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
  527. /package/dist/{session/history → skills}/types.cjs +0 -0
  528. /package/dist/{session/history → skills}/types.js +0 -0
  529. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
  530. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
  531. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
  532. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
  533. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
@@ -21,39 +21,44 @@ __export(message_queue_exports, {
21
21
  MessageQueueService: () => MessageQueueService
22
22
  });
23
23
  module.exports = __toCommonJS(message_queue_exports);
24
+ var import_queue_clone = require("./queue-clone.js");
24
25
  class EphemeralMessageQueueStore {
25
- async load(sessionId) {
26
- void sessionId;
26
+ async listSessionIds() {
27
27
  return [];
28
28
  }
29
- async save(sessionId, queue) {
30
- void sessionId;
31
- void queue;
29
+ async load(input) {
30
+ void input;
31
+ return [];
32
+ }
33
+ async save(input) {
34
+ void input;
32
35
  }
33
- async delete(sessionId) {
34
- void sessionId;
36
+ async delete(input) {
37
+ void input;
35
38
  }
36
39
  }
37
40
  function generateId() {
38
41
  return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
39
42
  }
40
43
  class MessageQueueService {
41
- constructor(eventBus, logger, sessionId, store) {
44
+ constructor(eventBus, logger, sessionId, store, queueKind = "steer") {
42
45
  this.eventBus = eventBus;
43
46
  this.logger = logger;
44
47
  this.sessionId = sessionId;
45
48
  this.store = store;
49
+ this.queueKind = queueKind;
46
50
  }
47
51
  queue = [];
48
52
  mutationLock = Promise.resolve();
49
53
  initialized = false;
50
54
  initializationPromise = null;
51
- static createEphemeral(eventBus, logger, sessionId) {
55
+ static createEphemeral(eventBus, logger, sessionId, queueKind = "steer") {
52
56
  return new MessageQueueService(
53
57
  eventBus,
54
58
  logger,
55
59
  sessionId,
56
- new EphemeralMessageQueueStore()
60
+ new EphemeralMessageQueueStore(),
61
+ queueKind
57
62
  );
58
63
  }
59
64
  async initialize() {
@@ -61,7 +66,7 @@ class MessageQueueService {
61
66
  if (this.initialized) {
62
67
  return;
63
68
  }
64
- this.queue = await this.store.load(this.sessionId);
69
+ this.queue = await this.store.load({ sessionId: this.sessionId });
65
70
  if (this.queue.length > 0) {
66
71
  this.logger.debug(
67
72
  `Restored ${this.queue.length} queued message(s) for session ${this.sessionId}`
@@ -75,7 +80,21 @@ class MessageQueueService {
75
80
  await this.initializationPromise;
76
81
  }
77
82
  async persistQueue() {
78
- await this.store.save(this.sessionId, this.queue);
83
+ await this.store.save({ sessionId: this.sessionId, queue: this.queue });
84
+ }
85
+ async refreshFromStore() {
86
+ const storedQueue = await this.store.load({ sessionId: this.sessionId });
87
+ const existingIds = new Set(this.queue.map((message) => message.id));
88
+ const externalMessages = storedQueue.filter((message) => !existingIds.has(message.id));
89
+ if (externalMessages.length === 0) {
90
+ return;
91
+ }
92
+ this.queue = [...this.queue, ...(0, import_queue_clone.cloneQueuedMessages)(externalMessages)].sort(
93
+ (left, right) => left.queuedAt - right.queuedAt
94
+ );
95
+ this.logger.debug(
96
+ `Loaded ${externalMessages.length} externally queued message(s) for session ${this.sessionId}`
97
+ );
79
98
  }
80
99
  runWithMutationLock(fn) {
81
100
  const currentResult = this.mutationLock.catch(() => {
@@ -99,10 +118,13 @@ class MessageQueueService {
99
118
  id: generateId(),
100
119
  content: message.content,
101
120
  queuedAt: Date.now(),
102
- ...message.metadata !== void 0 && { metadata: message.metadata },
121
+ ...message.metadata !== void 0 && {
122
+ metadata: message.metadata
123
+ },
103
124
  ...message.kind !== void 0 && { kind: message.kind }
104
125
  };
105
- this.queue.push(queuedMsg);
126
+ const copiedQueuedMsg = (0, import_queue_clone.cloneQueuedMessage)(queuedMsg);
127
+ this.queue.push(copiedQueuedMsg);
106
128
  try {
107
129
  await this.persistQueue();
108
130
  } catch (error) {
@@ -112,7 +134,8 @@ class MessageQueueService {
112
134
  this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
113
135
  this.eventBus.emit("message:queued", {
114
136
  position: this.queue.length,
115
- id: queuedMsg.id
137
+ id: queuedMsg.id,
138
+ queue: this.queueKind
116
139
  });
117
140
  return {
118
141
  queued: true,
@@ -131,19 +154,22 @@ class MessageQueueService {
131
154
  * If 3 messages are queued: "stop", "try X instead", "also check Y"
132
155
  * They become:
133
156
  * ```
134
- * [1]: stop
157
+ * Additional user input received:
158
+ *
159
+ * - stop
135
160
  *
136
- * [2]: try X instead
161
+ * - try X instead
137
162
  *
138
- * [3]: also check Y
163
+ * - also check Y
139
164
  * ```
140
165
  *
141
166
  * @returns Coalesced message or null if queue is empty
142
167
  */
143
168
  async dequeueAll() {
144
169
  return await this.runWithMutationLock(async () => {
170
+ await this.refreshFromStore();
145
171
  if (this.queue.length === 0) return null;
146
- const messages = [...this.queue];
172
+ const messages = (0, import_queue_clone.cloneQueuedMessages)(this.queue);
147
173
  this.queue = [];
148
174
  try {
149
175
  await this.persistQueue();
@@ -158,9 +184,10 @@ class MessageQueueService {
158
184
  this.eventBus.emit("message:dequeued", {
159
185
  count: messages.length,
160
186
  ids: messages.map((m) => m.id),
187
+ queue: this.queueKind,
161
188
  coalesced: messages.length > 1,
162
- content: combined.combinedContent,
163
- messages
189
+ content: (0, import_queue_clone.cloneCoalescedMessage)(combined).combinedContent,
190
+ messages: (0, import_queue_clone.cloneQueuedMessages)(messages)
164
191
  });
165
192
  return combined;
166
193
  });
@@ -182,32 +209,30 @@ class MessageQueueService {
182
209
  lastQueuedAt: firstMsg.queuedAt
183
210
  };
184
211
  }
185
- const getMessageKind = (message) => message.kind ?? "default";
186
- const totalUserMessages = messages.filter(
187
- (message) => getMessageKind(message) !== "background"
188
- ).length;
189
- const hasBackgroundMessages = messages.some(
190
- (message) => getMessageKind(message) === "background"
191
- );
192
- const getUserPrefix = (index, total, mixed) => {
193
- if (mixed) {
194
- return `User follow-up ${index + 1}`;
195
- }
196
- if (total <= 1) return null;
197
- if (total === 2) {
198
- return index === 0 ? "First" : "Also";
199
- }
200
- return `[${index + 1}]`;
201
- };
202
212
  const combinedContent = [];
203
- let userIndex = 0;
204
- for (const [i, msg] of messages.entries()) {
205
- const kind = getMessageKind(msg);
206
- const prefix = kind === "background" ? null : getUserPrefix(userIndex, totalUserMessages, hasBackgroundMessages);
207
- if (kind !== "background") {
208
- userIndex += 1;
213
+ let hasEntries = false;
214
+ let inUserSection = false;
215
+ for (const msg of messages) {
216
+ const isUserMessage = msg.kind !== "background";
217
+ if (isUserMessage && !inUserSection) {
218
+ if (hasEntries) {
219
+ combinedContent.push({ type: "text", text: "\n\n" });
220
+ }
221
+ combinedContent.push({ type: "text", text: "Additional user input received:" });
222
+ combinedContent.push({ type: "text", text: "\n\n" });
223
+ inUserSection = true;
224
+ hasEntries = false;
225
+ }
226
+ let prefixText = isUserMessage ? "- " : "";
227
+ if (hasEntries && !isUserMessage) {
228
+ combinedContent.push({ type: "text", text: "\n\n" });
229
+ inUserSection = false;
230
+ } else if (hasEntries && isUserMessage) {
231
+ prefixText = `
232
+
233
+ ${prefixText}`;
209
234
  }
210
- let prefixText = prefix ? `${prefix}: ` : "";
235
+ const entryStartIndex = combinedContent.length;
211
236
  for (const part of msg.content) {
212
237
  if (part.type === "text") {
213
238
  if (prefixText) {
@@ -227,8 +252,8 @@ class MessageQueueService {
227
252
  if (prefixText && msg.content.length === 0) {
228
253
  combinedContent.push({ type: "text", text: prefixText + "[empty message]" });
229
254
  }
230
- if (i < messages.length - 1) {
231
- combinedContent.push({ type: "text", text: "\n\n" });
255
+ if (combinedContent.length > entryStartIndex) {
256
+ hasEntries = true;
232
257
  }
233
258
  }
234
259
  const firstMessage = messages[0];
@@ -249,6 +274,11 @@ class MessageQueueService {
249
274
  hasPending() {
250
275
  return this.queue.length > 0;
251
276
  }
277
+ async refresh() {
278
+ await this.runWithMutationLock(async () => {
279
+ await this.refreshFromStore();
280
+ });
281
+ }
252
282
  /**
253
283
  * Get the number of pending messages.
254
284
  */
@@ -276,16 +306,17 @@ class MessageQueueService {
276
306
  }
277
307
  /**
278
308
  * Get all queued messages (for UI display).
279
- * Returns a shallow copy to prevent external mutation.
309
+ * Returns defensive copies to prevent external mutation.
280
310
  */
281
311
  getAll() {
282
- return [...this.queue];
312
+ return (0, import_queue_clone.cloneQueuedMessages)(this.queue);
283
313
  }
284
314
  /**
285
315
  * Get a single queued message by ID.
286
316
  */
287
317
  get(id) {
288
- return this.queue.find((m) => m.id === id);
318
+ const message = this.queue.find((m) => m.id === id);
319
+ return message ? (0, import_queue_clone.cloneQueuedMessage)(message) : void 0;
289
320
  }
290
321
  /**
291
322
  * Remove a single queued message by ID.
@@ -308,7 +339,7 @@ class MessageQueueService {
308
339
  throw error;
309
340
  }
310
341
  this.logger.debug(`Message removed: ${id}, remaining: ${this.queue.length}`);
311
- this.eventBus.emit("message:removed", { id });
342
+ this.eventBus.emit("message:removed", { id, queue: this.queueKind });
312
343
  return true;
313
344
  });
314
345
  }
@@ -2,8 +2,8 @@ import type { SessionEventBus } from '../events/index.js';
2
2
  import type { QueuedMessage, CoalescedMessage } from './types.js';
3
3
  import type { ContentPart } from '../context/types.js';
4
4
  import type { Logger } from '../logger/v2/types.js';
5
- import type { MessageQueueStore } from './message-queue-store.js';
6
- type MessageQueueBackingStore = Pick<MessageQueueStore, 'load' | 'save' | 'delete'>;
5
+ import type { SessionMessageQueueStore } from '../storage/message-queue/types.js';
6
+ type MessageQueueBackingStore = SessionMessageQueueStore;
7
7
  /**
8
8
  * Input for enqueuing a user message to the queue.
9
9
  * (Not to be confused with UserMessage from context/types.ts which represents
@@ -50,14 +50,16 @@ export declare class MessageQueueService {
50
50
  private logger;
51
51
  private sessionId;
52
52
  private store;
53
+ private queueKind;
53
54
  private queue;
54
55
  private mutationLock;
55
56
  private initialized;
56
57
  private initializationPromise;
57
- static createEphemeral(eventBus: SessionEventBus, logger: Logger, sessionId: string): MessageQueueService;
58
- constructor(eventBus: SessionEventBus, logger: Logger, sessionId: string, store: MessageQueueBackingStore);
58
+ static createEphemeral(eventBus: SessionEventBus, logger: Logger, sessionId: string, queueKind?: 'steer' | 'follow-up'): MessageQueueService;
59
+ constructor(eventBus: SessionEventBus, logger: Logger, sessionId: string, store: MessageQueueBackingStore, queueKind?: 'steer' | 'follow-up');
59
60
  initialize(): Promise<void>;
60
61
  private persistQueue;
62
+ private refreshFromStore;
61
63
  private runWithMutationLock;
62
64
  /**
63
65
  * Add a message to the queue.
@@ -81,11 +83,13 @@ export declare class MessageQueueService {
81
83
  * If 3 messages are queued: "stop", "try X instead", "also check Y"
82
84
  * They become:
83
85
  * ```
84
- * [1]: stop
86
+ * Additional user input received:
85
87
  *
86
- * [2]: try X instead
88
+ * - stop
87
89
  *
88
- * [3]: also check Y
90
+ * - try X instead
91
+ *
92
+ * - also check Y
89
93
  * ```
90
94
  *
91
95
  * @returns Coalesced message or null if queue is empty
@@ -100,6 +104,7 @@ export declare class MessageQueueService {
100
104
  * Check if there are pending messages in the queue.
101
105
  */
102
106
  hasPending(): boolean;
107
+ refresh(): Promise<void>;
103
108
  /**
104
109
  * Get the number of pending messages.
105
110
  */
@@ -111,7 +116,7 @@ export declare class MessageQueueService {
111
116
  clear(): Promise<void>;
112
117
  /**
113
118
  * Get all queued messages (for UI display).
114
- * Returns a shallow copy to prevent external mutation.
119
+ * Returns defensive copies to prevent external mutation.
115
120
  */
116
121
  getAll(): QueuedMessage[];
117
122
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,KAAK,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;AAyBpF;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAmB;IAoBxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IAtBjB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,MAAM,CAAC,eAAe,CAClB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAClB,mBAAmB;gBAUV,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,wBAAwB;IAGrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAsBnB,YAAY;IAI1B,OAAO,CAAC,mBAAmB;IAS3B;;;;;;OAMG;IACG,OAAO,CACT,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAkC1D;;;;;;;;;;;;;;;;;;OAkBG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAgCpD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAuGhB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;;OAGG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB7C"}
1
+ {"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../src/session/message-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAElF,KAAK,wBAAwB,GAAG,wBAAwB,CAAC;AA4BzD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2DAA2D;IAC3D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,mBAAmB;IAsBxB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IAzBrB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,MAAM,CAAC,eAAe,CAClB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,GAAG,WAAqB,GAC3C,mBAAmB;gBAWV,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,wBAAwB,EAC/B,SAAS,GAAE,OAAO,GAAG,WAAqB;IAGhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAsBnB,YAAY;YAIZ,gBAAgB;IAiB9B,OAAO,CAAC,mBAAmB;IAS3B;;;;;;OAMG;IACG,OAAO,CACT,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkCpD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAoFhB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;;OAGG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK1C;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwB7C"}
@@ -1,37 +1,42 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
+ import { cloneCoalescedMessage, cloneQueuedMessage, cloneQueuedMessages } from "./queue-clone.js";
2
3
  class EphemeralMessageQueueStore {
3
- async load(sessionId) {
4
- void sessionId;
4
+ async listSessionIds() {
5
5
  return [];
6
6
  }
7
- async save(sessionId, queue) {
8
- void sessionId;
9
- void queue;
7
+ async load(input) {
8
+ void input;
9
+ return [];
10
+ }
11
+ async save(input) {
12
+ void input;
10
13
  }
11
- async delete(sessionId) {
12
- void sessionId;
14
+ async delete(input) {
15
+ void input;
13
16
  }
14
17
  }
15
18
  function generateId() {
16
19
  return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
17
20
  }
18
21
  class MessageQueueService {
19
- constructor(eventBus, logger, sessionId, store) {
22
+ constructor(eventBus, logger, sessionId, store, queueKind = "steer") {
20
23
  this.eventBus = eventBus;
21
24
  this.logger = logger;
22
25
  this.sessionId = sessionId;
23
26
  this.store = store;
27
+ this.queueKind = queueKind;
24
28
  }
25
29
  queue = [];
26
30
  mutationLock = Promise.resolve();
27
31
  initialized = false;
28
32
  initializationPromise = null;
29
- static createEphemeral(eventBus, logger, sessionId) {
33
+ static createEphemeral(eventBus, logger, sessionId, queueKind = "steer") {
30
34
  return new MessageQueueService(
31
35
  eventBus,
32
36
  logger,
33
37
  sessionId,
34
- new EphemeralMessageQueueStore()
38
+ new EphemeralMessageQueueStore(),
39
+ queueKind
35
40
  );
36
41
  }
37
42
  async initialize() {
@@ -39,7 +44,7 @@ class MessageQueueService {
39
44
  if (this.initialized) {
40
45
  return;
41
46
  }
42
- this.queue = await this.store.load(this.sessionId);
47
+ this.queue = await this.store.load({ sessionId: this.sessionId });
43
48
  if (this.queue.length > 0) {
44
49
  this.logger.debug(
45
50
  `Restored ${this.queue.length} queued message(s) for session ${this.sessionId}`
@@ -53,7 +58,21 @@ class MessageQueueService {
53
58
  await this.initializationPromise;
54
59
  }
55
60
  async persistQueue() {
56
- await this.store.save(this.sessionId, this.queue);
61
+ await this.store.save({ sessionId: this.sessionId, queue: this.queue });
62
+ }
63
+ async refreshFromStore() {
64
+ const storedQueue = await this.store.load({ sessionId: this.sessionId });
65
+ const existingIds = new Set(this.queue.map((message) => message.id));
66
+ const externalMessages = storedQueue.filter((message) => !existingIds.has(message.id));
67
+ if (externalMessages.length === 0) {
68
+ return;
69
+ }
70
+ this.queue = [...this.queue, ...cloneQueuedMessages(externalMessages)].sort(
71
+ (left, right) => left.queuedAt - right.queuedAt
72
+ );
73
+ this.logger.debug(
74
+ `Loaded ${externalMessages.length} externally queued message(s) for session ${this.sessionId}`
75
+ );
57
76
  }
58
77
  runWithMutationLock(fn) {
59
78
  const currentResult = this.mutationLock.catch(() => {
@@ -77,10 +96,13 @@ class MessageQueueService {
77
96
  id: generateId(),
78
97
  content: message.content,
79
98
  queuedAt: Date.now(),
80
- ...message.metadata !== void 0 && { metadata: message.metadata },
99
+ ...message.metadata !== void 0 && {
100
+ metadata: message.metadata
101
+ },
81
102
  ...message.kind !== void 0 && { kind: message.kind }
82
103
  };
83
- this.queue.push(queuedMsg);
104
+ const copiedQueuedMsg = cloneQueuedMessage(queuedMsg);
105
+ this.queue.push(copiedQueuedMsg);
84
106
  try {
85
107
  await this.persistQueue();
86
108
  } catch (error) {
@@ -90,7 +112,8 @@ class MessageQueueService {
90
112
  this.logger.debug(`Message queued: ${queuedMsg.id}, position: ${this.queue.length}`);
91
113
  this.eventBus.emit("message:queued", {
92
114
  position: this.queue.length,
93
- id: queuedMsg.id
115
+ id: queuedMsg.id,
116
+ queue: this.queueKind
94
117
  });
95
118
  return {
96
119
  queued: true,
@@ -109,19 +132,22 @@ class MessageQueueService {
109
132
  * If 3 messages are queued: "stop", "try X instead", "also check Y"
110
133
  * They become:
111
134
  * ```
112
- * [1]: stop
135
+ * Additional user input received:
136
+ *
137
+ * - stop
113
138
  *
114
- * [2]: try X instead
139
+ * - try X instead
115
140
  *
116
- * [3]: also check Y
141
+ * - also check Y
117
142
  * ```
118
143
  *
119
144
  * @returns Coalesced message or null if queue is empty
120
145
  */
121
146
  async dequeueAll() {
122
147
  return await this.runWithMutationLock(async () => {
148
+ await this.refreshFromStore();
123
149
  if (this.queue.length === 0) return null;
124
- const messages = [...this.queue];
150
+ const messages = cloneQueuedMessages(this.queue);
125
151
  this.queue = [];
126
152
  try {
127
153
  await this.persistQueue();
@@ -136,9 +162,10 @@ class MessageQueueService {
136
162
  this.eventBus.emit("message:dequeued", {
137
163
  count: messages.length,
138
164
  ids: messages.map((m) => m.id),
165
+ queue: this.queueKind,
139
166
  coalesced: messages.length > 1,
140
- content: combined.combinedContent,
141
- messages
167
+ content: cloneCoalescedMessage(combined).combinedContent,
168
+ messages: cloneQueuedMessages(messages)
142
169
  });
143
170
  return combined;
144
171
  });
@@ -160,32 +187,30 @@ class MessageQueueService {
160
187
  lastQueuedAt: firstMsg.queuedAt
161
188
  };
162
189
  }
163
- const getMessageKind = (message) => message.kind ?? "default";
164
- const totalUserMessages = messages.filter(
165
- (message) => getMessageKind(message) !== "background"
166
- ).length;
167
- const hasBackgroundMessages = messages.some(
168
- (message) => getMessageKind(message) === "background"
169
- );
170
- const getUserPrefix = (index, total, mixed) => {
171
- if (mixed) {
172
- return `User follow-up ${index + 1}`;
173
- }
174
- if (total <= 1) return null;
175
- if (total === 2) {
176
- return index === 0 ? "First" : "Also";
177
- }
178
- return `[${index + 1}]`;
179
- };
180
190
  const combinedContent = [];
181
- let userIndex = 0;
182
- for (const [i, msg] of messages.entries()) {
183
- const kind = getMessageKind(msg);
184
- const prefix = kind === "background" ? null : getUserPrefix(userIndex, totalUserMessages, hasBackgroundMessages);
185
- if (kind !== "background") {
186
- userIndex += 1;
191
+ let hasEntries = false;
192
+ let inUserSection = false;
193
+ for (const msg of messages) {
194
+ const isUserMessage = msg.kind !== "background";
195
+ if (isUserMessage && !inUserSection) {
196
+ if (hasEntries) {
197
+ combinedContent.push({ type: "text", text: "\n\n" });
198
+ }
199
+ combinedContent.push({ type: "text", text: "Additional user input received:" });
200
+ combinedContent.push({ type: "text", text: "\n\n" });
201
+ inUserSection = true;
202
+ hasEntries = false;
203
+ }
204
+ let prefixText = isUserMessage ? "- " : "";
205
+ if (hasEntries && !isUserMessage) {
206
+ combinedContent.push({ type: "text", text: "\n\n" });
207
+ inUserSection = false;
208
+ } else if (hasEntries && isUserMessage) {
209
+ prefixText = `
210
+
211
+ ${prefixText}`;
187
212
  }
188
- let prefixText = prefix ? `${prefix}: ` : "";
213
+ const entryStartIndex = combinedContent.length;
189
214
  for (const part of msg.content) {
190
215
  if (part.type === "text") {
191
216
  if (prefixText) {
@@ -205,8 +230,8 @@ class MessageQueueService {
205
230
  if (prefixText && msg.content.length === 0) {
206
231
  combinedContent.push({ type: "text", text: prefixText + "[empty message]" });
207
232
  }
208
- if (i < messages.length - 1) {
209
- combinedContent.push({ type: "text", text: "\n\n" });
233
+ if (combinedContent.length > entryStartIndex) {
234
+ hasEntries = true;
210
235
  }
211
236
  }
212
237
  const firstMessage = messages[0];
@@ -227,6 +252,11 @@ class MessageQueueService {
227
252
  hasPending() {
228
253
  return this.queue.length > 0;
229
254
  }
255
+ async refresh() {
256
+ await this.runWithMutationLock(async () => {
257
+ await this.refreshFromStore();
258
+ });
259
+ }
230
260
  /**
231
261
  * Get the number of pending messages.
232
262
  */
@@ -254,16 +284,17 @@ class MessageQueueService {
254
284
  }
255
285
  /**
256
286
  * Get all queued messages (for UI display).
257
- * Returns a shallow copy to prevent external mutation.
287
+ * Returns defensive copies to prevent external mutation.
258
288
  */
259
289
  getAll() {
260
- return [...this.queue];
290
+ return cloneQueuedMessages(this.queue);
261
291
  }
262
292
  /**
263
293
  * Get a single queued message by ID.
264
294
  */
265
295
  get(id) {
266
- return this.queue.find((m) => m.id === id);
296
+ const message = this.queue.find((m) => m.id === id);
297
+ return message ? cloneQueuedMessage(message) : void 0;
267
298
  }
268
299
  /**
269
300
  * Remove a single queued message by ID.
@@ -286,7 +317,7 @@ class MessageQueueService {
286
317
  throw error;
287
318
  }
288
319
  this.logger.debug(`Message removed: ${id}, remaining: ${this.queue.length}`);
289
- this.eventBus.emit("message:removed", { id });
320
+ this.eventBus.emit("message:removed", { id, queue: this.queueKind });
290
321
  return true;
291
322
  });
292
323
  }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var queue_clone_exports = {};
20
+ __export(queue_clone_exports, {
21
+ cloneCoalescedMessage: () => cloneCoalescedMessage,
22
+ cloneQueuedMessage: () => cloneQueuedMessage,
23
+ cloneQueuedMessages: () => cloneQueuedMessages
24
+ });
25
+ module.exports = __toCommonJS(queue_clone_exports);
26
+ var import_content_clone = require("../context/content-clone.js");
27
+ function cloneQueuedMessage(message) {
28
+ return {
29
+ ...message,
30
+ content: (0, import_content_clone.cloneContentParts)(message.content),
31
+ ...message.metadata !== void 0 ? { metadata: structuredClone(message.metadata) } : {}
32
+ };
33
+ }
34
+ function cloneQueuedMessages(messages) {
35
+ return messages.map(cloneQueuedMessage);
36
+ }
37
+ function cloneCoalescedMessage(message) {
38
+ return {
39
+ messages: cloneQueuedMessages(message.messages),
40
+ combinedContent: (0, import_content_clone.cloneContentParts)(message.combinedContent),
41
+ firstQueuedAt: message.firstQueuedAt,
42
+ lastQueuedAt: message.lastQueuedAt
43
+ };
44
+ }
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ cloneCoalescedMessage,
48
+ cloneQueuedMessage,
49
+ cloneQueuedMessages
50
+ });
@@ -0,0 +1,5 @@
1
+ import type { CoalescedMessage, QueuedMessage } from './types.js';
2
+ export declare function cloneQueuedMessage(message: QueuedMessage): QueuedMessage;
3
+ export declare function cloneQueuedMessages(messages: QueuedMessage[]): QueuedMessage[];
4
+ export declare function cloneCoalescedMessage(message: CoalescedMessage): CoalescedMessage;
5
+ //# sourceMappingURL=queue-clone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-clone.d.ts","sourceRoot":"","sources":["../../src/session/queue-clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAMxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAE9E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAOjF"}
@@ -0,0 +1,25 @@
1
+ import "../chunk-C6A6W6XS.js";
2
+ import { cloneContentParts } from "../context/content-clone.js";
3
+ function cloneQueuedMessage(message) {
4
+ return {
5
+ ...message,
6
+ content: cloneContentParts(message.content),
7
+ ...message.metadata !== void 0 ? { metadata: structuredClone(message.metadata) } : {}
8
+ };
9
+ }
10
+ function cloneQueuedMessages(messages) {
11
+ return messages.map(cloneQueuedMessage);
12
+ }
13
+ function cloneCoalescedMessage(message) {
14
+ return {
15
+ messages: cloneQueuedMessages(message.messages),
16
+ combinedContent: cloneContentParts(message.combinedContent),
17
+ firstQueuedAt: message.firstQueuedAt,
18
+ lastQueuedAt: message.lastQueuedAt
19
+ };
20
+ }
21
+ export {
22
+ cloneCoalescedMessage,
23
+ cloneQueuedMessage,
24
+ cloneQueuedMessages
25
+ };