@xopcai/xopc 0.0.125 → 0.0.127

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 (386) 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/{agent-avatar-dicebear-BKDKICZV.js → agent-avatar-dicebear-CgGgO4OV.js} +1 -1
  18. package/dist/gateway/static/root/assets/agents-k59l7NMb.js +2 -0
  19. package/dist/gateway/static/root/assets/{app-management-settings-panel-DI4BqHKW.js → app-management-settings-panel-DeQsTsyy.js} +1 -1
  20. package/dist/gateway/static/root/assets/{appearance-settings-6_ie3NQ4.js → appearance-settings-BnHQW7Hv.js} +1 -1
  21. package/dist/gateway/static/root/assets/apps-page-BG9b4abG.js +1 -0
  22. package/dist/gateway/static/root/assets/{archive-plugin-kUHEJ1HK.js → archive-plugin-5NXT7Zqv.js} +1 -1
  23. package/dist/gateway/static/root/assets/{attachment-load-Dm-9prpU.js → attachment-load-DghwhYe0.js} +1 -1
  24. package/dist/gateway/static/root/assets/{automation-suggestion-card-OTxQTPnC.js → automation-suggestion-card-DYmESgwl.js} +1 -1
  25. package/dist/gateway/static/root/assets/automations-page-De8mVutL.js +4 -0
  26. package/dist/gateway/static/root/assets/{binary-plugins-DllA_jQ0.js → binary-plugins-DSbPKdWX.js} +1 -1
  27. package/dist/gateway/static/root/assets/{block-editor-Cm6CWNj1.js → block-editor-CoZ-_np-.js} +28 -28
  28. package/dist/gateway/static/root/assets/browser-settings-page-C_ZRa4LF.js +8 -0
  29. package/dist/gateway/static/root/assets/{capability-presets-api-VJ89b6I2.js → capability-presets-api-hny224j-.js} +1 -1
  30. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-BaPj8wC2.js → capability-presets-settings-panel-Drc0qLsw.js} +1 -1
  31. package/dist/gateway/static/root/assets/{channel-recipient-api-B5PwBEUx.js → channel-recipient-api-DAlOHxKJ.js} +1 -1
  32. package/dist/gateway/static/root/assets/channels-settings-CA20zBV9.js +1 -0
  33. package/dist/gateway/static/root/assets/connectors-page-qMyMB5te.js +2 -0
  34. package/dist/gateway/static/root/assets/desktop-pet-XG6Vb_fZ.js +1 -0
  35. package/dist/gateway/static/root/assets/desktop-pet-settings-npJ0Oh5p.js +1 -0
  36. package/dist/gateway/static/root/assets/desktop-pet-sprite-DqZ6fbIj.js +1 -0
  37. package/dist/gateway/static/root/assets/directory-picker-path-field-BR2ItBuf.js +1 -0
  38. package/dist/gateway/static/root/assets/dreaming-settings-CkUZ997f.js +3 -0
  39. package/dist/gateway/static/root/assets/{extension-debug-page-BaM0FpW7.js → extension-debug-page-Tl0f1rNv.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-page-DuZWVOGA.js → extension-page-Ck7QuwE3.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-settings-page-DarVtbmJ.js → extension-settings-page-3RMhQtZ3.js} +1 -1
  42. package/dist/gateway/static/root/assets/{fetch-NFKfkqrd.js → fetch-pg2ErdAk.js} +1 -1
  43. package/dist/gateway/static/root/assets/{gateway-config-api-CFEm9rgy.js → gateway-config-api-DbG97ia2.js} +1 -1
  44. package/dist/gateway/static/root/assets/gateway-settings-B8cyqKk-.js +1 -0
  45. package/dist/gateway/static/root/assets/{gateway-startup-retry-Dtwh_yGg.js → gateway-startup-retry-Yh8h3hkj.js} +1 -1
  46. package/dist/gateway/static/root/assets/{goal-create-dialog-BKP7ylcG.js → goal-create-dialog-DmeW7Zz3.js} +1 -1
  47. package/dist/gateway/static/root/assets/goal-detail-page-DrTyGbVD.js +1 -0
  48. package/dist/gateway/static/root/assets/{goals-config-api-DTWZNA_Y.js → goals-config-api-CxCWGIBB.js} +1 -1
  49. package/dist/gateway/static/root/assets/goals-page-DV1bJhIh.js +2 -0
  50. package/dist/gateway/static/root/assets/{goals-settings-Bhct0ZT-.js → goals-settings-9DrfOkP5.js} +1 -1
  51. package/dist/gateway/static/root/assets/{heartbeat-settings-C-UxSU4a.js → heartbeat-settings-KaDpZrv0.js} +1 -1
  52. package/dist/gateway/static/root/assets/index-C2F0Clvm.js +256 -0
  53. package/dist/gateway/static/root/assets/index-COQSX5d_.css +1 -0
  54. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DCjy2y4d.js → keyboard-shortcuts-settings-CfQrt_Rb.js} +1 -1
  55. package/dist/gateway/static/root/assets/logs-page-C9dpiNTF.js +2 -0
  56. package/dist/gateway/static/root/assets/{markdown-split-BaqxP-GQ.js → markdown-split-BwiMdCf_.js} +1 -1
  57. package/dist/gateway/static/root/assets/{media-plugins-DQ_EXloK.js → media-plugins-DhoizyZv.js} +1 -1
  58. package/dist/gateway/static/root/assets/messages-DmnbiNxU.js +3 -0
  59. package/dist/gateway/static/root/assets/models-hub-panel-zdCdmBmH.js +2 -0
  60. package/dist/gateway/static/root/assets/notes-page-MpGeFfPt.js +1 -0
  61. package/dist/gateway/static/root/assets/notes-workbench-DYCM3yd2.js +2 -0
  62. package/dist/gateway/static/root/assets/{page-tabs-EIZhLppK.js → page-tabs-DDC2t4Z8.js} +1 -1
  63. package/dist/gateway/static/root/assets/{preview-open-alternatives-r_uB4Epr.js → preview-open-alternatives-BTmk-XDM.js} +1 -1
  64. package/dist/gateway/static/root/assets/project-detail-page-Cu0ElRnS.js +1 -0
  65. package/dist/gateway/static/root/assets/projects-page-DakNaUjZ.js +1 -0
  66. package/dist/gateway/static/root/assets/remote-access-hub-DYKjt7L9.js +1 -0
  67. package/dist/gateway/static/root/assets/{save-bar-controls-B132Uf-2.js → save-bar-controls-DqU-yKIh.js} +1 -1
  68. package/dist/gateway/static/root/assets/{schedule-field-B5qshALm.js → schedule-field-CUttkoSB.js} +1 -1
  69. package/dist/gateway/static/root/assets/{schema-form-CvLmkdS9.js → schema-form-CVSQA9nI.js} +1 -1
  70. package/dist/gateway/static/root/assets/sessions-page-CcGHDsz1.js +1 -0
  71. package/dist/gateway/static/root/assets/settings-advanced-gate-CuFdeKNu.js +1 -0
  72. package/dist/gateway/static/root/assets/{settings-collapsible-section-pRlvqsAf.js → settings-collapsible-section-CK7ogS-P.js} +1 -1
  73. package/dist/gateway/static/root/assets/settings-form-section-Bugp38Fa.js +1 -0
  74. package/dist/gateway/static/root/assets/settings-page-0AJoUvxi.js +1 -0
  75. package/dist/gateway/static/root/assets/settings-page-layout-DBRWwdhh.js +1 -0
  76. package/dist/gateway/static/root/assets/setup-status-panel-D6a_hEk7.js +1 -0
  77. package/dist/gateway/static/root/assets/{share-preview-page-v6-IOp8t.js → share-preview-page-BtsuETKF.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-CcEFT7S9.js +1 -0
  79. package/dist/gateway/static/root/assets/skill-reload-api-BcN_RuTD.js +1 -0
  80. package/dist/gateway/static/root/assets/skills-page-BbRZZZA5.js +2 -0
  81. package/dist/gateway/static/root/assets/{system-settings-panel-HUU2FFjM.js → system-settings-panel-DJ6YuLqR.js} +1 -1
  82. package/dist/gateway/static/root/assets/{typed-models-lib-AH160QHh.js → typed-models-lib-B0T7N8Km.js} +1 -1
  83. package/dist/gateway/static/root/assets/{use-channel-catalog-BXzDmjCQ.js → use-channel-catalog-C6vrxdzZ.js} +1 -1
  84. package/dist/gateway/static/root/assets/{user-profile-settings-panel-DxwnQvQ3.js → user-profile-settings-panel-DZ0nKMgj.js} +1 -1
  85. package/dist/gateway/static/root/assets/{utils-i5POEtqd.js → utils-CehXcWAY.js} +1 -1
  86. package/dist/gateway/static/root/assets/voice-api-key-field-2QKflCx8.js +1 -0
  87. package/dist/gateway/static/root/assets/work-item-detail-page-DfJnuWq1.js +1 -0
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-ClVVMgN-.js → workflow-run-setup-panel-c4jeaohQ.js} +2 -2
  89. package/dist/gateway/static/root/assets/{workflow-start-dialog-Dv4ZA1T0.js → workflow-start-dialog-ENRHjoqa.js} +1 -1
  90. package/dist/gateway/static/root/assets/workflows-page-BJwwFTm_.js +18 -0
  91. package/dist/gateway/static/root/index.html +5 -5
  92. package/dist/package.js +1 -1
  93. package/dist/src/activity/context.d.ts +11 -0
  94. package/dist/src/activity/context.js +36 -0
  95. package/dist/src/activity/context.js.map +1 -0
  96. package/dist/src/activity/emitter.d.ts +6 -0
  97. package/dist/src/activity/emitter.js +43 -0
  98. package/dist/src/activity/emitter.js.map +1 -0
  99. package/dist/src/activity/index.d.ts +3 -0
  100. package/dist/src/activity/index.js +3 -0
  101. package/dist/src/activity/service.d.ts +12 -0
  102. package/dist/src/activity/service.js +59 -0
  103. package/dist/src/activity/service.js.map +1 -0
  104. package/dist/src/activity/types.d.ts +109 -0
  105. package/dist/src/activity/types.js +1 -0
  106. package/dist/src/agent/agent-instance-gateway.d.ts +5 -0
  107. package/dist/src/agent/agent-manager.d.ts +21 -0
  108. package/dist/src/agent/agent-manager.js +118 -6
  109. package/dist/src/agent/agent-manager.js.map +1 -1
  110. package/dist/src/agent/capabilities/definitions.d.ts +153 -0
  111. package/dist/src/agent/capabilities/definitions.js +156 -0
  112. package/dist/src/agent/capabilities/definitions.js.map +1 -0
  113. package/dist/src/agent/capabilities/index.d.ts +2 -0
  114. package/dist/src/agent/capabilities/index.js +3 -0
  115. package/dist/src/agent/capabilities/registry.d.ts +10 -0
  116. package/dist/src/agent/capabilities/registry.js +51 -0
  117. package/dist/src/agent/capabilities/registry.js.map +1 -0
  118. package/dist/src/agent/context/project-context.js +2 -2
  119. package/dist/src/agent/context/workspace-seed.js +2 -2
  120. package/dist/src/agent/embedded/run-for-session.js +1 -1
  121. package/dist/src/agent/goals/post-turn.js +2 -2
  122. package/dist/src/agent/ipc/bus.js +1 -1
  123. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  124. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  125. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  126. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  127. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  128. package/dist/src/agent/models/manager.js +1 -1
  129. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  130. package/dist/src/agent/service/process-direct-one-shot.js +5 -3
  131. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  132. package/dist/src/agent/service/process-direct-streaming.js +4 -3
  133. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  134. package/dist/src/agent/service.d.ts +2 -0
  135. package/dist/src/agent/service.js +9 -3
  136. package/dist/src/agent/service.js.map +1 -1
  137. package/dist/src/agent/service.types.d.ts +7 -0
  138. package/dist/src/agent/session/session-inspector.js +1 -1
  139. package/dist/src/agent/skills/hub-pull.js +1 -1
  140. package/dist/src/agent/skills/parse-skill-metadata.js +9 -1
  141. package/dist/src/agent/skills/parse-skill-metadata.js.map +1 -1
  142. package/dist/src/agent/skills/skill-manager.d.ts +4 -0
  143. package/dist/src/agent/skills/skill-manager.js +17 -0
  144. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  145. package/dist/src/agent/skills/types.d.ts +5 -0
  146. package/dist/src/agent/tool-manuals/index.js +15 -6
  147. package/dist/src/agent/tool-manuals/index.js.map +1 -1
  148. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -0
  149. package/dist/src/agent/tool-manuals/xopc-use.js +204 -0
  150. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -0
  151. package/dist/src/agent/tools/desktop-pet-tool.d.ts +24 -0
  152. package/dist/src/agent/tools/desktop-pet-tool.js +90 -0
  153. package/dist/src/agent/tools/desktop-pet-tool.js.map +1 -0
  154. package/dist/src/agent/tools/factory.d.ts +9 -0
  155. package/dist/src/agent/tools/factory.js +26 -0
  156. package/dist/src/agent/tools/factory.js.map +1 -1
  157. package/dist/src/agent/tools/goal-tool.js +2 -2
  158. package/dist/src/agent/tools/index.d.ts +2 -0
  159. package/dist/src/agent/tools/index.js +3 -1
  160. package/dist/src/agent/tools/workflow-tool.js +1 -1
  161. package/dist/src/agent/tools/xopc-use-tool.d.ts +34 -0
  162. package/dist/src/agent/tools/xopc-use-tool.js +636 -0
  163. package/dist/src/agent/tools/xopc-use-tool.js.map +1 -0
  164. package/dist/src/agent-manifest/schema.d.ts +27 -27
  165. package/dist/src/automations/api/routes.js +1 -1
  166. package/dist/src/automations/domain/validation.d.ts +55 -55
  167. package/dist/src/automations/draft/automation-draft-service.js +1 -1
  168. package/dist/src/automations/draft/automation-draft-validator.d.ts +25 -25
  169. package/dist/src/automations/service/action-executor.js +2 -2
  170. package/dist/src/browser/cdp-local-launcher.js +1 -1
  171. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  172. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  173. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  174. package/dist/src/browser/stealth.js +1 -1
  175. package/dist/src/chat-commands/agent-edit.js +1 -1
  176. package/dist/src/chat-commands/builtins/config.js +1 -1
  177. package/dist/src/chat-commands/builtins/goal.js +2 -2
  178. package/dist/src/chat-commands/context.js +1 -1
  179. package/dist/src/cli/commands/agent.js +3 -3
  180. package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
  181. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  182. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  183. package/dist/src/cli/commands/extension-pack.js +1 -1
  184. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  185. package/dist/src/cli/commands/goal.js +3 -3
  186. package/dist/src/cli/commands/init.js +1 -1
  187. package/dist/src/cli/commands/models.js +1 -1
  188. package/dist/src/cli/commands/onboard.js +1 -1
  189. package/dist/src/cli/commands/profile.js +1 -1
  190. package/dist/src/cli/commands/project.js +4 -4
  191. package/dist/src/cli/commands/tunnel.js +1 -1
  192. package/dist/src/cli/commands/update.js +1 -1
  193. package/dist/src/cli/extension-cli-register.js +1 -1
  194. package/dist/src/config/agent-profile.js +1 -1
  195. package/dist/src/config/gateway-bind.js +1 -1
  196. package/dist/src/config/index.js +2 -2
  197. package/dist/src/config/loader.js +1 -1
  198. package/dist/src/config/models-json.d.ts +14 -14
  199. package/dist/src/config/models-json.js +1 -1
  200. package/dist/src/config/schema.d.ts +60 -60
  201. package/dist/src/daemon/launchd.js +1 -1
  202. package/dist/src/daemon/systemd.js +1 -1
  203. package/dist/src/extensions/discover-extensions.js +1 -1
  204. package/dist/src/extensions/loader.js +2 -2
  205. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  206. package/dist/src/gateway/agent-builtin-tools.js +1 -0
  207. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  208. package/dist/src/gateway/agents-admin.js +1 -1
  209. package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -14
  210. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  211. package/dist/src/gateway/hono/middleware/log-context.js +8 -1
  212. package/dist/src/gateway/hono/middleware/log-context.js.map +1 -1
  213. package/dist/src/gateway/hono/routes/activity.d.ts +14 -0
  214. package/dist/src/gateway/hono/routes/activity.js +72 -0
  215. package/dist/src/gateway/hono/routes/activity.js.map +1 -0
  216. package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
  217. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  218. package/dist/src/gateway/hono/routes/goals.js +1 -1
  219. package/dist/src/gateway/hono/routes/index.js +2 -0
  220. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  221. package/dist/src/gateway/hono/routes/lazy-bundles.js +2 -1
  222. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  223. package/dist/src/gateway/hono/routes/memory.js +2 -2
  224. package/dist/src/gateway/hono/routes/projects.js +93 -15
  225. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  226. package/dist/src/gateway/hono/routes/sessions.js +101 -2
  227. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  228. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  229. package/dist/src/gateway/lock.js +1 -1
  230. package/dist/src/gateway/ports.js +1 -1
  231. package/dist/src/gateway/run-loop.js +1 -1
  232. package/dist/src/gateway/service/run-gateway-agent.js +6 -2
  233. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  234. package/dist/src/gateway/service/sessions-api.d.ts +10 -0
  235. package/dist/src/gateway/service/sessions-api.js +31 -0
  236. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  237. package/dist/src/gateway/service.js +12 -9
  238. package/dist/src/gateway/service.js.map +1 -1
  239. package/dist/src/goals/goal-store.js +1 -1
  240. package/dist/src/goals/goal-store.js.map +1 -1
  241. package/dist/src/goals/goal-workflow-judge.js +1 -1
  242. package/dist/src/infra/ports.js +1 -1
  243. package/dist/src/infra/ssh-tunnel.js +1 -1
  244. package/dist/src/infra/update-check.js +1 -1
  245. package/dist/src/infra/update-restart.js +1 -1
  246. package/dist/src/migrations/runner.js +1 -1
  247. package/dist/src/notes/service.js +65 -6
  248. package/dist/src/notes/service.js.map +1 -1
  249. package/dist/src/notes/store.js +1 -1
  250. package/dist/src/pets/factory.d.ts +25 -0
  251. package/dist/src/pets/factory.js +327 -0
  252. package/dist/src/pets/factory.js.map +1 -0
  253. package/dist/src/pets/manifest.d.ts +2 -0
  254. package/dist/src/pets/manifest.js +16 -0
  255. package/dist/src/pets/manifest.js.map +1 -0
  256. package/dist/src/pets/validator.d.ts +12 -0
  257. package/dist/src/pets/validator.js +175 -0
  258. package/dist/src/pets/validator.js.map +1 -0
  259. package/dist/src/projects/project-service.d.ts +4 -1
  260. package/dist/src/projects/project-service.js +65 -2
  261. package/dist/src/projects/project-service.js.map +1 -1
  262. package/dist/src/projects/project-store.d.ts +3 -1
  263. package/dist/src/projects/project-store.js +56 -6
  264. package/dist/src/projects/project-store.js.map +1 -1
  265. package/dist/src/projects/types.d.ts +12 -0
  266. package/dist/src/projects/workspace.js +1 -1
  267. package/dist/src/routing/agent-session-key.js +1 -1
  268. package/dist/src/routing/resolve-route.js +1 -1
  269. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  270. package/dist/src/session/client-history.d.ts +3 -0
  271. package/dist/src/session/client-history.js +24 -9
  272. package/dist/src/session/client-history.js.map +1 -1
  273. package/dist/src/session/init-session-turn.js +1 -1
  274. package/dist/src/session/resolve-session.js +1 -1
  275. package/dist/src/session/session-title.js +24 -4
  276. package/dist/src/session/session-title.js.map +1 -1
  277. package/dist/src/session/store.js +1 -1
  278. package/dist/src/session/types.d.ts +4 -0
  279. package/dist/src/session/types.js.map +1 -1
  280. package/dist/src/storage/sqlite/activity-repository.d.ts +8 -0
  281. package/dist/src/storage/sqlite/activity-repository.js +208 -0
  282. package/dist/src/storage/sqlite/activity-repository.js.map +1 -0
  283. package/dist/src/storage/sqlite/connection.js +1 -1
  284. package/dist/src/storage/sqlite/index.d.ts +1 -0
  285. package/dist/src/storage/sqlite/index.js +2 -1
  286. package/dist/src/storage/sqlite/migrations/024_activity_events.sql +62 -0
  287. package/dist/src/storage/sqlite/migrations/025_project_pinned_at.sql +5 -0
  288. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  289. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  290. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  291. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  292. package/dist/src/storage/sqlite/row-mappers.js +1 -1
  293. package/dist/src/storage/sqlite/schema.js +1 -1
  294. package/dist/src/storage/sqlite/schema.sql +63 -0
  295. package/dist/src/storage/sqlite/session-repository.js +11 -0
  296. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  297. package/dist/src/tui/backends/embedded-backend.d.ts +13 -0
  298. package/dist/src/tui/backends/embedded-backend.js +76 -7
  299. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  300. package/dist/src/tui/backends/gateway-sse-backend.d.ts +13 -0
  301. package/dist/src/tui/backends/gateway-sse-backend.js +53 -0
  302. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  303. package/dist/src/tui/chat-history.js +16 -3
  304. package/dist/src/tui/chat-history.js.map +1 -1
  305. package/dist/src/tui/clipboard-image.js +1 -1
  306. package/dist/src/tui/components/chat-log.d.ts +23 -3
  307. package/dist/src/tui/components/chat-log.js +68 -9
  308. package/dist/src/tui/components/chat-log.js.map +1 -1
  309. package/dist/src/tui/components/tui-bottom-bar.js +9 -5
  310. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  311. package/dist/src/tui/tui-backend.d.ts +16 -0
  312. package/dist/src/tui/tui-command-formatters.js +2 -2
  313. package/dist/src/tui/tui-commands.d.ts +9 -0
  314. package/dist/src/tui/tui-commands.js +95 -6
  315. package/dist/src/tui/tui-commands.js.map +1 -1
  316. package/dist/src/tui/tui-picker-overlay.d.ts +1 -0
  317. package/dist/src/tui/tui-picker-overlay.js +36 -1
  318. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  319. package/dist/src/tui/tui-picker-services.d.ts +13 -0
  320. package/dist/src/tui/tui-run-state.js +11 -0
  321. package/dist/src/tui/tui-run-state.js.map +1 -1
  322. package/dist/src/tui/tui-run-status-format.d.ts +3 -0
  323. package/dist/src/tui/tui-run-status-format.js +33 -0
  324. package/dist/src/tui/tui-run-status-format.js.map +1 -0
  325. package/dist/src/tui/tui-session-actions.d.ts +5 -0
  326. package/dist/src/tui/tui-session-actions.js +24 -0
  327. package/dist/src/tui/tui-session-actions.js.map +1 -1
  328. package/dist/src/tui/tui-timeline-picker.d.ts +19 -0
  329. package/dist/src/tui/tui-timeline-picker.js +81 -0
  330. package/dist/src/tui/tui-timeline-picker.js.map +1 -0
  331. package/dist/src/tui/tui-timeline.d.ts +15 -0
  332. package/dist/src/tui/tui-timeline.js +65 -0
  333. package/dist/src/tui/tui-timeline.js.map +1 -0
  334. package/dist/src/tui/tui-types.d.ts +1 -0
  335. package/dist/src/tui/tui-types.js +1 -0
  336. package/dist/src/tui/tui-types.js.map +1 -1
  337. package/dist/src/tui/tui.js +31 -25
  338. package/dist/src/tui/tui.js.map +1 -1
  339. package/dist/src/utils/index.js +1 -1
  340. package/dist/src/utils/logger/index.js +1 -1
  341. package/dist/src/utils/logger/stats.d.ts +3 -3
  342. package/dist/src/utils/logger.js +1 -1
  343. package/dist/src/work-items/agent-context.d.ts +5 -1
  344. package/dist/src/work-items/agent-context.js +39 -3
  345. package/dist/src/work-items/agent-context.js.map +1 -1
  346. package/dist/src/work-items/work-item-service.d.ts +2 -0
  347. package/dist/src/work-items/work-item-service.js +97 -0
  348. package/dist/src/work-items/work-item-service.js.map +1 -1
  349. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  350. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  351. package/package.json +5 -5
  352. package/skills/creative/hatch-pet/SKILL.md +63 -0
  353. package/dist/gateway/static/root/assets/agents-BnTB7-c5.js +0 -2
  354. package/dist/gateway/static/root/assets/apps-page-B6bG65SW.js +0 -1
  355. package/dist/gateway/static/root/assets/automations-page-1lVbo0dS.js +0 -1
  356. package/dist/gateway/static/root/assets/browser-settings-page-CzDBlOK0.js +0 -8
  357. package/dist/gateway/static/root/assets/channels-settings-Df4m7p1k.js +0 -1
  358. package/dist/gateway/static/root/assets/connectors-page-BMTphmHS.js +0 -2
  359. package/dist/gateway/static/root/assets/directory-picker-path-field-DySMzOF6.js +0 -1
  360. package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +0 -1
  361. package/dist/gateway/static/root/assets/dreaming-settings-D_AjSnV_.js +0 -3
  362. package/dist/gateway/static/root/assets/gateway-settings-BMk2S5td.js +0 -1
  363. package/dist/gateway/static/root/assets/goal-detail-page-C2cTxf71.js +0 -1
  364. package/dist/gateway/static/root/assets/goals-page-CTmA3hWK.js +0 -2
  365. package/dist/gateway/static/root/assets/index-BNHDd2j1.css +0 -1
  366. package/dist/gateway/static/root/assets/index-BPXLPMuY.js +0 -193
  367. package/dist/gateway/static/root/assets/logs-page-CGc3_CQU.js +0 -2
  368. package/dist/gateway/static/root/assets/messages-CjuIJcZl.js +0 -3
  369. package/dist/gateway/static/root/assets/models-hub-panel-Drz4UQMb.js +0 -2
  370. package/dist/gateway/static/root/assets/notes-page-CY1ylng1.js +0 -1
  371. package/dist/gateway/static/root/assets/notes-workbench-X7IaD--t.js +0 -2
  372. package/dist/gateway/static/root/assets/project-detail-page-DE5adRBE.js +0 -1
  373. package/dist/gateway/static/root/assets/projects-page-CuOb1k6F.js +0 -1
  374. package/dist/gateway/static/root/assets/remote-access-hub-BOxNrUVA.js +0 -1
  375. package/dist/gateway/static/root/assets/sessions-page-CY0IQcGW.js +0 -1
  376. package/dist/gateway/static/root/assets/settings-advanced-gate-D4NBNVCB.js +0 -1
  377. package/dist/gateway/static/root/assets/settings-form-section-BBYUDLVd.js +0 -1
  378. package/dist/gateway/static/root/assets/settings-page-DaO7zYZM.js +0 -1
  379. package/dist/gateway/static/root/assets/settings-page-layout-D8g9PAek.js +0 -1
  380. package/dist/gateway/static/root/assets/setup-status-panel-Bks0CLLT.js +0 -1
  381. package/dist/gateway/static/root/assets/shares-settings-CEZsKm9r.js +0 -1
  382. package/dist/gateway/static/root/assets/skill-reload-api-oTkHbb9W.js +0 -1
  383. package/dist/gateway/static/root/assets/skills-page-DigsbZ6K.js +0 -2
  384. package/dist/gateway/static/root/assets/voice-api-key-field-CEJklEgb.js +0 -1
  385. package/dist/gateway/static/root/assets/work-item-detail-page-CD6FL_Rs.js +0 -1
  386. package/dist/gateway/static/root/assets/workflows-page-OLQiUpoW.js +0 -18
