@evalops/maestro 0.10.23 → 0.10.24

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 (376) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/agent.d.ts +2 -2
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +1 -1
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/keys.d.ts +2 -5
  7. package/dist/agent/keys.d.ts.map +1 -1
  8. package/dist/agent/keys.js +4 -5
  9. package/dist/agent/keys.js.map +1 -1
  10. package/dist/agent/modes.d.ts +2 -2
  11. package/dist/agent/modes.d.ts.map +1 -1
  12. package/dist/agent/modes.js +6 -7
  13. package/dist/agent/modes.js.map +1 -1
  14. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  15. package/dist/agent/providers/anthropic.js +4 -4
  16. package/dist/agent/providers/anthropic.js.map +1 -1
  17. package/dist/agent/providers/google.js +1 -1
  18. package/dist/agent/swarm/executor.d.ts +2 -0
  19. package/dist/agent/swarm/executor.d.ts.map +1 -1
  20. package/dist/agent/swarm/executor.js +208 -35
  21. package/dist/agent/swarm/executor.js.map +1 -1
  22. package/dist/agent/swarm/types.d.ts +2 -0
  23. package/dist/agent/swarm/types.d.ts.map +1 -1
  24. package/dist/agent/swarm/types.js.map +1 -1
  25. package/dist/agent/tool-capability-types.d.ts +36 -0
  26. package/dist/agent/tool-capability-types.d.ts.map +1 -0
  27. package/dist/agent/tool-capability-types.js +2 -0
  28. package/dist/agent/tool-capability-types.js.map +1 -0
  29. package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
  30. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  31. package/dist/agent/transport/tool-execution-bridge.js +28 -15
  32. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  33. package/dist/agent/transport/transport-utils.d.ts.map +1 -1
  34. package/dist/agent/transport/transport-utils.js +2 -3
  35. package/dist/agent/transport/transport-utils.js.map +1 -1
  36. package/dist/agent/transport.js +1 -1
  37. package/dist/agent/transport.js.map +1 -1
  38. package/dist/agent/type-guards.d.ts +1 -1
  39. package/dist/agent/type-guards.js +1 -1
  40. package/dist/agent/type-guards.js.map +1 -1
  41. package/dist/agent/types.d.ts +5 -3
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/agent/types.js +2 -2
  44. package/dist/agent/types.js.map +1 -1
  45. package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
  46. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
  47. package/dist/app-server/daemon-lifecycle-api.js +259 -0
  48. package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
  49. package/dist/app-server/external-agent-import-api.d.ts +30 -0
  50. package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
  51. package/dist/app-server/external-agent-import-api.js +553 -0
  52. package/dist/app-server/external-agent-import-api.js.map +1 -0
  53. package/dist/app-server/host-control-api.d.ts +30 -0
  54. package/dist/app-server/host-control-api.d.ts.map +1 -0
  55. package/dist/app-server/host-control-api.js +343 -0
  56. package/dist/app-server/host-control-api.js.map +1 -0
  57. package/dist/app-server/in-process-client.d.ts +2 -2
  58. package/dist/app-server/in-process-client.d.ts.map +1 -1
  59. package/dist/app-server/in-process-client.js.map +1 -1
  60. package/dist/app-server/network-governance-api.d.ts +26 -0
  61. package/dist/app-server/network-governance-api.d.ts.map +1 -0
  62. package/dist/app-server/network-governance-api.js +476 -0
  63. package/dist/app-server/network-governance-api.js.map +1 -0
  64. package/dist/app-server/plugin-bundle-api.d.ts +17 -0
  65. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
  66. package/dist/app-server/plugin-bundle-api.js +219 -0
  67. package/dist/app-server/plugin-bundle-api.js.map +1 -0
  68. package/dist/app-server/policy-control-api.d.ts +14 -0
  69. package/dist/app-server/policy-control-api.d.ts.map +1 -0
  70. package/dist/app-server/policy-control-api.js +200 -0
  71. package/dist/app-server/policy-control-api.js.map +1 -0
  72. package/dist/app-server/protocol-modes-api.d.ts +22 -0
  73. package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
  74. package/dist/app-server/protocol-modes-api.js +124 -0
  75. package/dist/app-server/protocol-modes-api.js.map +1 -0
  76. package/dist/app-server/sandbox-proof-api.d.ts +21 -0
  77. package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
  78. package/dist/app-server/sandbox-proof-api.js +127 -0
  79. package/dist/app-server/sandbox-proof-api.js.map +1 -0
  80. package/dist/app-server/session-api.d.ts +93 -3
  81. package/dist/app-server/session-api.d.ts.map +1 -1
  82. package/dist/app-server/session-api.js +706 -18
  83. package/dist/app-server/session-api.js.map +1 -1
  84. package/dist/audit/logger.d.ts +1 -1
  85. package/dist/bootstrap/auth-setup.d.ts.map +1 -1
  86. package/dist/bootstrap/auth-setup.js +17 -2
  87. package/dist/bootstrap/auth-setup.js.map +1 -1
  88. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  89. package/dist/bootstrap/model-resolution-setup.js +19 -4
  90. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  91. package/dist/cli/args.d.ts +2 -2
  92. package/dist/cli/args.d.ts.map +1 -1
  93. package/dist/cli/args.js +2 -2
  94. package/dist/cli/args.js.map +1 -1
  95. package/dist/cli/commands/a2a.d.ts.map +1 -1
  96. package/dist/cli/commands/a2a.js +226 -14
  97. package/dist/cli/commands/a2a.js.map +1 -1
  98. package/dist/cli/commands/anthropic.d.ts +1 -1
  99. package/dist/cli/commands/anthropic.d.ts.map +1 -1
  100. package/dist/cli/commands/anthropic.js +3 -68
  101. package/dist/cli/commands/anthropic.js.map +1 -1
  102. package/dist/cli/commands/modes.js +1 -1
  103. package/dist/cli/commands/modes.js.map +1 -1
  104. package/dist/cli/help.d.ts.map +1 -1
  105. package/dist/cli/help.js +5 -7
  106. package/dist/cli/help.js.map +1 -1
  107. package/dist/cli/rpc-mode.d.ts +1 -1
  108. package/dist/cli/rpc-mode.js +1 -1
  109. package/dist/cli/rpc-mode.js.map +1 -1
  110. package/dist/cli/session.js +1 -1
  111. package/dist/cli/session.js.map +1 -1
  112. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  113. package/dist/cli-tui/commands/command-catalog.js +7 -12
  114. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  115. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
  116. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  117. package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
  118. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  119. package/dist/cli-tui/custom-editor.d.ts +1 -1
  120. package/dist/cli-tui/custom-editor.js +2 -2
  121. package/dist/cli-tui/custom-editor.js.map +1 -1
  122. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  123. package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
  124. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  125. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  126. package/dist/cli-tui/selectors/model-selector.js +0 -1
  127. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  128. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
  129. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  130. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  131. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
  132. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  133. package/dist/cli-tui/selectors/oauth-selector.js +3 -4
  134. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  135. package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
  136. package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
  137. package/dist/cli-tui/tui-renderer.js +2 -2
  138. package/dist/cli-tui/tui-renderer.js.map +1 -1
  139. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  140. package/dist/cli-tui/utils/footer-utils.js +1 -1
  141. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  142. package/dist/cli.js +15156 -14232
  143. package/dist/commands/prompts.d.ts +1 -1
  144. package/dist/commands/prompts.js +1 -1
  145. package/dist/commands/prompts.js.map +1 -1
  146. package/dist/config/constants.d.ts +2 -2
  147. package/dist/config/constants.d.ts.map +1 -1
  148. package/dist/config/constants.js +2 -2
  149. package/dist/config/constants.js.map +1 -1
  150. package/dist/config/index.d.ts +1 -1
  151. package/dist/config/index.js +1 -1
  152. package/dist/config/index.js.map +1 -1
  153. package/dist/config/toml-config.js +3 -3
  154. package/dist/config/toml-config.js.map +1 -1
  155. package/dist/db/client.d.ts +2 -2
  156. package/dist/db/client.js +2 -2
  157. package/dist/db/client.js.map +1 -1
  158. package/dist/db/migrate.d.ts +1 -1
  159. package/dist/db/migrate.js +1 -1
  160. package/dist/db/migrate.js.map +1 -1
  161. package/dist/db/schema.d.ts +2 -2
  162. package/dist/db/schema.js +1 -1
  163. package/dist/db/schema.js.map +1 -1
  164. package/dist/errors/index.d.ts +2 -2
  165. package/dist/errors/index.js +2 -2
  166. package/dist/errors/index.js.map +1 -1
  167. package/dist/main.d.ts +4 -5
  168. package/dist/main.d.ts.map +1 -1
  169. package/dist/main.js +17 -14
  170. package/dist/main.js.map +1 -1
  171. package/dist/mcp/config.d.ts +15 -2
  172. package/dist/mcp/config.d.ts.map +1 -1
  173. package/dist/mcp/config.js +50 -26
  174. package/dist/mcp/config.js.map +1 -1
  175. package/dist/mcp/fathom-cua.d.ts.map +1 -1
  176. package/dist/mcp/fathom-cua.js +10 -0
  177. package/dist/mcp/fathom-cua.js.map +1 -1
  178. package/dist/mcp/manager.d.ts.map +1 -1
  179. package/dist/mcp/manager.js +32 -1
  180. package/dist/mcp/manager.js.map +1 -1
  181. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  182. package/dist/mcp/tool-bridge.js +12 -3
  183. package/dist/mcp/tool-bridge.js.map +1 -1
  184. package/dist/mcp/tool-capabilities.d.ts +5 -0
  185. package/dist/mcp/tool-capabilities.d.ts.map +1 -0
  186. package/dist/mcp/tool-capabilities.js +271 -0
  187. package/dist/mcp/tool-capabilities.js.map +1 -0
  188. package/dist/mcp/types.d.ts +6 -1
  189. package/dist/mcp/types.d.ts.map +1 -1
  190. package/dist/mcp/types.js.map +1 -1
  191. package/dist/models/config-loader.d.ts +1 -1
  192. package/dist/models/factory-integration.d.ts +1 -1
  193. package/dist/models/factory-integration.js +1 -1
  194. package/dist/models/factory-integration.js.map +1 -1
  195. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +3 -3
  196. package/dist/node_modules/@evalops/contracts/dist/index.js +2 -2
  197. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  198. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
  199. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  200. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
  201. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  202. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  203. package/dist/node_modules/@evalops/tui/package.json +1 -1
  204. package/dist/oauth/connectors.d.ts +2 -2
  205. package/dist/oauth/connectors.d.ts.map +1 -1
  206. package/dist/oauth/connectors.js +3 -5
  207. package/dist/oauth/connectors.js.map +1 -1
  208. package/dist/oauth/github-copilot.d.ts +1 -1
  209. package/dist/oauth/github-copilot.js +1 -1
  210. package/dist/oauth/github-copilot.js.map +1 -1
  211. package/dist/oauth/index.d.ts +10 -8
  212. package/dist/oauth/index.d.ts.map +1 -1
  213. package/dist/oauth/index.js +54 -31
  214. package/dist/oauth/index.js.map +1 -1
  215. package/dist/oauth/openai.d.ts +1 -1
  216. package/dist/oauth/openai.js +2 -2
  217. package/dist/oauth/openai.js.map +1 -1
  218. package/dist/platform/a2a-completion-audit.d.ts +41 -0
  219. package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
  220. package/dist/platform/a2a-completion-audit.js +177 -0
  221. package/dist/platform/a2a-completion-audit.js.map +1 -0
  222. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  223. package/dist/platform/a2a-task-ledger.js +17 -0
  224. package/dist/platform/a2a-task-ledger.js.map +1 -1
  225. package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
  226. package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
  227. package/dist/platform/a2a-telemetry-inspect.js +224 -0
  228. package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
  229. package/dist/platform/agent-registry-client.d.ts +8 -0
  230. package/dist/platform/agent-registry-client.d.ts.map +1 -1
  231. package/dist/platform/agent-registry-client.js +9 -1
  232. package/dist/platform/agent-registry-client.js.map +1 -1
  233. package/dist/providers/api-keys.d.ts +2 -2
  234. package/dist/providers/api-keys.js +2 -2
  235. package/dist/providers/api-keys.js.map +1 -1
  236. package/dist/providers/auth.d.ts +3 -6
  237. package/dist/providers/auth.d.ts.map +1 -1
  238. package/dist/providers/auth.js +1 -40
  239. package/dist/providers/auth.js.map +1 -1
  240. package/dist/rpc/index.d.ts +2 -2
  241. package/dist/rpc/index.js +2 -2
  242. package/dist/rpc/index.js.map +1 -1
  243. package/dist/rpc/rpc-types.d.ts +1 -1
  244. package/dist/rpc/rpc-types.js +1 -1
  245. package/dist/rpc/rpc-types.js.map +1 -1
  246. package/dist/safety/nested-agent-guard.js +1 -1
  247. package/dist/safety/nested-agent-guard.js.map +1 -1
  248. package/dist/safety/policy.d.ts +2 -2
  249. package/dist/safety/policy.js +2 -2
  250. package/dist/safety/policy.js.map +1 -1
  251. package/dist/safety/validators/network-policy-validator.d.ts +8 -0
  252. package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
  253. package/dist/safety/validators/network-policy-validator.js +29 -4
  254. package/dist/safety/validators/network-policy-validator.js.map +1 -1
  255. package/dist/sandbox/local-sandbox.d.ts +1 -1
  256. package/dist/sandbox/local-sandbox.js +1 -1
  257. package/dist/sandbox/local-sandbox.js.map +1 -1
  258. package/dist/server/app-context.d.ts +2 -0
  259. package/dist/server/app-context.d.ts.map +1 -1
  260. package/dist/server/app-context.js.map +1 -1
  261. package/dist/server/handlers/attachments.d.ts.map +1 -1
  262. package/dist/server/handlers/attachments.js +1 -0
  263. package/dist/server/handlers/attachments.js.map +1 -1
  264. package/dist/server/handlers/models.d.ts.map +1 -1
  265. package/dist/server/handlers/models.js +3 -1
  266. package/dist/server/handlers/models.js.map +1 -1
  267. package/dist/server/handlers/session-attachments.d.ts.map +1 -1
  268. package/dist/server/handlers/session-attachments.js +2 -0
  269. package/dist/server/handlers/session-attachments.js.map +1 -1
  270. package/dist/server/handlers/sessions.js +1 -1
  271. package/dist/server/handlers/sessions.js.map +1 -1
  272. package/dist/server/handlers/status.d.ts +2 -0
  273. package/dist/server/handlers/status.d.ts.map +1 -1
  274. package/dist/server/handlers/status.js +3 -2
  275. package/dist/server/handlers/status.js.map +1 -1
  276. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  277. package/dist/server/headless-runtime-service.js +32 -3
  278. package/dist/server/headless-runtime-service.js.map +1 -1
  279. package/dist/server/hosted-session-manager.d.ts +2 -0
  280. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  281. package/dist/server/hosted-session-manager.js +9 -0
  282. package/dist/server/hosted-session-manager.js.map +1 -1
  283. package/dist/server/model-selection.d.ts.map +1 -1
  284. package/dist/server/model-selection.js +9 -1
  285. package/dist/server/model-selection.js.map +1 -1
  286. package/dist/server/rate-limiter.d.ts +1 -1
  287. package/dist/server/rate-limiter.js +1 -1
  288. package/dist/server/rate-limiter.js.map +1 -1
  289. package/dist/server/router.d.ts +2 -2
  290. package/dist/server/router.js.map +1 -1
  291. package/dist/server/session-serialization.d.ts +9 -9
  292. package/dist/server/session-serialization.js +15 -15
  293. package/dist/server/session-serialization.js.map +1 -1
  294. package/dist/session/manager.d.ts +5 -0
  295. package/dist/session/manager.d.ts.map +1 -1
  296. package/dist/session/manager.js +56 -8
  297. package/dist/session/manager.js.map +1 -1
  298. package/dist/session/session-catalog.d.ts +2 -0
  299. package/dist/session/session-catalog.d.ts.map +1 -1
  300. package/dist/session/session-catalog.js +6 -0
  301. package/dist/session/session-catalog.js.map +1 -1
  302. package/dist/session/session-context.d.ts +2 -0
  303. package/dist/session/session-context.d.ts.map +1 -1
  304. package/dist/session/session-context.js +15 -0
  305. package/dist/session/session-context.js.map +1 -1
  306. package/dist/session/types.d.ts +7 -0
  307. package/dist/session/types.d.ts.map +1 -1
  308. package/dist/session/types.js.map +1 -1
  309. package/dist/session/wire-format.generated.d.ts +1 -0
  310. package/dist/session/wire-format.generated.d.ts.map +1 -1
  311. package/dist/session/wire-format.generated.js +1 -0
  312. package/dist/session/wire-format.generated.js.map +1 -1
  313. package/dist/shared-memory/contract.d.ts +4 -4
  314. package/dist/shared-memory/contract.js +2 -2
  315. package/dist/shared-memory/contract.js.map +1 -1
  316. package/dist/telemetry/index.d.ts +2 -2
  317. package/dist/telemetry/index.d.ts.map +1 -1
  318. package/dist/telemetry/index.js +2 -2
  319. package/dist/telemetry/index.js.map +1 -1
  320. package/dist/telemetry/maestro-event-bus.d.ts +57 -0
  321. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  322. package/dist/telemetry/maestro-event-bus.js +59 -1
  323. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  324. package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
  325. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  326. package/dist/telemetry/maestro-event-catalog.js +24 -0
  327. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  328. package/dist/telemetry/mcp-beacon.d.ts +2 -0
  329. package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
  330. package/dist/telemetry/mcp-beacon.js +15 -0
  331. package/dist/telemetry/mcp-beacon.js.map +1 -1
  332. package/dist/telemetry/metrics.d.ts +62 -0
  333. package/dist/telemetry/metrics.d.ts.map +1 -1
  334. package/dist/telemetry/metrics.js +84 -0
  335. package/dist/telemetry/metrics.js.map +1 -1
  336. package/dist/telemetry.d.ts +44 -0
  337. package/dist/telemetry.d.ts.map +1 -1
  338. package/dist/telemetry.js +84 -2
  339. package/dist/telemetry.js.map +1 -1
  340. package/dist/theme/theme-loader.js +2 -2
  341. package/dist/theme/theme-loader.js.map +1 -1
  342. package/dist/theme/theme-schema.json +2 -2
  343. package/dist/theme/theme.d.ts +1 -1
  344. package/dist/theme/theme.js.map +1 -1
  345. package/dist/tools/background/task-types.d.ts +1 -1
  346. package/dist/tools/extract-document.d.ts +1 -0
  347. package/dist/tools/extract-document.d.ts.map +1 -1
  348. package/dist/tools/extract-document.js +2 -1
  349. package/dist/tools/extract-document.js.map +1 -1
  350. package/dist/tools/index.d.ts +55 -55
  351. package/dist/tools/index.js +1 -1
  352. package/dist/tools/index.js.map +1 -1
  353. package/dist/tools/tool-dsl.d.ts +1 -1
  354. package/dist/tools/tool-dsl.js +1 -1
  355. package/dist/tools/tool-dsl.js.map +1 -1
  356. package/dist/utils/document-extractor.d.ts +1 -0
  357. package/dist/utils/document-extractor.d.ts.map +1 -1
  358. package/dist/utils/document-extractor.js +320 -40
  359. package/dist/utils/document-extractor.js.map +1 -1
  360. package/dist/utils/logger.d.ts +1 -1
  361. package/dist/utils/logger.js +1 -1
  362. package/dist/utils/logger.js.map +1 -1
  363. package/dist/version.json +2 -2
  364. package/dist/web-server.d.ts +1 -1
  365. package/dist/web-server.d.ts.map +1 -1
  366. package/dist/web-server.js +12 -8
  367. package/dist/web-server.js.map +1 -1
  368. package/package.json +4 -2
  369. package/dist/oauth/anthropic.d.ts +0 -17
  370. package/dist/oauth/anthropic.d.ts.map +0 -1
  371. package/dist/oauth/anthropic.js +0 -81
  372. package/dist/oauth/anthropic.js.map +0 -1
  373. package/dist/providers/anthropic-auth.d.ts +0 -75
  374. package/dist/providers/anthropic-auth.d.ts.map +0 -1
  375. package/dist/providers/anthropic-auth.js +0 -221
  376. package/dist/providers/anthropic-auth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/server/router.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview HTTP Router for Composer Web Server\n *\n * This module provides a lightweight, Express-like router for handling HTTP requests\n * in the Composer web server. It supports:\n *\n * - **Path Parameters**: Dynamic route segments using `:param` syntax (e.g., `/api/sessions/:id`)\n * - **Method Matching**: Routes are matched by HTTP method (GET, POST, PUT, DELETE, etc.)\n * - **Fallback Handlers**: Optional fallback for unmatched routes (e.g., static file serving)\n * - **Error Handling**: Centralized error handling with ApiError support\n *\n * ## Route Matching Algorithm\n *\n * Routes are matched in registration order. The first route that matches both:\n * 1. The HTTP method (case-insensitive)\n * 2. The path pattern (exact match or parameter capture)\n *\n * ...will handle the request. If no route matches and a fallback is provided,\n * the fallback handler is invoked.\n *\n * ## Path Parameter Syntax\n *\n * ```\n * /api/users/:id → { id: \"123\" }\n * /api/files/:path → { path: \"src/index.ts\" }\n * /api/:resource/:id → { resource: \"sessions\", id: \"abc\" }\n * ```\n *\n * ## Usage Example\n *\n * ```typescript\n * const routes: Route[] = [\n * { method: \"GET\", path: \"/api/status\", handler: handleStatus },\n * { method: \"GET\", path: \"/api/sessions/:id\", handler: handleGetSession },\n * { method: \"POST\", path: \"/api/chat\", handler: handleChat },\n * ];\n *\n * const handler = createRequestHandler(routes, staticFileFallback, corsHeaders);\n * http.createServer((req, res) => handler(req, res, new URL(req.url!).pathname));\n * ```\n *\n * @module web/router\n */\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"web:router\");\n\n/**\n * Handler function for processing HTTP requests.\n *\n * Route handlers receive the raw Node.js request/response objects plus\n * any path parameters extracted from the URL.\n *\n * @param req - The incoming HTTP request\n * @param res - The server response object\n * @param params - Path parameters extracted from the URL (e.g., `{ id: \"123\" }`)\n * @returns A promise that resolves when the response is complete, or void for sync handlers\n *\n * @example\n * ```typescript\n * const handler: RouteHandler = async (req, res, params) => {\n * const sessionId = params.id;\n * const session = await getSession(sessionId);\n * res.writeHead(200, { \"Content-Type\": \"application/json\" });\n * res.end(JSON.stringify(session));\n * };\n * ```\n */\nexport type RouteHandler = (\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tparams: Record<string, string>,\n) => Promise<void> | void;\n\n/**\n * Route definition for the HTTP router.\n *\n * Each route specifies an HTTP method, a path pattern, and a handler function.\n * Path patterns can include dynamic segments using the `:param` syntax.\n *\n * @example\n * ```typescript\n * const route: Route = {\n * method: \"GET\",\n * path: \"/api/sessions/:id\",\n * handler: async (req, res, params) => {\n * // params.id contains the session ID from the URL\n * },\n * };\n * ```\n */\nexport interface Route {\n\t/** HTTP method (GET, POST, PUT, DELETE, etc.) - case-insensitive */\n\tmethod: string;\n\t/** URL path pattern, may include `:param` segments for dynamic matching */\n\tpath: string;\n\t/** Handler function to process matching requests */\n\thandler: RouteHandler;\n}\n\n/**\n * Splits a URL pathname into path segments.\n *\n * Handles edge cases like trailing slashes and root paths.\n *\n * @param pathname - The URL pathname to split\n * @returns Array of path segments (empty array for root path)\n *\n * @example\n * ```typescript\n * toSegments(\"/api/sessions/123\") // [\"api\", \"sessions\", \"123\"]\n * toSegments(\"/\") // []\n * toSegments(\"/users/\") // [\"users\"]\n * ```\n *\n * @internal\n */\nfunction toSegments(pathname: string): string[] {\n\tif (pathname === \"/\" || pathname === \"\") return [];\n\treturn pathname.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n}\n\n/**\n * Matches a URL pathname against a route path pattern.\n *\n * Performs segment-by-segment comparison, extracting path parameters\n * from segments that start with `:`.\n *\n * @param routePath - The route path pattern (may contain `:param` segments)\n * @param pathname - The actual URL pathname to match\n * @returns Object containing match status and extracted parameters\n *\n * @example\n * ```typescript\n * matchPath(\"/api/sessions/:id\", \"/api/sessions/abc123\")\n * // { matched: true, params: { id: \"abc123\" } }\n *\n * matchPath(\"/api/users/:id\", \"/api/sessions/abc\")\n * // { matched: false, params: {} }\n * ```\n *\n * @internal\n */\nfunction matchPath(\n\troutePath: string,\n\tpathname: string,\n): { matched: boolean; params: Record<string, string> } {\n\tconst routeSegments = toSegments(routePath);\n\tconst pathSegments = toSegments(pathname);\n\n\tif (routeSegments.length !== pathSegments.length) {\n\t\treturn { matched: false, params: {} };\n\t}\n\n\tconst params: Record<string, string> = {};\n\tfor (let i = 0; i < routeSegments.length; i++) {\n\t\tconst routeSegment = routeSegments[i]!;\n\t\tconst pathSegment = pathSegments[i]!;\n\t\tif (routeSegment.startsWith(\":\")) {\n\t\t\tparams[routeSegment.slice(1)] = pathSegment;\n\t\t\tcontinue;\n\t\t}\n\t\tif (routeSegment !== pathSegment) {\n\t\t\treturn { matched: false, params: {} };\n\t\t}\n\t}\n\n\treturn { matched: true, params };\n}\n\n/**\n * Finds the first matching route for an HTTP request.\n *\n * Iterates through routes in registration order, returning the first\n * route that matches both the HTTP method and path pattern.\n *\n * @param method - The HTTP method (GET, POST, etc.)\n * @param pathname - The URL pathname to match\n * @param routes - Array of route definitions to search\n * @returns The matching handler and extracted params, or null if no match\n *\n * @example\n * ```typescript\n * const routes = [\n * { method: \"GET\", path: \"/api/status\", handler: statusHandler },\n * { method: \"GET\", path: \"/api/sessions/:id\", handler: sessionHandler },\n * ];\n *\n * const result = matchRoute(\"GET\", \"/api/sessions/abc\", routes);\n * // { handler: sessionHandler, params: { id: \"abc\" } }\n *\n * const noMatch = matchRoute(\"POST\", \"/api/status\", routes);\n * // null (method doesn't match)\n * ```\n */\nexport function matchRoute(\n\tmethod: string,\n\tpathname: string,\n\troutes: Route[],\n): { handler: RouteHandler; params: Record<string, string> } | null {\n\tconst targetMethod = method.toUpperCase();\n\tfor (const route of routes) {\n\t\tif (route.method.toUpperCase() !== targetMethod) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst { matched, params } = matchPath(route.path, pathname);\n\t\tif (matched) {\n\t\t\treturn { handler: route.handler, params };\n\t\t}\n\t}\n\treturn null;\n}\n\nimport { ApiError, respondWithApiError } from \"./server-utils.js\";\n\n/**\n * Creates a request handler function that routes HTTP requests to appropriate handlers.\n *\n * This is the main entry point for the router. It returns an async function that:\n * 1. Matches the request against registered routes\n * 2. Invokes the matching handler with extracted path parameters\n * 3. Falls back to a fallback handler if no route matches\n * 4. Handles errors gracefully with proper logging and sanitized responses\n *\n * ## Error Handling\n *\n * - All handler errors are logged with path and method context\n * - `ApiError` instances are sent to the client with their status code\n * - Other errors are sanitized to \"Internal server error\" for security\n * - If headers are already sent (e.g., during streaming), errors are logged but not re-sent\n *\n * @param routes - Array of route definitions to match against\n * @param fallback - Optional handler for unmatched routes (e.g., static file serving)\n * @param corsHeaders - CORS headers to include in error responses\n * @returns An async request handler function for use with Node.js HTTP server\n *\n * @example\n * ```typescript\n * const routes: Route[] = [\n * { method: \"GET\", path: \"/api/health\", handler: healthCheck },\n * { method: \"POST\", path: \"/api/chat\", handler: handleChat },\n * ];\n *\n * const handler = createRequestHandler(\n * routes,\n * serveStaticFiles,\n * { \"Access-Control-Allow-Origin\": \"*\" }\n * );\n *\n * const server = http.createServer(async (req, res) => {\n * const url = new URL(req.url!, `http://${req.headers.host}`);\n * await handler(req, res, url.pathname);\n * });\n * ```\n */\nexport function createRequestHandler(\n\troutes: Route[],\n\tfallback?: (\n\t\treq: IncomingMessage,\n\t\tres: ServerResponse,\n\t\tpathname: string,\n\t) => Promise<void> | void,\n\tcorsHeaders: Record<string, string> = {},\n) {\n\treturn async (\n\t\treq: IncomingMessage,\n\t\tres: ServerResponse,\n\t\tpathname: string,\n\t) => {\n\t\ttry {\n\t\t\tconst match = matchRoute(req.method || \"GET\", pathname, routes);\n\t\t\tif (match) {\n\t\t\t\tawait match.handler(req, res, match.params);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (fallback) {\n\t\t\t\tawait fallback(req, res, pathname);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Always log router-level errors; streaming handlers may have sent headers already.\n\t\t\tlogger.error(\"Router error\", error instanceof Error ? error : undefined, {\n\t\t\t\tpath: pathname,\n\t\t\t\tmethod: req.method,\n\t\t\t});\n\t\t\tif (res.headersSent || res.writableEnded) return;\n\t\t\tif (error instanceof ApiError) {\n\t\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Sanitize unexpected errors for clients while keeping server-side log above.\n\t\t\trespondWithApiError(\n\t\t\t\tres,\n\t\t\t\tnew ApiError(500, \"Internal server error\"),\n\t\t\t\t500,\n\t\t\t\tcorsHeaders,\n\t\t\t\treq,\n\t\t\t);\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/server/router.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview HTTP Router for Maestro Web Server\n *\n * This module provides a lightweight, Express-like router for handling HTTP requests\n * in the Maestro web server. It supports:\n *\n * - **Path Parameters**: Dynamic route segments using `:param` syntax (e.g., `/api/sessions/:id`)\n * - **Method Matching**: Routes are matched by HTTP method (GET, POST, PUT, DELETE, etc.)\n * - **Fallback Handlers**: Optional fallback for unmatched routes (e.g., static file serving)\n * - **Error Handling**: Centralized error handling with ApiError support\n *\n * ## Route Matching Algorithm\n *\n * Routes are matched in registration order. The first route that matches both:\n * 1. The HTTP method (case-insensitive)\n * 2. The path pattern (exact match or parameter capture)\n *\n * ...will handle the request. If no route matches and a fallback is provided,\n * the fallback handler is invoked.\n *\n * ## Path Parameter Syntax\n *\n * ```\n * /api/users/:id → { id: \"123\" }\n * /api/files/:path → { path: \"src/index.ts\" }\n * /api/:resource/:id → { resource: \"sessions\", id: \"abc\" }\n * ```\n *\n * ## Usage Example\n *\n * ```typescript\n * const routes: Route[] = [\n * { method: \"GET\", path: \"/api/status\", handler: handleStatus },\n * { method: \"GET\", path: \"/api/sessions/:id\", handler: handleGetSession },\n * { method: \"POST\", path: \"/api/chat\", handler: handleChat },\n * ];\n *\n * const handler = createRequestHandler(routes, staticFileFallback, corsHeaders);\n * http.createServer((req, res) => handler(req, res, new URL(req.url!).pathname));\n * ```\n *\n * @module web/router\n */\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst logger = createLogger(\"web:router\");\n\n/**\n * Handler function for processing HTTP requests.\n *\n * Route handlers receive the raw Node.js request/response objects plus\n * any path parameters extracted from the URL.\n *\n * @param req - The incoming HTTP request\n * @param res - The server response object\n * @param params - Path parameters extracted from the URL (e.g., `{ id: \"123\" }`)\n * @returns A promise that resolves when the response is complete, or void for sync handlers\n *\n * @example\n * ```typescript\n * const handler: RouteHandler = async (req, res, params) => {\n * const sessionId = params.id;\n * const session = await getSession(sessionId);\n * res.writeHead(200, { \"Content-Type\": \"application/json\" });\n * res.end(JSON.stringify(session));\n * };\n * ```\n */\nexport type RouteHandler = (\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tparams: Record<string, string>,\n) => Promise<void> | void;\n\n/**\n * Route definition for the HTTP router.\n *\n * Each route specifies an HTTP method, a path pattern, and a handler function.\n * Path patterns can include dynamic segments using the `:param` syntax.\n *\n * @example\n * ```typescript\n * const route: Route = {\n * method: \"GET\",\n * path: \"/api/sessions/:id\",\n * handler: async (req, res, params) => {\n * // params.id contains the session ID from the URL\n * },\n * };\n * ```\n */\nexport interface Route {\n\t/** HTTP method (GET, POST, PUT, DELETE, etc.) - case-insensitive */\n\tmethod: string;\n\t/** URL path pattern, may include `:param` segments for dynamic matching */\n\tpath: string;\n\t/** Handler function to process matching requests */\n\thandler: RouteHandler;\n}\n\n/**\n * Splits a URL pathname into path segments.\n *\n * Handles edge cases like trailing slashes and root paths.\n *\n * @param pathname - The URL pathname to split\n * @returns Array of path segments (empty array for root path)\n *\n * @example\n * ```typescript\n * toSegments(\"/api/sessions/123\") // [\"api\", \"sessions\", \"123\"]\n * toSegments(\"/\") // []\n * toSegments(\"/users/\") // [\"users\"]\n * ```\n *\n * @internal\n */\nfunction toSegments(pathname: string): string[] {\n\tif (pathname === \"/\" || pathname === \"\") return [];\n\treturn pathname.replace(/^\\/+|\\/+$/g, \"\").split(\"/\");\n}\n\n/**\n * Matches a URL pathname against a route path pattern.\n *\n * Performs segment-by-segment comparison, extracting path parameters\n * from segments that start with `:`.\n *\n * @param routePath - The route path pattern (may contain `:param` segments)\n * @param pathname - The actual URL pathname to match\n * @returns Object containing match status and extracted parameters\n *\n * @example\n * ```typescript\n * matchPath(\"/api/sessions/:id\", \"/api/sessions/abc123\")\n * // { matched: true, params: { id: \"abc123\" } }\n *\n * matchPath(\"/api/users/:id\", \"/api/sessions/abc\")\n * // { matched: false, params: {} }\n * ```\n *\n * @internal\n */\nfunction matchPath(\n\troutePath: string,\n\tpathname: string,\n): { matched: boolean; params: Record<string, string> } {\n\tconst routeSegments = toSegments(routePath);\n\tconst pathSegments = toSegments(pathname);\n\n\tif (routeSegments.length !== pathSegments.length) {\n\t\treturn { matched: false, params: {} };\n\t}\n\n\tconst params: Record<string, string> = {};\n\tfor (let i = 0; i < routeSegments.length; i++) {\n\t\tconst routeSegment = routeSegments[i]!;\n\t\tconst pathSegment = pathSegments[i]!;\n\t\tif (routeSegment.startsWith(\":\")) {\n\t\t\tparams[routeSegment.slice(1)] = pathSegment;\n\t\t\tcontinue;\n\t\t}\n\t\tif (routeSegment !== pathSegment) {\n\t\t\treturn { matched: false, params: {} };\n\t\t}\n\t}\n\n\treturn { matched: true, params };\n}\n\n/**\n * Finds the first matching route for an HTTP request.\n *\n * Iterates through routes in registration order, returning the first\n * route that matches both the HTTP method and path pattern.\n *\n * @param method - The HTTP method (GET, POST, etc.)\n * @param pathname - The URL pathname to match\n * @param routes - Array of route definitions to search\n * @returns The matching handler and extracted params, or null if no match\n *\n * @example\n * ```typescript\n * const routes = [\n * { method: \"GET\", path: \"/api/status\", handler: statusHandler },\n * { method: \"GET\", path: \"/api/sessions/:id\", handler: sessionHandler },\n * ];\n *\n * const result = matchRoute(\"GET\", \"/api/sessions/abc\", routes);\n * // { handler: sessionHandler, params: { id: \"abc\" } }\n *\n * const noMatch = matchRoute(\"POST\", \"/api/status\", routes);\n * // null (method doesn't match)\n * ```\n */\nexport function matchRoute(\n\tmethod: string,\n\tpathname: string,\n\troutes: Route[],\n): { handler: RouteHandler; params: Record<string, string> } | null {\n\tconst targetMethod = method.toUpperCase();\n\tfor (const route of routes) {\n\t\tif (route.method.toUpperCase() !== targetMethod) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst { matched, params } = matchPath(route.path, pathname);\n\t\tif (matched) {\n\t\t\treturn { handler: route.handler, params };\n\t\t}\n\t}\n\treturn null;\n}\n\nimport { ApiError, respondWithApiError } from \"./server-utils.js\";\n\n/**\n * Creates a request handler function that routes HTTP requests to appropriate handlers.\n *\n * This is the main entry point for the router. It returns an async function that:\n * 1. Matches the request against registered routes\n * 2. Invokes the matching handler with extracted path parameters\n * 3. Falls back to a fallback handler if no route matches\n * 4. Handles errors gracefully with proper logging and sanitized responses\n *\n * ## Error Handling\n *\n * - All handler errors are logged with path and method context\n * - `ApiError` instances are sent to the client with their status code\n * - Other errors are sanitized to \"Internal server error\" for security\n * - If headers are already sent (e.g., during streaming), errors are logged but not re-sent\n *\n * @param routes - Array of route definitions to match against\n * @param fallback - Optional handler for unmatched routes (e.g., static file serving)\n * @param corsHeaders - CORS headers to include in error responses\n * @returns An async request handler function for use with Node.js HTTP server\n *\n * @example\n * ```typescript\n * const routes: Route[] = [\n * { method: \"GET\", path: \"/api/health\", handler: healthCheck },\n * { method: \"POST\", path: \"/api/chat\", handler: handleChat },\n * ];\n *\n * const handler = createRequestHandler(\n * routes,\n * serveStaticFiles,\n * { \"Access-Control-Allow-Origin\": \"*\" }\n * );\n *\n * const server = http.createServer(async (req, res) => {\n * const url = new URL(req.url!, `http://${req.headers.host}`);\n * await handler(req, res, url.pathname);\n * });\n * ```\n */\nexport function createRequestHandler(\n\troutes: Route[],\n\tfallback?: (\n\t\treq: IncomingMessage,\n\t\tres: ServerResponse,\n\t\tpathname: string,\n\t) => Promise<void> | void,\n\tcorsHeaders: Record<string, string> = {},\n) {\n\treturn async (\n\t\treq: IncomingMessage,\n\t\tres: ServerResponse,\n\t\tpathname: string,\n\t) => {\n\t\ttry {\n\t\t\tconst match = matchRoute(req.method || \"GET\", pathname, routes);\n\t\t\tif (match) {\n\t\t\t\tawait match.handler(req, res, match.params);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (fallback) {\n\t\t\t\tawait fallback(req, res, pathname);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Always log router-level errors; streaming handlers may have sent headers already.\n\t\t\tlogger.error(\"Router error\", error instanceof Error ? error : undefined, {\n\t\t\t\tpath: pathname,\n\t\t\t\tmethod: req.method,\n\t\t\t});\n\t\t\tif (res.headersSent || res.writableEnded) return;\n\t\t\tif (error instanceof ApiError) {\n\t\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Sanitize unexpected errors for clients while keeping server-side log above.\n\t\t\trespondWithApiError(\n\t\t\t\tres,\n\t\t\t\tnew ApiError(500, \"Internal server error\"),\n\t\t\t\t500,\n\t\t\t\tcorsHeaders,\n\t\t\t\treq,\n\t\t\t);\n\t\t}\n\t};\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * Session Serialization Module
