@xopcai/xopc 0.0.124 → 0.0.126

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 (496) hide show
  1. package/README.md +56 -102
  2. package/README.zh-CN.md +51 -98
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/schema/config-schema.d.ts +6 -6
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  7. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  8. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  11. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/api/api.js +1 -1
  14. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  15. package/dist/extensions/weixin/src/plugin.js +1 -1
  16. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  17. package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
  18. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B5uSVAyJ.js → agent-avatar-dicebear-C70vgt60.js} +1 -1
  19. package/dist/gateway/static/root/assets/agents-DRYVahI-.js +2 -0
  20. package/dist/gateway/static/root/assets/app-management-settings-panel-D9-HW6cy.js +1 -0
  21. package/dist/gateway/static/root/assets/appearance-settings-BHlahIDL.js +1 -0
  22. package/dist/gateway/static/root/assets/apps-page-BdJ1eQg3.js +1 -0
  23. package/dist/gateway/static/root/assets/{archive-plugin-CXUGRp2i.js → archive-plugin-B-aoIt0w.js} +1 -1
  24. package/dist/gateway/static/root/assets/{attachment-load-Cmiub3Wg.js → attachment-load-BD0G0FD5.js} +1 -1
  25. package/dist/gateway/static/root/assets/automation-suggestion-card-iJRVI7aZ.js +1 -0
  26. package/dist/gateway/static/root/assets/automations-page-D8hYQbkl.js +4 -0
  27. package/dist/gateway/static/root/assets/{binary-plugins-0Izz-N3p.js → binary-plugins-B0mNlVSz.js} +1 -1
  28. package/dist/gateway/static/root/assets/{block-editor-C1Kv0IkJ.js → block-editor-CJY9Lu5G.js} +3 -3
  29. package/dist/gateway/static/root/assets/browser-settings-page-CiWEO-Iy.js +8 -0
  30. package/dist/gateway/static/root/assets/capability-presets-api-Bgc8ag55.js +1 -0
  31. package/dist/gateway/static/root/assets/capability-presets-settings-panel-B1nIi0TC.js +1 -0
  32. package/dist/gateway/static/root/assets/{channel-recipient-api-BeA2aVor.js → channel-recipient-api-0sauApoC.js} +1 -1
  33. package/dist/gateway/static/root/assets/channels-settings-BddPdqVo.js +1 -0
  34. package/dist/gateway/static/root/assets/code-editor-gbRgS14t.js +1 -0
  35. package/dist/gateway/static/root/assets/connectors-page-Ba2GDhSE.js +2 -0
  36. package/dist/gateway/static/root/assets/{directory-picker-path-field-2rjzUu57.js → directory-picker-path-field-CiEc4KmY.js} +1 -1
  37. package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
  38. package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
  39. package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
  40. package/dist/gateway/static/root/assets/dreaming-settings-4bvpk5wr.js +3 -0
  41. package/dist/gateway/static/root/assets/extension-debug-page-BbyczVZ3.js +1 -0
  42. package/dist/gateway/static/root/assets/extension-page-DLN1I3DR.js +1 -0
  43. package/dist/gateway/static/root/assets/extension-settings-page-D9VGHmYJ.js +1 -0
  44. package/dist/gateway/static/root/assets/{fetch-BU5S0Sn7.js → fetch-5V96dUz3.js} +1 -1
  45. package/dist/gateway/static/root/assets/{gateway-config-api-BIPGwrl1.js → gateway-config-api-BtIzObwp.js} +1 -1
  46. package/dist/gateway/static/root/assets/gateway-settings-KFsGGDhg.js +1 -0
  47. package/dist/gateway/static/root/assets/{gateway-startup-retry-Cd0Zz30N.js → gateway-startup-retry-DEMad2wt.js} +1 -1
  48. package/dist/gateway/static/root/assets/goal-create-dialog-4PcF6Sh6.js +1 -0
  49. package/dist/gateway/static/root/assets/goal-detail-page-B482PSaG.js +1 -0
  50. package/dist/gateway/static/root/assets/{goals-config-api-B95KdGMj.js → goals-config-api-CVN7-pdM.js} +1 -1
  51. package/dist/gateway/static/root/assets/goals-page-CUdgJuDn.js +2 -0
  52. package/dist/gateway/static/root/assets/goals-settings-IYCH3-Pi.js +1 -0
  53. package/dist/gateway/static/root/assets/heartbeat-settings-Cf_a2Bmz.js +1 -0
  54. package/dist/gateway/static/root/assets/{html-workspace-editor-CQLWDiwE.js → html-workspace-editor-DV90ddkE.js} +1 -1
  55. package/dist/gateway/static/root/assets/index-CA2tR2vm.js +256 -0
  56. package/dist/gateway/static/root/assets/index-Ds3u0LOk.css +1 -0
  57. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-lKTg6St7.js +1 -0
  58. package/dist/gateway/static/root/assets/logs-page-BCporcNH.js +2 -0
  59. package/dist/gateway/static/root/assets/{markdown-editor-AssmZFx4.js → markdown-editor-BFOjBBla.js} +2 -2
  60. package/dist/gateway/static/root/assets/markdown-split-Bv4k6iGJ.js +1 -0
  61. package/dist/gateway/static/root/assets/{media-plugins-BhIQU5yS.js → media-plugins-Bbi8g3N8.js} +1 -1
  62. package/dist/gateway/static/root/assets/messages-C22hxE1N.js +3 -0
  63. package/dist/gateway/static/root/assets/models-hub-panel-D68Pyow7.js +2 -0
  64. package/dist/gateway/static/root/assets/notes-page-CuUMOiyv.js +1 -0
  65. package/dist/gateway/static/root/assets/notes-workbench-Dx2N5zTk.js +2 -0
  66. package/dist/gateway/static/root/assets/page-tabs-Cp395RYD.js +1 -0
  67. package/dist/gateway/static/root/assets/{preview-open-alternatives-DGzet1d7.js → preview-open-alternatives-DqV5OM4m.js} +1 -1
  68. package/dist/gateway/static/root/assets/project-detail-page-sB8AzZi3.js +1 -0
  69. package/dist/gateway/static/root/assets/projects-page-LBnJqWK2.js +1 -0
  70. package/dist/gateway/static/root/assets/remote-access-hub-Dbj0o6SC.js +1 -0
  71. package/dist/gateway/static/root/assets/{save-bar-controls-Cqgb-jqa.js → save-bar-controls-BItmzAzI.js} +1 -1
  72. package/dist/gateway/static/root/assets/{schedule-field-DVZcI8Yt.js → schedule-field-BQ8IjjCn.js} +1 -1
  73. package/dist/gateway/static/root/assets/{schema-form-Bj7sOxC8.js → schema-form-BRpD6x3d.js} +1 -1
  74. package/dist/gateway/static/root/assets/sessions-page-DhDZKspB.js +1 -0
  75. package/dist/gateway/static/root/assets/settings-advanced-gate-BvXLMNL6.js +1 -0
  76. package/dist/gateway/static/root/assets/{settings-collapsible-section-BmXn-8N6.js → settings-collapsible-section-BKSPQM4R.js} +1 -1
  77. package/dist/gateway/static/root/assets/settings-form-section-BmyfthNQ.js +1 -0
  78. package/dist/gateway/static/root/assets/settings-page-Cfm9UxAr.js +1 -0
  79. package/dist/gateway/static/root/assets/settings-page-layout-Bls5tfbH.js +1 -0
  80. package/dist/gateway/static/root/assets/setup-status-panel-kQEsTGAs.js +1 -0
  81. package/dist/gateway/static/root/assets/{share-preview-page-IB1v8i86.js → share-preview-page-DbYZNAPb.js} +1 -1
  82. package/dist/gateway/static/root/assets/shares-settings-BtR4B0kn.js +1 -0
  83. package/dist/gateway/static/root/assets/skill-reload-api-CJNVOWoK.js +1 -0
  84. package/dist/gateway/static/root/assets/skills-page-DcWDHrt3.js +2 -0
  85. package/dist/gateway/static/root/assets/{system-settings-panel-BxQ384RC.js → system-settings-panel-DKDAojWM.js} +1 -1
  86. package/dist/gateway/static/root/assets/{typed-models-lib-BkcpvFYO.js → typed-models-lib-BCCV4Kkp.js} +1 -1
  87. package/dist/gateway/static/root/assets/{use-channel-catalog-Cd0FaEQ4.js → use-channel-catalog-NBqg3iFY.js} +1 -1
  88. package/dist/gateway/static/root/assets/{user-profile-settings-panel-DQ7NnRSY.js → user-profile-settings-panel-suQ2x-LB.js} +1 -1
  89. package/dist/gateway/static/root/assets/{utils-YKhVf7Ka.js → utils-DPGVr3tS.js} +1 -1
  90. package/dist/gateway/static/root/assets/{vendor-codemirror-CNP1wPe7.js → vendor-codemirror-BvNgyE1Q.js} +1 -1
  91. package/dist/gateway/static/root/assets/voice-api-key-field-DaJASKFP.js +1 -0
  92. package/dist/gateway/static/root/assets/work-item-detail-page-BrCZpAWh.js +1 -0
  93. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BTkRVNAh.js +3 -0
  94. package/dist/gateway/static/root/assets/{workflow-start-dialog-BNJVCWoS.js → workflow-start-dialog-DAImVtdO.js} +1 -1
  95. package/dist/gateway/static/root/assets/workflows-page-vyJ8wSXm.js +18 -0
  96. package/dist/gateway/static/root/index.html +8 -7
  97. package/dist/package.js +1 -1
  98. package/dist/src/activity/context.d.ts +11 -0
  99. package/dist/src/activity/context.js +36 -0
  100. package/dist/src/activity/context.js.map +1 -0
  101. package/dist/src/activity/emitter.d.ts +6 -0
  102. package/dist/src/activity/emitter.js +43 -0
  103. package/dist/src/activity/emitter.js.map +1 -0
  104. package/dist/src/activity/index.d.ts +3 -0
  105. package/dist/src/activity/index.js +3 -0
  106. package/dist/src/activity/service.d.ts +12 -0
  107. package/dist/src/activity/service.js +59 -0
  108. package/dist/src/activity/service.js.map +1 -0
  109. package/dist/src/activity/types.d.ts +109 -0
  110. package/dist/src/activity/types.js +1 -0
  111. package/dist/src/agent/agent-manager.d.ts +7 -0
  112. package/dist/src/agent/agent-manager.js +12 -5
  113. package/dist/src/agent/agent-manager.js.map +1 -1
  114. package/dist/src/agent/child-agent-factory.d.ts +2 -0
  115. package/dist/src/agent/child-agent-factory.js +2 -0
  116. package/dist/src/agent/child-agent-factory.js.map +1 -1
  117. package/dist/src/agent/coding/index.d.ts +1 -0
  118. package/dist/src/agent/coding/index.js +2 -0
  119. package/dist/src/agent/coding/turn-diff-tracker.d.ts +67 -0
  120. package/dist/src/agent/coding/turn-diff-tracker.js +233 -0
  121. package/dist/src/agent/coding/turn-diff-tracker.js.map +1 -0
  122. package/dist/src/agent/context/project-context.js +2 -2
  123. package/dist/src/agent/context/workspace-seed.js +2 -2
  124. package/dist/src/agent/embedded/run-for-session.js +1 -1
  125. package/dist/src/agent/goals/post-turn.js +2 -2
  126. package/dist/src/agent/ipc/bus.js +1 -1
  127. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  128. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  129. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  130. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  131. package/dist/src/agent/memory/dreaming/config.d.ts +2 -2
  132. package/dist/src/agent/memory/dreaming/config.js +3 -3
  133. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  134. package/dist/src/agent/memory/dreaming/constants.d.ts +1 -1
  135. package/dist/src/agent/memory/dreaming/constants.js +1 -1
  136. package/dist/src/agent/memory/dreaming/constants.js.map +1 -1
  137. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +1 -0
  138. package/dist/src/agent/memory/dreaming/deep-promotion.js +11 -20
  139. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  140. package/dist/src/agent/memory/dreaming/events.d.ts +3 -3
  141. package/dist/src/agent/memory/dreaming/events.js +6 -6
  142. package/dist/src/agent/memory/dreaming/events.js.map +1 -1
  143. package/dist/src/agent/memory/dreaming/last-run.d.ts +2 -2
  144. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  145. package/dist/src/agent/memory/dreaming/last-run.js.map +1 -1
  146. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +1 -1
  147. package/dist/src/agent/memory/dreaming/light-sweep.js +3 -3
  148. package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -1
  149. package/dist/src/agent/memory/dreaming/preview.d.ts +1 -0
  150. package/dist/src/agent/memory/dreaming/preview.js +2 -2
  151. package/dist/src/agent/memory/dreaming/preview.js.map +1 -1
  152. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +1 -1
  153. package/dist/src/agent/memory/dreaming/rem-patterns.js +13 -13
  154. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -1
  155. package/dist/src/agent/memory/dreaming/scope.d.ts +14 -0
  156. package/dist/src/agent/memory/dreaming/scope.js +27 -0
  157. package/dist/src/agent/memory/dreaming/scope.js.map +1 -0
  158. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +4 -4
  159. package/dist/src/agent/memory/dreaming/short-term-store.js +17 -17
  160. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -1
  161. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  162. package/dist/src/agent/models/manager.js +1 -1
  163. package/dist/src/agent/orchestration/agent-event-handler.d.ts +2 -0
  164. package/dist/src/agent/orchestration/agent-event-handler.js +13 -0
  165. package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
  166. package/dist/src/agent/orchestration/agent-orchestrator.js +22 -12
  167. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  168. package/dist/src/agent/sandbox/command-validator.js +12 -0
  169. package/dist/src/agent/sandbox/command-validator.js.map +1 -1
  170. package/dist/src/agent/service.d.ts +2 -1
  171. package/dist/src/agent/service.js +24 -9
  172. package/dist/src/agent/service.js.map +1 -1
  173. package/dist/src/agent/service.types.d.ts +7 -0
  174. package/dist/src/agent/session/session-inspector.d.ts +5 -3
  175. package/dist/src/agent/session/session-inspector.js +17 -8
  176. package/dist/src/agent/session/session-inspector.js.map +1 -1
  177. package/dist/src/agent/skills/hub-pull.js +1 -1
  178. package/dist/src/agent/source-context/types.d.ts +1 -1
  179. package/dist/src/agent/source-context/types.js +1 -1
  180. package/dist/src/agent/source-context/types.js.map +1 -1
  181. package/dist/src/agent/tool-manuals/index.js +15 -6
  182. package/dist/src/agent/tool-manuals/index.js.map +1 -1
  183. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -0
  184. package/dist/src/agent/tool-manuals/xopc-use.js +204 -0
  185. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -0
  186. package/dist/src/agent/tools/apply-patch.js +116 -62
  187. package/dist/src/agent/tools/apply-patch.js.map +1 -1
  188. package/dist/src/agent/tools/concurrency.d.ts +8 -0
  189. package/dist/src/agent/tools/concurrency.js +31 -0
  190. package/dist/src/agent/tools/concurrency.js.map +1 -0
  191. package/dist/src/agent/tools/dreaming-tool.d.ts +2 -0
  192. package/dist/src/agent/tools/dreaming-tool.js +13 -10
  193. package/dist/src/agent/tools/dreaming-tool.js.map +1 -1
  194. package/dist/src/agent/tools/exec-command.js +4 -0
  195. package/dist/src/agent/tools/exec-command.js.map +1 -1
  196. package/dist/src/agent/tools/executor.d.ts +6 -4
  197. package/dist/src/agent/tools/executor.js +7 -4
  198. package/dist/src/agent/tools/executor.js.map +1 -1
  199. package/dist/src/agent/tools/factory.d.ts +10 -0
  200. package/dist/src/agent/tools/factory.js +16 -1
  201. package/dist/src/agent/tools/factory.js.map +1 -1
  202. package/dist/src/agent/tools/find.js +2 -0
  203. package/dist/src/agent/tools/find.js.map +1 -1
  204. package/dist/src/agent/tools/goal-tool.js +2 -2
  205. package/dist/src/agent/tools/grep.js +2 -0
  206. package/dist/src/agent/tools/grep.js.map +1 -1
  207. package/dist/src/agent/tools/index.d.ts +3 -0
  208. package/dist/src/agent/tools/index.js +4 -1
  209. package/dist/src/agent/tools/list-dir.js +2 -0
  210. package/dist/src/agent/tools/list-dir.js.map +1 -1
  211. package/dist/src/agent/tools/memory-tool.d.ts +1 -0
  212. package/dist/src/agent/tools/memory-tool.js +2 -2
  213. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  214. package/dist/src/agent/tools/metadata.d.ts +15 -0
  215. package/dist/src/agent/tools/metadata.js +26 -0
  216. package/dist/src/agent/tools/metadata.js.map +1 -0
  217. package/dist/src/agent/tools/read.js +2 -0
  218. package/dist/src/agent/tools/read.js.map +1 -1
  219. package/dist/src/agent/tools/workflow-tool.js +1 -1
  220. package/dist/src/agent/tools/write.js +6 -0
  221. package/dist/src/agent/tools/write.js.map +1 -1
  222. package/dist/src/agent/tools/xopc-use-tool.d.ts +34 -0
  223. package/dist/src/agent/tools/xopc-use-tool.js +636 -0
  224. package/dist/src/agent/tools/xopc-use-tool.js.map +1 -0
  225. package/dist/src/agent/workflow/subagent-runner.d.ts +1 -0
  226. package/dist/src/agent/workflow/subagent-runner.js +5 -1
  227. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  228. package/dist/src/agent/workflow/workflow-child-tools.js +5 -0
  229. package/dist/src/agent/workflow/workflow-child-tools.js.map +1 -1
  230. package/dist/src/agent-manifest/schema.d.ts +27 -27
  231. package/dist/src/automations/api/routes.js +1 -1
  232. package/dist/src/automations/domain/validation.d.ts +55 -55
  233. package/dist/src/automations/draft/automation-draft-validator.d.ts +25 -25
  234. package/dist/src/automations/service/action-executor.js +2 -2
  235. package/dist/src/browser/cdp-local-launcher.js +1 -1
  236. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  237. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  238. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  239. package/dist/src/browser/stealth.js +1 -1
  240. package/dist/src/chat-commands/agent-edit.js +1 -1
  241. package/dist/src/chat-commands/builtins/config.js +1 -1
  242. package/dist/src/chat-commands/builtins/goal.js +2 -2
  243. package/dist/src/chat-commands/context.js +1 -1
  244. package/dist/src/cli/commands/agent.js +1 -1
  245. package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
  246. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  247. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  248. package/dist/src/cli/commands/extension-pack.js +1 -1
  249. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  250. package/dist/src/cli/commands/goal.js +3 -3
  251. package/dist/src/cli/commands/init.js +1 -1
  252. package/dist/src/cli/commands/project.js +4 -4
  253. package/dist/src/config/agent-profile.js +1 -1
  254. package/dist/src/config/gateway-bind.js +1 -1
  255. package/dist/src/config/index.js +1 -1
  256. package/dist/src/config/loader.js +1 -1
  257. package/dist/src/config/models-json.d.ts +14 -14
  258. package/dist/src/config/models-json.js +1 -1
  259. package/dist/src/config/schema.d.ts +60 -60
  260. package/dist/src/connectors/health.d.ts +2 -1
  261. package/dist/src/connectors/health.js +59 -1
  262. package/dist/src/connectors/health.js.map +1 -1
  263. package/dist/src/connectors/install.d.ts +1 -0
  264. package/dist/src/connectors/install.js +28 -1
  265. package/dist/src/connectors/install.js.map +1 -1
  266. package/dist/src/connectors/instances.js +7 -0
  267. package/dist/src/connectors/instances.js.map +1 -1
  268. package/dist/src/connectors/materialize.js +2 -1
  269. package/dist/src/connectors/materialize.js.map +1 -1
  270. package/dist/src/connectors/registries/modelscope.js +38 -13
  271. package/dist/src/connectors/registries/modelscope.js.map +1 -1
  272. package/dist/src/connectors/types.d.ts +2 -0
  273. package/dist/src/daemon/launchd.js +1 -1
  274. package/dist/src/daemon/systemd.js +1 -1
  275. package/dist/src/extensions/discover-extensions.js +1 -1
  276. package/dist/src/extensions/loader.js +2 -2
  277. package/dist/src/gateway/agents-admin.js +1 -1
  278. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +1 -0
  279. package/dist/src/gateway/dreaming-automation-reconciler.js +62 -42
  280. package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -1
  281. package/dist/src/gateway/hono/app.js +7 -1
  282. package/dist/src/gateway/hono/app.js.map +1 -1
  283. package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -14
  284. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  285. package/dist/src/gateway/hono/middleware/log-context.js +8 -1
  286. package/dist/src/gateway/hono/middleware/log-context.js.map +1 -1
  287. package/dist/src/gateway/hono/routes/activity.d.ts +14 -0
  288. package/dist/src/gateway/hono/routes/activity.js +72 -0
  289. package/dist/src/gateway/hono/routes/activity.js.map +1 -0
  290. package/dist/src/gateway/hono/routes/connectors.js +46 -2
  291. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  292. package/dist/src/gateway/hono/routes/dreaming.js +111 -66
  293. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  294. package/dist/src/gateway/hono/routes/goals.js +1 -1
  295. package/dist/src/gateway/hono/routes/index.js +2 -0
  296. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  297. package/dist/src/gateway/hono/routes/memory.js +2 -2
  298. package/dist/src/gateway/hono/routes/projects.js +903 -50
  299. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  300. package/dist/src/gateway/hono/routes/sessions.js +102 -2
  301. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  302. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  303. package/dist/src/gateway/lock.js +1 -1
  304. package/dist/src/gateway/ports.js +1 -1
  305. package/dist/src/gateway/service/sessions-api.d.ts +10 -0
  306. package/dist/src/gateway/service/sessions-api.js +31 -0
  307. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  308. package/dist/src/gateway/service.js +28 -16
  309. package/dist/src/gateway/service.js.map +1 -1
  310. package/dist/src/goals/goal-store.js +1 -1
  311. package/dist/src/goals/goal-store.js.map +1 -1
  312. package/dist/src/goals/goal-workflow-judge.js +1 -1
  313. package/dist/src/infra/ports.js +1 -1
  314. package/dist/src/infra/ssh-tunnel.js +1 -1
  315. package/dist/src/infra/update-check.js +1 -1
  316. package/dist/src/infra/update-restart.js +1 -1
  317. package/dist/src/mcp/channel-bridge.js +1 -1
  318. package/dist/src/media/store.js +1 -1
  319. package/dist/src/media/store.js.map +1 -1
  320. package/dist/src/media/types.d.ts +1 -1
  321. package/dist/src/media/uri.js +2 -1
  322. package/dist/src/media/uri.js.map +1 -1
  323. package/dist/src/migrations/runner.js +1 -1
  324. package/dist/src/notes/service.js +65 -6
  325. package/dist/src/notes/service.js.map +1 -1
  326. package/dist/src/notes/store.js +1 -1
  327. package/dist/src/projects/project-service.d.ts +2 -1
  328. package/dist/src/projects/project-service.js +59 -2
  329. package/dist/src/projects/project-service.js.map +1 -1
  330. package/dist/src/projects/project-store.d.ts +2 -1
  331. package/dist/src/projects/project-store.js +43 -0
  332. package/dist/src/projects/project-store.js.map +1 -1
  333. package/dist/src/projects/types.d.ts +10 -0
  334. package/dist/src/projects/workspace.js +1 -1
  335. package/dist/src/routing/agent-session-key.js +1 -1
  336. package/dist/src/routing/resolve-route.js +1 -1
  337. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  338. package/dist/src/session/client-history.d.ts +3 -0
  339. package/dist/src/session/client-history.js +24 -9
  340. package/dist/src/session/client-history.js.map +1 -1
  341. package/dist/src/session/init-session-turn.js +1 -1
  342. package/dist/src/session/resolve-session.js +1 -1
  343. package/dist/src/session/session-context-for-llm.d.ts +2 -0
  344. package/dist/src/session/session-context-for-llm.js +14 -1
  345. package/dist/src/session/session-context-for-llm.js.map +1 -1
  346. package/dist/src/session/session-title.js +2 -2
  347. package/dist/src/session/store.js +3 -3
  348. package/dist/src/session/store.js.map +1 -1
  349. package/dist/src/session/types.d.ts +4 -0
  350. package/dist/src/session/types.js.map +1 -1
  351. package/dist/src/storage/sqlite/activity-repository.d.ts +8 -0
  352. package/dist/src/storage/sqlite/activity-repository.js +208 -0
  353. package/dist/src/storage/sqlite/activity-repository.js.map +1 -0
  354. package/dist/src/storage/sqlite/connection.js +1 -1
  355. package/dist/src/storage/sqlite/index.d.ts +1 -0
  356. package/dist/src/storage/sqlite/index.js +2 -1
  357. package/dist/src/storage/sqlite/migrations/022_work_items.sql +61 -0
  358. package/dist/src/storage/sqlite/migrations/023_work_item_attachments.sql +15 -0
  359. package/dist/src/storage/sqlite/migrations/024_activity_events.sql +62 -0
  360. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  361. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  362. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  363. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  364. package/dist/src/storage/sqlite/row-mappers.js +1 -1
  365. package/dist/src/storage/sqlite/schema.js +1 -1
  366. package/dist/src/storage/sqlite/schema.sql +141 -0
  367. package/dist/src/storage/sqlite/session-repository.js +11 -0
  368. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  369. package/dist/src/tui/backends/embedded-backend.d.ts +13 -0
  370. package/dist/src/tui/backends/embedded-backend.js +76 -7
  371. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  372. package/dist/src/tui/backends/gateway-sse-backend.d.ts +13 -0
  373. package/dist/src/tui/backends/gateway-sse-backend.js +53 -0
  374. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  375. package/dist/src/tui/chat-history.js +16 -3
  376. package/dist/src/tui/chat-history.js.map +1 -1
  377. package/dist/src/tui/clipboard-image.js +1 -1
  378. package/dist/src/tui/components/assistant-message.js +12 -2
  379. package/dist/src/tui/components/assistant-message.js.map +1 -1
  380. package/dist/src/tui/components/chat-log.d.ts +23 -3
  381. package/dist/src/tui/components/chat-log.js +68 -9
  382. package/dist/src/tui/components/chat-log.js.map +1 -1
  383. package/dist/src/tui/components/tool-execution.d.ts +8 -0
  384. package/dist/src/tui/components/tool-execution.js +87 -77
  385. package/dist/src/tui/components/tool-execution.js.map +1 -1
  386. package/dist/src/tui/components/tui-bottom-bar.js +9 -5
  387. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  388. package/dist/src/tui/components/visual-truncate.d.ts +1 -0
  389. package/dist/src/tui/components/visual-truncate.js +28 -1
  390. package/dist/src/tui/components/visual-truncate.js.map +1 -1
  391. package/dist/src/tui/tool-summary.d.ts +22 -0
  392. package/dist/src/tui/tool-summary.js +212 -0
  393. package/dist/src/tui/tool-summary.js.map +1 -0
  394. package/dist/src/tui/tui-backend.d.ts +16 -0
  395. package/dist/src/tui/tui-command-formatters.js +2 -2
  396. package/dist/src/tui/tui-commands.d.ts +9 -0
  397. package/dist/src/tui/tui-commands.js +95 -6
  398. package/dist/src/tui/tui-commands.js.map +1 -1
  399. package/dist/src/tui/tui-picker-overlay.d.ts +1 -0
  400. package/dist/src/tui/tui-picker-overlay.js +36 -1
  401. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  402. package/dist/src/tui/tui-picker-services.d.ts +13 -0
  403. package/dist/src/tui/tui-run-state.js +11 -0
  404. package/dist/src/tui/tui-run-state.js.map +1 -1
  405. package/dist/src/tui/tui-run-status-format.d.ts +3 -0
  406. package/dist/src/tui/tui-run-status-format.js +33 -0
  407. package/dist/src/tui/tui-run-status-format.js.map +1 -0
  408. package/dist/src/tui/tui-session-actions.d.ts +5 -0
  409. package/dist/src/tui/tui-session-actions.js +24 -0
  410. package/dist/src/tui/tui-session-actions.js.map +1 -1
  411. package/dist/src/tui/tui-timeline-picker.d.ts +19 -0
  412. package/dist/src/tui/tui-timeline-picker.js +81 -0
  413. package/dist/src/tui/tui-timeline-picker.js.map +1 -0
  414. package/dist/src/tui/tui-timeline.d.ts +15 -0
  415. package/dist/src/tui/tui-timeline.js +65 -0
  416. package/dist/src/tui/tui-timeline.js.map +1 -0
  417. package/dist/src/tui/tui-tool-diff.d.ts +15 -0
  418. package/dist/src/tui/tui-tool-diff.js +178 -7
  419. package/dist/src/tui/tui-tool-diff.js.map +1 -1
  420. package/dist/src/tui/tui-types.d.ts +1 -0
  421. package/dist/src/tui/tui-types.js +1 -0
  422. package/dist/src/tui/tui-types.js.map +1 -1
  423. package/dist/src/tui/tui.js +31 -25
  424. package/dist/src/tui/tui.js.map +1 -1
  425. package/dist/src/utils/index.js +1 -1
  426. package/dist/src/utils/logger/index.js +1 -1
  427. package/dist/src/utils/logger/stats.d.ts +3 -3
  428. package/dist/src/utils/logger.js +1 -1
  429. package/dist/src/work-items/agent-context.d.ts +7 -0
  430. package/dist/src/work-items/agent-context.js +75 -0
  431. package/dist/src/work-items/agent-context.js.map +1 -0
  432. package/dist/src/work-items/index.d.ts +4 -0
  433. package/dist/src/work-items/index.js +4 -0
  434. package/dist/src/work-items/types.d.ts +112 -0
  435. package/dist/src/work-items/types.js +1 -0
  436. package/dist/src/work-items/work-item-service.d.ts +35 -0
  437. package/dist/src/work-items/work-item-service.js +277 -0
  438. package/dist/src/work-items/work-item-service.js.map +1 -0
  439. package/dist/src/work-items/work-item-store.d.ts +21 -0
  440. package/dist/src/work-items/work-item-store.js +302 -0
  441. package/dist/src/work-items/work-item-store.js.map +1 -0
  442. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  443. package/dist/src/workflows/service/workflow-run-service.js +4 -3
  444. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  445. package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
  446. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  447. package/package.json +5 -5
  448. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
  449. package/dist/gateway/static/root/assets/agents-BjIxt67Z.js +0 -2
  450. package/dist/gateway/static/root/assets/app-management-settings-panel-CYCONLIL.js +0 -1
  451. package/dist/gateway/static/root/assets/appearance-settings-Clw3ryKg.js +0 -1
  452. package/dist/gateway/static/root/assets/apps-page-QICTeGjX.js +0 -1
  453. package/dist/gateway/static/root/assets/automation-suggestion-card-CU0-4nQ-.js +0 -1
  454. package/dist/gateway/static/root/assets/automations-page-Car-jtiz.js +0 -1
  455. package/dist/gateway/static/root/assets/browser-settings-page-CMeBJzlS.js +0 -8
  456. package/dist/gateway/static/root/assets/capability-presets-api-BmQTM9Il.js +0 -1
  457. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DZEJEoCF.js +0 -1
  458. package/dist/gateway/static/root/assets/channels-settings-kkW-xFau.js +0 -1
  459. package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +0 -1
  460. package/dist/gateway/static/root/assets/connectors-page-BvaQvO5F.js +0 -2
  461. package/dist/gateway/static/root/assets/dist-Mys7eFJ5.js +0 -1
  462. package/dist/gateway/static/root/assets/dist-wO9a2_ID.js +0 -1
  463. package/dist/gateway/static/root/assets/dreaming-settings-DnHO686d.js +0 -1
  464. package/dist/gateway/static/root/assets/extension-debug-page-BGLRuWVN.js +0 -1
  465. package/dist/gateway/static/root/assets/extension-page-D978ePp9.js +0 -1
  466. package/dist/gateway/static/root/assets/extension-settings-page-B6Ih4Swx.js +0 -1
  467. package/dist/gateway/static/root/assets/gateway-settings-CMEA3r5u.js +0 -1
  468. package/dist/gateway/static/root/assets/goal-create-dialog-B-KHKeXN.js +0 -1
  469. package/dist/gateway/static/root/assets/goal-detail-page-BxrSoWdj.js +0 -1
  470. package/dist/gateway/static/root/assets/goals-page-BTJzIl28.js +0 -2
  471. package/dist/gateway/static/root/assets/goals-settings-BJyEuLLm.js +0 -1
  472. package/dist/gateway/static/root/assets/heartbeat-settings-wkOjYNQT.js +0 -1
  473. package/dist/gateway/static/root/assets/index-BLaXr6Ev.css +0 -1
  474. package/dist/gateway/static/root/assets/index-c_9TVr_C.js +0 -191
  475. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BT8T4DyC.js +0 -1
  476. package/dist/gateway/static/root/assets/logs-page-CrxBJUgI.js +0 -2
  477. package/dist/gateway/static/root/assets/markdown-split-Dv66bO2b.js +0 -1
  478. package/dist/gateway/static/root/assets/messages-O6TAtdFC.js +0 -3
  479. package/dist/gateway/static/root/assets/models-hub-panel-DOOpz6y1.js +0 -2
  480. package/dist/gateway/static/root/assets/notes-page-Br16pK9v.js +0 -1
  481. package/dist/gateway/static/root/assets/notes-workbench-PSJAi0ZC.js +0 -2
  482. package/dist/gateway/static/root/assets/project-detail-page-CIGGgKuw.js +0 -1
  483. package/dist/gateway/static/root/assets/projects-page-B2grhsBt.js +0 -1
  484. package/dist/gateway/static/root/assets/remote-access-hub-CXMORxBD.js +0 -1
  485. package/dist/gateway/static/root/assets/sessions-page-Bi2wkBzU.js +0 -1
  486. package/dist/gateway/static/root/assets/settings-advanced-gate-B1L3G4IA.js +0 -1
  487. package/dist/gateway/static/root/assets/settings-form-section-BnqYMWHR.js +0 -1
  488. package/dist/gateway/static/root/assets/settings-page-BfRSHJmO.js +0 -1
  489. package/dist/gateway/static/root/assets/settings-page-layout-CdWZU1hd.js +0 -1
  490. package/dist/gateway/static/root/assets/setup-status-panel-CWtPM7RK.js +0 -1
  491. package/dist/gateway/static/root/assets/shares-settings-ngbsBgij.js +0 -1
  492. package/dist/gateway/static/root/assets/skill-reload-api-BIe442Gv.js +0 -1
  493. package/dist/gateway/static/root/assets/skills-page-BfchZRVa.js +0 -2
  494. package/dist/gateway/static/root/assets/voice-api-key-field-C5Ov8Uk_.js +0 -1
  495. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYD9BtOq.js +0 -3
  496. package/dist/gateway/static/root/assets/workflows-page-BYF29ANm.js +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xopc-use-tool.js","names":[],"sources":["../../../../src/agent/tools/xopc-use-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { runWithActivityContext } from '../../activity/index.js';\nimport type { Config } from '../../config/schema.js';\nimport type { NoteKind, NotesService, NoteStatus } from '../../notes/index.js';\nimport {\n isValidProjectAgentId,\n normalizeProjectAgentId,\n type ProjectService,\n type ProjectStatus,\n} from '../../projects/index.js';\nimport type {\n WorkItemPriority,\n WorkItemService,\n WorkItemStatus,\n} from '../../work-items/index.js';\nimport { getSessionMetadata } from '../../storage/sqlite/index.js';\n\nconst XopcUseToolSchema = Type.Object({\n mode: Type.Union([\n Type.Literal('project'),\n Type.Literal('note'),\n Type.Literal('work_item'),\n ]),\n command: Type.String({\n description:\n 'Object command. Supports project list/get/create/update/resolve_workspace, note list/get/create/append/update/preview_edit, and work_item list/get/create/update.',\n }),\n args: Type.Optional(Type.Record(Type.String(), Type.Any())),\n dryRun: Type.Optional(Type.Boolean({\n description: 'Validate and preview the action without mutating xopc state.',\n })),\n});\n\nexport type XopcUseMode = 'project' | 'note' | 'work_item';\n\nexport interface XopcUseToolInput {\n mode: XopcUseMode;\n command: string;\n args?: Record<string, unknown>;\n dryRun?: boolean;\n}\n\nexport interface XopcUseToolDeps {\n getConfig?: () => Config | undefined;\n getCurrentAgentId?: () => string | undefined;\n getCurrentSessionKey?: () => string | undefined;\n getNotesService?: () => NotesService | undefined;\n getProjectService?: () => ProjectService | undefined;\n getWorkItemService?: () => WorkItemService | undefined;\n}\n\ntype XopcUseDetails = {\n mode: XopcUseMode;\n command: string;\n dryRun: boolean;\n result?: unknown;\n};\n\nconst PROJECT_STATUSES = new Set<ProjectStatus>(['active', 'paused', 'archived']);\nconst NOTE_KINDS = new Set<NoteKind>(['thought', 'todo', 'voice', 'media', 'bookmark', 'mixed', 'task']);\nconst NOTE_STATUSES = new Set<NoteStatus>(['inbox', 'processed', 'archived', 'trashed']);\nconst WORK_ITEM_STATUSES = new Set<WorkItemStatus>([\n 'backlog',\n 'todo',\n 'in_progress',\n 'blocked',\n 'needs_input',\n 'in_review',\n 'done',\n 'cancelled',\n]);\nconst WORK_ITEM_PRIORITIES = new Set<WorkItemPriority>(['urgent', 'high', 'normal', 'low']);\n\nfunction okText(details: XopcUseDetails): AgentToolResult<XopcUseDetails> {\n return {\n content: [{ type: 'text', text: JSON.stringify(details.result ?? {}, null, 2) }],\n details,\n };\n}\n\nfunction errorText(message: string, details: XopcUseDetails): AgentToolResult<XopcUseDetails> {\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n details: { ...details, result: { ok: false, error: message } },\n };\n}\n\nfunction trimString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n if (value === null) return null;\n if (typeof value === 'string') return value;\n return undefined;\n}\n\nfunction boundedLimit(value: unknown, fallback = 20, max = 100): number {\n const raw = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : fallback;\n if (!Number.isFinite(raw)) return fallback;\n return Math.max(1, Math.min(max, Math.floor(raw)));\n}\n\nfunction offset(value: unknown): number | undefined {\n const raw = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : undefined;\n return raw !== undefined && Number.isFinite(raw) ? Math.max(0, Math.floor(raw)) : undefined;\n}\n\nfunction enumValue<T extends string>(value: unknown, allowed: Set<T>): T | undefined {\n return typeof value === 'string' && allowed.has(value as T) ? value as T : undefined;\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is string => typeof item === 'string');\n}\n\nfunction nullableNumber(value: unknown): number | null | undefined {\n if (value === null) return null;\n return finiteNumber(value);\n}\n\nfunction ensureArgs(input: XopcUseToolInput): Record<string, unknown> {\n return input.args && typeof input.args === 'object' && !Array.isArray(input.args) ? input.args : {};\n}\n\nfunction currentProjectId(args: Record<string, unknown>, deps: XopcUseToolDeps): string | undefined {\n const explicit = trimString(args.projectId);\n if (explicit) return explicit;\n const sessionKey = trimString(args.sessionKey) ?? deps.getCurrentSessionKey?.();\n return sessionKey ? getSessionMetadata(sessionKey)?.projectId : undefined;\n}\n\nfunction projectWorkspaceRootArg(args: Record<string, unknown>): string | undefined {\n return trimString(args.workspaceRoot) ?? trimString(args.workspacePath) ?? trimString(args.path);\n}\n\nfunction optionalProjectWorkspaceRootArg(args: Record<string, unknown>): string | null | undefined {\n if (args.workspaceRoot !== undefined) return optionalString(args.workspaceRoot);\n if (args.workspacePath !== undefined) return optionalString(args.workspacePath);\n if (args.path !== undefined) return optionalString(args.path);\n return undefined;\n}\n\nfunction validateDefaultAgentId(raw: unknown, config: Config | undefined): string | null | undefined {\n if (raw === null) return null;\n const normalized = normalizeProjectAgentId(trimString(raw));\n if (!normalized) return undefined;\n if (config && !isValidProjectAgentId(config, normalized)) {\n throw new Error(`Default agent not found: ${normalized}`);\n }\n return normalized;\n}\n\nasync function handleProject(\n command: string,\n args: Record<string, unknown>,\n deps: XopcUseToolDeps,\n dryRun: boolean,\n): Promise<unknown> {\n const projects = deps.getProjectService?.();\n if (!projects) return { ok: false, error: 'Project service is unavailable' };\n\n if (command === 'list') {\n return {\n ok: true,\n ...projects.list({\n status: enumValue(args.status, PROJECT_STATUSES),\n search: trimString(args.search),\n sortBy: enumValue(args.sortBy, new Set(['updatedAt', 'createdAt', 'name'] as const)),\n sortOrder: enumValue(args.sortOrder, new Set(['asc', 'desc'] as const)),\n limit: boundedLimit(args.limit),\n offset: offset(args.offset),\n }),\n };\n }\n\n if (command === 'get') {\n const id = trimString(args.projectId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'projectId is required' };\n const project = projects.getWithDetails(id);\n return project ? { ok: true, project } : { ok: false, error: `Project not found: ${id}` };\n }\n\n if (command === 'resolve_workspace') {\n const workspacePath = projectWorkspaceRootArg(args);\n if (!workspacePath) return { ok: false, error: 'workspacePath is required' };\n const defaultAgentId = args.defaultAgentId !== undefined\n ? validateDefaultAgentId(args.defaultAgentId, deps.getConfig?.()) ?? undefined\n : undefined;\n const input = {\n workspacePath,\n agentId: trimString(args.agentId),\n defaultAgentId,\n autoCreate: args.autoCreate === true,\n };\n if (dryRun) return { ok: true, dryRun: true, action: 'resolve_project_workspace', input };\n const match = projects.resolveOrCreateForWorkspacePath(input);\n return match ? { ok: true, match } : { ok: false, error: 'No project matched workspace path' };\n }\n\n if (command === 'create') {\n const name = trimString(args.name);\n const workspaceRoot = projectWorkspaceRootArg(args);\n if (!name && !workspaceRoot) return { ok: false, error: 'name or workspaceRoot is required' };\n const input = {\n name,\n description: trimString(args.description),\n defaultAgentId: validateDefaultAgentId(args.defaultAgentId, deps.getConfig?.()) ?? undefined,\n workspaceRoot,\n createWorkspaceRoot: args.createWorkspaceRoot === true,\n projectKind: trimString(args.projectKind),\n brief: trimString(args.brief),\n instructions: trimString(args.instructions),\n };\n if (dryRun) return { ok: true, dryRun: true, action: 'create_project', input };\n const project = projects.create(input);\n return { ok: true, project };\n }\n\n if (command === 'update') {\n const id = trimString(args.projectId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'projectId is required' };\n const workspaceRoot = optionalProjectWorkspaceRootArg(args);\n const patch = {\n ...(args.name !== undefined ? { name: trimString(args.name) ?? '' } : {}),\n ...(args.description !== undefined ? { description: optionalString(args.description) } : {}),\n ...(args.status !== undefined ? { status: enumValue(args.status, PROJECT_STATUSES) } : {}),\n ...(args.defaultAgentId !== undefined ? { defaultAgentId: validateDefaultAgentId(args.defaultAgentId, deps.getConfig?.()) } : {}),\n ...(workspaceRoot !== undefined ? { workspaceRoot } : {}),\n ...(args.createWorkspaceRoot === true ? { createWorkspaceRoot: true } : {}),\n ...(args.brief !== undefined ? { brief: optionalString(args.brief) } : {}),\n ...(args.instructions !== undefined ? { instructions: optionalString(args.instructions) } : {}),\n };\n if (args.status !== undefined && patch.status === undefined) return { ok: false, error: 'Invalid project status' };\n if (dryRun) return { ok: true, dryRun: true, action: 'update_project', projectId: id, patch };\n const project = projects.update(id, patch);\n return { ok: true, project };\n }\n\n return { ok: false, error: `Unsupported project command: ${command}` };\n}\n\nasync function handleNote(\n command: string,\n args: Record<string, unknown>,\n deps: XopcUseToolDeps,\n dryRun: boolean,\n): Promise<unknown> {\n const notes = deps.getNotesService?.();\n if (!notes) return { ok: false, error: 'Notes service is unavailable' };\n\n if (command === 'list') {\n return {\n ok: true,\n ...(await notes.listNotes({\n status: enumValue(args.status, NOTE_STATUSES),\n kind: enumValue(args.kind, NOTE_KINDS),\n tag: trimString(args.tag),\n search: trimString(args.search),\n pinned: typeof args.pinned === 'boolean' ? args.pinned : undefined,\n limit: boundedLimit(args.limit),\n offset: offset(args.offset),\n sortBy: enumValue(args.sortBy, new Set(['createdAt', 'updatedAt', 'lastOpenedAt'] as const)),\n sortOrder: enumValue(args.sortOrder, new Set(['asc', 'desc'] as const)),\n })),\n };\n }\n\n if (command === 'get') {\n const id = trimString(args.noteId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'noteId is required' };\n const note = await notes.getNote(id);\n return note ? { ok: true, note } : { ok: false, error: `Note not found: ${id}` };\n }\n\n if (command === 'create') {\n const markdown = typeof args.markdown === 'string' ? args.markdown : trimString(args.content) ?? '';\n const input = {\n title: trimString(args.title),\n markdown,\n kind: enumValue(args.kind, NOTE_KINDS),\n tags: stringArray(args.tags),\n capturedVia: { channel: 'web' as const },\n pinned: args.pinned === true,\n };\n if (dryRun) return { ok: true, dryRun: true, action: 'create_note', input };\n const note = await notes.createNote(input);\n return { ok: true, note };\n }\n\n if (command === 'append') {\n const id = trimString(args.noteId) ?? trimString(args.id);\n const content = trimString(args.content);\n if (!id) return { ok: false, error: 'noteId is required' };\n if (!content) return { ok: false, error: 'content is required' };\n const heading = trimString(args.heading);\n if (dryRun) return { ok: true, dryRun: true, action: 'append_note', noteId: id, heading, content };\n const note = await notes.appendTextToNote(id, content, heading);\n return note ? { ok: true, note } : { ok: false, error: `Note not found: ${id}` };\n }\n\n if (command === 'preview_edit') {\n const id = trimString(args.noteId) ?? trimString(args.id);\n const instruction = trimString(args.instruction);\n if (!id) return { ok: false, error: 'noteId is required' };\n if (!instruction) return { ok: false, error: 'instruction is required' };\n const markdown = typeof args.markdown === 'string' ? args.markdown : undefined;\n const result = await notes.createAiEditPatch(id, instruction, markdown);\n return result ? { ok: true, ...result } : { ok: false, error: `Note not found: ${id}` };\n }\n\n if (command === 'update') {\n const id = trimString(args.noteId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'noteId is required' };\n if (args.title !== undefined && typeof args.title !== 'string') return { ok: false, error: 'Invalid note title' };\n if (args.markdown !== undefined && typeof args.markdown !== 'string') return { ok: false, error: 'Invalid note markdown' };\n if (args.tags !== undefined && !Array.isArray(args.tags)) return { ok: false, error: 'Invalid note tags' };\n const title = args.title as string | undefined;\n const markdown = args.markdown as string | undefined;\n const patch = {\n ...(args.title !== undefined ? { title } : {}),\n ...(args.markdown !== undefined ? { markdown } : {}),\n ...(args.kind !== undefined ? { kind: enumValue(args.kind, NOTE_KINDS) } : {}),\n ...(args.status !== undefined ? { status: enumValue(args.status, NOTE_STATUSES) } : {}),\n ...(args.tags !== undefined ? { tags: stringArray(args.tags) ?? [] } : {}),\n ...(typeof args.pinned === 'boolean' ? { pinned: args.pinned } : {}),\n };\n if (args.kind !== undefined && patch.kind === undefined) return { ok: false, error: 'Invalid note kind' };\n if (args.status !== undefined && patch.status === undefined) return { ok: false, error: 'Invalid note status' };\n if (dryRun) return { ok: true, dryRun: true, action: 'update_note', noteId: id, patch };\n const note = await notes.updateNote(id, patch, 'ai_edit');\n return note ? { ok: true, note } : { ok: false, error: `Note not found: ${id}` };\n }\n\n return { ok: false, error: `Unsupported note command: ${command}` };\n}\n\nasync function handleWorkItem(\n command: string,\n args: Record<string, unknown>,\n deps: XopcUseToolDeps,\n dryRun: boolean,\n): Promise<unknown> {\n const workItems = deps.getWorkItemService?.();\n if (!workItems) return { ok: false, error: 'Work item service is unavailable' };\n\n if (command === 'list') {\n const projectId = currentProjectId(args, deps);\n if (!projectId) return { ok: false, error: 'projectId is required' };\n return {\n ok: true,\n ...workItems.listProjectWorkItems(projectId, {\n status: enumValue(args.status, WORK_ITEM_STATUSES),\n priority: enumValue(args.priority, WORK_ITEM_PRIORITIES),\n includeArchived: args.includeArchived === true,\n search: trimString(args.search),\n sortBy: enumValue(args.sortBy, new Set(['updatedAt', 'createdAt', 'priority', 'status'] as const)),\n sortOrder: enumValue(args.sortOrder, new Set(['asc', 'desc'] as const)),\n limit: boundedLimit(args.limit),\n offset: offset(args.offset),\n }),\n };\n }\n\n if (command === 'get') {\n const id = trimString(args.workItemId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'workItemId is required' };\n const item = workItems.getWorkItem(id);\n return item ? { ok: true, item } : { ok: false, error: `Work item not found: ${id}` };\n }\n\n if (command === 'create') {\n const projectId = currentProjectId(args, deps);\n const title = trimString(args.title);\n if (!projectId) return { ok: false, error: 'projectId is required' };\n if (!title) return { ok: false, error: 'title is required' };\n const input = {\n title,\n description: trimString(args.description),\n status: enumValue(args.status, WORK_ITEM_STATUSES),\n priority: enumValue(args.priority, WORK_ITEM_PRIORITIES),\n ownerAgentId: trimString(args.ownerAgentId),\n nextAction: trimString(args.nextAction),\n blockedReason: trimString(args.blockedReason),\n dueAt: finiteNumber(args.dueAt),\n };\n if (args.status !== undefined && input.status === undefined) return { ok: false, error: 'Invalid work item status' };\n if (args.priority !== undefined && input.priority === undefined) return { ok: false, error: 'Invalid work item priority' };\n if (args.dueAt !== undefined && input.dueAt === undefined) return { ok: false, error: 'Invalid dueAt' };\n if (dryRun) return { ok: true, dryRun: true, action: 'create_work_item', projectId, input };\n const item = workItems.createProjectWorkItem(projectId, input);\n return { ok: true, item };\n }\n\n if (command === 'update') {\n const id = trimString(args.workItemId) ?? trimString(args.id);\n if (!id) return { ok: false, error: 'workItemId is required' };\n const dueAt = args.dueAt !== undefined ? nullableNumber(args.dueAt) : undefined;\n const archivedAt = args.archivedAt !== undefined ? nullableNumber(args.archivedAt) : undefined;\n const patch = {\n ...(args.title !== undefined ? { title: trimString(args.title) ?? '' } : {}),\n ...(args.description !== undefined ? { description: optionalString(args.description) } : {}),\n ...(args.status !== undefined ? { status: enumValue(args.status, WORK_ITEM_STATUSES) } : {}),\n ...(args.priority !== undefined ? { priority: enumValue(args.priority, WORK_ITEM_PRIORITIES) } : {}),\n ...(args.ownerAgentId !== undefined ? { ownerAgentId: optionalString(args.ownerAgentId) } : {}),\n ...(args.nextAction !== undefined ? { nextAction: optionalString(args.nextAction) } : {}),\n ...(args.blockedReason !== undefined ? { blockedReason: optionalString(args.blockedReason) } : {}),\n ...(args.dueAt !== undefined ? { dueAt } : {}),\n ...(args.archivedAt !== undefined ? { archivedAt } : {}),\n };\n if (args.status !== undefined && patch.status === undefined) return { ok: false, error: 'Invalid work item status' };\n if (args.priority !== undefined && patch.priority === undefined) return { ok: false, error: 'Invalid work item priority' };\n if (args.dueAt !== undefined && dueAt === undefined) return { ok: false, error: 'Invalid dueAt' };\n if (args.archivedAt !== undefined && archivedAt === undefined) return { ok: false, error: 'Invalid archivedAt' };\n if (dryRun) return { ok: true, dryRun: true, action: 'update_work_item', workItemId: id, patch };\n const item = workItems.updateWorkItem(id, patch);\n return item ? { ok: true, item } : { ok: false, error: `Work item not found: ${id}` };\n }\n\n return { ok: false, error: `Unsupported work_item command: ${command}` };\n}\n\nexport function createXopcUseTool(deps: XopcUseToolDeps): AgentTool<typeof XopcUseToolSchema, XopcUseDetails> {\n return {\n name: 'xopc_use',\n label: 'XOPC Use',\n description:\n 'Operate first-class xopc objects through one safe entry point. Use for projects, notes, and project work items instead of editing storage files directly. For non-trivial object changes, load the built-in manual first with tool_manual({ tool: \"xopc_use\" }).',\n parameters: XopcUseToolSchema,\n mutatesWorkspace: true,\n mutationScope: 'external',\n requiresExclusiveWorkspaceLock: true,\n finalGuardRelevant: true,\n async execute(toolCallId, input: XopcUseToolInput): Promise<AgentToolResult<XopcUseDetails>> {\n const mode = input.mode;\n const command = input.command.trim();\n const dryRun = input.dryRun === true;\n const args = ensureArgs(input);\n const details: XopcUseDetails = { mode, command, dryRun };\n if (!command) return errorText('command is required', details);\n\n try {\n const sessionKey = deps.getCurrentSessionKey?.();\n const agentId = deps.getCurrentAgentId?.();\n const result = await runWithActivityContext(\n {\n actor: { kind: 'agent', agentId, sessionKey },\n initiator: { kind: 'user', sessionKey },\n source: { kind: 'xopc_use', toolCallId },\n },\n async () =>\n mode === 'project'\n ? await handleProject(command, args, deps, dryRun)\n : mode === 'note'\n ? await handleNote(command, args, deps, dryRun)\n : mode === 'work_item'\n ? await handleWorkItem(command, args, deps, dryRun)\n : { ok: false, error: `Unsupported mode: ${String(mode)}` },\n );\n return okText({ ...details, result });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return errorText(message, details);\n }\n },\n } as AgentTool<typeof XopcUseToolSchema, XopcUseDetails>;\n}\n"],"mappings":"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"}