@@ -0,0 +1,153 @@
1
+ export type AgentCapabilityCategory = 'authoring' | 'research' | 'analysis' | 'assets';
2
+ export type AgentCapabilityActivationMode = 'explicit' | 'ui-entry' | 'workflow-scoped';
3
+ export type AgentCapabilityTtl = 'turn' | 'session' | 'until-complete';
4
+ export type AgentCapabilityActivationSource = 'skill' | 'ui' | 'workflow';
5
+ export type AgentCapabilitySessionStatus = 'collecting' | 'running' | 'complete';
6
+ export type AgentCapabilityPermissions = {
7
+ writesFiles?: boolean;
8
+ runsCode?: boolean;
9
+ usesBrowser?: boolean;
10
+ usesNetwork?: boolean;
11
+ requiresConfirm?: boolean;
12
+ };
13
+ export type AgentCapabilityDefinition = {
14
+ id: string;
15
+ label: string;
16
+ description: string;
17
+ category: AgentCapabilityCategory;
18
+ tools: readonly string[];
19
+ requiredSkills?: readonly string[];
20
+ promptHint?: string;
21
+ activation: {
22
+ mode: AgentCapabilityActivationMode;
23
+ ttl: AgentCapabilityTtl;
24
+ };
25
+ permissions: AgentCapabilityPermissions;
26
+ };
27
+ export type AgentCapabilitySessionState = {
28
+ id: string;
29
+ source: AgentCapabilityActivationSource;
30
+ activatedAt: number;
31
+ ttl: AgentCapabilityTtl;
32
+ status: AgentCapabilitySessionStatus;
33
+ };
34
+ export type AgentCapabilityCatalogEntry = AgentCapabilityDefinition & {
35
+ availableTools: string[];
36
+ unavailableTools: string[];
37
+ };
38
+ export declare const AGENT_CAPABILITY_DEFINITIONS: readonly [{
39
+ readonly id: "desktop-pet-authoring";
40
+ readonly label: "Desktop pet authoring";
41
+ readonly description: "Create, repair, and update local animated desktop pet packages.";
42
+ readonly category: "authoring";
43
+ readonly tools: readonly ["create_desktop_pet"];
44
+ readonly requiredSkills: readonly ["hatch-pet"];
45
+ readonly promptHint: "Use clarify when the pet concept is vague. Create or update the pet only after appearance, personality, and animation goals are clear.";
46
+ readonly activation: {
47
+ readonly mode: "explicit";
48
+ readonly ttl: "until-complete";
49
+ };
50
+ readonly permissions: {
51
+ readonly writesFiles: true;
52
+ };
53
+ }, {
54
+ readonly id: "automation-authoring";
55
+ readonly label: "Automation authoring";
56
+ readonly description: "Create and update reminders, monitors, recurring checks, and scheduled follow-ups.";
57
+ readonly category: "authoring";
58
+ readonly tools: readonly ["automation"];
59
+ readonly activation: {
60
+ readonly mode: "explicit";
61
+ readonly ttl: "until-complete";
62
+ };
63
+ readonly permissions: {
64
+ readonly writesFiles: true;
65
+ readonly requiresConfirm: true;
66
+ };
67
+ }, {
68
+ readonly id: "workflow-authoring";
69
+ readonly label: "Workflow authoring";
70
+ readonly description: "Design, validate, and run xopc workflows.";
71
+ readonly category: "authoring";
72
+ readonly tools: readonly ["workflow"];
73
+ readonly activation: {
74
+ readonly mode: "explicit";
75
+ readonly ttl: "until-complete";
76
+ };
77
+ readonly permissions: {
78
+ readonly writesFiles: true;
79
+ readonly runsCode: true;
80
+ readonly requiresConfirm: true;
81
+ };
82
+ }, {
83
+ readonly id: "extension-authoring";
84
+ readonly label: "Plugin and extension authoring";
85
+ readonly description: "Scaffold, inspect, and package xopc plugins or extensions.";
86
+ readonly category: "authoring";
87
+ readonly tools: readonly ["read_file", "write_file", "apply_patch", "list_dir", "grep", "find", "exec_command"];
88
+ readonly activation: {
89
+ readonly mode: "explicit";
90
+ readonly ttl: "until-complete";
91
+ };
92
+ readonly permissions: {
93
+ readonly writesFiles: true;
94
+ readonly runsCode: true;
95
+ readonly requiresConfirm: true;
96
+ };
97
+ }, {
98
+ readonly id: "skill-authoring";
99
+ readonly label: "Skill authoring";
100
+ readonly description: "Create, edit, inspect, and maintain xopc skills.";
101
+ readonly category: "authoring";
102
+ readonly tools: readonly ["skills_list", "skill_view", "skill_manage"];
103
+ readonly activation: {
104
+ readonly mode: "explicit";
105
+ readonly ttl: "until-complete";
106
+ };
107
+ readonly permissions: {
108
+ readonly writesFiles: true;
109
+ readonly requiresConfirm: true;
110
+ };
111
+ }, {
112
+ readonly id: "visual-asset-authoring";
113
+ readonly label: "Visual asset authoring";
114
+ readonly description: "Generate and inspect images, icons, sprites, and other visual assets.";
115
+ readonly category: "assets";
116
+ readonly tools: readonly ["image", "image_generate", "read_media", "send_media"];
117
+ readonly activation: {
118
+ readonly mode: "explicit";
119
+ readonly ttl: "session";
120
+ };
121
+ readonly permissions: {
122
+ readonly writesFiles: true;
123
+ readonly usesNetwork: true;
124
+ };
125
+ }, {
126
+ readonly id: "browser-research";
127
+ readonly label: "Browser research";
128
+ readonly description: "Perform deeper web research with search, extraction, fetch, and browser interaction.";
129
+ readonly category: "research";
130
+ readonly tools: readonly ["web_search", "web_fetch", "web_extract", "browser_use"];
131
+ readonly activation: {
132
+ readonly mode: "explicit";
133
+ readonly ttl: "turn";
134
+ };
135
+ readonly permissions: {
136
+ readonly usesBrowser: true;
137
+ readonly usesNetwork: true;
138
+ };
139
+ }, {
140
+ readonly id: "data-analysis";
141
+ readonly label: "Data analysis";
142
+ readonly description: "Analyze local structured data and produce derived tables, summaries, or artifacts.";
143
+ readonly category: "analysis";
144
+ readonly tools: readonly ["read_file", "write_file", "list_dir", "grep", "find"];
145
+ readonly activation: {
146
+ readonly mode: "explicit";
147
+ readonly ttl: "session";
148
+ };
149
+ readonly permissions: {
150
+ readonly writesFiles: true;
151
+ readonly runsCode: true;
152
+ };
153
+ }];
@@ -0,0 +1,156 @@
1
+ //#region src/agent/capabilities/definitions.ts
2
+ const AGENT_CAPABILITY_DEFINITIONS = [
3
+ {
4
+ id: "desktop-pet-authoring",
5
+ label: "Desktop pet authoring",
6
+ description: "Create, repair, and update local animated desktop pet packages.",
7
+ category: "authoring",
8
+ tools: ["create_desktop_pet"],
9
+ requiredSkills: ["hatch-pet"],
10
+ promptHint: "Use clarify when the pet concept is vague. Create or update the pet only after appearance, personality, and animation goals are clear.",
11
+ activation: {
12
+ mode: "explicit",
13
+ ttl: "until-complete"
14
+ },
15
+ permissions: { writesFiles: true }
16
+ },
17
+ {
18
+ id: "automation-authoring",
19
+ label: "Automation authoring",
20
+ description: "Create and update reminders, monitors, recurring checks, and scheduled follow-ups.",
21
+ category: "authoring",
22
+ tools: ["automation"],
23
+ activation: {
24
+ mode: "explicit",
25
+ ttl: "until-complete"
26
+ },
27
+ permissions: {
28
+ writesFiles: true,
29
+ requiresConfirm: true
30
+ }
31
+ },
32
+ {
33
+ id: "workflow-authoring",
34
+ label: "Workflow authoring",
35
+ description: "Design, validate, and run xopc workflows.",
36
+ category: "authoring",
37
+ tools: ["workflow"],
38
+ activation: {
39
+ mode: "explicit",
40
+ ttl: "until-complete"
41
+ },
42
+ permissions: {
43
+ writesFiles: true,
44
+ runsCode: true,
45
+ requiresConfirm: true
46
+ }
47
+ },
48
+ {
49
+ id: "extension-authoring",
50
+ label: "Plugin and extension authoring",
51
+ description: "Scaffold, inspect, and package xopc plugins or extensions.",
52
+ category: "authoring",
53
+ tools: [
54
+ "read_file",
55
+ "write_file",
56
+ "apply_patch",
57
+ "list_dir",
58
+ "grep",
59
+ "find",
60
+ "exec_command"
61
+ ],
62
+ activation: {
63
+ mode: "explicit",
64
+ ttl: "until-complete"
65
+ },
66
+ permissions: {
67
+ writesFiles: true,
68
+ runsCode: true,
69
+ requiresConfirm: true
70
+ }
71
+ },
72
+ {
73
+ id: "skill-authoring",
74
+ label: "Skill authoring",
75
+ description: "Create, edit, inspect, and maintain xopc skills.",
76
+ category: "authoring",
77
+ tools: [
78
+ "skills_list",
79
+ "skill_view",
80
+ "skill_manage"
81
+ ],
82
+ activation: {
83
+ mode: "explicit",
84
+ ttl: "until-complete"
85
+ },
86
+ permissions: {
87
+ writesFiles: true,
88
+ requiresConfirm: true
89
+ }
90
+ },
91
+ {
92
+ id: "visual-asset-authoring",
93
+ label: "Visual asset authoring",
94
+ description: "Generate and inspect images, icons, sprites, and other visual assets.",
95
+ category: "assets",
96
+ tools: [
97
+ "image",
98
+ "image_generate",
99
+ "read_media",
100
+ "send_media"
101
+ ],
102
+ activation: {
103
+ mode: "explicit",
104
+ ttl: "session"
105
+ },
106
+ permissions: {
107
+ writesFiles: true,
108
+ usesNetwork: true
109
+ }
110
+ },
111
+ {
112
+ id: "browser-research",
113
+ label: "Browser research",
114
+ description: "Perform deeper web research with search, extraction, fetch, and browser interaction.",
115
+ category: "research",
116
+ tools: [
117
+ "web_search",
118
+ "web_fetch",
119
+ "web_extract",
120
+ "browser_use"
121
+ ],
122
+ activation: {
123
+ mode: "explicit",
124
+ ttl: "turn"
125
+ },
126
+ permissions: {
127
+ usesBrowser: true,
128
+ usesNetwork: true
129
+ }
130
+ },
131
+ {
132
+ id: "data-analysis",
133
+ label: "Data analysis",
134
+ description: "Analyze local structured data and produce derived tables, summaries, or artifacts.",
135
+ category: "analysis",
136
+ tools: [
137
+ "read_file",
138
+ "write_file",
139
+ "list_dir",
140
+ "grep",
141
+ "find"
142
+ ],
143
+ activation: {
144
+ mode: "explicit",
145
+ ttl: "session"
146
+ },
147
+ permissions: {
148
+ writesFiles: true,
149
+ runsCode: true
150
+ }
151
+ }
152
+ ];
153
+ //#endregion
154
+ export { AGENT_CAPABILITY_DEFINITIONS };
155
+
156
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","names":[],"sources":["../../../../src/agent/capabilities/definitions.ts"],"sourcesContent":["export type AgentCapabilityCategory = 'authoring' | 'research' | 'analysis' | 'assets';\n\nexport type AgentCapabilityActivationMode = 'explicit' | 'ui-entry' | 'workflow-scoped';\n\nexport type AgentCapabilityTtl = 'turn' | 'session' | 'until-complete';\n\nexport type AgentCapabilityActivationSource = 'skill' | 'ui' | 'workflow';\n\nexport type AgentCapabilitySessionStatus = 'collecting' | 'running' | 'complete';\n\nexport type AgentCapabilityPermissions = {\n writesFiles?: boolean;\n runsCode?: boolean;\n usesBrowser?: boolean;\n usesNetwork?: boolean;\n requiresConfirm?: boolean;\n};\n\nexport type AgentCapabilityDefinition = {\n id: string;\n label: string;\n description: string;\n category: AgentCapabilityCategory;\n tools: readonly string[];\n requiredSkills?: readonly string[];\n promptHint?: string;\n activation: {\n mode: AgentCapabilityActivationMode;\n ttl: AgentCapabilityTtl;\n };\n permissions: AgentCapabilityPermissions;\n};\n\nexport type AgentCapabilitySessionState = {\n id: string;\n source: AgentCapabilityActivationSource;\n activatedAt: number;\n ttl: AgentCapabilityTtl;\n status: AgentCapabilitySessionStatus;\n};\n\nexport type AgentCapabilityCatalogEntry = AgentCapabilityDefinition & {\n availableTools: string[];\n unavailableTools: string[];\n};\n\nexport const AGENT_CAPABILITY_DEFINITIONS = [\n {\n id: 'desktop-pet-authoring',\n label: 'Desktop pet authoring',\n description: 'Create, repair, and update local animated desktop pet packages.',\n category: 'authoring',\n tools: ['create_desktop_pet'],\n requiredSkills: ['hatch-pet'],\n promptHint:\n 'Use clarify when the pet concept is vague. Create or update the pet only after appearance, personality, and animation goals are clear.',\n activation: { mode: 'explicit', ttl: 'until-complete' },\n permissions: { writesFiles: true },\n },\n {\n id: 'automation-authoring',\n label: 'Automation authoring',\n description: 'Create and update reminders, monitors, recurring checks, and scheduled follow-ups.',\n category: 'authoring',\n tools: ['automation'],\n activation: { mode: 'explicit', ttl: 'until-complete' },\n permissions: { writesFiles: true, requiresConfirm: true },\n },\n {\n id: 'workflow-authoring',\n label: 'Workflow authoring',\n description: 'Design, validate, and run xopc workflows.',\n category: 'authoring',\n tools: ['workflow'],\n activation: { mode: 'explicit', ttl: 'until-complete' },\n permissions: { writesFiles: true, runsCode: true, requiresConfirm: true },\n },\n {\n id: 'extension-authoring',\n label: 'Plugin and extension authoring',\n description: 'Scaffold, inspect, and package xopc plugins or extensions.',\n category: 'authoring',\n tools: ['read_file', 'write_file', 'apply_patch', 'list_dir', 'grep', 'find', 'exec_command'],\n activation: { mode: 'explicit', ttl: 'until-complete' },\n permissions: { writesFiles: true, runsCode: true, requiresConfirm: true },\n },\n {\n id: 'skill-authoring',\n label: 'Skill authoring',\n description: 'Create, edit, inspect, and maintain xopc skills.',\n category: 'authoring',\n tools: ['skills_list', 'skill_view', 'skill_manage'],\n activation: { mode: 'explicit', ttl: 'until-complete' },\n permissions: { writesFiles: true, requiresConfirm: true },\n },\n {\n id: 'visual-asset-authoring',\n label: 'Visual asset authoring',\n description: 'Generate and inspect images, icons, sprites, and other visual assets.',\n category: 'assets',\n tools: ['image', 'image_generate', 'read_media', 'send_media'],\n activation: { mode: 'explicit', ttl: 'session' },\n permissions: { writesFiles: true, usesNetwork: true },\n },\n {\n id: 'browser-research',\n label: 'Browser research',\n description: 'Perform deeper web research with search, extraction, fetch, and browser interaction.',\n category: 'research',\n tools: ['web_search', 'web_fetch', 'web_extract', 'browser_use'],\n activation: { mode: 'explicit', ttl: 'turn' },\n permissions: { usesBrowser: true, usesNetwork: true },\n },\n {\n id: 'data-analysis',\n label: 'Data analysis',\n description: 'Analyze local structured data and produce derived tables, summaries, or artifacts.',\n category: 'analysis',\n tools: ['read_file', 'write_file', 'list_dir', 'grep', 'find'],\n activation: { mode: 'explicit', ttl: 'session' },\n permissions: { writesFiles: true, runsCode: true },\n },\n] as const satisfies readonly AgentCapabilityDefinition[];\n"],"mappings":";AA8CA,MAAa,+BAA+B;CAC1C;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO,CAAC,qBAAqB;EAC7B,gBAAgB,CAAC,YAAY;EAC7B,YACE;EACF,YAAY;GAAE,MAAM;GAAY,KAAK;GAAkB;EACvD,aAAa,EAAE,aAAa,MAAM;EACnC;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO,CAAC,aAAa;EACrB,YAAY;GAAE,MAAM;GAAY,KAAK;GAAkB;EACvD,aAAa;GAAE,aAAa;GAAM,iBAAiB;GAAM;EAC1D;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO,CAAC,WAAW;EACnB,YAAY;GAAE,MAAM;GAAY,KAAK;GAAkB;EACvD,aAAa;GAAE,aAAa;GAAM,UAAU;GAAM,iBAAiB;GAAM;EAC1E;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;GAAC;GAAa;GAAc;GAAe;GAAY;GAAQ;GAAQ;GAAe;EAC7F,YAAY;GAAE,MAAM;GAAY,KAAK;GAAkB;EACvD,aAAa;GAAE,aAAa;GAAM,UAAU;GAAM,iBAAiB;GAAM;EAC1E;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;GAAC;GAAe;GAAc;GAAe;EACpD,YAAY;GAAE,MAAM;GAAY,KAAK;GAAkB;EACvD,aAAa;GAAE,aAAa;GAAM,iBAAiB;GAAM;EAC1D;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;GAAC;GAAS;GAAkB;GAAc;GAAa;EAC9D,YAAY;GAAE,MAAM;GAAY,KAAK;GAAW;EAChD,aAAa;GAAE,aAAa;GAAM,aAAa;GAAM;EACtD;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;GAAC;GAAc;GAAa;GAAe;GAAc;EAChE,YAAY;GAAE,MAAM;GAAY,KAAK;GAAQ;EAC7C,aAAa;GAAE,aAAa;GAAM,aAAa;GAAM;EACtD;CACD;EACE,IAAI;EACJ,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;GAAC;GAAa;GAAc;GAAY;GAAQ;GAAO;EAC9D,YAAY;GAAE,MAAM;GAAY,KAAK;GAAW;EAChD,aAAa;GAAE,aAAa;GAAM,UAAU;GAAM;EACnD;CACF"}
@@ -0,0 +1,2 @@
1
+ export { AGENT_CAPABILITY_DEFINITIONS, type AgentCapabilityActivationMode, type AgentCapabilityActivationSource, type AgentCapabilityCatalogEntry, type AgentCapabilityCategory, type AgentCapabilityDefinition, type AgentCapabilityPermissions, type AgentCapabilitySessionState, type AgentCapabilitySessionStatus, type AgentCapabilityTtl, } from './definitions.js';
2
+ export { createAgentCapabilitySessionState, getAgentCapability, getAgentCapabilityToolNames, listAgentCapabilities, resolveAgentCapabilityCatalog, } from './registry.js';
@@ -0,0 +1,3 @@
1
+ import { AGENT_CAPABILITY_DEFINITIONS } from "./definitions.js";
2
+ import { createAgentCapabilitySessionState, getAgentCapability, getAgentCapabilityToolNames, listAgentCapabilities, resolveAgentCapabilityCatalog } from "./registry.js";
3
+ export { AGENT_CAPABILITY_DEFINITIONS, createAgentCapabilitySessionState, getAgentCapability, getAgentCapabilityToolNames, listAgentCapabilities, resolveAgentCapabilityCatalog };
@@ -0,0 +1,10 @@
1
+ import { type AgentCapabilityActivationSource, type AgentCapabilityCatalogEntry, type AgentCapabilityDefinition, type AgentCapabilitySessionState } from './definitions.js';
2
+ export declare function listAgentCapabilities(): AgentCapabilityDefinition[];
3
+ export declare function getAgentCapability(id: string): AgentCapabilityDefinition | undefined;
4
+ export declare function getAgentCapabilityToolNames(ids: readonly string[]): string[];
5
+ export declare function resolveAgentCapabilityCatalog(options?: {
6
+ registeredToolNames?: readonly string[];
7
+ lazyToolNames?: readonly string[];
8
+ deniedToolNames?: readonly string[];
9
+ }): AgentCapabilityCatalogEntry[];
10
+ export declare function createAgentCapabilitySessionState(id: string, source: AgentCapabilityActivationSource, now?: number): AgentCapabilitySessionState | null;
@@ -0,0 +1,51 @@
1
+ import { AGENT_CAPABILITY_DEFINITIONS } from "./definitions.js";
2
+ //#region src/agent/capabilities/registry.ts
3
+ const definitionsById = new Map(AGENT_CAPABILITY_DEFINITIONS.map((definition) => [definition.id, definition]));
4
+ function listAgentCapabilities() {
5
+ return [...AGENT_CAPABILITY_DEFINITIONS];
6
+ }
7
+ function getAgentCapability(id) {
8
+ return definitionsById.get(id.trim());
9
+ }
10
+ function getAgentCapabilityToolNames(ids) {
11
+ const out = [];
12
+ const seen = /* @__PURE__ */ new Set();
13
+ for (const id of ids) {
14
+ const definition = getAgentCapability(id);
15
+ if (!definition) continue;
16
+ for (const toolName of definition.tools) {
17
+ if (seen.has(toolName)) continue;
18
+ seen.add(toolName);
19
+ out.push(toolName);
20
+ }
21
+ }
22
+ return out;
23
+ }
24
+ function resolveAgentCapabilityCatalog(options = {}) {
25
+ const available = new Set([...options.registeredToolNames ?? [], ...options.lazyToolNames ?? []]);
26
+ const denied = new Set(options.deniedToolNames ?? []);
27
+ return AGENT_CAPABILITY_DEFINITIONS.map((definition) => {
28
+ const availableTools = definition.tools.filter((toolName) => available.has(toolName) && !denied.has(toolName));
29
+ const unavailableTools = definition.tools.filter((toolName) => !availableTools.includes(toolName));
30
+ return {
31
+ ...definition,
32
+ availableTools,
33
+ unavailableTools
34
+ };
35
+ });
36
+ }
37
+ function createAgentCapabilitySessionState(id, source, now = Date.now()) {
38
+ const definition = getAgentCapability(id);
39
+ if (!definition) return null;
40
+ return {
41
+ id: definition.id,
42
+ source,
43
+ activatedAt: now,
44
+ ttl: definition.activation.ttl,
45
+ status: "collecting"
46
+ };
47
+ }
48
+ //#endregion
49
+ export { createAgentCapabilitySessionState, getAgentCapability, getAgentCapabilityToolNames, listAgentCapabilities, resolveAgentCapabilityCatalog };
50
+
51
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","names":[],"sources":["../../../../src/agent/capabilities/registry.ts"],"sourcesContent":["import {\n AGENT_CAPABILITY_DEFINITIONS,\n type AgentCapabilityActivationSource,\n type AgentCapabilityCatalogEntry,\n type AgentCapabilityDefinition,\n type AgentCapabilitySessionState,\n} from './definitions.js';\n\nconst definitionsById: Map<string, AgentCapabilityDefinition> = new Map(\n AGENT_CAPABILITY_DEFINITIONS.map((definition) => [definition.id, definition]),\n);\n\nexport function listAgentCapabilities(): AgentCapabilityDefinition[] {\n return [...AGENT_CAPABILITY_DEFINITIONS];\n}\n\nexport function getAgentCapability(id: string): AgentCapabilityDefinition | undefined {\n return definitionsById.get(id.trim());\n}\n\nexport function getAgentCapabilityToolNames(ids: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of ids) {\n const definition = getAgentCapability(id);\n if (!definition) continue;\n for (const toolName of definition.tools) {\n if (seen.has(toolName)) continue;\n seen.add(toolName);\n out.push(toolName);\n }\n }\n return out;\n}\n\nexport function resolveAgentCapabilityCatalog(options: {\n registeredToolNames?: readonly string[];\n lazyToolNames?: readonly string[];\n deniedToolNames?: readonly string[];\n} = {}): AgentCapabilityCatalogEntry[] {\n const available = new Set([\n ...(options.registeredToolNames ?? []),\n ...(options.lazyToolNames ?? []),\n ]);\n const denied = new Set(options.deniedToolNames ?? []);\n return AGENT_CAPABILITY_DEFINITIONS.map((definition) => {\n const availableTools = definition.tools.filter((toolName) => available.has(toolName) && !denied.has(toolName));\n const unavailableTools = definition.tools.filter((toolName) => !availableTools.includes(toolName));\n return {\n ...definition,\n availableTools,\n unavailableTools,\n };\n });\n}\n\nexport function createAgentCapabilitySessionState(\n id: string,\n source: AgentCapabilityActivationSource,\n now = Date.now(),\n): AgentCapabilitySessionState | null {\n const definition = getAgentCapability(id);\n if (!definition) return null;\n return {\n id: definition.id,\n source,\n activatedAt: now,\n ttl: definition.activation.ttl,\n status: 'collecting',\n };\n}\n"],"mappings":";;AAQA,MAAM,kBAA0D,IAAI,IAClE,6BAA6B,KAAK,eAAe,CAAC,WAAW,IAAI,WAAW,CAAC,CAC9E;AAED,SAAgB,wBAAqD;AACnE,QAAO,CAAC,GAAG,6BAA6B;;AAG1C,SAAgB,mBAAmB,IAAmD;AACpF,QAAO,gBAAgB,IAAI,GAAG,MAAM,CAAC;;AAGvC,SAAgB,4BAA4B,KAAkC;CAC5E,MAAM,MAAgB,EAAE;CACxB,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,MAAM,MAAM,KAAK;EACpB,MAAM,aAAa,mBAAmB,GAAG;AACzC,MAAI,CAAC,WAAY;AACjB,OAAK,MAAM,YAAY,WAAW,OAAO;AACvC,OAAI,KAAK,IAAI,SAAS,CAAE;AACxB,QAAK,IAAI,SAAS;AAClB,OAAI,KAAK,SAAS;;;AAGtB,QAAO;;AAGT,SAAgB,8BAA8B,UAI1C,EAAE,EAAiC;CACrC,MAAM,YAAY,IAAI,IAAI,CACxB,GAAI,QAAQ,uBAAuB,EAAE,EACrC,GAAI,QAAQ,iBAAiB,EAAE,CAChC,CAAC;CACF,MAAM,SAAS,IAAI,IAAI,QAAQ,mBAAmB,EAAE,CAAC;AACrD,QAAO,6BAA6B,KAAK,eAAe;EACtD,MAAM,iBAAiB,WAAW,MAAM,QAAQ,aAAa,UAAU,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;EAC9G,MAAM,mBAAmB,WAAW,MAAM,QAAQ,aAAa,CAAC,eAAe,SAAS,SAAS,CAAC;AAClG,SAAO;GACL,GAAG;GACH;GACA;GACD;GACD;;AAGJ,SAAgB,kCACd,IACA,QACA,MAAM,KAAK,KAAK,EACoB;CACpC,MAAM,aAAa,mBAAmB,GAAG;AACzC,KAAI,CAAC,WAAY,QAAO;AACxB,QAAO;EACL,IAAI,WAAW;EACf;EACA,aAAa;EACb,KAAK,WAAW,WAAW;EAC3B,QAAQ;EACT"}
@@ -1,7 +1,7 @@
1
- import { GoalService } from "../../goals/goal-service.js";
2
- import "../../goals/index.js";
3
1
  import { listMemoryRecords } from "../../storage/sqlite/memory-records-repository.js";