3
3
  *
4
4
  * This module handles bidirectional conversion between internal agent message
5
- * types (AppMessage, AssistantMessage, etc.) and the external Composer protocol
5
+ * types (AppMessage, AssistantMessage, etc.) and the external Maestro protocol
6
6
  * messages (ComposerMessage). This conversion is essential for:
7
7
  *
8
8
  * - Web API: Converting agent output to JSON for the web client
@@ -57,9 +57,9 @@ export declare function createEmptyUsage(): Usage;
57
57
  */
58
58
  export declare function serializeToolContent(tool: ComposerToolCall): string;
59
59
  /**
60
- * Convert a single internal AppMessage to Composer protocol format.
60
+ * Convert a single internal AppMessage to Maestro protocol format.
61
61
  *
62
- * This is the main App -> Composer conversion function. It handles:
62
+ * This is the main app -> Maestro conversion function. It handles:
63
63
  * - User messages: Extract text content
64
64
  * - Assistant messages: Extract text, thinking, and tool calls
65
65
  * - Tool results: Extract result content and error status
@@ -72,27 +72,27 @@ export declare function convertAppMessageToComposer(message: AppMessage, index?:
72
72
  includeAttachmentContent?: boolean;
73
73
  }): ComposerMessage;
74
74
  /**
75
- * Convert an array of AppMessages to Composer format.
75
+ * Convert an array of AppMessages to Maestro format.
76
76
  * Preserves message order and provides index context for errors.
77
77
  */