@@ -24,6 +24,7 @@ import type { SubagentRunOptions, SubagentRunner } from './types.js';
24
24
  export interface DelegateSubagentRunnerDeps {
25
25
  workspace: string;
26
26
  bus: MessageBus;
27
+ agentId?: string;
27
28
  /** Resolves the default subagent model (typically the parent agent's primary model). */
28
29
  getDefaultModel: () => Model<Api>;
29
30
  getConfig: () => Config | undefined;
@@ -52,10 +52,14 @@ var DelegateSubagentRunner = class {
52
52
  maxIterations: opts.maxIterations ?? DEFAULT_MAX_ITERATIONS,
53
53
  model,
54
54
  bus: this.deps.bus,
55
+ agentId: this.deps.agentId,
55
56
  getConfig: this.deps.getConfig,
56
57
  toolExecutorConfig: this.deps.toolExecutorConfig,
57
58
  buildChildTools: (childOpts) => {
58
- const base = this.deps.buildChildTools(childOpts);
59
+ const base = this.deps.buildChildTools({
60
+ ...childOpts,
61
+ agentId: this.deps.agentId ?? childOpts.agentId
62
+ });
59
63
  if (!wantStructured || !opts.schema) return base;
60
64
  return [...base.filter((t) => t.name !== STRUCTURED_OUTPUT_TOOL_NAME), createStructuredOutputTool({
61
65
  schema: opts.schema,
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-runner.js","names":[],"sources":["../../../../src/agent/workflow/subagent-runner.ts"],"sourcesContent":["/**\n * Adapter: spawns one isolated child agent per `agent()` call from a workflow.\n *\n * Wraps the existing `createDelegateChildHandle` so the workflow runtime stays\n * decoupled from the LLM stack (it sees only the `SubagentRunner` interface).\n *\n * Key behaviour:\n * - When `opts.schema` is provided, we inject `structured_output` into the child\n * tool set and unwrap the captured value on success. If the subagent finishes\n * without ever calling `structured_output`, we treat it as failure (`null`).\n * - Failures and aborts resolve to `null`. The workflow runtime continues — this\n * matches the pi-dynamic-workflows contract and keeps fan-out pipelines robust.\n * - We do NOT mutate `createDelegateChildHandle` — we just leverage its\n * `buildChildTools` injection point.\n */\n\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Api, Model } from '@earendil-works/pi-ai';\n\nimport type { Config } from '../../config/schema.js';\nimport type { MessageBus } from '../../infra/bus/index.js';\nimport type { SessionStore } from '../../session/store.js';\nimport { emitSessionTranscriptUpdate } from '../../session/transcript-events.js';\nimport { createLogger } from '../../utils/logger.js';\n\nimport {\n type BuildChildToolsOptions,\n createDelegateChildHandle,\n type DelegateChildHandleOptions,\n} from '../child-agent-factory.js';\nimport {\n DEFAULT_DELEGATE_TOOLS,\n DELEGATE_BLOCKED_TOOLS,\n} from '../tools/delegate-tool.js';\nimport type { ToolExecutorConfig } from '../tools/executor.js';\n\nimport {\n createStructuredOutputTool,\n STRUCTURED_OUTPUT_TOOL_NAME,\n type StructuredOutputCapture,\n} from './structured-output-tool.js';\nimport type { SubagentRunOptions, SubagentRunner, SubagentProgressEvent } from './types.js';\n\nconst log = createLogger('Agent:WorkflowSubagent');\n\nconst DEFAULT_MAX_ITERATIONS = 30;\n\nexport interface DelegateSubagentRunnerDeps {\n workspace: string;\n bus: MessageBus;\n /** Resolves the default subagent model (typically the parent agent's primary model). */\n getDefaultModel: () => Model<Api>;\n getConfig: () => Config | undefined;\n toolExecutorConfig?: Partial<ToolExecutorConfig>;\n sessionStore?: SessionStore;\n /**\n * Provided by the workflow tool from `AgentToolsFactory` — mirrors how\n * `delegate-tool` is wired (avoids importing `tools/factory.ts` here and\n * breaking the existing factory ↔ delegate-tool ↔ child-agent-factory\n * dependency contract).\n */\n buildChildTools: (opts: BuildChildToolsOptions) => AgentTool<any, any>[];\n}\n\nexport class DelegateSubagentRunner implements SubagentRunner {\n constructor(private readonly deps: DelegateSubagentRunnerDeps) {}\n\n async run<T = string>(prompt: string, opts: SubagentRunOptions<T>): Promise<T | null> {\n if (opts.signal?.aborted) return null;\n\n const capture: StructuredOutputCapture<T> = { called: false, value: undefined };\n const wantStructured = Boolean(opts.schema);\n\n const allowed = resolveAllowedToolNames(opts.allowedToolNames, wantStructured);\n const model = opts.model ?? safeResolveDefaultModel(this.deps.getDefaultModel);\n if (!model) {\n log.warn({ label: opts.label }, 'subagent run skipped: no primary model resolved');\n return null;\n }\n\n const fullPrompt = buildPrompt(prompt, opts, wantStructured);\n const streamMode = resolveSubagentStreamMode(this.deps.getConfig);\n\n let transcriptPersistQueue: Promise<void> = Promise.resolve();\n const persistTranscriptSnapshot = opts.sessionKey && this.deps.sessionStore\n ? (messages: Parameters<SessionStore['saveMessages']>[1]) => {\n const store = this.deps.sessionStore;\n const key = opts.sessionKey;\n if (!store || !key) return;\n const snapshot = cloneAgentMessages(messages);\n transcriptPersistQueue = transcriptPersistQueue\n .then(async () => {\n await store.saveMessages(key, snapshot);\n emitSessionTranscriptUpdate({ sessionKey: key });\n })\n .catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(\n { err, sessionKey: key, errorMessage: msg },\n `Failed to persist workflow subagent transcript snapshot: ${msg}`,\n );\n });\n }\n : undefined;\n\n const childOptions: DelegateChildHandleOptions = {\n workspace: this.deps.workspace,\n goal: fullPrompt,\n allowedToolNames: allowed,\n maxIterations: opts.maxIterations ?? DEFAULT_MAX_ITERATIONS,\n model,\n bus: this.deps.bus,\n getConfig: this.deps.getConfig,\n toolExecutorConfig: this.deps.toolExecutorConfig,\n buildChildTools: (childOpts) => {\n const base = this.deps.buildChildTools(childOpts);\n if (!wantStructured || !opts.schema) return base;\n // Replace any existing tool with the same name so the per-run capture wins.\n const filtered = base.filter((t) => t.name !== STRUCTURED_OUTPUT_TOOL_NAME);\n return [\n ...filtered,\n createStructuredOutputTool({ schema: opts.schema, capture }) as unknown as AgentTool<any, any>,\n ];\n },\n progressHooks:\n opts.onProgress && streamMode !== 'off'\n ? {\n mode: streamMode === 'full' ? 'full' : 'steps',\n onProgress: (event) => {\n opts.onProgress?.(mapChildProgressEvent(event));\n },\n }\n : undefined,\n onTranscriptSnapshot: persistTranscriptSnapshot,\n };\n\n if (opts.sessionKey && opts.sessionMetadata && this.deps.sessionStore) {\n await this.preparePersistentSubagentSession(opts.sessionKey, opts.sessionMetadata);\n }\n\n const handle = createDelegateChildHandle(childOptions);\n const onAbort = () => handle.abort();\n opts.signal?.addEventListener('abort', onAbort, { once: true });\n\n try {\n const { summary, messages } = await handle.run();\n await transcriptPersistQueue;\n if (opts.sessionKey && this.deps.sessionStore) {\n await this.deps.sessionStore.saveMessages(opts.sessionKey, messages);\n emitSessionTranscriptUpdate({ sessionKey: opts.sessionKey });\n }\n if (opts.signal?.aborted) return null;\n\n if (wantStructured) {\n if (!capture.called) {\n log.warn({ label: opts.label }, 'subagent finished without calling structured_output');\n return null;\n }\n return capture.value as T;\n }\n return summary as unknown as T;\n } catch (e) {\n if (opts.rethrow) throw e;\n const msg = e instanceof Error ? e.message : String(e);\n log.warn({ err: e, label: opts.label, errorMessage: msg }, `subagent run failed: ${msg}`);\n return null;\n } finally {\n opts.signal?.removeEventListener('abort', onAbort);\n }\n }\n\n private async preparePersistentSubagentSession(\n sessionKey: string,\n metadata: NonNullable<SubagentRunOptions['sessionMetadata']>,\n ): Promise<void> {\n const store = this.deps.sessionStore;\n if (!store) return;\n await store.resolveTranscriptPath(sessionKey, {\n metadata: {\n sessionType: 'workflow-subagent',\n hiddenFromSessionList: true,\n parentSessionKey: metadata.parentSessionKey,\n workflowRunId: metadata.workflowRunId,\n workflowDefinitionId: metadata.workflowDefinitionId,\n workflowAgentId: metadata.workflowAgentId,\n workflowAgentLabel: metadata.workflowAgentLabel,\n sourceChannel: 'workflow',\n sourceChatId: metadata.workflowRunId,\n routing: {\n agentId: metadata.workflowAgentId || 'main',\n source: 'workflow',\n accountId: 'default',\n peerKind: 'subagent',\n peerId: metadata.workflowRunId,\n },\n },\n });\n await store.updateMetadata(sessionKey, {\n sessionType: 'workflow-subagent',\n hiddenFromSessionList: true,\n parentSessionKey: metadata.parentSessionKey,\n workflowRunId: metadata.workflowRunId,\n workflowDefinitionId: metadata.workflowDefinitionId,\n workflowAgentId: metadata.workflowAgentId,\n workflowAgentLabel: metadata.workflowAgentLabel,\n name: metadata.workflowAgentLabel,\n tags: ['workflow-subagent', metadata.workflowDefinitionId],\n });\n }\n}\n\nfunction cloneAgentMessages(messages: Parameters<SessionStore['saveMessages']>[1]): Parameters<SessionStore['saveMessages']>[1] {\n return messages.map((message) => structuredClone(message));\n}\n\nfunction resolveAllowedToolNames(\n requested: string[] | undefined,\n wantStructured: boolean,\n): string[] {\n const base = requested && requested.length > 0 ? requested : [...DEFAULT_DELEGATE_TOOLS];\n const filtered = base\n .map((s) => String(s).trim())\n .filter((s) => s.length > 0)\n .filter((s) => !DELEGATE_BLOCKED_TOOLS.has(s));\n if (wantStructured && !filtered.includes(STRUCTURED_OUTPUT_TOOL_NAME)) {\n filtered.push(STRUCTURED_OUTPUT_TOOL_NAME);\n }\n return [...new Set(filtered)];\n}\n\nfunction buildPrompt(prompt: string, opts: SubagentRunOptions<unknown>, structured: boolean): string {\n const parts: string[] = [];\n if (opts.instructions?.trim()) parts.push(opts.instructions.trim());\n if (opts.label) parts.push(`Task label: ${opts.label}`);\n if (opts.phase) parts.push(`Workflow phase: ${opts.phase}`);\n parts.push(prompt);\n if (structured) {\n parts.push(\n [\n 'Final output contract:',\n '- Your final action MUST be a structured_output tool call.',\n '- The structured_output arguments are the return value of this subagent.',\n '- Do not emit a prose final answer instead of structured_output.',\n '- If you need to inspect files or run commands first, do so, then call structured_output exactly once.',\n ].join('\\n'),\n );\n }\n return parts.join('\\n\\n');\n}\n\nfunction safeResolveDefaultModel(get: () => Model<Api>): Model<Api> | null {\n try {\n return get();\n } catch (e) {\n log.warn({ err: e }, 'failed to resolve default subagent model');\n return null;\n }\n}\n\nfunction resolveSubagentStreamMode(\n _getConfig: () => Config | undefined,\n): 'off' | 'steps' | 'full' {\n return 'steps';\n}\n\nfunction mapChildProgressEvent(event: {\n type: 'tool_start' | 'tool_end' | 'iteration' | 'text_delta' | 'thinking_delta';\n toolCallId?: string;\n toolName?: string;\n args?: Record<string, unknown>;\n isError?: boolean;\n resultPreview?: string;\n error?: string;\n count?: number;\n max?: number;\n delta?: string;\n}): SubagentProgressEvent {\n switch (event.type) {\n case 'tool_start':\n return {\n type: 'tool_start',\n toolCallId: event.toolCallId ?? '',\n toolName: event.toolName ?? 'tool',\n args: event.args ?? {},\n };\n case 'tool_end':\n return {\n type: 'tool_end',\n toolCallId: event.toolCallId ?? '',\n toolName: event.toolName ?? 'tool',\n isError: Boolean(event.isError),\n resultPreview: event.resultPreview,\n error: event.error,\n };\n case 'iteration':\n return {\n type: 'iteration',\n count: event.count ?? 0,\n max: event.max ?? 0,\n };\n case 'text_delta':\n return { type: 'text_delta', delta: event.delta ?? '' };\n case 'thinking_delta':\n return { type: 'thinking_delta', delta: event.delta ?? '' };\n default:\n return { type: 'text_delta', delta: '' };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"subagent-runner.js","names":[],"sources":["../../../../src/agent/workflow/subagent-runner.ts"],"sourcesContent":["/**\n * Adapter: spawns one isolated child agent per `agent()` call from a workflow.\n *\n * Wraps the existing `createDelegateChildHandle` so the workflow runtime stays\n * decoupled from the LLM stack (it sees only the `SubagentRunner` interface).\n *\n * Key behaviour:\n * - When `opts.schema` is provided, we inject `structured_output` into the child\n * tool set and unwrap the captured value on success. If the subagent finishes\n * without ever calling `structured_output`, we treat it as failure (`null`).\n * - Failures and aborts resolve to `null`. The workflow runtime continues — this\n * matches the pi-dynamic-workflows contract and keeps fan-out pipelines robust.\n * - We do NOT mutate `createDelegateChildHandle` — we just leverage its\n * `buildChildTools` injection point.\n */\n\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Api, Model } from '@earendil-works/pi-ai';\n\nimport type { Config } from '../../config/schema.js';\nimport type { MessageBus } from '../../infra/bus/index.js';\nimport type { SessionStore } from '../../session/store.js';\nimport { emitSessionTranscriptUpdate } from '../../session/transcript-events.js';\nimport { createLogger } from '../../utils/logger.js';\n\nimport {\n type BuildChildToolsOptions,\n createDelegateChildHandle,\n type DelegateChildHandleOptions,\n} from '../child-agent-factory.js';\nimport {\n DEFAULT_DELEGATE_TOOLS,\n DELEGATE_BLOCKED_TOOLS,\n} from '../tools/delegate-tool.js';\nimport type { ToolExecutorConfig } from '../tools/executor.js';\n\nimport {\n createStructuredOutputTool,\n STRUCTURED_OUTPUT_TOOL_NAME,\n type StructuredOutputCapture,\n} from './structured-output-tool.js';\nimport type { SubagentRunOptions, SubagentRunner, SubagentProgressEvent } from './types.js';\n\nconst log = createLogger('Agent:WorkflowSubagent');\n\nconst DEFAULT_MAX_ITERATIONS = 30;\n\nexport interface DelegateSubagentRunnerDeps {\n workspace: string;\n bus: MessageBus;\n agentId?: string;\n /** Resolves the default subagent model (typically the parent agent's primary model). */\n getDefaultModel: () => Model<Api>;\n getConfig: () => Config | undefined;\n toolExecutorConfig?: Partial<ToolExecutorConfig>;\n sessionStore?: SessionStore;\n /**\n * Provided by the workflow tool from `AgentToolsFactory` — mirrors how\n * `delegate-tool` is wired (avoids importing `tools/factory.ts` here and\n * breaking the existing factory ↔ delegate-tool ↔ child-agent-factory\n * dependency contract).\n */\n buildChildTools: (opts: BuildChildToolsOptions) => AgentTool<any, any>[];\n}\n\nexport class DelegateSubagentRunner implements SubagentRunner {\n constructor(private readonly deps: DelegateSubagentRunnerDeps) {}\n\n async run<T = string>(prompt: string, opts: SubagentRunOptions<T>): Promise<T | null> {\n if (opts.signal?.aborted) return null;\n\n const capture: StructuredOutputCapture<T> = { called: false, value: undefined };\n const wantStructured = Boolean(opts.schema);\n\n const allowed = resolveAllowedToolNames(opts.allowedToolNames, wantStructured);\n const model = opts.model ?? safeResolveDefaultModel(this.deps.getDefaultModel);\n if (!model) {\n log.warn({ label: opts.label }, 'subagent run skipped: no primary model resolved');\n return null;\n }\n\n const fullPrompt = buildPrompt(prompt, opts, wantStructured);\n const streamMode = resolveSubagentStreamMode(this.deps.getConfig);\n\n let transcriptPersistQueue: Promise<void> = Promise.resolve();\n const persistTranscriptSnapshot = opts.sessionKey && this.deps.sessionStore\n ? (messages: Parameters<SessionStore['saveMessages']>[1]) => {\n const store = this.deps.sessionStore;\n const key = opts.sessionKey;\n if (!store || !key) return;\n const snapshot = cloneAgentMessages(messages);\n transcriptPersistQueue = transcriptPersistQueue\n .then(async () => {\n await store.saveMessages(key, snapshot);\n emitSessionTranscriptUpdate({ sessionKey: key });\n })\n .catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(\n { err, sessionKey: key, errorMessage: msg },\n `Failed to persist workflow subagent transcript snapshot: ${msg}`,\n );\n });\n }\n : undefined;\n\n const childOptions: DelegateChildHandleOptions = {\n workspace: this.deps.workspace,\n goal: fullPrompt,\n allowedToolNames: allowed,\n maxIterations: opts.maxIterations ?? DEFAULT_MAX_ITERATIONS,\n model,\n bus: this.deps.bus,\n agentId: this.deps.agentId,\n getConfig: this.deps.getConfig,\n toolExecutorConfig: this.deps.toolExecutorConfig,\n buildChildTools: (childOpts) => {\n const base = this.deps.buildChildTools({ ...childOpts, agentId: this.deps.agentId ?? childOpts.agentId });\n if (!wantStructured || !opts.schema) return base;\n // Replace any existing tool with the same name so the per-run capture wins.\n const filtered = base.filter((t) => t.name !== STRUCTURED_OUTPUT_TOOL_NAME);\n return [\n ...filtered,\n createStructuredOutputTool({ schema: opts.schema, capture }) as unknown as AgentTool<any, any>,\n ];\n },\n progressHooks:\n opts.onProgress && streamMode !== 'off'\n ? {\n mode: streamMode === 'full' ? 'full' : 'steps',\n onProgress: (event) => {\n opts.onProgress?.(mapChildProgressEvent(event));\n },\n }\n : undefined,\n onTranscriptSnapshot: persistTranscriptSnapshot,\n };\n\n if (opts.sessionKey && opts.sessionMetadata && this.deps.sessionStore) {\n await this.preparePersistentSubagentSession(opts.sessionKey, opts.sessionMetadata);\n }\n\n const handle = createDelegateChildHandle(childOptions);\n const onAbort = () => handle.abort();\n opts.signal?.addEventListener('abort', onAbort, { once: true });\n\n try {\n const { summary, messages } = await handle.run();\n await transcriptPersistQueue;\n if (opts.sessionKey && this.deps.sessionStore) {\n await this.deps.sessionStore.saveMessages(opts.sessionKey, messages);\n emitSessionTranscriptUpdate({ sessionKey: opts.sessionKey });\n }\n if (opts.signal?.aborted) return null;\n\n if (wantStructured) {\n if (!capture.called) {\n log.warn({ label: opts.label }, 'subagent finished without calling structured_output');\n return null;\n }\n return capture.value as T;\n }\n return summary as unknown as T;\n } catch (e) {\n if (opts.rethrow) throw e;\n const msg = e instanceof Error ? e.message : String(e);\n log.warn({ err: e, label: opts.label, errorMessage: msg }, `subagent run failed: ${msg}`);\n return null;\n } finally {\n opts.signal?.removeEventListener('abort', onAbort);\n }\n }\n\n private async preparePersistentSubagentSession(\n sessionKey: string,\n metadata: NonNullable<SubagentRunOptions['sessionMetadata']>,\n ): Promise<void> {\n const store = this.deps.sessionStore;\n if (!store) return;\n await store.resolveTranscriptPath(sessionKey, {\n metadata: {\n sessionType: 'workflow-subagent',\n hiddenFromSessionList: true,\n parentSessionKey: metadata.parentSessionKey,\n workflowRunId: metadata.workflowRunId,\n workflowDefinitionId: metadata.workflowDefinitionId,\n workflowAgentId: metadata.workflowAgentId,\n workflowAgentLabel: metadata.workflowAgentLabel,\n sourceChannel: 'workflow',\n sourceChatId: metadata.workflowRunId,\n routing: {\n agentId: metadata.workflowAgentId || 'main',\n source: 'workflow',\n accountId: 'default',\n peerKind: 'subagent',\n peerId: metadata.workflowRunId,\n },\n },\n });\n await store.updateMetadata(sessionKey, {\n sessionType: 'workflow-subagent',\n hiddenFromSessionList: true,\n parentSessionKey: metadata.parentSessionKey,\n workflowRunId: metadata.workflowRunId,\n workflowDefinitionId: metadata.workflowDefinitionId,\n workflowAgentId: metadata.workflowAgentId,\n workflowAgentLabel: metadata.workflowAgentLabel,\n name: metadata.workflowAgentLabel,\n tags: ['workflow-subagent', metadata.workflowDefinitionId],\n });\n }\n}\n\nfunction cloneAgentMessages(messages: Parameters<SessionStore['saveMessages']>[1]): Parameters<SessionStore['saveMessages']>[1] {\n return messages.map((message) => structuredClone(message));\n}\n\nfunction resolveAllowedToolNames(\n requested: string[] | undefined,\n wantStructured: boolean,\n): string[] {\n const base = requested && requested.length > 0 ? requested : [...DEFAULT_DELEGATE_TOOLS];\n const filtered = base\n .map((s) => String(s).trim())\n .filter((s) => s.length > 0)\n .filter((s) => !DELEGATE_BLOCKED_TOOLS.has(s));\n if (wantStructured && !filtered.includes(STRUCTURED_OUTPUT_TOOL_NAME)) {\n filtered.push(STRUCTURED_OUTPUT_TOOL_NAME);\n }\n return [...new Set(filtered)];\n}\n\nfunction buildPrompt(prompt: string, opts: SubagentRunOptions<unknown>, structured: boolean): string {\n const parts: string[] = [];\n if (opts.instructions?.trim()) parts.push(opts.instructions.trim());\n if (opts.label) parts.push(`Task label: ${opts.label}`);\n if (opts.phase) parts.push(`Workflow phase: ${opts.phase}`);\n parts.push(prompt);\n if (structured) {\n parts.push(\n [\n 'Final output contract:',\n '- Your final action MUST be a structured_output tool call.',\n '- The structured_output arguments are the return value of this subagent.',\n '- Do not emit a prose final answer instead of structured_output.',\n '- If you need to inspect files or run commands first, do so, then call structured_output exactly once.',\n ].join('\\n'),\n );\n }\n return parts.join('\\n\\n');\n}\n\nfunction safeResolveDefaultModel(get: () => Model<Api>): Model<Api> | null {\n try {\n return get();\n } catch (e) {\n log.warn({ err: e }, 'failed to resolve default subagent model');\n return null;\n }\n}\n\nfunction resolveSubagentStreamMode(\n _getConfig: () => Config | undefined,\n): 'off' | 'steps' | 'full' {\n return 'steps';\n}\n\nfunction mapChildProgressEvent(event: {\n type: 'tool_start' | 'tool_end' | 'iteration' | 'text_delta' | 'thinking_delta';\n toolCallId?: string;\n toolName?: string;\n args?: Record<string, unknown>;\n isError?: boolean;\n resultPreview?: string;\n error?: string;\n count?: number;\n max?: number;\n delta?: string;\n}): SubagentProgressEvent {\n switch (event.type) {\n case 'tool_start':\n return {\n type: 'tool_start',\n toolCallId: event.toolCallId ?? '',\n toolName: event.toolName ?? 'tool',\n args: event.args ?? {},\n };\n case 'tool_end':\n return {\n type: 'tool_end',\n toolCallId: event.toolCallId ?? '',\n toolName: event.toolName ?? 'tool',\n isError: Boolean(event.isError),\n resultPreview: event.resultPreview,\n error: event.error,\n };\n case 'iteration':\n return {\n type: 'iteration',\n count: event.count ?? 0,\n max: event.max ?? 0,\n };\n case 'text_delta':\n return { type: 'text_delta', delta: event.delta ?? '' };\n case 'thinking_delta':\n return { type: 'thinking_delta', delta: event.delta ?? '' };\n default:\n return { type: 'text_delta', delta: '' };\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,10 @@
1
+ import { resolveDreamingRootForAgent } from "../memory/dreaming/scope.js";
1
2
  import { AgentToolsFactory } from "../tools/factory.js";
2
3
  //#region src/agent/workflow/workflow-child-tools.ts
3
4
  /** Builds the tool set for workflow child agents (wired from gateway to avoid cycles). */
4
5
  function buildWorkflowChildTools(childOptions) {
6
+ const config = childOptions.getConfig();
7
+ const dreamingRoot = config && childOptions.agentId ? resolveDreamingRootForAgent(config, childOptions.agentId) : void 0;
5
8
  return new AgentToolsFactory({
6
9
  workspace: childOptions.workspace,
7
10
  bus: childOptions.bus,
@@ -12,6 +15,8 @@ function buildWorkflowChildTools(childOptions) {
12
15
  }).createAllTools({
13
16
  workspace: childOptions.workspace,
14
17
  getPrimaryModel: () => childOptions.model,
18
+ agentId: childOptions.agentId,
19
+ dreamingRoot,
15
20
  disabledTools: new Set(["extensions"])
16
21
  });
17
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-child-tools.js","names":[],"sources":["../../../../src/agent/workflow/workflow-child-tools.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\n\nimport type { BuildChildToolsOptions } from '../child-agent-factory.js';\nimport { AgentToolsFactory } from '../tools/factory.js';\n\n/** Builds the tool set for workflow child agents (wired from gateway to avoid cycles). */\nexport function buildWorkflowChildTools(childOptions: BuildChildToolsOptions): AgentTool<any, any>[] {\n const childFactory = new AgentToolsFactory({\n workspace: childOptions.workspace,\n bus: childOptions.bus,\n getCurrentContext: () => null,\n getConfig: childOptions.getConfig,\n getPrimaryModel: () => childOptions.model,\n toolExecutorConfig: childOptions.toolExecutorConfig,\n });\n return childFactory.createAllTools({\n workspace: childOptions.workspace,\n getPrimaryModel: () => childOptions.model,\n disabledTools: new Set(['extensions']),\n });\n}\n"],"mappings":";;;AAMA,SAAgB,wBAAwB,cAA6D;AASnG,QAAO,IARkB,kBAAkB;EACzC,WAAW,aAAa;EACxB,KAAK,aAAa;EAClB,yBAAyB;EACzB,WAAW,aAAa;EACxB,uBAAuB,aAAa;EACpC,oBAAoB,aAAa;EAClC,CACkB,CAAC,eAAe;EACjC,WAAW,aAAa;EACxB,uBAAuB,aAAa;EACpC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC;EACvC,CAAC"}
1
+ {"version":3,"file":"workflow-child-tools.js","names":[],"sources":["../../../../src/agent/workflow/workflow-child-tools.ts"],"sourcesContent":["import type { AgentTool } from '@earendil-works/pi-agent-core';\n\nimport type { BuildChildToolsOptions } from '../child-agent-factory.js';\nimport { resolveDreamingRootForAgent } from '../memory/dreaming/scope.js';\nimport { AgentToolsFactory } from '../tools/factory.js';\n\n/** Builds the tool set for workflow child agents (wired from gateway to avoid cycles). */\nexport function buildWorkflowChildTools(childOptions: BuildChildToolsOptions): AgentTool<any, any>[] {\n const config = childOptions.getConfig();\n const dreamingRoot = config && childOptions.agentId\n ? resolveDreamingRootForAgent(config, childOptions.agentId)\n : undefined;\n const childFactory = new AgentToolsFactory({\n workspace: childOptions.workspace,\n bus: childOptions.bus,\n getCurrentContext: () => null,\n getConfig: childOptions.getConfig,\n getPrimaryModel: () => childOptions.model,\n toolExecutorConfig: childOptions.toolExecutorConfig,\n });\n return childFactory.createAllTools({\n workspace: childOptions.workspace,\n getPrimaryModel: () => childOptions.model,\n agentId: childOptions.agentId,\n dreamingRoot,\n disabledTools: new Set(['extensions']),\n });\n}\n"],"mappings":";;;;AAOA,SAAgB,wBAAwB,cAA6D;CACnG,MAAM,SAAS,aAAa,WAAW;CACvC,MAAM,eAAe,UAAU,aAAa,UACxC,4BAA4B,QAAQ,aAAa,QAAQ,GACzD,KAAA;AASJ,QAAO,IARkB,kBAAkB;EACzC,WAAW,aAAa;EACxB,KAAK,aAAa;EAClB,yBAAyB;EACzB,WAAW,aAAa;EACxB,uBAAuB,aAAa;EACpC,oBAAoB,aAAa;EAClC,CACkB,CAAC,eAAe;EACjC,WAAW,aAAa;EACxB,uBAAuB,aAAa;EACpC,SAAS,aAAa;EACtB;EACA,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC;EACvC,CAAC"}
@@ -34,8 +34,8 @@ export declare const ModelPolicySchema: z.ZodObject<{
34
34
  allowFallbacks: z.ZodOptional<z.ZodBoolean>;
35
35
  maxCostTier: z.ZodOptional<z.ZodEnum<{
36
36
  low: "low";
37
- medium: "medium";
38
37
  high: "high";
38
+ medium: "medium";
39
39
  }>>;
40
40
  }, z.core.$strict>>;
41
41
  }, z.core.$strict>;
@@ -62,8 +62,8 @@ export declare const ModelPolicyPatchSchema: z.ZodObject<{
62
62
  allowFallbacks: z.ZodOptional<z.ZodBoolean>;
63
63
  maxCostTier: z.ZodOptional<z.ZodEnum<{
64
64
  low: "low";
65
- medium: "medium";
66
65
  high: "high";
66
+ medium: "medium";
67
67
  }>>;
68
68
  }, z.core.$strict>>;
69
69
  }, z.core.$strict>;
@@ -73,8 +73,8 @@ export declare const ToolModeSchema: z.ZodEnum<{
73
73
  deny: "deny";
74
74
  }>;
75
75
  export declare const ToolScopeSchema: z.ZodEnum<{
76
- readonly: "readonly";
77
76
  workspace: "workspace";
77
+ readonly: "readonly";
78
78
  unrestricted: "unrestricted";
79
79
  }>;
80
80
  export declare const ToolPolicySchema: z.ZodObject<{
@@ -84,8 +84,8 @@ export declare const ToolPolicySchema: z.ZodObject<{
84
84
  deny: "deny";
85
85
  }>;
86
86
  scope: z.ZodOptional<z.ZodEnum<{
87
- readonly: "readonly";
88
87
  workspace: "workspace";
88
+ readonly: "readonly";
89
89
  unrestricted: "unrestricted";
90
90
  }>>;
91
91
  limits: z.ZodOptional<z.ZodObject<{
@@ -101,8 +101,8 @@ export declare const ToolPolicySetSchema: z.ZodDefault<z.ZodObject<{
101
101
  deny: "deny";
102
102
  }>;
103
103
  scope: z.ZodOptional<z.ZodEnum<{
104
- readonly: "readonly";
105
104
  workspace: "workspace";
105
+ readonly: "readonly";
106
106
  unrestricted: "unrestricted";
107
107
  }>>;
108
108
  limits: z.ZodOptional<z.ZodObject<{
@@ -118,8 +118,8 @@ export declare const ToolPolicySetSchema: z.ZodDefault<z.ZodObject<{
118
118
  deny: "deny";
119
119
  }>;
120
120
  scope: z.ZodOptional<z.ZodEnum<{
121
- readonly: "readonly";
122
121
  workspace: "workspace";
122
+ readonly: "readonly";
123
123
  unrestricted: "unrestricted";
124
124
  }>>;
125
125
  limits: z.ZodOptional<z.ZodObject<{
@@ -134,8 +134,8 @@ export declare const ToolPolicySetSchema: z.ZodDefault<z.ZodObject<{
134
134
  deny: "deny";
135
135
  }>;
136
136
  scope: z.ZodOptional<z.ZodEnum<{
137
- readonly: "readonly";
138
137
  workspace: "workspace";
138
+ readonly: "readonly";
139
139
  unrestricted: "unrestricted";
140
140
  }>>;
141
141
  limits: z.ZodOptional<z.ZodObject<{
@@ -217,13 +217,13 @@ export declare const DreamingPolicySchema: z.ZodOptional<z.ZodObject<{
217
217
  export declare const MemoryPolicySchema: z.ZodDefault<z.ZodObject<{
218
218
  mode: z.ZodDefault<z.ZodEnum<{
219
219
  off: "off";
220
+ auto: "auto";
220
221
  readOnly: "readOnly";
221
222
  confirmWrite: "confirmWrite";
222
- auto: "auto";
223
223
  }>>;
224
224
  sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
225
- workspace: "workspace";
226
225
  session: "session";
226
+ workspace: "workspace";
227
227
  userProfile: "userProfile";
228
228
  agentProfile: "agentProfile";
229
229
  curated: "curated";
@@ -405,8 +405,8 @@ export declare const AgentManifestSchema: z.ZodObject<{
405
405
  allowFallbacks: z.ZodOptional<z.ZodBoolean>;
406
406
  maxCostTier: z.ZodOptional<z.ZodEnum<{
407
407
  low: "low";
408
- medium: "medium";
409
408
  high: "high";
409
+ medium: "medium";
410
410
  }>>;
411
411
  }, z.core.$strict>>;
412
412
  }, z.core.$strict>;
@@ -418,8 +418,8 @@ export declare const AgentManifestSchema: z.ZodObject<{
418
418
  deny: "deny";
419
419
  }>;
420
420
  scope: z.ZodOptional<z.ZodEnum<{
421
- readonly: "readonly";
422
421
  workspace: "workspace";
422
+ readonly: "readonly";
423
423
  unrestricted: "unrestricted";
424
424
  }>>;
425
425
  limits: z.ZodOptional<z.ZodObject<{
@@ -435,8 +435,8 @@ export declare const AgentManifestSchema: z.ZodObject<{
435
435
  deny: "deny";
436
436
  }>;
437
437
  scope: z.ZodOptional<z.ZodEnum<{
438
- readonly: "readonly";
439
438
  workspace: "workspace";
439
+ readonly: "readonly";
440
440
  unrestricted: "unrestricted";
441
441
  }>>;
442
442
  limits: z.ZodOptional<z.ZodObject<{
@@ -451,8 +451,8 @@ export declare const AgentManifestSchema: z.ZodObject<{
451
451
  deny: "deny";
452
452
  }>;
453
453
  scope: z.ZodOptional<z.ZodEnum<{
454
- readonly: "readonly";
455
454
  workspace: "workspace";
455
+ readonly: "readonly";
456
456
  unrestricted: "unrestricted";
457
457
  }>>;
458
458
  limits: z.ZodOptional<z.ZodObject<{
@@ -475,13 +475,13 @@ export declare const AgentManifestSchema: z.ZodObject<{
475
475
  memory: z.ZodDefault<z.ZodObject<{
476
476
  mode: z.ZodDefault<z.ZodEnum<{
477
477
  off: "off";
478
+ auto: "auto";
478
479
  readOnly: "readOnly";
479
480
  confirmWrite: "confirmWrite";
480
- auto: "auto";
481
481
  }>>;
482
482
  sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
483
- workspace: "workspace";
484
483
  session: "session";
484
+ workspace: "workspace";
485
485
  userProfile: "userProfile";
486
486
  agentProfile: "agentProfile";
487
487
  curated: "curated";
@@ -633,8 +633,8 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
633
633
  deny: "deny";
634
634
  }>;
635
635
  scope: z.ZodOptional<z.ZodEnum<{
636
- readonly: "readonly";
637
636
  workspace: "workspace";
637
+ readonly: "readonly";
638
638
  unrestricted: "unrestricted";
639
639
  }>>;
640
640
  limits: z.ZodOptional<z.ZodObject<{
@@ -650,8 +650,8 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
650
650
  deny: "deny";
651
651
  }>;
652
652
  scope: z.ZodOptional<z.ZodEnum<{
653
- readonly: "readonly";
654
653
  workspace: "workspace";
654
+ readonly: "readonly";
655
655
  unrestricted: "unrestricted";
656
656
  }>>;
657
657
  limits: z.ZodOptional<z.ZodObject<{
@@ -666,8 +666,8 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
666
666
  deny: "deny";
667
667
  }>;
668
668
  scope: z.ZodOptional<z.ZodEnum<{
669
- readonly: "readonly";
670
669
  workspace: "workspace";
670
+ readonly: "readonly";
671
671
  unrestricted: "unrestricted";
672
672
  }>>;
673
673
  limits: z.ZodOptional<z.ZodObject<{
@@ -690,13 +690,13 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
690
690
  memory: z.ZodDefault<z.ZodObject<{
691
691
  mode: z.ZodDefault<z.ZodEnum<{
692
692
  off: "off";
693
+ auto: "auto";
693
694
  readOnly: "readOnly";
694
695
  confirmWrite: "confirmWrite";
695
- auto: "auto";
696
696
  }>>;
697
697
  sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
698
- workspace: "workspace";
699
698
  session: "session";
699
+ workspace: "workspace";
700
700
  userProfile: "userProfile";
701
701
  agentProfile: "agentProfile";
702
702
  curated: "curated";
@@ -842,8 +842,8 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
842
842
  allowFallbacks: z.ZodOptional<z.ZodBoolean>;
843
843
  maxCostTier: z.ZodOptional<z.ZodEnum<{
844
844
  low: "low";
845
- medium: "medium";
846
845
  high: "high";
846
+ medium: "medium";
847
847
  }>>;
848
848
  }, z.core.$strict>>;
849
849
  }, z.core.$strict>>;
@@ -877,8 +877,8 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
877
877
  allowFallbacks: z.ZodOptional<z.ZodBoolean>;
878
878
  maxCostTier: z.ZodOptional<z.ZodEnum<{
879
879
  low: "low";
880
- medium: "medium";
881
880
  high: "high";
881
+ medium: "medium";
882
882
  }>>;
883
883
  }, z.core.$strict>>;
884
884
  }, z.core.$strict>>;
@@ -890,8 +890,8 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
890
890
  deny: "deny";
891
891
  }>;
892
892
  scope: z.ZodOptional<z.ZodEnum<{
893
- readonly: "readonly";
894
893
  workspace: "workspace";
894
+ readonly: "readonly";
895
895
  unrestricted: "unrestricted";
896
896
  }>>;
897
897
  limits: z.ZodOptional<z.ZodObject<{
@@ -907,8 +907,8 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
907
907
  deny: "deny";
908
908
  }>;
909
909
  scope: z.ZodOptional<z.ZodEnum<{
910
- readonly: "readonly";
911
910
  workspace: "workspace";
911
+ readonly: "readonly";
912
912
  unrestricted: "unrestricted";
913
913
  }>>;
914
914
  limits: z.ZodOptional<z.ZodObject<{
@@ -923,8 +923,8 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
923
923
  deny: "deny";
924
924
  }>;
925
925
  scope: z.ZodOptional<z.ZodEnum<{
926
- readonly: "readonly";
927
926
  workspace: "workspace";
927
+ readonly: "readonly";
928
928
  unrestricted: "unrestricted";
929
929
  }>>;
930
930
  limits: z.ZodOptional<z.ZodObject<{
@@ -947,13 +947,13 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
947
947
  memory: z.ZodOptional<z.ZodDefault<z.ZodObject<{
948
948
  mode: z.ZodDefault<z.ZodEnum<{
949
949
  off: "off";
950
+ auto: "auto";
950
951
  readOnly: "readOnly";
951
952
  confirmWrite: "confirmWrite";
952
- auto: "auto";
953
953
  }>>;
954
954
  sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
955
- workspace: "workspace";
956
955
  session: "session";
956
+ workspace: "workspace";
957
957
  userProfile: "userProfile";
958
958
  agentProfile: "agentProfile";
959
959
  curated: "curated";
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
4
4
  import { AutomationAlreadyRunningError } from "../service/automation-service.js";
5
5
  import { logRouteError } from "../../gateway/hono/lib/route-logger.js";
6
6
  import { simulateAutomation } from "../draft/automation-draft-validator.js";