4
2
  import "../../storage/sqlite/index.js";
3
+ import { GoalService } from "../../goals/goal-service.js";
4
+ import "../../goals/index.js";
5
5
  import { ProjectStore } from "../../projects/project-store.js";
6
6
  import { getProjectForSession, getProjectWorkspacePathForSession } from "../../projects/workspace.js";
7
7
  import { sanitizeForPromptLiteral } from "../prompt/sanitize-for-prompt.js";
@@ -1,12 +1,12 @@
1
- import { init_agent_scope, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../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, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent-scope.js";
4
4
  import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from "./workspace.js";
6
6
  import { dirname, join } from "node:path";
7
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
- import { execFileSync } from "node:child_process";
9
8
  import { fileURLToPath } from "node:url";
9
+ import { execFileSync } from "node:child_process";
10
10
  //#region src/agent/context/workspace-seed.ts
11
11
  /**
12
12
  * Seed profile Markdown files into `agents/<agentId>/profile/` (and optionally `git init` the Markdown workspace).
@@ -1,6 +1,6 @@
1
- import { resolveEffectiveAgentManifestForSession } from "../../config/agent-profile.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { resolveEffectiveAgentManifestForSession } from "../../config/agent-profile.js";
4
4
  import { init_providers, resolveModel } from "../../providers/index.js";
5
5
  import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
6
6
  import { runXopcEmbeddedTurn } from "./run-turn.js";
@@ -1,7 +1,7 @@
1
- import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
- import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
1
  import { createLogger } from "../../utils/logger/index.js";
4
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
5
5
  import { GoalService } from "../../goals/goal-service.js";
6
6
  import { resolveGoalUiLocale } from "./goal-locale.js";
7
7
  import { evaluateAfterTurnHermesLike } from "./evaluate-turn.js";
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, resolveDefaultAgentId } from "../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-scope.js";
4
4
  import { createResponseMessage, createSignalMessage, createTaskMessage } from "./types.js";
5
5
  import { AgentInbox } from "./inbox.js";
6
6
  //#region src/agent/ipc/bus.ts
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
4
4
  import { buildSafeToolName, normalizeReservedToolNames } from "./bundle-mcp-names.js";
5
5
  import { setPluginToolMeta } from "./mcp-tool-meta.js";
6
6
  import crypto from "node:crypto";
@@ -1,7 +1,7 @@
1
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
4
3
  import { resolveGlobalSingleton } from "../../utils/global-singleton.js";
4
+ import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
5
5
  import { sanitizeServerName } from "./bundle-mcp-names.js";
6
6
  import { redactSensitiveUrlLikeString } from "../../utils/redact-sensitive-url.js";
7
7
  import { loadEmbeddedMcpConfig } from "./embedded-mcp.js";
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
4
4
  import { resolveXopcMcpTransportAlias } from "../../config/mcp-config-normalize.js";
5
5
  import { sanitizeForLog } from "../../utils/sanitize-log.js";
6
6
  import { describeHttpMcpServerLaunchConfig, resolveHttpMcpServerLaunchConfig } from "./mcp-http.js";
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
4
4
  import { XopcStdioClientTransport } from "./mcp-stdio-transport.js";
5
5
  import { resolveMcpTransportConfig } from "./mcp-transport-config.js";
6
6
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
@@ -1,7 +1,7 @@
1
1
  import { discoverExtensionsFromDisk, init_discover_extensions } from "../../extensions/discover-extensions.js";
2
2
  import { isAbsolute, join } from "node:path";
3
- import { stat } from "node:fs/promises";
4
3
  import { pathToFileURL } from "node:url";
4
+ import { stat } from "node:fs/promises";
5
5
  //#region src/agent/memory/plugin-discovery.ts
6
6
  init_discover_extensions();
7
7
  async function discoverMemoryPlugins(config) {
@@ -1,6 +1,6 @@
1
- import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
4
  import { getAllModels, getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
5
5
  import { parseModelRef } from "./selection.js";
6
6
  import { resolveFallbackCandidates } from "../fallback/candidates.js";
@@ -1,6 +1,6 @@
1
- import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
4
4
  import "../memory/dreaming/constants.js";
5
5
  import { resolveDreamingAgentScope } from "../memory/dreaming/scope.js";
6
6
  import { persistInboundAttachments } from "../../channels/attachments/inbound-persist.js";
@@ -42,8 +42,10 @@ async function runProcessDirect(deps, input) {
42
42
  });
43
43
  return slash.aggregatedText ?? "";
44
44
  }
45
+ const skillTurn = deps.agentManager.prepareSkillTurn(input.sessionKey, turnBody);
46
+ const textForDirect = skillTurn.text;
45
47
  const userMessage = await buildDirectUserMessageContent({
46
- content: turnBody.trimStart().startsWith("/skill:") ? deps.agentManager.expandSkillUserText(turnBody) : turnBody,
48
+ content: textForDirect,
47
49
  attachments: prepared,
48
50
  sessionKey: input.sessionKey,
49
51
  config: deps.config,
@@ -54,13 +56,13 @@ async function runProcessDirect(deps, input) {
54
56
  setPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);
55
57
  const result = await (async () => {
56
58
  try {
57
- return await runDirectAgentTurn({
59
+ return await deps.agentManager.withSkillCapabilities(input.sessionKey, skillTurn.activatedCapabilityNames, () => runDirectAgentTurn({
58
60
  ...deps,
59
61
  config: deps.config
60
62
  }, {
61
63
  sessionKey: input.sessionKey,
62
64
  userMessage
63
- });
65
+ }));
64
66
  } finally {
65
67
  clearPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);
66
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"process-direct-one-shot.js","names":[],"sources":["../../../../src/agent/service/process-direct-one-shot.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { CommandHandler } from '../messaging/command-handler.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\nimport type { ModelManager } from '../models/index.js';\nimport type { SessionStore } from '../../session/index.js';\nimport type { Config } from '../../config/schema.js';\nimport { initSessionTurn } from '../../session/index.js';\nimport {\n buildDirectUserMessageContent,\n} from './build-direct-message-content.js';\nimport type { ProcessDirectStreamLog } from './process-direct-streaming.js';\nimport type {\n InboundAttachmentInput,\n MediaRef,\n} from '../../channels/attachments/inbound-persist.js';\nimport {\n hydratePerTurnState,\n runDirectAgentTurn,\n tryRunSlashCommand,\n} from './direct-turn-helpers.js';\nimport {\n clearPendingTranscriptUserMessage,\n setPendingTranscriptUserMessage,\n type TranscriptUserMessage,\n} from '../inbound/attachment-pipeline.js';\nimport type { ReviewOutput } from '../../review/review-types.js';\n\nexport type RunProcessDirectDeps = {\n log: ProcessDirectStreamLog;\n config: Config;\n resolveSessionEndpoint: (sessionKey: string) => Promise<{ channel: string; chatId: string }>;\n initSessionContext: (sessionKey: string, channel: string, chatId: string) => void;\n hydrateSessionWorkspaceFromStore: (sessionKey: string) => Promise<void>;\n hydrateSessionModelFromStore: (sessionKey: string) => Promise<void>;\n agentManager: AgentInstanceGateway;\n sessionStore: SessionStore;\n modelManager: ModelManager;\n applyResolvedThinkingLevel: (sessionKey: string, thinking?: string | null) => Promise<void>;\n prepareInboundAttachments: (\n sessionKey: string,\n attachments?: InboundAttachmentInput[],\n ) => Promise<MediaRef[] | undefined>;\n commandHandler: Pick<CommandHandler, 'executeCommandAndAggregateReply'>;\n onTurnComplete?: (sessionKey: string, lastAssistantText?: string) => void;\n endDirectRequestContext: () => void;\n resetSession: (sessionKey: string) => Promise<{ sessionId: string; previousSessionId: string } | null>;\n};\n\nfunction isReviewOutput(value: unknown): value is ReviewOutput {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n && (value as { type?: unknown }).type === 'review';\n}\n\nexport async function runProcessDirect(\n deps: RunProcessDirectDeps,\n input: {\n content: string;\n sessionKey: string;\n attachments?: InboundAttachmentInput[];\n thinking?: string;\n },\n): Promise<string> {\n const { channel, chatId } = await deps.resolveSessionEndpoint(input.sessionKey);\n deps.initSessionContext(input.sessionKey, channel, chatId);\n\n try {\n let turnBody = input.content;\n let resetTriggeredAtInit = false;\n const turn = await initSessionTurn({\n cfg: deps.config,\n sessionKey: input.sessionKey,\n body: input.content,\n resetSession: deps.resetSession,\n });\n resetTriggeredAtInit = turn.resetTriggered;\n if (turn.bareReset && turn.ackMessage) {\n return turn.ackMessage;\n }\n turnBody = turn.bodyStripped;\n\n await hydratePerTurnState(deps, input.sessionKey, input.thinking);\n const prepared = await deps.prepareInboundAttachments(input.sessionKey, input.attachments);\n\n const slash = await tryRunSlashCommand(\n deps,\n { sessionKey: input.sessionKey, channel, chatId },\n turnBody,\n { skipResetCommands: resetTriggeredAtInit },\n );\n if (slash.matched) {\n const trimmed = slash.aggregatedText.trim();\n if (trimmed) {\n await deps.sessionStore.appendTranscriptMessage(input.sessionKey, {\n role: 'assistant',\n content: isReviewOutput(slash.metadata?.review)\n ? [slash.metadata.review]\n : [{ type: 'text', text: trimmed }],\n timestamp: Date.now(),\n ...(slash.metadata && Object.keys(slash.metadata).length > 0\n ? { metadata: slash.metadata }\n : {}),\n } as AgentMessage);\n }\n return slash.aggregatedText ?? '';\n }\n\n const textForDirect = turnBody.trimStart().startsWith('/skill:')\n ? deps.agentManager.expandSkillUserText(turnBody)\n : turnBody;\n const userMessage = await buildDirectUserMessageContent({\n content: textForDirect,\n attachments: prepared,\n sessionKey: input.sessionKey,\n config: deps.config,\n agentManager: deps.agentManager,\n modelManager: deps.modelManager,\n });\n\n const pendingUserMessage = userMessage as TranscriptUserMessage;\n setPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);\n\n const result = await (async () => {\n try {\n return await runDirectAgentTurn(\n { ...deps, config: deps.config },\n {\n sessionKey: input.sessionKey,\n userMessage,\n },\n );\n } finally {\n clearPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);\n }\n })();\n\n if (result.lastAssistantText) {\n deps.onTurnComplete?.(input.sessionKey, result.lastAssistantText);\n }\n\n return result.lastAssistantText ?? '';\n } finally {\n deps.endDirectRequestContext();\n }\n}\n"],"mappings":";;;;;;AAiDA,SAAS,eAAe,OAAuC;AAC7D,QAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,IAC9D,MAA6B,SAAS;;AAG9C,eAAsB,iBACpB,MACA,OAMiB;CACjB,MAAM,EAAE,SAAS,WAAW,MAAM,KAAK,uBAAuB,MAAM,WAAW;AAC/E,MAAK,mBAAmB,MAAM,YAAY,SAAS,OAAO;AAE1D,KAAI;EACF,IAAI,WAAW,MAAM;EACrB,IAAI,uBAAuB;EAC3B,MAAM,OAAO,MAAM,gBAAgB;GACjC,KAAK,KAAK;GACV,YAAY,MAAM;GAClB,MAAM,MAAM;GACZ,cAAc,KAAK;GACpB,CAAC;AACF,yBAAuB,KAAK;AAC5B,MAAI,KAAK,aAAa,KAAK,WACzB,QAAO,KAAK;AAEd,aAAW,KAAK;AAEhB,QAAM,oBAAoB,MAAM,MAAM,YAAY,MAAM,SAAS;EACjE,MAAM,WAAW,MAAM,KAAK,0BAA0B,MAAM,YAAY,MAAM,YAAY;EAE1F,MAAM,QAAQ,MAAM,mBAClB,MACA;GAAE,YAAY,MAAM;GAAY;GAAS;GAAQ,EACjD,UACA,EAAE,mBAAmB,sBAAsB,CAC5C;AACD,MAAI,MAAM,SAAS;GACjB,MAAM,UAAU,MAAM,eAAe,MAAM;AAC3C,OAAI,QACF,OAAM,KAAK,aAAa,wBAAwB,MAAM,YAAY;IAChE,MAAM;IACN,SAAS,eAAe,MAAM,UAAU,OAAO,GAC3C,CAAC,MAAM,SAAS,OAAO,GACvB,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAS,CAAC;IACrC,WAAW,KAAK,KAAK;IACrB,GAAI,MAAM,YAAY,OAAO,KAAK,MAAM,SAAS,CAAC,SAAS,IACvD,EAAE,UAAU,MAAM,UAAU,GAC5B,EAAE;IACP,CAAiB;AAEpB,UAAO,MAAM,kBAAkB;;EAMjC,MAAM,cAAc,MAAM,8BAA8B;GACtD,SAJoB,SAAS,WAAW,CAAC,WAAW,UAAU,GAC5D,KAAK,aAAa,oBAAoB,SAAS,GAC/C;GAGF,aAAa;GACb,YAAY,MAAM;GAClB,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,cAAc,KAAK;GACpB,CAAC;EAEF,MAAM,qBAAqB;AAC3B,kCAAgC,MAAM,YAAY,mBAAmB;EAErE,MAAM,SAAS,OAAO,YAAY;AAChC,OAAI;AACF,WAAO,MAAM,mBACX;KAAE,GAAG;KAAM,QAAQ,KAAK;KAAQ,EAChC;KACE,YAAY,MAAM;KAClB;KACD,CACF;aACO;AACR,sCAAkC,MAAM,YAAY,mBAAmB;;MAEvE;AAEJ,MAAI,OAAO,kBACT,MAAK,iBAAiB,MAAM,YAAY,OAAO,kBAAkB;AAGnE,SAAO,OAAO,qBAAqB;WAC3B;AACR,OAAK,yBAAyB"}
1
+ {"version":3,"file":"process-direct-one-shot.js","names":[],"sources":["../../../../src/agent/service/process-direct-one-shot.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { CommandHandler } from '../messaging/command-handler.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\nimport type { ModelManager } from '../models/index.js';\nimport type { SessionStore } from '../../session/index.js';\nimport type { Config } from '../../config/schema.js';\nimport { initSessionTurn } from '../../session/index.js';\nimport {\n buildDirectUserMessageContent,\n} from './build-direct-message-content.js';\nimport type { ProcessDirectStreamLog } from './process-direct-streaming.js';\nimport type {\n InboundAttachmentInput,\n MediaRef,\n} from '../../channels/attachments/inbound-persist.js';\nimport {\n hydratePerTurnState,\n runDirectAgentTurn,\n tryRunSlashCommand,\n} from './direct-turn-helpers.js';\nimport {\n clearPendingTranscriptUserMessage,\n setPendingTranscriptUserMessage,\n type TranscriptUserMessage,\n} from '../inbound/attachment-pipeline.js';\nimport type { ReviewOutput } from '../../review/review-types.js';\n\nexport type RunProcessDirectDeps = {\n log: ProcessDirectStreamLog;\n config: Config;\n resolveSessionEndpoint: (sessionKey: string) => Promise<{ channel: string; chatId: string }>;\n initSessionContext: (sessionKey: string, channel: string, chatId: string) => void;\n hydrateSessionWorkspaceFromStore: (sessionKey: string) => Promise<void>;\n hydrateSessionModelFromStore: (sessionKey: string) => Promise<void>;\n agentManager: AgentInstanceGateway;\n sessionStore: SessionStore;\n modelManager: ModelManager;\n applyResolvedThinkingLevel: (sessionKey: string, thinking?: string | null) => Promise<void>;\n prepareInboundAttachments: (\n sessionKey: string,\n attachments?: InboundAttachmentInput[],\n ) => Promise<MediaRef[] | undefined>;\n commandHandler: Pick<CommandHandler, 'executeCommandAndAggregateReply'>;\n onTurnComplete?: (sessionKey: string, lastAssistantText?: string) => void;\n endDirectRequestContext: () => void;\n resetSession: (sessionKey: string) => Promise<{ sessionId: string; previousSessionId: string } | null>;\n};\n\nfunction isReviewOutput(value: unknown): value is ReviewOutput {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n && (value as { type?: unknown }).type === 'review';\n}\n\nexport async function runProcessDirect(\n deps: RunProcessDirectDeps,\n input: {\n content: string;\n sessionKey: string;\n attachments?: InboundAttachmentInput[];\n thinking?: string;\n },\n): Promise<string> {\n const { channel, chatId } = await deps.resolveSessionEndpoint(input.sessionKey);\n deps.initSessionContext(input.sessionKey, channel, chatId);\n\n try {\n let turnBody = input.content;\n let resetTriggeredAtInit = false;\n const turn = await initSessionTurn({\n cfg: deps.config,\n sessionKey: input.sessionKey,\n body: input.content,\n resetSession: deps.resetSession,\n });\n resetTriggeredAtInit = turn.resetTriggered;\n if (turn.bareReset && turn.ackMessage) {\n return turn.ackMessage;\n }\n turnBody = turn.bodyStripped;\n\n await hydratePerTurnState(deps, input.sessionKey, input.thinking);\n const prepared = await deps.prepareInboundAttachments(input.sessionKey, input.attachments);\n\n const slash = await tryRunSlashCommand(\n deps,\n { sessionKey: input.sessionKey, channel, chatId },\n turnBody,\n { skipResetCommands: resetTriggeredAtInit },\n );\n if (slash.matched) {\n const trimmed = slash.aggregatedText.trim();\n if (trimmed) {\n await deps.sessionStore.appendTranscriptMessage(input.sessionKey, {\n role: 'assistant',\n content: isReviewOutput(slash.metadata?.review)\n ? [slash.metadata.review]\n : [{ type: 'text', text: trimmed }],\n timestamp: Date.now(),\n ...(slash.metadata && Object.keys(slash.metadata).length > 0\n ? { metadata: slash.metadata }\n : {}),\n } as AgentMessage);\n }\n return slash.aggregatedText ?? '';\n }\n\n const skillTurn = deps.agentManager.prepareSkillTurn(input.sessionKey, turnBody);\n const textForDirect = skillTurn.text;\n const userMessage = await buildDirectUserMessageContent({\n content: textForDirect,\n attachments: prepared,\n sessionKey: input.sessionKey,\n config: deps.config,\n agentManager: deps.agentManager,\n modelManager: deps.modelManager,\n });\n\n const pendingUserMessage = userMessage as TranscriptUserMessage;\n setPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);\n\n const result = await (async () => {\n try {\n return await deps.agentManager.withSkillCapabilities(\n input.sessionKey,\n skillTurn.activatedCapabilityNames,\n () =>\n runDirectAgentTurn(\n { ...deps, config: deps.config },\n {\n sessionKey: input.sessionKey,\n userMessage,\n },\n ),\n );\n } finally {\n clearPendingTranscriptUserMessage(input.sessionKey, pendingUserMessage);\n }\n })();\n\n if (result.lastAssistantText) {\n deps.onTurnComplete?.(input.sessionKey, result.lastAssistantText);\n }\n\n return result.lastAssistantText ?? '';\n } finally {\n deps.endDirectRequestContext();\n }\n}\n"],"mappings":";;;;;;AAiDA,SAAS,eAAe,OAAuC;AAC7D,QAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,IAC9D,MAA6B,SAAS;;AAG9C,eAAsB,iBACpB,MACA,OAMiB;CACjB,MAAM,EAAE,SAAS,WAAW,MAAM,KAAK,uBAAuB,MAAM,WAAW;AAC/E,MAAK,mBAAmB,MAAM,YAAY,SAAS,OAAO;AAE1D,KAAI;EACF,IAAI,WAAW,MAAM;EACrB,IAAI,uBAAuB;EAC3B,MAAM,OAAO,MAAM,gBAAgB;GACjC,KAAK,KAAK;GACV,YAAY,MAAM;GAClB,MAAM,MAAM;GACZ,cAAc,KAAK;GACpB,CAAC;AACF,yBAAuB,KAAK;AAC5B,MAAI,KAAK,aAAa,KAAK,WACzB,QAAO,KAAK;AAEd,aAAW,KAAK;AAEhB,QAAM,oBAAoB,MAAM,MAAM,YAAY,MAAM,SAAS;EACjE,MAAM,WAAW,MAAM,KAAK,0BAA0B,MAAM,YAAY,MAAM,YAAY;EAE1F,MAAM,QAAQ,MAAM,mBAClB,MACA;GAAE,YAAY,MAAM;GAAY;GAAS;GAAQ,EACjD,UACA,EAAE,mBAAmB,sBAAsB,CAC5C;AACD,MAAI,MAAM,SAAS;GACjB,MAAM,UAAU,MAAM,eAAe,MAAM;AAC3C,OAAI,QACF,OAAM,KAAK,aAAa,wBAAwB,MAAM,YAAY;IAChE,MAAM;IACN,SAAS,eAAe,MAAM,UAAU,OAAO,GAC3C,CAAC,MAAM,SAAS,OAAO,GACvB,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAS,CAAC;IACrC,WAAW,KAAK,KAAK;IACrB,GAAI,MAAM,YAAY,OAAO,KAAK,MAAM,SAAS,CAAC,SAAS,IACvD,EAAE,UAAU,MAAM,UAAU,GAC5B,EAAE;IACP,CAAiB;AAEpB,UAAO,MAAM,kBAAkB;;EAGjC,MAAM,YAAY,KAAK,aAAa,iBAAiB,MAAM,YAAY,SAAS;EAChF,MAAM,gBAAgB,UAAU;EAChC,MAAM,cAAc,MAAM,8BAA8B;GACtD,SAAS;GACT,aAAa;GACb,YAAY,MAAM;GAClB,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,cAAc,KAAK;GACpB,CAAC;EAEF,MAAM,qBAAqB;AAC3B,kCAAgC,MAAM,YAAY,mBAAmB;EAErE,MAAM,SAAS,OAAO,YAAY;AAChC,OAAI;AACF,WAAO,MAAM,KAAK,aAAa,sBAC7B,MAAM,YACN,UAAU,gCAER,mBACE;KAAE,GAAG;KAAM,QAAQ,KAAK;KAAQ,EAChC;KACE,YAAY,MAAM;KAClB;KACD,CACF,CACJ;aACO;AACR,sCAAkC,MAAM,YAAY,mBAAmB;;MAEvE;AAEJ,MAAI,OAAO,kBACT,MAAK,iBAAiB,MAAM,YAAY,OAAO,kBAAkB;AAGnE,SAAO,OAAO,qBAAqB;WAC3B;AACR,OAAK,yBAAyB"}
@@ -165,7 +165,8 @@ async function* runProcessDirectStreaming(deps, input) {
165
165
  });
166
166
  return;
167
167
  }
168
- const textForAgent = mergedUserText.trimStart().startsWith("/skill:") ? deps.agentManager.expandSkillUserText(mergedUserText) : mergedUserText;
168
+ const skillTurn = deps.agentManager.prepareSkillTurn(sessionKey, mergedUserText);
169
+ const textForAgent = skillTurn.text;
169
170
  const userMessage = await deps.buildTranscriptUserMessage(textForAgent, prepared, sessionKey);
170
171
  let sourceEnrichedUserMessage = userMessage;
171
172
  let sourceImages;
@@ -190,7 +191,7 @@ async function* runProcessDirectStreaming(deps, input) {
190
191
  const pendingUserMessage = userMessage;
191
192
  setPendingTranscriptUserMessage(sessionKey, pendingUserMessage);
192
193
  try {
193
- const result = await runDirectAgentTurn({
194
+ const result = await deps.agentManager.withSkillCapabilities(sessionKey, skillTurn.activatedCapabilityNames, () => runDirectAgentTurn({
194
195
  sessionStore: deps.sessionStore,
195
196
  agentManager: deps.agentManager,
196
197
  modelManager: deps.modelManager,
@@ -206,7 +207,7 @@ async function* runProcessDirectStreaming(deps, input) {
206
207
  if (event.type === "error" && typeof event.content === "string") event.content = formatStreamError(event.content);
207
208
  pushVisible(event);
208
209
  }
209
- });
210
+ }));
210
211
  if (result.lastAssistantText) deps.onTurnComplete?.(sessionKey, result.lastAssistantText);
211
212
  if (!result.ok && result.errorMessage && !abortHandled) pushVisible({
212
213
  type: "error",