78
78
  export declare function convertAppMessagesToComposer(messages: AppMessage[], options?: {
79
79
  includeAttachmentContent?: boolean;
80
80
  }): ComposerMessage[];
81
81
  /**
82
- * Convert a single Composer message to internal AppMessage format.
82
+ * Convert a single Maestro message to internal AppMessage format.
83
83
  *
84
- * This is the main Composer -> App conversion function. Note that a single
85
- * Composer message may expand to multiple AppMessages when tool calls are
84
+ * This is the main Maestro -> app conversion function. Note that a single
85
+ * Maestro message may expand to multiple AppMessages when tool calls are
86
86
  * present (the assistant message + one toolResult per tool).
87
87
  *
88
- * @param message - The Composer message to convert
88
+ * @param message - The Maestro message to convert
89
89
  * @param model - Model metadata to attach to assistant messages
90
90
  * @param index - Position in the message array (for error context)
91
91
  * @returns Array of AppMessages (may be 1+ messages)
92
92
  */
93
93
  export declare function convertComposerMessageToApp(message: ComposerMessage, model: RegisteredModel, index?: number): AppMessage[];
94
94
  /**
95
- * Convert an array of Composer messages to internal AppMessage format.
95
+ * Convert an array of Maestro messages to internal AppMessage format.
96
96
  *
97
97
  * Note: The output array may be longer than the input because assistant
98
98
  * messages with tool calls expand to multiple AppMessages.
@@ -2,7 +2,7 @@
2
2
  * Session Serialization Module
3
3
  *
4
4
  * This module handles bidirectional conversion between internal agent message
5
- * types (AppMessage, AssistantMessage, etc.) and the external Composer protocol
5
+ * types (AppMessage, AssistantMessage, etc.) and the external Maestro protocol
6
6
  * messages (ComposerMessage). This conversion is essential for:
7
7
  *
8
8
  * - Web API: Converting agent output to JSON for the web client
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import { isAssistantMessage, isToolResultMessage, isUserMessage, } from "../agent/type-guards.js";
24
24
  /**
25
- * Convert internal Usage to Composer protocol format.
25
+ * Convert internal Usage to Maestro protocol format.
26
26
  * Handles missing/undefined fields by defaulting to zero.
27
27
  */
