@xopcai/xopc 0.0.191 → 0.0.193

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 (348) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-DstnJCS5.js → activity-store-BwmdJ5pv.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DvEkT222.js → agent-avatar-dicebear-DmNq0t2n.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-BOo1rVn9.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-BTL9kayv.js → api-BM1hNzjw.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-COpP_pKN.js → app-management-settings-panel-B3xStqSX.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DTVNUEDq.js → appearance-settings-DglyenDq.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-DC9qPFTx.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-IpX6VA0o.js → archive-plugin-DvtcrBss.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CKVFNUi1.js → attachment-load-CALdq4xM.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-BIGGKb0T.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-BrfvfOS4.js → binary-plugins-GaVuvrDI.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-D9sEfg32.js → block-editor-C2KrMYa_.js} +4 -4
  15. package/dist/gateway/static/root/assets/browser-settings-page-CPW_E-xj.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BixZ5lCR.js → browser-workflow-inputs-FfEEjhIS.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-YEFuodJI.js → browser-workflows-page-DFP9_UQk.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-CsD8aGHU.js +7 -0
  19. package/dist/gateway/static/root/assets/capability-presets-api-BoOzFotX.js +1 -0
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-NCeyWH6Z.js +3 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-BThDGiO3.js → channel-recipient-api-_8IiTxRB.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-CknzwxNC.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-DPaJSYX_.js +1 -0
  24. package/dist/gateway/static/root/assets/{code-editor-D4_k-6QN.js → code-editor-dFzqyDXS.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connectors-api-BMMqC0_9.js → connectors-api-vaSrhPF8.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-DEGE7xp_.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-Bm8koRoD.js → cron-expression-BjFuXlGY.js} +1 -1
  28. package/dist/gateway/static/root/assets/dependency-picker-DOdkHdPv.js +1 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CMG3mcaJ.js → desktop-pet-Dz-Yf8Uu.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-D8aaPb0x.js → desktop-pet-settings-C8EHFEtd.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-C95yW03b.js → directory-picker-path-field-DKbfmZlZ.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-DsG7Z9lV.js → extension-debug-page-Dq0xsr_e.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-CUAXEbAt.js → extension-page-IgSLUyWP.js} +1 -1
  34. package/dist/gateway/static/root/assets/extension-settings-page-VC-8Pjn2.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-api-DL70Nakc.js → gateway-config-api-CH2R7yqo.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-BgDxQ08c.js → gateway-settings-DLQJWaBQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-EO9mKvzE.js → gateway-startup-retry--2njcDpC.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-BX7q55uZ.js → heartbeat-settings-43loWoGb.js} +1 -1
  39. package/dist/gateway/static/root/assets/home-page-DqvpI6LC.js +3 -0
  40. package/dist/gateway/static/root/assets/html-workspace-editor-bXK5tq64.js +1 -0
  41. package/dist/gateway/static/root/assets/{image-generation-api-Bu7PyVSh.js → image-generation-api-Cki7jfEV.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-BpkdvHH0.js +150 -0
  43. package/dist/gateway/static/root/assets/index-CFVjH-EK.css +1 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dt6wS5zW.js → keyboard-shortcuts-settings-DJDZes_8.js} +1 -1
  45. package/dist/gateway/static/root/assets/local-app-workbench-page-CvNQM6qm.js +2 -0
  46. package/dist/gateway/static/root/assets/{local-apps-page-DcD3-N00.js → local-apps-page-C2ajOn1D.js} +1 -1
  47. package/dist/gateway/static/root/assets/{locale-store-deR2zRaE.js → locale-store-Bjvw7jtg.js} +1 -1
  48. package/dist/gateway/static/root/assets/logs-page-BLm5yWqQ.js +2 -0
  49. package/dist/gateway/static/root/assets/{management-settings-B6EVkJQy.js → management-settings--_eXnFVr.js} +1 -1
  50. package/dist/gateway/static/root/assets/{markdown-editor-BvUebh3C.js → markdown-editor-TWGaF7Xa.js} +2 -2
  51. package/dist/gateway/static/root/assets/{markdown-split-CHUjCnBh.js → markdown-split-iL2oi-x2.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-DRrtI2O0.js → media-plugins-BIbkLVpQ.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-DQ5X6cXp.js +3 -0
  54. package/dist/gateway/static/root/assets/{notes-page-fermYvpI.js → notes-page-xFxaZ6gT.js} +1 -1
  55. package/dist/gateway/static/root/assets/notes-workbench-PAftxL3V.js +4 -0
  56. package/dist/gateway/static/root/assets/{page-tabs-BO262zuu.js → page-tabs-CROi9zm1.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-yZYTy-2e.js → preview-open-alternatives-BwYcPjOM.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-Dgy8XWhR.js → product-open-page-BezeuVFd.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-CCdfZcw-.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-DOG9zm5e.js +1 -0
  61. package/dist/gateway/static/root/assets/remote-access-hub-DQBFgveI.js +1 -0
  62. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bs6tpSyX.js +5 -0
  63. package/dist/gateway/static/root/assets/{schema-form-DdE4gtw_.js → schema-form-CWoSjz9s.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-Db6L6M2H.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-CcO2bd6q.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-form-section-CiYU8AvV.js → settings-form-section-BJaMEHsX.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bv03cWib.js → settings-loading-skeleton-sn4k17x7.js} +1 -1
  68. package/dist/gateway/static/root/assets/settings-page-D2hfeFPX.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-page-layout-t_Ox1slk.js → settings-page-layout-CLtUsWsu.js} +1 -1
  70. package/dist/gateway/static/root/assets/setup-status-panel-UmQC_uZ1.js +1 -0
  71. package/dist/gateway/static/root/assets/{share-preview-page-DF8gW6bo.js → share-preview-page-BJ58AluH.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-BZKn6Fdc.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-Cx3i24w_.js +1 -0
  74. package/dist/gateway/static/root/assets/skills-page-DjUllGtk.js +2 -0
  75. package/dist/gateway/static/root/assets/skills-page.utils-CZYIuE26.js +1 -0
  76. package/dist/gateway/static/root/assets/style-TIDOdKy0.js +7 -0
  77. package/dist/gateway/static/root/assets/system-settings-panel-DUrgdQMk.js +1 -0
  78. package/dist/gateway/static/root/assets/task-detail-page-BGG2cFe9.js +1 -0
  79. package/dist/gateway/static/root/assets/{theme-store-DnBOcGXi.js → theme-store-DtxpMC5S.js} +1 -1
  80. package/dist/gateway/static/root/assets/{typed-models-lib-4XBsLEuv.js → typed-models-lib-CRNMvvFX.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-BN2QgFGn.js → use-autosave-Dle3-zdQ.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-context-page-BLLmw5S1.js +1 -0
  83. package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-DRr7hFaD.js} +16 -16
  84. package/dist/gateway/static/root/assets/voice-api-key-field-BrWH0dCl.js +1 -0
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-nmEAafFl.js → work-discovery-overlay-BZ1l9CFM.js} +1 -1
  86. package/dist/gateway/static/root/assets/work-discovery-page-BnPF2vx7.js +1 -0
  87. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BnNWBDwz.js → workflow-run-setup-panel-BK6e9yzK.js} +2 -2
  88. package/dist/gateway/static/root/assets/workflows-page-Bp5JxQJa.js +5 -0
  89. package/dist/gateway/static/root/index.html +7 -7
  90. package/dist/gateway/static/root/notification-sw.js +15 -0
  91. package/dist/package.js +1 -1
  92. package/dist/src/agent/agent-manager.d.ts +2 -0
  93. package/dist/src/agent/agent-manager.js +76 -0
  94. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  95. package/dist/src/agent/background-review/prompts.js +1 -1
  96. package/dist/src/agent/background-review/run-background-review.js +3 -12
  97. package/dist/src/agent/embedded/run-for-session.js +3 -0
  98. package/dist/src/agent/embedded/run-turn.js +4 -1
  99. package/dist/src/agent/embedded/session-runner.js +3 -4
  100. package/dist/src/agent/embedded/types.d.ts +10 -1
  101. package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -2
  102. package/dist/src/agent/external-tools/mcp-provider.d.ts +1 -0
  103. package/dist/src/agent/external-tools/mcp-provider.js +21 -6
  104. package/dist/src/agent/image/generation/provider-registry.js +1 -0
  105. package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
  106. package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
  107. package/dist/src/agent/image/generation/providers/fal.js +12 -6
  108. package/dist/src/agent/image/generation/providers/google.js +8 -0
  109. package/dist/src/agent/image/generation/providers/minimax.js +20 -0
  110. package/dist/src/agent/image/generation/providers/openai.js +36 -26
  111. package/dist/src/agent/image/generation/types.d.ts +13 -0
  112. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
  113. package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
  114. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
  115. package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
  116. package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
  117. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
  118. package/dist/src/agent/mcp/index.js +2 -2
  119. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  120. package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
  121. package/dist/src/agent/mcp/mcp-transport.js +22 -4
  122. package/dist/src/agent/memory/compaction.js +19 -17
  123. package/dist/src/agent/memory/context-budget.js +2 -3
  124. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  125. package/dist/src/agent/memory/understanding/service.js +49 -20
  126. package/dist/src/agent/memory/understanding/types.d.ts +1 -0
  127. package/dist/src/agent/memory/user-context-coordinator.js +6 -0
  128. package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
  129. package/dist/src/agent/service/direct-turn-helpers.js +14 -5
  130. package/dist/src/agent/skills/index.d.ts +1 -1
  131. package/dist/src/agent/skills/index.js +2 -2
  132. package/dist/src/agent/skills/installer.d.ts +3 -10
  133. package/dist/src/agent/skills/installer.js +99 -156
  134. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
  135. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
  136. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
  137. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
  138. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
  139. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
  140. package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
  141. package/dist/src/agent/skills/marketplace/search.js +52 -21
  142. package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
  143. package/dist/src/agent/skills/skills-marketplace.js +2 -2
  144. package/dist/src/agent/skills/types.d.ts +0 -8
  145. package/dist/src/agent/tools/exec-command.d.ts +1 -0
  146. package/dist/src/agent/tools/exec-command.js +2 -1
  147. package/dist/src/agent/tools/factory.d.ts +1 -0
  148. package/dist/src/agent/tools/factory.js +17 -2
  149. package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
  150. package/dist/src/agent/tools/managed-job-tool.js +3 -2
  151. package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
  152. package/dist/src/agent/tools/skill-install-tool.js +8 -4
  153. package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
  154. package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
  155. package/dist/src/agent/tools/workflow-tool.js +14 -4
  156. package/dist/src/agent-manifest/schema.d.ts +20 -0
  157. package/dist/src/agent-manifest/schema.js +6 -1
  158. package/dist/src/auth/oauth/xopc-cloud.js +163 -7
  159. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  160. package/dist/src/cli/command-loaders.js +1 -0
  161. package/dist/src/cli/command-manifest.js +4 -0
  162. package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
  163. package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
  164. package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
  165. package/dist/src/cli/commands/doctor/flow.js +2 -0
  166. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  167. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  168. package/dist/src/cli/commands/models.js +0 -1
  169. package/dist/src/cli/commands/onboard/model.d.ts +16 -1
  170. package/dist/src/cli/commands/onboard/model.js +65 -4
  171. package/dist/src/cli/commands/onboard.js +13 -1
  172. package/dist/src/cli/commands/runtime.d.ts +1 -0
  173. package/dist/src/cli/commands/runtime.js +77 -0
  174. package/dist/src/cli/commands/setup.js +15 -1
  175. package/dist/src/cli/commands/skills.js +7 -4
  176. package/dist/src/cli/commands/update.js +1 -1
  177. package/dist/src/config/index.js +2 -2
  178. package/dist/src/config/schema.d.ts +125 -0
  179. package/dist/src/config/schema.js +77 -2
  180. package/dist/src/config/voice.d.ts +6 -0
  181. package/dist/src/config/voice.js +17 -0
  182. package/dist/src/extensions/install.js +1 -1
  183. package/dist/src/extensions/types/providers.d.ts +4 -0
  184. package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
  185. package/dist/src/gateway/capability-presets-admin.js +24 -6
  186. package/dist/src/gateway/chat-stream/mapper.js +8 -4
  187. package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
  188. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  189. package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
  190. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  191. package/dist/src/gateway/hono/routes/local-apps.js +1 -1
  192. package/dist/src/gateway/hono/routes/models.js +2 -3
  193. package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
  194. package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
  195. package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
  196. package/dist/src/gateway/hono/routes/update.js +2 -2
  197. package/dist/src/gateway/hono/routes/voice.js +43 -2
  198. package/dist/src/gateway/hono/routes/you.js +22 -25
  199. package/dist/src/gateway/image-generation-setup.d.ts +2 -3
  200. package/dist/src/gateway/image-generation-setup.js +39 -8
  201. package/dist/src/gateway/index.js +1 -1
  202. package/dist/src/gateway/run-loop.js +1 -1
  203. package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
  204. package/dist/src/gateway/service/marketplace-service.js +2 -2
  205. package/dist/src/gateway/service/run-gateway-agent.js +21 -8
  206. package/dist/src/gateway/service.js +5 -5
  207. package/dist/src/infra/gateway-processes.js +1 -1
  208. package/dist/src/infra/update-global.js +1 -1
  209. package/dist/src/infra/update-restart.js +1 -1
  210. package/dist/src/infra/update-runner.js +2 -2
  211. package/dist/src/infra/update-startup.js +1 -1
  212. package/dist/src/providers/extension-stream-bridge.js +8 -7
  213. package/dist/src/providers/model-catalog-store.d.ts +24 -4
  214. package/dist/src/providers/model-catalog-store.js +11 -0
  215. package/dist/src/providers/model-registry.js +1 -1
  216. package/dist/src/providers/prompt-cache-payload.d.ts +13 -0
  217. package/dist/src/providers/prompt-cache-payload.js +110 -0
  218. package/dist/src/providers/register-runtime-providers.js +1 -1
  219. package/dist/src/providers/xopc-cloud-model-source.js +52 -6
  220. package/dist/src/runtime-tools/archive.d.ts +8 -0
  221. package/dist/src/runtime-tools/archive.js +99 -0
  222. package/dist/src/runtime-tools/bootstrap.d.ts +16 -0
  223. package/dist/src/runtime-tools/bootstrap.js +33 -0
  224. package/dist/src/runtime-tools/catalog.d.ts +19 -0
  225. package/dist/src/runtime-tools/catalog.js +59 -0
  226. package/dist/src/runtime-tools/command.d.ts +15 -0
  227. package/dist/src/runtime-tools/command.js +59 -0
  228. package/dist/src/runtime-tools/download-source.d.ts +24 -0
  229. package/dist/src/runtime-tools/download-source.js +125 -0
  230. package/dist/src/runtime-tools/downloader.d.ts +21 -0
  231. package/dist/src/runtime-tools/downloader.js +137 -0
  232. package/dist/src/runtime-tools/environment.d.ts +20 -0
  233. package/dist/src/runtime-tools/environment.js +113 -0
  234. package/dist/src/runtime-tools/errors.d.ts +10 -0
  235. package/dist/src/runtime-tools/errors.js +14 -0
  236. package/dist/src/runtime-tools/index.d.ts +7 -0
  237. package/dist/src/runtime-tools/index.js +7 -0
  238. package/dist/src/runtime-tools/install-lock.d.ts +1 -0
  239. package/dist/src/runtime-tools/install-lock.js +50 -0
  240. package/dist/src/runtime-tools/manager.d.ts +20 -0
  241. package/dist/src/runtime-tools/manager.js +641 -0
  242. package/dist/src/runtime-tools/manifest-store.d.ts +3 -0
  243. package/dist/src/runtime-tools/manifest-store.js +26 -0
  244. package/dist/src/runtime-tools/network.d.ts +9 -0
  245. package/dist/src/runtime-tools/network.js +41 -0
  246. package/dist/src/runtime-tools/offline-bundle.d.ts +16 -0
  247. package/dist/src/runtime-tools/offline-bundle.js +41 -0
  248. package/dist/src/runtime-tools/paths.d.ts +7 -0
  249. package/dist/src/runtime-tools/paths.js +22 -0
  250. package/dist/src/runtime-tools/probe.d.ts +7 -0
  251. package/dist/src/runtime-tools/probe.js +71 -0
  252. package/dist/src/runtime-tools/prune.d.ts +10 -0
  253. package/dist/src/runtime-tools/prune.js +93 -0
  254. package/dist/src/runtime-tools/types.d.ts +70 -0
  255. package/dist/src/runtime-tools/types.js +1 -0
  256. package/dist/src/share/share-zip.js +1 -1
  257. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +42 -20
  258. package/dist/src/tasks/home-query-service.js +1 -5
  259. package/dist/src/tasks/index.js +2 -2
  260. package/dist/src/tasks/project-operating-view-service.d.ts +2 -1
  261. package/dist/src/tasks/project-operating-view-service.js +6 -4
  262. package/dist/src/tasks/task-dependency-service.d.ts +2 -1
  263. package/dist/src/tasks/task-dependency-service.js +15 -0
  264. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  265. package/dist/src/tunnel/frpc-binary.js +1 -1
  266. package/dist/src/user-context/domain.d.ts +2 -1
  267. package/dist/src/user-context/domain.js +12 -1
  268. package/dist/src/user-context/manual-understanding.js +8 -10
  269. package/dist/src/user-context/planner.js +1 -6
  270. package/dist/src/user-context/sources/activity-clustering.d.ts +5 -0
  271. package/dist/src/user-context/sources/activity-clustering.js +130 -0
  272. package/dist/src/user-context/sources/catalog.js +26 -0
  273. package/dist/src/user-context/sources/local-source-contract.d.ts +3 -0
  274. package/dist/src/user-context/sources/local-source-contract.js +15 -0
  275. package/dist/src/user-context/sources/repository.js +7 -1
  276. package/dist/src/user-context/sources/types.d.ts +7 -1
  277. package/dist/src/user-context/understanding.d.ts +15 -0
  278. package/dist/src/user-context/understanding.js +24 -0
  279. package/dist/src/voice/local/model-files.js +1 -1
  280. package/dist/src/voice/metadata/builtin.js +99 -32
  281. package/dist/src/voice/metadata/types.d.ts +3 -0
  282. package/dist/src/voice/stt/availability.js +4 -1
  283. package/dist/src/voice/stt/config-slice.d.ts +0 -2
  284. package/dist/src/voice/stt/config-slice.js +1 -6
  285. package/dist/src/voice/stt/factory.js +2 -2
  286. package/dist/src/voice/stt/index.d.ts +2 -3
  287. package/dist/src/voice/stt/list-providers.js +1 -1
  288. package/dist/src/voice/stt/providers/alibaba-transcription.d.ts +0 -19
  289. package/dist/src/voice/stt/providers/alibaba-transcription.js +59 -132
  290. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  291. package/dist/src/voice/stt/providers/index.js +2 -1
  292. package/dist/src/voice/stt/providers/openai-transcription.d.ts +2 -2
  293. package/dist/src/voice/stt/providers/openai-transcription.js +4 -4
  294. package/dist/src/voice/stt/providers/xopc-cloud-transcription.d.ts +2 -0
  295. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +49 -0
  296. package/dist/src/voice/stt/types.js +2 -2
  297. package/dist/src/voice/tts/providers/index.d.ts +1 -0
  298. package/dist/src/voice/tts/providers/index.js +2 -1
  299. package/dist/src/voice/tts/providers/xopc-cloud-speech.d.ts +2 -0
  300. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +113 -0
  301. package/dist/src/voice/tts/types.d.ts +1 -1
  302. package/dist/src/work-discovery/analyzer.js +9 -4
  303. package/dist/src/work-discovery/candidate-discovery.d.ts +1 -0
  304. package/dist/src/work-discovery/candidate-discovery.js +3 -3
  305. package/dist/src/work-discovery/index.js +2 -2
  306. package/dist/src/work-discovery/service.d.ts +2 -1
  307. package/dist/src/work-discovery/service.js +126 -37
  308. package/dist/src/work-discovery/types.d.ts +1 -0
  309. package/dist/src/workflows/service/workflow-run-service.js +8 -0
  310. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
  311. package/package.json +2 -2
  312. package/dist/gateway/static/root/assets/agents-CXyivfqY.js +0 -68
  313. package/dist/gateway/static/root/assets/apps-page-DsE67BSO.js +0 -1
  314. package/dist/gateway/static/root/assets/automations-page-D0TVev47.js +0 -6
  315. package/dist/gateway/static/root/assets/browser-settings-page-DpZzq8j2.js +0 -8
  316. package/dist/gateway/static/root/assets/capabilities-settings-panel-B9Cmcuff.js +0 -7
  317. package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +0 -1
  318. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C_EpuQtk.js +0 -1
  319. package/dist/gateway/static/root/assets/channels-settings-CvzD5qSv.js +0 -1
  320. package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +0 -1
  321. package/dist/gateway/static/root/assets/connectors-page-BKrm7tJ9.js +0 -2
  322. package/dist/gateway/static/root/assets/extension-settings-page-CsR7QOJo.js +0 -1
  323. package/dist/gateway/static/root/assets/home-page-C08Nen5T.js +0 -3
  324. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
  325. package/dist/gateway/static/root/assets/index-B-_CEvIX.js +0 -150
  326. package/dist/gateway/static/root/assets/index-D6e3tPL-.css +0 -1
  327. package/dist/gateway/static/root/assets/local-app-workbench-page-BQVC0tWq.js +0 -2
  328. package/dist/gateway/static/root/assets/logs-page-D6yvW-E4.js +0 -2
  329. package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +0 -3
  330. package/dist/gateway/static/root/assets/notes-workbench-BVCwabjq.js +0 -4
  331. package/dist/gateway/static/root/assets/project-detail-page-CS4Ujor7.js +0 -1
  332. package/dist/gateway/static/root/assets/projects-page-DMtPC8c4.js +0 -1
  333. package/dist/gateway/static/root/assets/remote-access-hub-BpfHZT88.js +0 -1
  334. package/dist/gateway/static/root/assets/sessions-page-BZkyrJBM.js +0 -1
  335. package/dist/gateway/static/root/assets/settings-advanced-gate-DQlK0A4l.js +0 -1
  336. package/dist/gateway/static/root/assets/settings-page-C-LdINFj.js +0 -1
  337. package/dist/gateway/static/root/assets/setup-status-panel-HRG_lK4_.js +0 -1
  338. package/dist/gateway/static/root/assets/shares-settings-v_iLhxxa.js +0 -1
  339. package/dist/gateway/static/root/assets/skill-reload-api-S-bjtsXX.js +0 -1
  340. package/dist/gateway/static/root/assets/skills-page-BiNBfaX5.js +0 -2
  341. package/dist/gateway/static/root/assets/skills-page.utils-DlnGtvAH.js +0 -1
  342. package/dist/gateway/static/root/assets/system-settings-panel-Bv7GXFc6.js +0 -1
  343. package/dist/gateway/static/root/assets/task-detail-page-BhQcOpnx.js +0 -1
  344. package/dist/gateway/static/root/assets/user-context-page-PtcY7BoJ.js +0 -1
  345. package/dist/gateway/static/root/assets/voice-api-key-field-DnhJtC5l.js +0 -1
  346. package/dist/gateway/static/root/assets/work-discovery-page-C5Kwe_bc.js +0 -1
  347. package/dist/gateway/static/root/assets/workflows-page-Z_qzaohv.js +0 -11
  348. /package/dist/gateway/static/root/assets/{workflows-page-DLioOiRN.css → style-DLioOiRN.css} +0 -0