28
28
  function toComposerUsage(usage) {
@@ -271,7 +271,7 @@ function extractThinking(content) {
271
271
  return thought.length ? thought : undefined;
272
272
  }
273
273
  /**
274
- * Extract tool calls from a message into Composer format.
274
+ * Extract tool calls from a message into Maestro format.
275
275
  * Returns empty array if no tool calls are present.
276
276
  */
277
277
  function extractToolCalls(content) {
@@ -329,9 +329,9 @@ function normalizeComposerContentBlocks(content) {
329
329
  return normalized;
330
330
  }
331
331
  /**
332
- * Convert a single internal AppMessage to Composer protocol format.
332
+ * Convert a single internal AppMessage to Maestro protocol format.
333
333
  *
334
- * This is the main App -> Composer conversion function. It handles:
334
+ * This is the main app -> Maestro conversion function. It handles:
335
335
  * - User messages: Extract text content
336
336
  * - Assistant messages: Extract text, thinking, and tool calls
337
337
  * - Tool results: Extract result content and error status
@@ -392,17 +392,17 @@ export function convertAppMessageToComposer(message, index = 0, options) {
392
392
  throw new SessionSerializationError("Unsupported App role", context);
393
393
  }
394
394
  /**
395
- * Convert an array of AppMessages to Composer format.
395
+ * Convert an array of AppMessages to Maestro format.
396
396
  * Preserves message order and provides index context for errors.
397
397
  */
398
398
  export function convertAppMessagesToComposer(messages, options) {
399
399
  return messages.map((message, index) => convertAppMessageToComposer(message, index, options));
400
400
  }
401
401
  /**
402
- * Normalize a Composer tool call to internal ToolCall format.
402
+ * Normalize a Maestro tool call to internal ToolCall format.
403
403
  * Generates stable IDs if not provided.
404
404
  *
405
- * @param tool - The Composer tool call to normalize
405
+ * @param tool - The Maestro tool call to normalize
406
406
  * @param messageIndex - Message position (for generating fallback IDs)
407
407
  * @param contentIndex - Content block position (for generating fallback IDs)
408
408
  */
@@ -420,7 +420,7 @@ function normalizeToolCall(tool, messageIndex, contentIndex) {
420
420
  };
421
421
  }
422
422
  /**
423
- * Create a ToolResultMessage from a Composer tool call.
423
+ * Create a ToolResultMessage from a Maestro tool call.
424
424
  * The result is derived from the tool call's embedded result field.
425
425
  */
426
426
  function normalizeToolResult(tool, normalizedCall, timestamp, context) {
@@ -439,13 +439,13 @@ function normalizeToolResult(tool, normalizedCall, timestamp, context) {
439
439
  };
440
440
  }
441
441
  /**
442
- * Convert a single Composer message to internal AppMessage format.
442
+ * Convert a single Maestro message to internal AppMessage format.
443
443
  *
444
- * This is the main Composer -> App conversion function. Note that a single
445
- * Composer message may expand to multiple AppMessages when tool calls are
444
+ * This is the main Maestro -> app conversion function. Note that a single
445
+ * Maestro message may expand to multiple AppMessages when tool calls are
446
446
  * present (the assistant message + one toolResult per tool).
447
447
  *
448
- * @param message - The Composer message to convert
448
+ * @param message - The Maestro message to convert
449
449
  * @param model - Model metadata to attach to assistant messages
450
450
  * @param index - Position in the message array (for error context)
451
451
  * @returns Array of AppMessages (may be 1+ messages)
@@ -626,10 +626,10 @@ export function convertComposerMessageToApp(message, model, index = 0) {
626
626
  },
627
627
  ];
628
628
  }
629
- throw new SessionSerializationError("Unsupported Composer role", context);
629
+ throw new SessionSerializationError("Unsupported Maestro role", context);
630
630
  }
631
631
  /**
632
- * Convert an array of Composer messages to internal AppMessage format.
632
+ * Convert an array of Maestro messages to internal AppMessage format.
633
633
  *
634
634
  * Note: The output array may be longer than the input because assistant
635
635
  * messages with tool calls expand to multiple AppMessages.
@@ -1 +1 @@
1
- {"version":3,"file":"session-serialization.js","sourceRoot":"","sources":["../../src/server/session-serialization.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Serialization Module\n *\n * This module handles bidirectional conversion between internal agent message\n * types (AppMessage, AssistantMessage, etc.) and the external Composer protocol\n * messages (ComposerMessage). This conversion is essential for:\n *\n * - Web API: Converting agent output to JSON for the web client\n * - Session persistence: Storing/loading sessions in a portable format\n * - History hydration: Reconstructing agent state from saved sessions\n *\n * The conversion handles several complexities:\n * - Multi-content messages (text, images, thinking blocks, tool calls)\n * - Tool call/result pairing across message boundaries\n * - Usage/cost tracking with nested structures\n * - Timestamp normalization between formats\n *\n * Key design decisions:\n * - Images are replaced with placeholders (too large for JSON)\n * - Thinking blocks are extracted to a separate field\n * - Tool calls are serialized with their results as separate messages\n */\n\nimport type {\n\tComposerAttachment,\n\tComposerContentBlock,\n\tComposerMessage,\n\tComposerToolCall,\n\tComposerUsage,\n} from \"@evalops/contracts\";\nimport {\n\tisAssistantMessage,\n\tisToolResultMessage,\n\tisUserMessage,\n} from \"../agent/type-guards.js\";\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tAttachment,\n\tImageContent,\n\tTextContent,\n\tThinkingContent,\n\tToolCall,\n\tToolResultMessage,\n\tUsage,\n} from \"../agent/types.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\n\n/** Direction of conversion for error context */\nexport type SessionSerializationDirection = \"app->composer\" | \"composer->app\";\n\n/**\n * Context provided in serialization errors for debugging.\n * Includes message index and direction to locate the problematic message.\n */\nexport interface SessionSerializationContext {\n\t/** Index of the message in the array (0-based) */\n\tindex?: number;\n\t/** Role of the message being converted */\n\trole?: string;\n\t/** Direction of the conversion */\n\tsource?: SessionSerializationDirection;\n}\n\n/**\n * Convert internal Usage to Composer protocol format.\n * Handles missing/undefined fields by defaulting to zero.\n */\nfunction toComposerUsage(usage?: Usage): ComposerUsage | undefined {\n\tif (!usage) return undefined;\n\treturn {\n\t\tinput: usage.input ?? 0,\n\t\toutput: usage.output ?? 0,\n\t\tcacheRead: usage.cacheRead ?? 0,\n\t\tcacheWrite: usage.cacheWrite ?? 0,\n\t\t// Ensure cost object always has all required fields\n\t\tcost: usage.cost\n\t\t\t? {\n\t\t\t\t\tinput: usage.cost.input ?? 0,\n\t\t\t\t\toutput: usage.cost.output ?? 0,\n\t\t\t\t\tcacheRead: usage.cost.cacheRead ?? 0,\n\t\t\t\t\tcacheWrite: usage.cost.cacheWrite ?? 0,\n\t\t\t\t\ttotal: usage.cost.total ?? 0,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotal: 0,\n\t\t\t\t},\n\t};\n}\n\n/**\n * Error thrown when serialization/deserialization fails.\n * Includes context about which message caused the failure.\n */\nexport class SessionSerializationError extends Error {\n\treadonly context?: SessionSerializationContext;\n\n\tconstructor(message: string, context?: SessionSerializationContext) {\n\t\tsuper(context ? `${message} (${JSON.stringify(context)})` : message);\n\t\tthis.name = \"SessionSerializationError\";\n\t\tthis.context = context;\n\t}\n}\n\n// Placeholder strings used when images can't be serialized to JSON\nconst IMAGE_PLACEHOLDER_PREFIX = \"[image:\";\nconst UNKNOWN_IMAGE_PLACEHOLDER = \"[image]\";\n\n/**\n * Safely stringify a value, returning a placeholder if serialization fails.\n * Handles circular references and BigInt values gracefully.\n */\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\n/** Type guard for plain objects (not arrays or null) */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction toComposerAttachments(\n\tattachments: Attachment[] | undefined,\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerAttachment[] | undefined {\n\tif (!attachments || attachments.length === 0) return undefined;\n\tconst includeAttachmentContent = options?.includeAttachmentContent !== false;\n\treturn attachments.map((a) => ({\n\t\tid: a.id,\n\t\ttype: a.type,\n\t\tfileName: a.fileName,\n\t\tmimeType: a.mimeType,\n\t\tsize: a.size,\n\t\tcontent: includeAttachmentContent ? a.content : undefined,\n\t\tcontentOmitted: includeAttachmentContent ? undefined : true,\n\t\textractedText: a.extractedText,\n\t\tpreview: a.preview,\n\t}));\n}\n\nfunction fromComposerAttachments(\n\tattachments: ComposerAttachment[] | undefined,\n): Attachment[] | undefined {\n\tif (!attachments || attachments.length === 0) return undefined;\n\n\tconst out: Attachment[] = [];\n\tfor (const a of attachments) {\n\t\tif (!a) continue;\n\t\tif (typeof a.id !== \"string\" || !a.id) continue;\n\t\tif (a.type !== \"image\" && a.type !== \"document\") continue;\n\t\tif (typeof a.fileName !== \"string\" || !a.fileName) continue;\n\t\tif (typeof a.mimeType !== \"string\" || !a.mimeType) continue;\n\t\tif (typeof a.size !== \"number\" || !Number.isFinite(a.size)) continue;\n\t\tif (typeof a.content !== \"string\" || a.content.length === 0) {\n\t\t\t// Content omitted in session responses; do not pass to agent.\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({\n\t\t\tid: a.id,\n\t\t\ttype: a.type,\n\t\t\tfileName: a.fileName,\n\t\t\tmimeType: a.mimeType,\n\t\t\tsize: a.size,\n\t\t\tcontent: a.content,\n\t\t\textractedText:\n\t\t\t\ttypeof a.extractedText === \"string\" ? a.extractedText : undefined,\n\t\t\tpreview: typeof a.preview === \"string\" ? a.preview : undefined,\n\t\t});\n\t}\n\n\treturn out.length ? out : undefined;\n}\n\n/** Helper to construct error context from conversion parameters */\nfunction buildContext(\n\tsource: SessionSerializationDirection,\n\tindex: number,\n\trole?: string,\n): SessionSerializationContext {\n\treturn { source, index, role };\n}\n\n/**\n * Create a zero-initialized usage object.\n * Used when converting messages that don't have usage data.\n */\nexport function createEmptyUsage(): Usage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\n/**\n * Serialize tool call content to a string for the tool result message.\n * Handles various result types: strings, primitives, objects.\n * Falls back to serializing args if result is missing.\n */\nexport function serializeToolContent(tool: ComposerToolCall): string {\n\t// String results are used directly\n\tif (typeof tool.result === \"string\") {\n\t\treturn tool.result;\n\t}\n\t// Primitives are converted to string\n\tif (typeof tool.result === \"number\" || typeof tool.result === \"boolean\") {\n\t\treturn String(tool.result);\n\t}\n\t// Objects are JSON-serialized\n\tif (tool.result && typeof tool.result === \"object\") {\n\t\treturn safeStringify(tool.result);\n\t}\n\t// Fallback: serialize the args if no result\n\tif (tool.args && typeof tool.args === \"object\") {\n\t\treturn safeStringify(tool.args);\n\t}\n\treturn \"\";\n}\n\n/**\n * Convert a timestamp to ISO string format.\n * Handles both numeric (ms since epoch) and string inputs.\n * Returns current time if input is undefined.\n */\nfunction toIsoString(\n\tinput: number | string | undefined,\n\tcontext: SessionSerializationContext,\n): string {\n\tif (typeof input === \"number\") {\n\t\t// Validate numeric timestamp (reject NaN, Infinity)\n\t\tif (!Number.isFinite(input)) {\n\t\t\tthrow new SessionSerializationError(\"Invalid numeric timestamp\", context);\n\t\t}\n\t\treturn new Date(input).toISOString();\n\t}\n\tif (typeof input === \"string\") {\n\t\t// Parse and validate string timestamp\n\t\tconst parsed = Date.parse(input);\n\t\tif (!Number.isFinite(parsed)) {\n\t\t\tthrow new SessionSerializationError(\"Invalid timestamp\", context);\n\t\t}\n\t\treturn new Date(parsed).toISOString();\n\t}\n\t// Default to current time if not provided\n\treturn new Date().toISOString();\n}\n\n/**\n * Convert an ISO string timestamp to numeric (ms since epoch).\n * Returns current time if input is undefined.\n */\nfunction toTimestamp(\n\tinput: string | undefined,\n\tcontext: SessionSerializationContext,\n): number {\n\tif (!input) return Date.now();\n\tconst parsed = Date.parse(input);\n\tif (!Number.isFinite(parsed)) {\n\t\tthrow new SessionSerializationError(\"Invalid timestamp\", context);\n\t}\n\treturn parsed;\n}\n\n/**\n * Extract text content from a message's content array.\n * Handles mixed content types:\n * - Text blocks are concatenated\n * - Images are replaced with placeholders\n * - Thinking and tool calls are skipped (handled separately)\n * - Unknown types get a placeholder\n */\nfunction extractTextContent(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): string {\n\tif (!content) return \"\";\n\tif (typeof content === \"string\") return content;\n\n\tconst fragments: string[] = [];\n\tfor (const block of content) {\n\t\tif (!block) continue;\n\n\t\t// Text blocks - include as-is\n\t\tif (block.type === \"text\") {\n\t\t\tfragments.push(block.text);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Image blocks - replace with placeholder (too large for JSON)\n\t\tif (block.type === \"image\") {\n\t\t\tconst descriptor = block.mimeType\n\t\t\t\t? `${IMAGE_PLACEHOLDER_PREFIX}${block.mimeType}]`\n\t\t\t\t: UNKNOWN_IMAGE_PLACEHOLDER;\n\t\t\tfragments.push(descriptor);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Thinking and tool calls are extracted separately, skip here\n\t\tif (block.type === \"thinking\" || block.type === \"toolCall\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Unknown content type - add placeholder with type info\n\t\tconst fallbackType = (block as { type?: string }).type || \"unknown\";\n\t\tfragments.push(`[content:${fallbackType}]`);\n\t}\n\n\treturn fragments.join(\"\\n\\n\");\n}\n\n/**\n * Extract thinking content from a message into a single string.\n * Returns undefined if no thinking blocks are present.\n */\nfunction extractThinking(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): string | undefined {\n\tif (!content || typeof content === \"string\") return undefined;\n\n\t// Filter to thinking blocks, extract text, and join\n\tconst thought = content\n\t\t.filter((block): block is ThinkingContent => block.type === \"thinking\")\n\t\t.map((block) => block.thinking.trim())\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\treturn thought.length ? thought : undefined;\n}\n\n/**\n * Extract tool calls from a message into Composer format.\n * Returns empty array if no tool calls are present.\n */\nfunction extractToolCalls(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): ComposerToolCall[] {\n\tif (!content || typeof content === \"string\") return [];\n\n\treturn content\n\t\t.filter((block): block is ToolCall => block.type === \"toolCall\")\n\t\t.map((toolCall) => ({\n\t\t\tname: toolCall.name?.trim() || \"unnamed_tool\",\n\t\t\tstatus: \"completed\",\n\t\t\targs: toolCall.arguments || {},\n\t\t\ttoolCallId: toolCall.id,\n\t\t}));\n}\n\nfunction extractComposerTextContent(\n\tcontent: ComposerMessage[\"content\"],\n): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\");\n}\n\nfunction normalizeComposerContentBlocks(\n\tcontent: ComposerMessage[\"content\"],\n): Array<TextContent | ThinkingContent | ToolCall | ImageContent> {\n\tif (!Array.isArray(content)) return [];\n\tconst normalized: Array<\n\t\tTextContent | ThinkingContent | ToolCall | ImageContent\n\t> = [];\n\tfor (const block of content as ComposerContentBlock[]) {\n\t\tif (!block || typeof block !== \"object\") continue;\n\t\tif (block.type === \"text\") {\n\t\t\tnormalized.push({ type: \"text\", text: block.text });\n\t\t} else if (block.type === \"thinking\") {\n\t\t\tnormalized.push({ type: \"thinking\", thinking: block.thinking });\n\t\t} else if (block.type === \"toolCall\") {\n\t\t\tnormalized.push({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: block.id,\n\t\t\t\tname: block.name,\n\t\t\t\targuments: block.arguments,\n\t\t\t\tthoughtSignature: block.thoughtSignature,\n\t\t\t});\n\t\t} else if (block.type === \"image\") {\n\t\t\tnormalized.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\tdata: block.data,\n\t\t\t\tmimeType: block.mimeType,\n\t\t\t});\n\t\t}\n\t}\n\treturn normalized;\n}\n\n/**\n * Convert a single internal AppMessage to Composer protocol format.\n *\n * This is the main App -> Composer conversion function. It handles:\n * - User messages: Extract text content\n * - Assistant messages: Extract text, thinking, and tool calls\n * - Tool results: Extract result content and error status\n * - System messages: Extract text content\n *\n * @param message - The internal message to convert\n * @param index - Position in the message array (for error context)\n */\nexport function convertAppMessageToComposer(\n\tmessage: AppMessage,\n\tindex = 0,\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerMessage {\n\tconst context = buildContext(\"app->composer\", index, message.role);\n\tconst timestamp = toIsoString(\n\t\t\"timestamp\" in message ? message.timestamp : undefined,\n\t\tcontext,\n\t);\n\n\t// User messages - simple text extraction\n\tif (isUserMessage(message)) {\n\t\tconst attachments = toComposerAttachments(\n\t\t\t\"attachments\" in message\n\t\t\t\t? (message as { attachments?: Attachment[] }).attachments\n\t\t\t\t: undefined,\n\t\t\toptions,\n\t\t);\n\t\treturn {\n\t\t\trole: \"user\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\ttimestamp,\n\t\t\tattachments,\n\t\t};\n\t}\n\n\t// Assistant messages - extract text, thinking, and tool calls\n\tif (isAssistantMessage(message)) {\n\t\tconst tools = extractToolCalls(message.content);\n\t\treturn {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\tthinking: extractThinking(message.content),\n\t\t\ttimestamp,\n\t\t\ttools: tools.length ? tools : undefined,\n\t\t\tusage: toComposerUsage(message.usage),\n\t\t\tprovider: message.provider,\n\t\t\tapi: message.api,\n\t\t\tmodel: message.model,\n\t\t};\n\t}\n\n\t// Tool result messages - include tool name and error status\n\tif (isToolResultMessage(message)) {\n\t\treturn {\n\t\t\trole: \"tool\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\ttimestamp,\n\t\t\ttoolName: message.toolName,\n\t\t\tisError: message.isError,\n\t\t};\n\t}\n\n\t// System messages (rare, but supported)\n\tconst systemLike = message as {\n\t\trole?: string;\n\t\tcontent?: string | Array<TextContent | ImageContent>;\n\t};\n\tif (systemLike.role === \"system\") {\n\t\treturn {\n\t\t\trole: \"system\",\n\t\t\tcontent: extractTextContent(systemLike.content),\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\tthrow new SessionSerializationError(\"Unsupported App role\", context);\n}\n\n/**\n * Convert an array of AppMessages to Composer format.\n * Preserves message order and provides index context for errors.\n */\nexport function convertAppMessagesToComposer(\n\tmessages: AppMessage[],\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerMessage[] {\n\treturn messages.map((message, index) =>\n\t\tconvertAppMessageToComposer(message, index, options),\n\t);\n}\n\n/**\n * Normalize a Composer tool call to internal ToolCall format.\n * Generates stable IDs if not provided.\n *\n * @param tool - The Composer tool call to normalize\n * @param messageIndex - Message position (for generating fallback IDs)\n * @param contentIndex - Content block position (for generating fallback IDs)\n */\nfunction normalizeToolCall(\n\ttool: ComposerToolCall,\n\tmessageIndex: number,\n\tcontentIndex: number,\n): ToolCall {\n\t// Generate fallback name/ID if not provided\n\tconst name = tool.name?.trim() || `tool_${messageIndex}_${contentIndex}`;\n\tconst toolCallId =\n\t\ttool.toolCallId || `web-tool-${messageIndex}-${contentIndex}`;\n\t// Ensure args is a record (not array or primitive)\n\tconst args: Record<string, unknown> = isRecord(tool.args) ? tool.args : {};\n\n\treturn {\n\t\ttype: \"toolCall\",\n\t\tid: toolCallId,\n\t\tname,\n\t\targuments: args,\n\t};\n}\n\n/**\n * Create a ToolResultMessage from a Composer tool call.\n * The result is derived from the tool call's embedded result field.\n */\nfunction normalizeToolResult(\n\ttool: ComposerToolCall,\n\tnormalizedCall: ToolCall,\n\ttimestamp: string | undefined,\n\tcontext: SessionSerializationContext,\n): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: normalizedCall.id,\n\t\ttoolName: normalizedCall.name,\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: serializeToolContent(tool),\n\t\t\t},\n\t\t],\n\t\tisError: tool.status === \"error\",\n\t\ttimestamp: toTimestamp(timestamp, context),\n\t};\n}\n\n/**\n * Convert a single Composer message to internal AppMessage format.\n *\n * This is the main Composer -> App conversion function. Note that a single\n * Composer message may expand to multiple AppMessages when tool calls are\n * present (the assistant message + one toolResult per tool).\n *\n * @param message - The Composer message to convert\n * @param model - Model metadata to attach to assistant messages\n * @param index - Position in the message array (for error context)\n * @returns Array of AppMessages (may be 1+ messages)\n */\nexport function convertComposerMessageToApp(\n\tmessage: ComposerMessage,\n\tmodel: RegisteredModel,\n\tindex = 0,\n): AppMessage[] {\n\tconst context = buildContext(\"composer->app\", index, message.role);\n\n\t// User messages - wrap content in text block\n\tif (message.role === \"user\") {\n\t\tconst attachments = fromComposerAttachments(message.attachments);\n\t\tif (Array.isArray(message.content)) {\n\t\t\tconst normalized = normalizeComposerContentBlocks(message.content).filter(\n\t\t\t\t(block) => block.type === \"text\" || block.type === \"image\",\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent:\n\t\t\t\t\t\tnormalized.length > 0 ? normalized : [{ type: \"text\", text: \"\" }],\n\t\t\t\t\tattachments,\n\t\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: extractComposerTextContent(message.content) },\n\t\t\t\t],\n\t\t\t\tattachments,\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\t// Assistant messages - reconstruct content array from components\n\tif (message.role === \"assistant\") {\n\t\tconst resolvedProvider = message.provider ?? model.provider;\n\t\tconst resolvedApi = (message.api ?? model.api) as AssistantMessage[\"api\"];\n\t\tconst resolvedModel = message.model ?? model.id;\n\t\tif (Array.isArray(message.content)) {\n\t\t\tconst normalizedSequence = normalizeComposerContentBlocks(\n\t\t\t\tmessage.content,\n\t\t\t).filter(\n\t\t\t\t(block): block is TextContent | ThinkingContent | ToolCall =>\n\t\t\t\t\tblock.type !== \"image\",\n\t\t\t);\n\t\t\tconst hasThinking = normalizedSequence.some(\n\t\t\t\t(block) => block.type === \"thinking\",\n\t\t\t);\n\t\t\tconst hasToolCalls = normalizedSequence.some(\n\t\t\t\t(block) => block.type === \"toolCall\",\n\t\t\t);\n\n\t\t\tif (!hasThinking && message.thinking?.trim()) {\n\t\t\t\tnormalizedSequence.unshift({\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: message.thinking.trim(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst tools = message.tools ?? [];\n\t\t\tif (!hasToolCalls && tools.length > 0) {\n\t\t\t\tconst baseContentLength = normalizedSequence.length;\n\t\t\t\tconst toolCalls: ToolCall[] = tools.map((tool, toolIndex) =>\n\t\t\t\t\tnormalizeToolCall(tool, index, baseContentLength + toolIndex),\n\t\t\t\t);\n\t\t\t\tnormalizedSequence.push(...toolCalls);\n\t\t\t}\n\n\t\t\tconst assistantMessage: AssistantMessage = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: normalizedSequence,\n\t\t\t\tapi: resolvedApi,\n\t\t\t\tprovider: resolvedProvider,\n\t\t\t\tmodel: resolvedModel,\n\t\t\t\tusage: message.usage\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tinput: message.usage.input ?? 0,\n\t\t\t\t\t\t\toutput: message.usage.output ?? 0,\n\t\t\t\t\t\t\tcacheRead: message.usage.cacheRead ?? 0,\n\t\t\t\t\t\t\tcacheWrite: message.usage.cacheWrite ?? 0,\n\t\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\t\tinput: message.usage.cost?.input ?? 0,\n\t\t\t\t\t\t\t\toutput: message.usage.cost?.output ?? 0,\n\t\t\t\t\t\t\t\tcacheRead: message.usage.cost?.cacheRead ?? 0,\n\t\t\t\t\t\t\t\tcacheWrite: message.usage.cost?.cacheWrite ?? 0,\n\t\t\t\t\t\t\t\ttotal: message.usage.cost?.total ?? 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: createEmptyUsage(),\n\t\t\t\tstopReason: \"stop\",\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t};\n\n\t\t\tconst results: AppMessage[] = [assistantMessage];\n\t\t\tconst toolCallBlocks = normalizedSequence.filter(\n\t\t\t\t(block): block is ToolCall => block.type === \"toolCall\",\n\t\t\t);\n\n\t\t\t// Generate tool result messages for each tool call\n\t\t\ttools.forEach((tool, toolIndex) => {\n\t\t\t\tconst normalizedCall =\n\t\t\t\t\t(tool.toolCallId\n\t\t\t\t\t\t? toolCallBlocks.find((block) => block.id === tool.toolCallId)\n\t\t\t\t\t\t: toolCallBlocks[toolIndex]) ??\n\t\t\t\t\tnormalizeToolCall(tool, index, normalizedSequence.length + toolIndex);\n\t\t\t\tresults.push(\n\t\t\t\t\tnormalizeToolResult(tool, normalizedCall, message.timestamp, context),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn results;\n\t\t}\n\t\t// Build content array: thinking first, then text, then tool calls\n\t\tconst normalizedSequence: Array<TextContent | ThinkingContent | ToolCall> =\n\t\t\t[];\n\n\t\t// Add thinking block if present\n\t\tif (message.thinking?.trim()) {\n\t\t\tnormalizedSequence.push({\n\t\t\t\ttype: \"thinking\",\n\t\t\t\tthinking: message.thinking.trim(),\n\t\t\t});\n\t\t}\n\n\t\t// Add text content if present\n\t\tif (extractComposerTextContent(message.content)) {\n\t\t\tnormalizedSequence.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: extractComposerTextContent(message.content),\n\t\t\t});\n\t\t}\n\n\t\t// Convert and add tool calls\n\t\tconst tools = message.tools ?? [];\n\t\tconst baseContentLength = normalizedSequence.length;\n\t\tconst toolCalls: ToolCall[] = tools.map((tool, toolIndex) =>\n\t\t\tnormalizeToolCall(tool, index, baseContentLength + toolIndex),\n\t\t);\n\t\tnormalizedSequence.push(...toolCalls);\n\n\t\t// Build the assistant message with model metadata\n\t\tconst assistantMessage: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: normalizedSequence,\n\t\t\tapi: resolvedApi,\n\t\t\tprovider: resolvedProvider,\n\t\t\tmodel: resolvedModel,\n\t\t\tusage: message.usage\n\t\t\t\t? {\n\t\t\t\t\t\tinput: message.usage.input ?? 0,\n\t\t\t\t\t\toutput: message.usage.output ?? 0,\n\t\t\t\t\t\tcacheRead: message.usage.cacheRead ?? 0,\n\t\t\t\t\t\tcacheWrite: message.usage.cacheWrite ?? 0,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: message.usage.cost?.input ?? 0,\n\t\t\t\t\t\t\toutput: message.usage.cost?.output ?? 0,\n\t\t\t\t\t\t\tcacheRead: message.usage.cost?.cacheRead ?? 0,\n\t\t\t\t\t\t\tcacheWrite: message.usage.cost?.cacheWrite ?? 0,\n\t\t\t\t\t\t\ttotal: message.usage.cost?.total ?? 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: createEmptyUsage(),\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t};\n\n\t\tconst results: AppMessage[] = [assistantMessage];\n\n\t\t// Generate tool result messages for each tool call\n\t\t// These follow the assistant message in the conversation\n\t\ttools.forEach((tool, toolIndex) => {\n\t\t\tconst normalizedCall = toolCalls[toolIndex]!;\n\t\t\tresults.push(\n\t\t\t\tnormalizeToolResult(tool, normalizedCall, message.timestamp, context),\n\t\t\t);\n\t\t});\n\n\t\treturn results;\n\t}\n\n\t// Standalone tool messages (less common, but supported)\n\tif (message.role === \"tool\") {\n\t\tconst toolName = message.toolName || \"web_tool\";\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: `${toolName}-${index}`,\n\t\t\t\ttoolName,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: extractComposerTextContent(message.content),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: Boolean(message.isError),\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\t// System messages are converted to assistant messages\n\t// (internal format doesn't have a separate system role in conversation)\n\tif (message.role === \"system\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: extractComposerTextContent(message.content) },\n\t\t\t\t],\n\t\t\t\tapi: model.api,\n\t\t\t\tprovider: model.provider,\n\t\t\t\tmodel: model.id,\n\t\t\t\tusage: createEmptyUsage(),\n\t\t\t\tstopReason: \"stop\",\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\tthrow new SessionSerializationError(\"Unsupported Composer role\", context);\n}\n\n/**\n * Convert an array of Composer messages to internal AppMessage format.\n *\n * Note: The output array may be longer than the input because assistant\n * messages with tool calls expand to multiple AppMessages.\n */\nexport function convertComposerMessagesToApp(\n\tmessages: ComposerMessage[],\n\tmodel: RegisteredModel,\n): AppMessage[] {\n\tconst result: AppMessage[] = [];\n\tfor (const [index, message] of messages.entries()) {\n\t\t// Preserve relative ordering by pushing each expanded block in sequence\n\t\tresult.push(...convertComposerMessageToApp(message, model, index));\n\t}\n\treturn result;\n}\n"]}
1
+ {"version":3,"file":"session-serialization.js","sourceRoot":"","sources":["../../src/server/session-serialization.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Serialization Module\n *\n * This module handles bidirectional conversion between internal agent message\n * types (AppMessage, AssistantMessage, etc.) and the external Maestro protocol\n * messages (ComposerMessage). This conversion is essential for:\n *\n * - Web API: Converting agent output to JSON for the web client\n * - Session persistence: Storing/loading sessions in a portable format\n * - History hydration: Reconstructing agent state from saved sessions\n *\n * The conversion handles several complexities:\n * - Multi-content messages (text, images, thinking blocks, tool calls)\n * - Tool call/result pairing across message boundaries\n * - Usage/cost tracking with nested structures\n * - Timestamp normalization between formats\n *\n * Key design decisions:\n * - Images are replaced with placeholders (too large for JSON)\n * - Thinking blocks are extracted to a separate field\n * - Tool calls are serialized with their results as separate messages\n */\n\nimport type {\n\tComposerAttachment,\n\tComposerContentBlock,\n\tComposerMessage,\n\tComposerToolCall,\n\tComposerUsage,\n} from \"@evalops/contracts\";\nimport {\n\tisAssistantMessage,\n\tisToolResultMessage,\n\tisUserMessage,\n} from \"../agent/type-guards.js\";\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tAttachment,\n\tImageContent,\n\tTextContent,\n\tThinkingContent,\n\tToolCall,\n\tToolResultMessage,\n\tUsage,\n} from \"../agent/types.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\n\n/** Direction of conversion for error context */\nexport type SessionSerializationDirection = \"app->composer\" | \"composer->app\";\n\n/**\n * Context provided in serialization errors for debugging.\n * Includes message index and direction to locate the problematic message.\n */\nexport interface SessionSerializationContext {\n\t/** Index of the message in the array (0-based) */\n\tindex?: number;\n\t/** Role of the message being converted */\n\trole?: string;\n\t/** Direction of the conversion */\n\tsource?: SessionSerializationDirection;\n}\n\n/**\n * Convert internal Usage to Maestro protocol format.\n * Handles missing/undefined fields by defaulting to zero.\n */\nfunction toComposerUsage(usage?: Usage): ComposerUsage | undefined {\n\tif (!usage) return undefined;\n\treturn {\n\t\tinput: usage.input ?? 0,\n\t\toutput: usage.output ?? 0,\n\t\tcacheRead: usage.cacheRead ?? 0,\n\t\tcacheWrite: usage.cacheWrite ?? 0,\n\t\t// Ensure cost object always has all required fields\n\t\tcost: usage.cost\n\t\t\t? {\n\t\t\t\t\tinput: usage.cost.input ?? 0,\n\t\t\t\t\toutput: usage.cost.output ?? 0,\n\t\t\t\t\tcacheRead: usage.cost.cacheRead ?? 0,\n\t\t\t\t\tcacheWrite: usage.cost.cacheWrite ?? 0,\n\t\t\t\t\ttotal: usage.cost.total ?? 0,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tinput: 0,\n\t\t\t\t\toutput: 0,\n\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\ttotal: 0,\n\t\t\t\t},\n\t};\n}\n\n/**\n * Error thrown when serialization/deserialization fails.\n * Includes context about which message caused the failure.\n */\nexport class SessionSerializationError extends Error {\n\treadonly context?: SessionSerializationContext;\n\n\tconstructor(message: string, context?: SessionSerializationContext) {\n\t\tsuper(context ? `${message} (${JSON.stringify(context)})` : message);\n\t\tthis.name = \"SessionSerializationError\";\n\t\tthis.context = context;\n\t}\n}\n\n// Placeholder strings used when images can't be serialized to JSON\nconst IMAGE_PLACEHOLDER_PREFIX = \"[image:\";\nconst UNKNOWN_IMAGE_PLACEHOLDER = \"[image]\";\n\n/**\n * Safely stringify a value, returning a placeholder if serialization fails.\n * Handles circular references and BigInt values gracefully.\n */\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\n/** Type guard for plain objects (not arrays or null) */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction toComposerAttachments(\n\tattachments: Attachment[] | undefined,\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerAttachment[] | undefined {\n\tif (!attachments || attachments.length === 0) return undefined;\n\tconst includeAttachmentContent = options?.includeAttachmentContent !== false;\n\treturn attachments.map((a) => ({\n\t\tid: a.id,\n\t\ttype: a.type,\n\t\tfileName: a.fileName,\n\t\tmimeType: a.mimeType,\n\t\tsize: a.size,\n\t\tcontent: includeAttachmentContent ? a.content : undefined,\n\t\tcontentOmitted: includeAttachmentContent ? undefined : true,\n\t\textractedText: a.extractedText,\n\t\tpreview: a.preview,\n\t}));\n}\n\nfunction fromComposerAttachments(\n\tattachments: ComposerAttachment[] | undefined,\n): Attachment[] | undefined {\n\tif (!attachments || attachments.length === 0) return undefined;\n\n\tconst out: Attachment[] = [];\n\tfor (const a of attachments) {\n\t\tif (!a) continue;\n\t\tif (typeof a.id !== \"string\" || !a.id) continue;\n\t\tif (a.type !== \"image\" && a.type !== \"document\") continue;\n\t\tif (typeof a.fileName !== \"string\" || !a.fileName) continue;\n\t\tif (typeof a.mimeType !== \"string\" || !a.mimeType) continue;\n\t\tif (typeof a.size !== \"number\" || !Number.isFinite(a.size)) continue;\n\t\tif (typeof a.content !== \"string\" || a.content.length === 0) {\n\t\t\t// Content omitted in session responses; do not pass to agent.\n\t\t\tcontinue;\n\t\t}\n\t\tout.push({\n\t\t\tid: a.id,\n\t\t\ttype: a.type,\n\t\t\tfileName: a.fileName,\n\t\t\tmimeType: a.mimeType,\n\t\t\tsize: a.size,\n\t\t\tcontent: a.content,\n\t\t\textractedText:\n\t\t\t\ttypeof a.extractedText === \"string\" ? a.extractedText : undefined,\n\t\t\tpreview: typeof a.preview === \"string\" ? a.preview : undefined,\n\t\t});\n\t}\n\n\treturn out.length ? out : undefined;\n}\n\n/** Helper to construct error context from conversion parameters */\nfunction buildContext(\n\tsource: SessionSerializationDirection,\n\tindex: number,\n\trole?: string,\n): SessionSerializationContext {\n\treturn { source, index, role };\n}\n\n/**\n * Create a zero-initialized usage object.\n * Used when converting messages that don't have usage data.\n */\nexport function createEmptyUsage(): Usage {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\n/**\n * Serialize tool call content to a string for the tool result message.\n * Handles various result types: strings, primitives, objects.\n * Falls back to serializing args if result is missing.\n */\nexport function serializeToolContent(tool: ComposerToolCall): string {\n\t// String results are used directly\n\tif (typeof tool.result === \"string\") {\n\t\treturn tool.result;\n\t}\n\t// Primitives are converted to string\n\tif (typeof tool.result === \"number\" || typeof tool.result === \"boolean\") {\n\t\treturn String(tool.result);\n\t}\n\t// Objects are JSON-serialized\n\tif (tool.result && typeof tool.result === \"object\") {\n\t\treturn safeStringify(tool.result);\n\t}\n\t// Fallback: serialize the args if no result\n\tif (tool.args && typeof tool.args === \"object\") {\n\t\treturn safeStringify(tool.args);\n\t}\n\treturn \"\";\n}\n\n/**\n * Convert a timestamp to ISO string format.\n * Handles both numeric (ms since epoch) and string inputs.\n * Returns current time if input is undefined.\n */\nfunction toIsoString(\n\tinput: number | string | undefined,\n\tcontext: SessionSerializationContext,\n): string {\n\tif (typeof input === \"number\") {\n\t\t// Validate numeric timestamp (reject NaN, Infinity)\n\t\tif (!Number.isFinite(input)) {\n\t\t\tthrow new SessionSerializationError(\"Invalid numeric timestamp\", context);\n\t\t}\n\t\treturn new Date(input).toISOString();\n\t}\n\tif (typeof input === \"string\") {\n\t\t// Parse and validate string timestamp\n\t\tconst parsed = Date.parse(input);\n\t\tif (!Number.isFinite(parsed)) {\n\t\t\tthrow new SessionSerializationError(\"Invalid timestamp\", context);\n\t\t}\n\t\treturn new Date(parsed).toISOString();\n\t}\n\t// Default to current time if not provided\n\treturn new Date().toISOString();\n}\n\n/**\n * Convert an ISO string timestamp to numeric (ms since epoch).\n * Returns current time if input is undefined.\n */\nfunction toTimestamp(\n\tinput: string | undefined,\n\tcontext: SessionSerializationContext,\n): number {\n\tif (!input) return Date.now();\n\tconst parsed = Date.parse(input);\n\tif (!Number.isFinite(parsed)) {\n\t\tthrow new SessionSerializationError(\"Invalid timestamp\", context);\n\t}\n\treturn parsed;\n}\n\n/**\n * Extract text content from a message's content array.\n * Handles mixed content types:\n * - Text blocks are concatenated\n * - Images are replaced with placeholders\n * - Thinking and tool calls are skipped (handled separately)\n * - Unknown types get a placeholder\n */\nfunction extractTextContent(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): string {\n\tif (!content) return \"\";\n\tif (typeof content === \"string\") return content;\n\n\tconst fragments: string[] = [];\n\tfor (const block of content) {\n\t\tif (!block) continue;\n\n\t\t// Text blocks - include as-is\n\t\tif (block.type === \"text\") {\n\t\t\tfragments.push(block.text);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Image blocks - replace with placeholder (too large for JSON)\n\t\tif (block.type === \"image\") {\n\t\t\tconst descriptor = block.mimeType\n\t\t\t\t? `${IMAGE_PLACEHOLDER_PREFIX}${block.mimeType}]`\n\t\t\t\t: UNKNOWN_IMAGE_PLACEHOLDER;\n\t\t\tfragments.push(descriptor);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Thinking and tool calls are extracted separately, skip here\n\t\tif (block.type === \"thinking\" || block.type === \"toolCall\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Unknown content type - add placeholder with type info\n\t\tconst fallbackType = (block as { type?: string }).type || \"unknown\";\n\t\tfragments.push(`[content:${fallbackType}]`);\n\t}\n\n\treturn fragments.join(\"\\n\\n\");\n}\n\n/**\n * Extract thinking content from a message into a single string.\n * Returns undefined if no thinking blocks are present.\n */\nfunction extractThinking(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): string | undefined {\n\tif (!content || typeof content === \"string\") return undefined;\n\n\t// Filter to thinking blocks, extract text, and join\n\tconst thought = content\n\t\t.filter((block): block is ThinkingContent => block.type === \"thinking\")\n\t\t.map((block) => block.thinking.trim())\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\treturn thought.length ? thought : undefined;\n}\n\n/**\n * Extract tool calls from a message into Maestro format.\n * Returns empty array if no tool calls are present.\n */\nfunction extractToolCalls(\n\tcontent?:\n\t\t| string\n\t\t| Array<TextContent | ThinkingContent | ToolCall | ImageContent>,\n): ComposerToolCall[] {\n\tif (!content || typeof content === \"string\") return [];\n\n\treturn content\n\t\t.filter((block): block is ToolCall => block.type === \"toolCall\")\n\t\t.map((toolCall) => ({\n\t\t\tname: toolCall.name?.trim() || \"unnamed_tool\",\n\t\t\tstatus: \"completed\",\n\t\t\targs: toolCall.arguments || {},\n\t\t\ttoolCallId: toolCall.id,\n\t\t}));\n}\n\nfunction extractComposerTextContent(\n\tcontent: ComposerMessage[\"content\"],\n): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\");\n}\n\nfunction normalizeComposerContentBlocks(\n\tcontent: ComposerMessage[\"content\"],\n): Array<TextContent | ThinkingContent | ToolCall | ImageContent> {\n\tif (!Array.isArray(content)) return [];\n\tconst normalized: Array<\n\t\tTextContent | ThinkingContent | ToolCall | ImageContent\n\t> = [];\n\tfor (const block of content as ComposerContentBlock[]) {\n\t\tif (!block || typeof block !== \"object\") continue;\n\t\tif (block.type === \"text\") {\n\t\t\tnormalized.push({ type: \"text\", text: block.text });\n\t\t} else if (block.type === \"thinking\") {\n\t\t\tnormalized.push({ type: \"thinking\", thinking: block.thinking });\n\t\t} else if (block.type === \"toolCall\") {\n\t\t\tnormalized.push({\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: block.id,\n\t\t\t\tname: block.name,\n\t\t\t\targuments: block.arguments,\n\t\t\t\tthoughtSignature: block.thoughtSignature,\n\t\t\t});\n\t\t} else if (block.type === \"image\") {\n\t\t\tnormalized.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\tdata: block.data,\n\t\t\t\tmimeType: block.mimeType,\n\t\t\t});\n\t\t}\n\t}\n\treturn normalized;\n}\n\n/**\n * Convert a single internal AppMessage to Maestro protocol format.\n *\n * This is the main app -> Maestro conversion function. It handles:\n * - User messages: Extract text content\n * - Assistant messages: Extract text, thinking, and tool calls\n * - Tool results: Extract result content and error status\n * - System messages: Extract text content\n *\n * @param message - The internal message to convert\n * @param index - Position in the message array (for error context)\n */\nexport function convertAppMessageToComposer(\n\tmessage: AppMessage,\n\tindex = 0,\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerMessage {\n\tconst context = buildContext(\"app->composer\", index, message.role);\n\tconst timestamp = toIsoString(\n\t\t\"timestamp\" in message ? message.timestamp : undefined,\n\t\tcontext,\n\t);\n\n\t// User messages - simple text extraction\n\tif (isUserMessage(message)) {\n\t\tconst attachments = toComposerAttachments(\n\t\t\t\"attachments\" in message\n\t\t\t\t? (message as { attachments?: Attachment[] }).attachments\n\t\t\t\t: undefined,\n\t\t\toptions,\n\t\t);\n\t\treturn {\n\t\t\trole: \"user\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\ttimestamp,\n\t\t\tattachments,\n\t\t};\n\t}\n\n\t// Assistant messages - extract text, thinking, and tool calls\n\tif (isAssistantMessage(message)) {\n\t\tconst tools = extractToolCalls(message.content);\n\t\treturn {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\tthinking: extractThinking(message.content),\n\t\t\ttimestamp,\n\t\t\ttools: tools.length ? tools : undefined,\n\t\t\tusage: toComposerUsage(message.usage),\n\t\t\tprovider: message.provider,\n\t\t\tapi: message.api,\n\t\t\tmodel: message.model,\n\t\t};\n\t}\n\n\t// Tool result messages - include tool name and error status\n\tif (isToolResultMessage(message)) {\n\t\treturn {\n\t\t\trole: \"tool\",\n\t\t\tcontent: extractTextContent(message.content),\n\t\t\ttimestamp,\n\t\t\ttoolName: message.toolName,\n\t\t\tisError: message.isError,\n\t\t};\n\t}\n\n\t// System messages (rare, but supported)\n\tconst systemLike = message as {\n\t\trole?: string;\n\t\tcontent?: string | Array<TextContent | ImageContent>;\n\t};\n\tif (systemLike.role === \"system\") {\n\t\treturn {\n\t\t\trole: \"system\",\n\t\t\tcontent: extractTextContent(systemLike.content),\n\t\t\ttimestamp,\n\t\t};\n\t}\n\n\tthrow new SessionSerializationError(\"Unsupported App role\", context);\n}\n\n/**\n * Convert an array of AppMessages to Maestro format.\n * Preserves message order and provides index context for errors.\n */\nexport function convertAppMessagesToComposer(\n\tmessages: AppMessage[],\n\toptions?: { includeAttachmentContent?: boolean },\n): ComposerMessage[] {\n\treturn messages.map((message, index) =>\n\t\tconvertAppMessageToComposer(message, index, options),\n\t);\n}\n\n/**\n * Normalize a Maestro tool call to internal ToolCall format.\n * Generates stable IDs if not provided.\n *\n * @param tool - The Maestro tool call to normalize\n * @param messageIndex - Message position (for generating fallback IDs)\n * @param contentIndex - Content block position (for generating fallback IDs)\n */\nfunction normalizeToolCall(\n\ttool: ComposerToolCall,\n\tmessageIndex: number,\n\tcontentIndex: number,\n): ToolCall {\n\t// Generate fallback name/ID if not provided\n\tconst name = tool.name?.trim() || `tool_${messageIndex}_${contentIndex}`;\n\tconst toolCallId =\n\t\ttool.toolCallId || `web-tool-${messageIndex}-${contentIndex}`;\n\t// Ensure args is a record (not array or primitive)\n\tconst args: Record<string, unknown> = isRecord(tool.args) ? tool.args : {};\n\n\treturn {\n\t\ttype: \"toolCall\",\n\t\tid: toolCallId,\n\t\tname,\n\t\targuments: args,\n\t};\n}\n\n/**\n * Create a ToolResultMessage from a Maestro tool call.\n * The result is derived from the tool call's embedded result field.\n */\nfunction normalizeToolResult(\n\ttool: ComposerToolCall,\n\tnormalizedCall: ToolCall,\n\ttimestamp: string | undefined,\n\tcontext: SessionSerializationContext,\n): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: normalizedCall.id,\n\t\ttoolName: normalizedCall.name,\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: serializeToolContent(tool),\n\t\t\t},\n\t\t],\n\t\tisError: tool.status === \"error\",\n\t\ttimestamp: toTimestamp(timestamp, context),\n\t};\n}\n\n/**\n * Convert a single Maestro message to internal AppMessage format.\n *\n * This is the main Maestro -> app conversion function. Note that a single\n * Maestro message may expand to multiple AppMessages when tool calls are\n * present (the assistant message + one toolResult per tool).\n *\n * @param message - The Maestro message to convert\n * @param model - Model metadata to attach to assistant messages\n * @param index - Position in the message array (for error context)\n * @returns Array of AppMessages (may be 1+ messages)\n */\nexport function convertComposerMessageToApp(\n\tmessage: ComposerMessage,\n\tmodel: RegisteredModel,\n\tindex = 0,\n): AppMessage[] {\n\tconst context = buildContext(\"composer->app\", index, message.role);\n\n\t// User messages - wrap content in text block\n\tif (message.role === \"user\") {\n\t\tconst attachments = fromComposerAttachments(message.attachments);\n\t\tif (Array.isArray(message.content)) {\n\t\t\tconst normalized = normalizeComposerContentBlocks(message.content).filter(\n\t\t\t\t(block) => block.type === \"text\" || block.type === \"image\",\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent:\n\t\t\t\t\t\tnormalized.length > 0 ? normalized : [{ type: \"text\", text: \"\" }],\n\t\t\t\t\tattachments,\n\t\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: extractComposerTextContent(message.content) },\n\t\t\t\t],\n\t\t\t\tattachments,\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\t// Assistant messages - reconstruct content array from components\n\tif (message.role === \"assistant\") {\n\t\tconst resolvedProvider = message.provider ?? model.provider;\n\t\tconst resolvedApi = (message.api ?? model.api) as AssistantMessage[\"api\"];\n\t\tconst resolvedModel = message.model ?? model.id;\n\t\tif (Array.isArray(message.content)) {\n\t\t\tconst normalizedSequence = normalizeComposerContentBlocks(\n\t\t\t\tmessage.content,\n\t\t\t).filter(\n\t\t\t\t(block): block is TextContent | ThinkingContent | ToolCall =>\n\t\t\t\t\tblock.type !== \"image\",\n\t\t\t);\n\t\t\tconst hasThinking = normalizedSequence.some(\n\t\t\t\t(block) => block.type === \"thinking\",\n\t\t\t);\n\t\t\tconst hasToolCalls = normalizedSequence.some(\n\t\t\t\t(block) => block.type === \"toolCall\",\n\t\t\t);\n\n\t\t\tif (!hasThinking && message.thinking?.trim()) {\n\t\t\t\tnormalizedSequence.unshift({\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: message.thinking.trim(),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst tools = message.tools ?? [];\n\t\t\tif (!hasToolCalls && tools.length > 0) {\n\t\t\t\tconst baseContentLength = normalizedSequence.length;\n\t\t\t\tconst toolCalls: ToolCall[] = tools.map((tool, toolIndex) =>\n\t\t\t\t\tnormalizeToolCall(tool, index, baseContentLength + toolIndex),\n\t\t\t\t);\n\t\t\t\tnormalizedSequence.push(...toolCalls);\n\t\t\t}\n\n\t\t\tconst assistantMessage: AssistantMessage = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: normalizedSequence,\n\t\t\t\tapi: resolvedApi,\n\t\t\t\tprovider: resolvedProvider,\n\t\t\t\tmodel: resolvedModel,\n\t\t\t\tusage: message.usage\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tinput: message.usage.input ?? 0,\n\t\t\t\t\t\t\toutput: message.usage.output ?? 0,\n\t\t\t\t\t\t\tcacheRead: message.usage.cacheRead ?? 0,\n\t\t\t\t\t\t\tcacheWrite: message.usage.cacheWrite ?? 0,\n\t\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\t\tinput: message.usage.cost?.input ?? 0,\n\t\t\t\t\t\t\t\toutput: message.usage.cost?.output ?? 0,\n\t\t\t\t\t\t\t\tcacheRead: message.usage.cost?.cacheRead ?? 0,\n\t\t\t\t\t\t\t\tcacheWrite: message.usage.cost?.cacheWrite ?? 0,\n\t\t\t\t\t\t\t\ttotal: message.usage.cost?.total ?? 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: createEmptyUsage(),\n\t\t\t\tstopReason: \"stop\",\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t};\n\n\t\t\tconst results: AppMessage[] = [assistantMessage];\n\t\t\tconst toolCallBlocks = normalizedSequence.filter(\n\t\t\t\t(block): block is ToolCall => block.type === \"toolCall\",\n\t\t\t);\n\n\t\t\t// Generate tool result messages for each tool call\n\t\t\ttools.forEach((tool, toolIndex) => {\n\t\t\t\tconst normalizedCall =\n\t\t\t\t\t(tool.toolCallId\n\t\t\t\t\t\t? toolCallBlocks.find((block) => block.id === tool.toolCallId)\n\t\t\t\t\t\t: toolCallBlocks[toolIndex]) ??\n\t\t\t\t\tnormalizeToolCall(tool, index, normalizedSequence.length + toolIndex);\n\t\t\t\tresults.push(\n\t\t\t\t\tnormalizeToolResult(tool, normalizedCall, message.timestamp, context),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn results;\n\t\t}\n\t\t// Build content array: thinking first, then text, then tool calls\n\t\tconst normalizedSequence: Array<TextContent | ThinkingContent | ToolCall> =\n\t\t\t[];\n\n\t\t// Add thinking block if present\n\t\tif (message.thinking?.trim()) {\n\t\t\tnormalizedSequence.push({\n\t\t\t\ttype: \"thinking\",\n\t\t\t\tthinking: message.thinking.trim(),\n\t\t\t});\n\t\t}\n\n\t\t// Add text content if present\n\t\tif (extractComposerTextContent(message.content)) {\n\t\t\tnormalizedSequence.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: extractComposerTextContent(message.content),\n\t\t\t});\n\t\t}\n\n\t\t// Convert and add tool calls\n\t\tconst tools = message.tools ?? [];\n\t\tconst baseContentLength = normalizedSequence.length;\n\t\tconst toolCalls: ToolCall[] = tools.map((tool, toolIndex) =>\n\t\t\tnormalizeToolCall(tool, index, baseContentLength + toolIndex),\n\t\t);\n\t\tnormalizedSequence.push(...toolCalls);\n\n\t\t// Build the assistant message with model metadata\n\t\tconst assistantMessage: AssistantMessage = {\n\t\t\trole: \"assistant\",\n\t\t\tcontent: normalizedSequence,\n\t\t\tapi: resolvedApi,\n\t\t\tprovider: resolvedProvider,\n\t\t\tmodel: resolvedModel,\n\t\t\tusage: message.usage\n\t\t\t\t? {\n\t\t\t\t\t\tinput: message.usage.input ?? 0,\n\t\t\t\t\t\toutput: message.usage.output ?? 0,\n\t\t\t\t\t\tcacheRead: message.usage.cacheRead ?? 0,\n\t\t\t\t\t\tcacheWrite: message.usage.cacheWrite ?? 0,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: message.usage.cost?.input ?? 0,\n\t\t\t\t\t\t\toutput: message.usage.cost?.output ?? 0,\n\t\t\t\t\t\t\tcacheRead: message.usage.cost?.cacheRead ?? 0,\n\t\t\t\t\t\t\tcacheWrite: message.usage.cost?.cacheWrite ?? 0,\n\t\t\t\t\t\t\ttotal: message.usage.cost?.total ?? 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: createEmptyUsage(),\n\t\t\tstopReason: \"stop\",\n\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t};\n\n\t\tconst results: AppMessage[] = [assistantMessage];\n\n\t\t// Generate tool result messages for each tool call\n\t\t// These follow the assistant message in the conversation\n\t\ttools.forEach((tool, toolIndex) => {\n\t\t\tconst normalizedCall = toolCalls[toolIndex]!;\n\t\t\tresults.push(\n\t\t\t\tnormalizeToolResult(tool, normalizedCall, message.timestamp, context),\n\t\t\t);\n\t\t});\n\n\t\treturn results;\n\t}\n\n\t// Standalone tool messages (less common, but supported)\n\tif (message.role === \"tool\") {\n\t\tconst toolName = message.toolName || \"web_tool\";\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: `${toolName}-${index}`,\n\t\t\t\ttoolName,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: extractComposerTextContent(message.content),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: Boolean(message.isError),\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\t// System messages are converted to assistant messages\n\t// (internal format doesn't have a separate system role in conversation)\n\tif (message.role === \"system\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: extractComposerTextContent(message.content) },\n\t\t\t\t],\n\t\t\t\tapi: model.api,\n\t\t\t\tprovider: model.provider,\n\t\t\t\tmodel: model.id,\n\t\t\t\tusage: createEmptyUsage(),\n\t\t\t\tstopReason: \"stop\",\n\t\t\t\ttimestamp: toTimestamp(message.timestamp, context),\n\t\t\t},\n\t\t];\n\t}\n\n\tthrow new SessionSerializationError(\"Unsupported Maestro role\", context);\n}\n\n/**\n * Convert an array of Maestro messages to internal AppMessage format.\n *\n * Note: The output array may be longer than the input because assistant\n * messages with tool calls expand to multiple AppMessages.\n */\nexport function convertComposerMessagesToApp(\n\tmessages: ComposerMessage[],\n\tmodel: RegisteredModel,\n): AppMessage[] {\n\tconst result: AppMessage[] = [];\n\tfor (const [index, message] of messages.entries()) {\n\t\t// Preserve relative ordering by pushing each expanded block in sequence\n\t\tresult.push(...convertComposerMessageToApp(message, model, index));\n\t}\n\treturn result;\n}\n"]}
@@ -132,6 +132,7 @@ export declare class SessionManager {
132
132
  setSessionFavorite(sessionPath: string, favorite: boolean): void;
133
133
  setSessionTitle(sessionPath: string, title: string): void;
134
134
  setSessionTags(sessionPath: string, tags: string[]): void;
135
+ setSessionArchived(sessionPath: string, archived: boolean): void;
135
136
  setSessionAppServerGoal(sessionPath: string, goal: NonNullable<SessionMetaEntry["appServerGoal"]> | null): void;
136
137
  private syncSessionMemoryEntry;
137
138
  buildSessionContext(leafId?: string | null): SessionContextSnapshot;
@@ -140,6 +141,7 @@ export declare class SessionManager {
140
141
  loadModel(): string | null;
141
142
  loadModelMetadata(): SessionModelMetadata | undefined;
142
143
  isInitialized(): boolean;
144
+ canCreateSession(): boolean;
143
145
  getSessionId(): string;
144
146
  getSessionFile(): string;
145
147
  getPortableSessionBundle(): {
@@ -216,6 +218,8 @@ export declare class SessionManager {
216
218
  messageCount: number;
217
219
  favorite: boolean;
218
220
  tags?: string[];
221
+ archived?: boolean;
222
+ archivedAt?: string;
219
223
  messagesView: SessionMessagesView;
220
224
  } | null>;
221
225
  /**
@@ -233,6 +237,7 @@ export declare class SessionManager {
233
237
  messageCount: number;
234
238
  }>;
235
239
  importSessionJsonl(sourcePath: string): PortableSessionImportResult;
240
+ importSessionEntries(entries: SessionEntry[]): PortableSessionImportResult;
236
241
  importPortableSession(sourcePath: string): {
237
242
  sessionFile: string;
238
243
  sessionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}