@@ -5,8 +5,8 @@ function marketplaceAdapter(config, provider) {
5
5
  if (provider && isRegisteredProvider(provider)) return getMarketplaceAdapterForProvider(provider);
6
6
  return getMarketplaceAdapter(config);
7
7
  }
8
- async function listMarketplaceCategories(config, provider) {
9
- return { items: await marketplaceAdapter(config, provider).listCategories(config) };
8
+ async function listMarketplaceCategories(config, provider, locale) {
9
+ return { items: await marketplaceAdapter(config, provider).listCategories(config, { locale }) };
10
10
  }
11
11
  async function listMarketplacePackages(config, params, provider) {
12
12
  return marketplaceAdapter(config, provider).listPackages(config, params);
@@ -106,12 +106,6 @@ export interface SkillSourceDescriptor {
106
106
  writable: boolean;
107
107
  }
108
108
  export type SkillOrigin = SkillSourceDescriptor;
109
- export interface SkillsInstallConfig {
110
- /** Prefer brew for package installation */
111
- preferBrew?: boolean;
112
- /** Node package manager preference */
113
- nodeManager?: 'pnpm' | 'npm' | 'yarn' | 'bun';
114
- }
115
109
  export interface SkillsLimitsConfig {
116
110
  /** Max number of immediate child directories to consider */
117
111
  maxCandidatesPerRoot?: number;
@@ -129,8 +123,6 @@ export interface SkillsConfig {
129
123
  allowBundled?: string[];
130
124
  /** Load configuration */
131
125
  load?: SkillsLoadConfig;
132
- /** Install configuration */
133
- install?: SkillsInstallConfig;
134
126
  /** Limits configuration */
135
127
  limits?: SkillsLimitsConfig;
136
128
  /** Per-skill configuration */
@@ -24,5 +24,6 @@ export interface ExecCommandUpdateDetails {
24
24
  export interface CreateExecCommandToolOptions {
25
25
  /** Env var names allowed through prepareSafeToolEnv even if they match secret heuristics. */
26
26
  getSkillPassthroughEnvVarNames?: () => string[];
27
+ prepareEnv?: (baseEnv: Record<string, string>, cwd: string) => Promise<Record<string, string>>;
27
28
  }
28
29
  export declare function createExecCommandTool(workspaceCwd: string, options?: CreateExecCommandToolOptions): AgentTool;
@@ -116,6 +116,7 @@ function createExecCommandTool(workspaceCwd, options) {
116
116
  const timeoutMs = Math.min(clampTimeoutMs(params.timeoutMs), policy.timeoutMs);
117
117
  const maxOutputChars = clampMaxOutputChars(params.maxOutputChars);
118
118
  const startTime = Date.now();
119
+ const runtimeEnv = options?.prepareEnv ? await options.prepareEnv(policy.sanitizedEnv, policy.effectiveCwd) : policy.sanitizedEnv;
119
120
  let stdout = "";
120
121
  let stderr = "";
121
122
  let aggregatedOutput = "";
@@ -126,7 +127,7 @@ function createExecCommandTool(workspaceCwd, options) {
126
127
  shell: true,
127
128
  cwd: policy.effectiveCwd,
128
129
  env: {
129
- ...policy.sanitizedEnv,
130
+ ...runtimeEnv,
130
131
  COLUMNS: "200"
131
132
  }
132
133
  });
@@ -99,6 +99,7 @@ export declare class AgentToolsFactory {
99
99
  /** Cached readiness probe — keyed by backend mode + extension host:port. */
100
100
  private browserReadinessCache;
101
101
  constructor(deps: ToolFactoryDeps);
102
+ private prepareRuntimeEnv;
102
103
  private browserReadinessKey;
103
104
  private checkBrowserReadinessCached;
104
105
  /** Invalidate the readiness cache (config hot-reload, settings-page save, etc.). */
@@ -1,3 +1,4 @@
1
+ import { init_paths_state, resolveStateDir } from "../../config/paths-state.js";
1
2
  import { createLogger } from "../../utils/logger/index.js";
2
3
  import { init_logger } from "../../utils/logger.js";
3
4
  import { isXopcDatabaseOpen } from "../../storage/sqlite/connection.js";
@@ -5,6 +6,7 @@ import { getSessionTaskPlan, setSessionTaskPlan } from "../../storage/sqlite/ses
5
6
  import "../../storage/sqlite/index.js";
6
7
  import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
7
8
  import { wrapToolsWithProtection } from "./executor.js";
9
+ import { buildRuntimeEnvironment } from "../../runtime-tools/environment.js";
8
10
  import { createDefaultExternalToolGatewayTools } from "../external-tools/index.js";
9
11
  import { createReadFileTool } from "./read.js";
10
12
  import { createWriteFileTool } from "./write.js";
@@ -56,6 +58,7 @@ import "../capabilities/index.js";
56
58
  //#region src/agent/tools/factory.ts
57
59
  init_agent_scope();
58
60
  init_logger();
61
+ init_paths_state();
59
62
  const log = createLogger("AgentToolsFactory");
60
63
  /** Channels where `clarify` can block for a user answer (web UI, Telegram, CLI readline). */
61
64
  const CLARIFY_SUPPORTED_CHANNELS = new Set([
@@ -72,6 +75,15 @@ var AgentToolsFactory = class {
72
75
  constructor(deps) {
73
76
  this.deps = deps;
74
77
  }
78
+ prepareRuntimeEnv = async (baseEnv) => {
79
+ const config = this.deps.getConfig?.();
80
+ if (!config) return baseEnv;
81
+ return (await buildRuntimeEnvironment({
82
+ stateDir: resolveStateDir(),
83
+ config: config.runtimeTools,
84
+ baseEnv
85
+ })).env;
86
+ };
75
87
  browserReadinessKey() {
76
88
  const cfg = this.deps.getConfig?.();
77
89
  const backend = resolveBrowserBackendFromConfig(cfg);
@@ -251,8 +263,11 @@ var AgentToolsFactory = class {
251
263
  listDir,
252
264
  grep,
253
265
  find,
254
- createExecCommandTool(workspace, { getSkillPassthroughEnvVarNames: this.deps.getSkillPassthroughEnvVarNames }),
255
- createManagedJobTool(workspace, () => this.deps.getCurrentContext()?.sessionKey, this.deps.getSkillPassthroughEnvVarNames),
266
+ createExecCommandTool(workspace, {
267
+ getSkillPassthroughEnvVarNames: this.deps.getSkillPassthroughEnvVarNames,
268
+ prepareEnv: this.prepareRuntimeEnv
269
+ }),
270
+ createManagedJobTool(workspace, () => this.deps.getCurrentContext()?.sessionKey, this.deps.getSkillPassthroughEnvVarNames, this.prepareRuntimeEnv),
256
271
  createWebSearchTool(() => this.deps.getConfig?.()),
257
272
  createWebFetchTool(() => this.deps.getConfig?.()),
258
273
  createWebExtractTool({ getConfig: () => this.deps.getConfig?.() }),
@@ -1,2 +1,2 @@
1
1
  import type { AgentTool } from '@earendil-works/pi-agent-core';
2
- export declare function createManagedJobTool(workspace: string, getSessionKey: () => string | undefined, getSkillPassthroughEnvVarNames?: () => string[]): AgentTool;
2
+ export declare function createManagedJobTool(workspace: string, getSessionKey: () => string | undefined, getSkillPassthroughEnvVarNames?: () => string[], prepareEnv?: (baseEnv: Record<string, string>, cwd: string) => Promise<Record<string, string>>): AgentTool;
@@ -126,7 +126,7 @@ function result(value) {
126
126
  details: {}
127
127
  };
128
128
  }
129
- function createManagedJobTool(workspace, getSessionKey, getSkillPassthroughEnvVarNames) {
129
+ function createManagedJobTool(workspace, getSessionKey, getSkillPassthroughEnvVarNames, prepareEnv) {
130
130
  return {
131
131
  name: "managed_job",
132
132
  label: "Managed Job",
@@ -149,8 +149,9 @@ function createManagedJobTool(workspace, getSessionKey, getSkillPassthroughEnvVa
149
149
  if (!policy.allowed) return result({ error: `Sandbox blocked command: ${policy.reason}` });
150
150
  const rawMax = Number(input.maxRuntimeMs ?? DEFAULT_MAX_RUNTIME_MS);
151
151
  const maxRuntimeMs = Math.min(MAX_RUNTIME_MS, Math.max(1e3, Number.isFinite(rawMax) ? rawMax : DEFAULT_MAX_RUNTIME_MS));
152
+ const runtimeEnv = prepareEnv ? await prepareEnv(policy.sanitizedEnv, policy.effectiveCwd) : policy.sanitizedEnv;
152
153
  return result(registry().start(owner, command, policy.effectiveCwd, {
153
- ...policy.sanitizedEnv,
154
+ ...runtimeEnv,
154
155
  COLUMNS: "200"
155
156
  }, maxRuntimeMs));
156
157
  }
@@ -22,7 +22,7 @@ export interface SkillInstallToolResult {
22
22
  target?: SkillInstallTarget;
23
23
  }
24
24
  export interface MarketplaceSkillInstallToolOptions {
25
- provider: 'store' | 'clawhub';
25
+ provider: 'store' | 'skillhub' | 'clawhub';
26
26
  name: string;
27
27
  version?: string;
28
28
  target?: SkillInstallTarget;
@@ -32,7 +32,7 @@ export interface MarketplaceSkillInstallToolOptions {
32
32
  export interface MarketplaceSkillInstallToolResult {
33
33
  skillId: string;
34
34
  path: string;
35
- provider: 'store' | 'clawhub';
35
+ provider: 'store' | 'skillhub' | 'clawhub';
36
36
  name: string;
37
37
  version?: string;
38
38
  target?: SkillInstallTarget;
@@ -3,7 +3,11 @@ import { Type } from "@sinclair/typebox";
3
3
  //#region src/agent/tools/skill-install-tool.ts
4
4
  const SkillInstallSchema = Type.Object({
5
5
  source: Type.Optional(Type.String({ description: "Explicit source install: Git URL, GitHub repository URL, https .zip/.tar.gz URL, file:// URL, or local archive/path." })),
6
- provider: Type.Optional(Type.Union([Type.Literal("store"), Type.Literal("clawhub")], { description: "Marketplace provider. Use with name; copy it from skills_marketplace_search." })),
6
+ provider: Type.Optional(Type.Union([
7
+ Type.Literal("store"),
8
+ Type.Literal("skillhub"),
9
+ Type.Literal("clawhub")
10
+ ], { description: "Marketplace provider. Use with name; copy it from skills_marketplace_search." })),
7
11
  name: Type.Optional(Type.String({ description: "Marketplace package name or install.reference. For ClawHub prefer owner/slug to disambiguate publishers." })),
8
12
  version: Type.Optional(Type.String({ description: "Optional marketplace package version." })),
9
13
  ref: Type.Optional(Type.String({ description: "Optional Git branch/tag/ref." })),
@@ -20,7 +24,7 @@ function createSkillInstallTool(deps) {
20
24
  return {
21
25
  name: "skill_install",
22
26
  label: "Install skill",
23
- description: "Install an xopc skill from a Store/ClawHub marketplace result or an explicit source. Use only when the user clearly asks to install or update a skill; never treat search or a pasted URL as installation consent.",
27
+ description: "Install an xopc skill from a Store/SkillHub/ClawHub marketplace result or an explicit source. Use only when the user clearly asks to install or update a skill; never treat search or a pasted URL as installation consent.",
24
28
  parameters: SkillInstallSchema,
25
29
  async execute(_toolCallId, params) {
26
30
  const provider = clean(params.provider);
@@ -28,10 +32,10 @@ function createSkillInstallTool(deps) {
28
32
  const target = isSkillInstallTarget(params.target) ? params.target : "global";
29
33
  const sessionKey = deps.getSessionKey?.();
30
34
  if (provider || name) {
31
- if (provider !== "store" && provider !== "clawhub") return {
35
+ if (provider !== "store" && provider !== "skillhub" && provider !== "clawhub") return {
32
36
  content: [{
33
37
  type: "text",
34
- text: "Marketplace installs require provider: store or clawhub."
38
+ text: "Marketplace installs require provider: store, skillhub, or clawhub."
35
39
  }],
36
40
  details: { errorCode: "missing_provider" }
37
41
  };
@@ -8,11 +8,12 @@ const SkillsMarketplaceSearchSchema = Type.Object({
8
8
  }),
9
9
  sources: Type.Optional(Type.Array(Type.Union([
10
10
  Type.Literal("store"),
11
+ Type.Literal("skillhub"),
11
12
  Type.Literal("clawhub"),
12
13
  Type.Literal("skills-sh")
13
14
  ]), {
14
15
  minItems: 1,
15
- maxItems: 3,
16
+ maxItems: 4,
16
17
  uniqueItems: true
17
18
  })),
18
19
  limit: Type.Optional(Type.Integer({
@@ -34,7 +35,7 @@ function createSkillsMarketplaceSearchTool(deps) {
34
35
  return {
35
36
  name: "skills_marketplace_search",
36
37
  label: "🔎 Find skills",
37
- description: "Search the XOPC Store, native ClawHub catalog, and skills.sh results federated by ClawHub. Returns normalized provenance, install references, adoption metrics, partial-source errors, and a heuristic value score. Read-only; never installs a skill.",
38
+ description: "Search the XOPC Store, SkillHub, native ClawHub catalog, and skills.sh results federated by ClawHub. Returns normalized provenance, install references, adoption metrics, partial-source errors, and a heuristic value score. Read-only; never installs a skill.",
38
39
  parameters: SkillsMarketplaceSearchSchema,
39
40
  mutatesWorkspace: false,
40
41
  mutationScope: "none",
@@ -8,6 +8,7 @@ export type WorkflowToolInput = {
8
8
  name?: string;
9
9
  args?: unknown;
10
10
  goal?: string;
11
+ intent?: string;
11
12
  taskRunId?: string;
12
13
  };
13
14
  export interface WorkflowToolDeps {
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { extractProfileAgentId } from "../../config/agent-profile.js";
3
+ import { extractProfileAgentId, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
4
4
  import { appendProductDeliveryText } from "../../../packages/gateway-contract/src/product-delivery.js";
5
5
  import { Type } from "@sinclair/typebox";
6
6
  //#region src/agent/tools/workflow-tool.ts
@@ -13,6 +13,7 @@ const WorkflowToolSchema = Type.Object({
13
13
  name: Type.Optional(Type.String({ description: "Name of a saved visual workflow to run." })),
14
14
  args: Type.Optional(Type.Any({ description: "Optional JSON value passed as workflow input payload." })),
15
15
  goal: Type.Optional(Type.String({ description: "Optional goal or task description for this workflow run (defaults to user intent in chat)." })),
16
+ intent: Type.Optional(Type.String({ description: "Optional short intent used to select a suggested workflow." })),
16
17
  taskRunId: Type.Optional(Type.String({ description: "Optional TaskRun id. When set, the workflow executes and finalizes that run." }))
17
18
  });
18
19
  function createWorkflowTool(deps) {
@@ -35,7 +36,7 @@ function createWorkflowTool(deps) {
35
36
  };
36
37
  let definitionId;
37
38
  try {
38
- definitionId = resolveDefinitionId(params, deps.catalog);
39
+ definitionId = resolveDefinitionId(params, deps.catalog, deps.getConfig(), deps.getCurrentSessionKey?.());
39
40
  } catch (e) {
40
41
  const message = e instanceof Error ? e.message : String(e);
41
42
  return {
@@ -136,13 +137,22 @@ function createWorkflowTool(deps) {
136
137
  }
137
138
  };
138
139
  }
139
- function resolveDefinitionId(params, catalog) {
140
+ function resolveDefinitionId(params, catalog, config, sessionKey) {
140
141
  const name = params.name?.trim();
141
142
  if (name) {
142
143
  catalog.load(name);
143
144
  return name;
144
145
  }
145
- throw new Error("`name` is required. Create workflows in the visual workflow studio.");
146
+ const configuredDefault = config ? (() => {
147
+ const policy = resolveEffectiveAgentProfileForSession(config, sessionKey).manifest.workflows;
148
+ const intent = params.intent?.trim().toLowerCase();
149
+ return (intent ? policy.suggested?.find((entry) => entry.intent.toLowerCase() === intent)?.workflow : void 0) ?? policy.default;
150
+ })() : void 0;
151
+ if (configuredDefault) {
152
+ catalog.load(configuredDefault);
153
+ return configuredDefault;
154
+ }
155
+ throw new Error("`name` is required because this agent has no default workflow.");
146
156
  }
147
157
  //#endregion
148
158
  export { createWorkflowTool };
@@ -250,6 +250,11 @@ export declare const RuntimePolicySchema: z.ZodOptional<z.ZodObject<{
250
250
  maxTurns: z.ZodOptional<z.ZodNumber>;
251
251
  timeoutMs: z.ZodOptional<z.ZodNumber>;
252
252
  maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
253
+ promptCacheRetention: z.ZodOptional<z.ZodEnum<{
254
+ none: "none";
255
+ short: "short";
256
+ long: "long";
257
+ }>>;
253
258
  }, z.core.$strict>>;
254
259
  export declare const PromptPolicySchema: z.ZodOptional<z.ZodObject<{
255
260
  customInstructions: z.ZodOptional<z.ZodString>;
@@ -394,6 +399,11 @@ export declare const AgentManifestSchema: z.ZodObject<{
394
399
  maxTurns: z.ZodOptional<z.ZodNumber>;
395
400
  timeoutMs: z.ZodOptional<z.ZodNumber>;
396
401
  maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
402
+ promptCacheRetention: z.ZodOptional<z.ZodEnum<{
403
+ none: "none";
404
+ short: "short";
405
+ long: "long";
406
+ }>>;
397
407
  }, z.core.$strict>>;
398
408
  prompt: z.ZodOptional<z.ZodObject<{
399
409
  customInstructions: z.ZodOptional<z.ZodString>;
@@ -526,6 +536,11 @@ export declare const AgentConfigEntrySchema: z.ZodObject<{
526
536
  maxTurns: z.ZodOptional<z.ZodNumber>;
527
537
  timeoutMs: z.ZodOptional<z.ZodNumber>;
528
538
  maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
539
+ promptCacheRetention: z.ZodOptional<z.ZodEnum<{
540
+ none: "none";
541
+ short: "short";
542
+ long: "long";
543
+ }>>;
529
544
  }, z.core.$strict>>;
530
545
  prompt: z.ZodOptional<z.ZodObject<{
531
546
  customInstructions: z.ZodOptional<z.ZodString>;
@@ -644,6 +659,11 @@ export declare const CapabilityPresetSchema: z.ZodObject<{
644
659
  maxTurns: z.ZodOptional<z.ZodNumber>;
645
660
  timeoutMs: z.ZodOptional<z.ZodNumber>;
646
661
  maxToolFailuresPerTurn: z.ZodOptional<z.ZodNumber>;
662
+ promptCacheRetention: z.ZodOptional<z.ZodEnum<{
663
+ none: "none";
664
+ short: "short";
665
+ long: "long";
666
+ }>>;
647
667
  }, z.core.$strict>>;
648
668
  locks: z.ZodOptional<z.ZodArray<z.ZodString>>;
649
669
  }, z.core.$strict>;
@@ -156,7 +156,12 @@ var init_schema = __esmMin((() => {
156
156
  RuntimePolicySchema = z.object({
157
157
  maxTurns: z.number().int().positive().optional(),
158
158
  timeoutMs: z.number().int().positive().optional(),
159
- maxToolFailuresPerTurn: z.number().int().positive().optional()
159
+ maxToolFailuresPerTurn: z.number().int().positive().optional(),
160
+ promptCacheRetention: z.enum([
161
+ "none",
162
+ "short",
163
+ "long"
164
+ ]).optional()
160
165
  }).strict().optional();
161
166
  PromptPolicySchema = z.object({ customInstructions: z.string().optional() }).strict().optional();
162
167
  AgentIdentitySchema = z.object({
@@ -32,8 +32,164 @@ async function tokenRequest(body, signal) {
32
32
  signal: signal ?? AbortSignal.timeout(3e4)
33
33
  });
34
34
  }
35
- function callbackHtml(title, message) {
36
- return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${title}</title></head><body><main><h1>${title}</h1><p>${message}</p><p>You can close this window and return to XOPC.</p></main></body></html>`;
35
+ function escapeHtml(value) {
36
+ return value.replace(/[&<>"']/g, (character) => ({
37
+ "&": "&amp;",
38
+ "<": "&lt;",
39
+ ">": "&gt;",
40
+ "\"": "&quot;",
41
+ "'": "&#39;"
42
+ })[character] ?? character);
43
+ }
44
+ function callbackHtml(title, message, tone) {
45
+ const safeTitle = escapeHtml(title);
46
+ const safeMessage = escapeHtml(message);
47
+ return `<!doctype html>
48
+ <html lang="en">
49
+ <head>
50
+ <meta charset="utf-8" />
51
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
52
+ <meta name="referrer" content="no-referrer" />
53
+ <title>${safeTitle} · XOPC</title>
54
+ <style>
55
+ :root {
56
+ color-scheme: light dark;
57
+ --accent: #3a6bff;
58
+ --accent-soft: #eef3ff;
59
+ --canvas: #f7f8fb;
60
+ --panel: rgba(255, 255, 255, 0.88);
61
+ --text: #111111;
62
+ --muted: #666666;
63
+ --edge: rgba(17, 17, 17, 0.08);
64
+ --status: ${tone === "success" ? "#17864b" : "#d64242"};
65
+ --status-soft: ${tone === "success" ? "#e7fbf1" : "#fff0f0"};
66
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
67
+ }
68
+ * { box-sizing: border-box; }
69
+ html, body { min-height: 100%; }
70
+ body {
71
+ margin: 0;
72
+ min-height: 100vh;
73
+ display: grid;
74
+ place-items: center;
75
+ overflow: hidden;
76
+ padding: 24px;
77
+ background:
78
+ radial-gradient(circle at 18% 18%, rgba(46, 216, 255, 0.16), transparent 34rem),
79
+ radial-gradient(circle at 82% 78%, rgba(91, 87, 255, 0.14), transparent 32rem),
80
+ var(--canvas);
81
+ color: var(--text);
82
+ -webkit-font-smoothing: antialiased;
83
+ }
84
+ .glow {
85
+ position: fixed;
86
+ width: 280px;
87
+ height: 280px;
88
+ border-radius: 999px;
89
+ background: rgba(58, 107, 255, 0.12);
90
+ filter: blur(72px);
91
+ pointer-events: none;
92
+ }
93
+ .glow-one { top: -120px; right: -80px; }
94
+ .glow-two { bottom: -150px; left: -80px; }
95
+ .card {
96
+ position: relative;
97
+ width: min(100%, 480px);
98
+ padding: 34px;
99
+ overflow: hidden;
100
+ border: 1px solid var(--edge);
101
+ border-radius: 24px;
102
+ background: var(--panel);
103
+ box-shadow: 0 24px 80px rgba(31, 41, 78, 0.12), 0 2px 12px rgba(17, 17, 17, 0.05);
104
+ backdrop-filter: blur(20px);
105
+ -webkit-backdrop-filter: blur(20px);
106
+ }
107
+ .brand { display: flex; align-items: center; gap: 11px; margin-bottom: 34px; font-weight: 700; letter-spacing: -0.02em; }
108
+ .logo { width: 38px; height: 38px; filter: drop-shadow(0 8px 14px rgba(58, 107, 255, 0.22)); }
109
+ .status {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ gap: 7px;
113
+ margin-bottom: 18px;
114
+ border-radius: 999px;
115
+ padding: 7px 11px 7px 8px;
116
+ background: var(--status-soft);
117
+ color: var(--status);
118
+ font-size: 12px;
119
+ font-weight: 650;
120
+ letter-spacing: 0.01em;
121
+ }
122
+ .status-icon { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
123
+ h1 { margin: 0; font-size: clamp(26px, 6vw, 32px); line-height: 1.15; letter-spacing: -0.035em; }
124
+ .message { margin: 14px 0 0; color: var(--muted); font-size: 15px; line-height: 1.65; }
125
+ .next-step {
126
+ display: flex;
127
+ align-items: flex-start;
128
+ gap: 11px;
129
+ margin-top: 28px;
130
+ padding-top: 22px;
131
+ border-top: 1px solid var(--edge);
132
+ color: var(--muted);
133
+ font-size: 13px;
134
+ line-height: 1.55;
135
+ }
136
+ .window-icon { flex: none; width: 18px; height: 18px; margin-top: 1px; color: var(--accent); fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
137
+ @media (prefers-color-scheme: dark) {
138
+ :root {
139
+ --accent-soft: rgba(58, 107, 255, 0.16);
140
+ --canvas: #090a0d;
141
+ --panel: rgba(20, 22, 28, 0.9);
142
+ --text: #f7f8fb;
143
+ --muted: #a6a9b2;
144
+ --edge: rgba(255, 255, 255, 0.09);
145
+ --status: ${tone === "success" ? "#63d69a" : "#ff8484"};
146
+ --status-soft: ${tone === "success" ? "rgba(44, 203, 127, 0.12)" : "rgba(255, 93, 93, 0.12)"};
147
+ }
148
+ body {
149
+ background:
150
+ radial-gradient(circle at 18% 18%, rgba(46, 216, 255, 0.09), transparent 34rem),
151
+ radial-gradient(circle at 82% 78%, rgba(91, 87, 255, 0.12), transparent 32rem),
152
+ var(--canvas);
153
+ }
154
+ .card { box-shadow: 0 26px 90px rgba(0, 0, 0, 0.42); }
155
+ }
156
+ @media (max-width: 520px) {
157
+ body { padding: 16px; }
158
+ .card { padding: 26px 22px; border-radius: 20px; }
159
+ .brand { margin-bottom: 28px; }
160
+ }
161
+ @media (prefers-reduced-motion: no-preference) {
162
+ .card { animation: enter 420ms cubic-bezier(.2, .75, .25, 1) both; }
163
+ .status-icon { animation: settle 520ms 160ms cubic-bezier(.2, .8, .25, 1.25) both; }
164
+ @keyframes enter { from { opacity: 0; transform: translateY(10px) scale(.985); } }
165
+ @keyframes settle { from { opacity: 0; transform: scale(.65); } }
166
+ }
167
+ </style>
168
+ </head>
169
+ <body>
170
+ <div class="glow glow-one"></div>
171
+ <div class="glow glow-two"></div>
172
+ <main class="card">
173
+ <div class="brand">
174
+ <svg class="logo" viewBox="0 0 72 72" aria-hidden="true">
175
+ <rect width="72" height="72" rx="20" fill="#3a6bff" />
176
+ <path d="M22 22l28 28M50 22 22 50" stroke="#fff" stroke-width="8" stroke-linecap="round" />
177
+ </svg>
178
+ <span>XOPC</span>
179
+ </div>
180
+ <div class="status">
181
+ <svg class="status-icon" viewBox="0 0 24 24" aria-hidden="true">${tone === "success" ? "<path d=\"m7.5 12 3 3 6-7\" />" : "<path d=\"M12 8v5m0 3.5v.01\" />"}</svg>
182
+ <span>${tone === "success" ? "Authorization successful" : "Authorization needs attention"}</span>
183
+ </div>
184
+ <h1>${safeTitle}</h1>
185
+ <p class="message">${safeMessage}</p>
186
+ <div class="next-step">
187
+ <svg class="window-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M3 9h18" /></svg>
188
+ <span>You can safely close this window and return to XOPC.</span>
189
+ </div>
190
+ </main>
191
+ </body>
192
+ </html>`;
37
193
  }
38
194
  async function loginWithBrowser(callbacks) {
39
195
  if (callbacks.signal?.aborted) throw callbacks.signal.reason instanceof Error ? callbacks.signal.reason : /* @__PURE__ */ new Error("XOPC OAuth login cancelled");
@@ -49,7 +205,7 @@ async function loginWithBrowser(callbacks) {
49
205
  const url = new URL(request.url ?? "", "http://127.0.0.1");
50
206
  if (url.pathname !== CALLBACK_PATH) {
51
207
  response.statusCode = 404;
52
- response.end(callbackHtml("Authorization callback not found", "This is not a valid XOPC OAuth callback URL."));
208
+ response.end(callbackHtml("Authorization callback not found", "This is not a valid XOPC OAuth callback URL.", "error"));
53
209
  return;
54
210
  }
55
211
  const returnedState = url.searchParams.get("state");
@@ -58,24 +214,24 @@ async function loginWithBrowser(callbacks) {
58
214
  if (returnedState !== state) {
59
215
  const error = /* @__PURE__ */ new Error("XOPC OAuth state mismatch");
60
216
  response.statusCode = 400;
61
- response.end(callbackHtml("Authorization failed", error.message));
217
+ response.end(callbackHtml("Authorization failed", error.message, "error"));
62
218
  settle?.({ error });
63
219
  return;
64
220
  }
65
221
  if (oauthError || !code) {
66
222
  const error = /* @__PURE__ */ new Error(oauthError === "access_denied" ? "XOPC OAuth authorization was denied" : "XOPC OAuth callback did not include an authorization code");
67
223
  response.statusCode = 400;
68
- response.end(callbackHtml("Authorization failed", error.message));
224
+ response.end(callbackHtml("Authorization failed", error.message, "error"));
69
225
  settle?.({ error });
70
226
  return;
71
227
  }
72
228
  response.statusCode = 200;
73
- response.end(callbackHtml("Authorization complete", "XOPC received the authorization callback successfully."));
229
+ response.end(callbackHtml("Authorization complete", "XOPC received the authorization callback successfully.", "success"));
74
230
  settle?.({ code });
75
231
  } catch {
76
232
  const error = /* @__PURE__ */ new Error("XOPC OAuth callback could not be processed");
77
233
  response.statusCode = 500;
78
- response.end(callbackHtml("Authorization failed", error.message));
234
+ response.end(callbackHtml("Authorization failed", error.message, "error"));
79
235
  settle?.({ error });
80
236
  }
81
237
  });
@@ -11,9 +11,9 @@ import { createReadStream, createWriteStream } from "node:fs";
11
11
  import { spawn } from "node:child_process";
12
12
  import { createHash } from "node:crypto";
13
13
  import { mkdir, mkdtemp, rm, stat } from "node:fs/promises";
14
- import { Readable, Transform } from "node:stream";
15
14
  import AdmZip from "adm-zip";
16
15
  import { pipeline } from "node:stream/promises";
16
+ import { Readable, Transform } from "node:stream";
17
17
  //#region src/browser/providers/cloakbrowser.ts
18
18
  /**
19
19
  * CloakBrowser provider — anti-fingerprint Chromium with stealth capabilities.
@@ -15,6 +15,7 @@ const REGISTRY_COMMAND_MODULES = {
15
15
  project: () => import("./commands/project.js"),
16
16
  config: () => import("./commands/config.js"),
17
17
  doctor: () => import("./commands/doctor/index.js"),
18
+ runtime: () => import("./commands/runtime.js"),
18
19
  image: () => import("./commands/image.js"),
19
20
  channels: () => import("./commands/channels.js"),
20
21
  models: () => import("./commands/models.js"),
@@ -79,6 +79,10 @@ const ROOT_HELP_COMMANDS = [
79
79
  name: "doctor [options]",
80
80
  description: "Check xopc installation health and diagnose common issues"
81
81
  },
82
+ {
83
+ name: "runtime",
84
+ description: "Manage Node.js and Python tool runtimes used by agents"
85
+ },
82
86
  {
83
87
  name: "update [options]",
84
88
  description: "Check for and install xopc updates"
@@ -7,21 +7,21 @@ async function checkNodeVersion(_ctx) {
7
7
  const major = parseNodeMajorVersion();
8
8
  if (major === 0) return {
9
9
  id: "node-version",
10
- label: "Node.js",
10
+ label: "Host Node.js",
11
11
  status: "warn",
12
12
  message: "Could not parse Node.js version.",
13
13
  hints: [`process.version=${process.version}`]
14
14
  };
15
15
  if (major < 22) return {
16
16
  id: "node-version",
17
- label: "Node.js",
17
+ label: "Host Node.js",
18
18
  status: "fail",
19
19
  message: `Node ${major} is below the required minimum (22).`,
20
20
  hints: ["Install Node.js 22+ from https://nodejs.org/"]
21
21
  };
22
22
  return {
23
23
  id: "node-version",
24
- label: "Node.js",
24
+ label: "Host Node.js",
25
25
  status: "pass",
26
26
  message: `Node.js ${process.version} meets the project requirement (>= 22).`,
27
27
  hints: []
@@ -0,0 +1,2 @@
1
+ import type { CheckResult, DoctorContext } from '../types.js';
2
+ export declare function checkToolRuntimes(ctx: DoctorContext): Promise<CheckResult>;
@@ -0,0 +1,36 @@
1
+ import { init_loader, loadConfig } from "../../../../config/loader.js";
2
+ import { ManagedRuntimeManager } from "../../../../runtime-tools/manager.js";
3
+ //#region src/cli/commands/doctor/checks/tool-runtimes.ts
4
+ init_loader();
5
+ async function checkToolRuntimes(ctx) {
6
+ const config = loadConfig(ctx.configPath);
7
+ const statuses = await new ManagedRuntimeManager({
8
+ stateDir: ctx.stateDir,
9
+ config: config.runtimeTools
10
+ }).statusAll();
11
+ const invalid = statuses.filter((status) => status.state === "corrupted" || status.state === "failed");
12
+ const absent = statuses.filter((status) => status.state === "absent");
13
+ if (invalid.length > 0) return {
14
+ id: "tool-runtimes",
15
+ label: "Agent tool runtimes",
16
+ status: "fail",
17
+ message: `${invalid.map((status) => status.runtime).join(", ")} runtime installation is invalid.`,
18
+ hints: invalid.map((status) => `Run xopc runtime repair ${status.runtime}`)
19
+ };
20
+ if (absent.length > 0) return {
21
+ id: "tool-runtimes",
22
+ label: "Agent tool runtimes",
23
+ status: "warn",
24
+ message: `${absent.map((status) => status.runtime).join(", ")} runtime is not installed.`,
25
+ hints: absent.map((status) => `Run xopc runtime install ${status.runtime}`)
26
+ };
27
+ return {
28
+ id: "tool-runtimes",
29
+ label: "Agent tool runtimes",
30
+ status: "pass",
31
+ message: statuses.map((status) => status.message).join("; "),
32
+ hints: []
33
+ };
34
+ }
35
+ //#endregion
36
+ export { checkToolRuntimes };