@xopcai/xopc 0.0.312 → 0.0.314

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 (497) hide show
  1. package/dist/browser-ext/dist/assets/{auth-C3yV1y_l.js → auth-DKo-NMUY.js} +18 -1
  2. package/dist/browser-ext/dist/background.js +68 -2
  3. package/dist/browser-ext/dist/sidepanel.html +1 -1
  4. package/dist/browser-ext/dist/sidepanel.js +1 -1
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  7. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  8. package/dist/extensions/telegram/src/plugin.js +2 -2
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BVIJMP8w.js → agent-avatar-dicebear-BFkjfurL.js} +1 -1
  11. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BdOZ6q8Z.js +1 -0
  12. package/dist/gateway/static/root/assets/{agents-D6g_SeWI.js → agents-CCcavsHq.js} +1 -1
  13. package/dist/gateway/static/root/assets/{api-_aHQA8bd.js → api-BYhRsTAc.js} +1 -1
  14. package/dist/gateway/static/root/assets/{app-link-CKueEVbT.js → app-link-nL8iPwEr.js} +1 -1
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-CLg_aXYG.js → app-management-settings-panel-B4kihr-A.js} +1 -1
  16. package/dist/gateway/static/root/assets/appearance-settings-N9sYmNOx.js +1 -0
  17. package/dist/gateway/static/root/assets/apps-page-BMcy10_s.js +1 -0
  18. package/dist/gateway/static/root/assets/{archive-plugin-CHO3heHX.js → archive-plugin-k_SuYWyV.js} +1 -1
  19. package/dist/gateway/static/root/assets/{attachment-load-BsmsBCI2.js → attachment-load-DRv5QWUK.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-page-CftigJlf.js → automations-page-CkJV3DN0.js} +1 -1
  21. package/dist/gateway/static/root/assets/automations-workspace-BEa2doeR.js +7 -0
  22. package/dist/gateway/static/root/assets/{binary-plugins-CRCLWBo2.js → binary-plugins-Dg3h3TA7.js} +1 -1
  23. package/dist/gateway/static/root/assets/{block-editor-D0LDiOTT.js → block-editor-DVhdHntT.js} +29 -29
  24. package/dist/gateway/static/root/assets/{browser-automation-inputs-C611KRBx.js → browser-automation-inputs-BMRYUW8_.js} +1 -1
  25. package/dist/gateway/static/root/assets/{browser-automations-page-Djyv3vy-.js → browser-automations-page-Byv6-FY2.js} +2 -2
  26. package/dist/gateway/static/root/assets/browser-settings-page-DRCHGFpO.js +3 -0
  27. package/dist/gateway/static/root/assets/capabilities-D0S3DuAD.js +1 -0
  28. package/dist/gateway/static/root/assets/capabilities-settings-panel-mxRP0gl0.js +8 -0
  29. package/dist/gateway/static/root/assets/channels-settings-DBt_6GsB.js +1 -0
  30. package/dist/gateway/static/root/assets/{chat-terminal-dock-CIsKqdET.js → chat-terminal-dock-D4AHa51o.js} +2 -2
  31. package/dist/gateway/static/root/assets/{computer-settings-page-C0YL9J7m.js → computer-settings-page-eXPe500D.js} +1 -1
  32. package/dist/gateway/static/root/assets/connector-service-page-BQTFlq_k.js +1 -0
  33. package/dist/gateway/static/root/assets/connectors-page-BKeBWwcI.js +2 -0
  34. package/dist/gateway/static/root/assets/conversation-identity-Cw0n9uzK.js +1 -0
  35. package/dist/gateway/static/root/assets/{date-picker-CDsfv8R0.js → date-picker-7MtovynY.js} +1 -1
  36. package/dist/gateway/static/root/assets/{dependency-picker-DvhPj3CZ.js → dependency-picker-Bj_xkXID.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-Cyg8XMpL.js → desktop-pet-CTmba9zH.js} +1 -1
  38. package/dist/gateway/static/root/assets/desktop-pet-settings-DNM_BlWN.js +1 -0
  39. package/dist/gateway/static/root/assets/device-pairing-wizard-C2XE0QhT.js +1 -0
  40. package/dist/gateway/static/root/assets/{extension-debug-page-D-AVJU3q.js → extension-debug-page-J_olaL7e.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-page-DrFoQ9xt.js → extension-page-pK5RvqN8.js} +1 -1
  42. package/dist/gateway/static/root/assets/{extension-settings-page-DxWjESC1.js → extension-settings-page-BwroEN08.js} +1 -1
  43. package/dist/gateway/static/root/assets/files-BK6enEvD.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-config-swr-DUDX42qY.js → gateway-config-swr-FuJTIg_a.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-settings-CLLDp23J.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-startup-retry-Cf8OxlvY.js → gateway-startup-retry-CKg_gu8_.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-B5Epb1PH.js +1 -0
  48. package/dist/gateway/static/root/assets/{image-generation-api-D2YorS--.js → image-generation-api-Bo6NZ7zb.js} +1 -1
  49. package/dist/gateway/static/root/assets/{imports-page-BKucJlXI.js → imports-page-C8-hX8gS.js} +1 -1
  50. package/dist/gateway/static/root/assets/index-14F1yGJI.js +89 -0
  51. package/dist/gateway/static/root/assets/index-cB7rWIDY.css +1 -0
  52. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BxLXD-yU.js → keyboard-shortcuts-settings-BkBEjUZD.js} +1 -1
  53. package/dist/gateway/static/root/assets/local-app-workbench-page-6jC3vQpY.js +2 -0
  54. package/dist/gateway/static/root/assets/{local-apps-page-BAsQJQKJ.js → local-apps-page-CrbKIixo.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-DA0Z5jM_.js → locale-store-CvGwNbml.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-DBHlZts9.js +2 -0
  57. package/dist/gateway/static/root/assets/management-settings-DsUWLu5m.js +1 -0
  58. package/dist/gateway/static/root/assets/{markdown-view-DYGPxPee.js → markdown-view-nXo5nrsv.js} +1 -1
  59. package/dist/gateway/static/root/assets/{media-plugins-CQtQzLyg.js → media-plugins-upxXJ-4l.js} +1 -1
  60. package/dist/gateway/static/root/assets/messages-B_AwRroN.js +3 -0
  61. package/dist/gateway/static/root/assets/note-detail-panel-0Q9TOtJG.js +5 -0
  62. package/dist/gateway/static/root/assets/notes-page-D0NmcwNw.js +8 -0
  63. package/dist/gateway/static/root/assets/page-context-capture-button-DUyA-K4L.js +1 -0
  64. package/dist/gateway/static/root/assets/{page-tabs-B6DjkyMM.js → page-tabs-Cl-NFPNr.js} +1 -1
  65. package/dist/gateway/static/root/assets/{preview-open-alternatives-Dn57uLhr.js → preview-open-alternatives-DX81PwJ3.js} +1 -1
  66. package/dist/gateway/static/root/assets/product-delivery-chCjIpvu.js +1 -0
  67. package/dist/gateway/static/root/assets/{product-open-page-H2YMk8TY.js → product-open-page-CrfIGwm8.js} +1 -1
  68. package/dist/gateway/static/root/assets/project-detail-page-BVfVrYmn.js +1 -0
  69. package/dist/gateway/static/root/assets/projects-page-nM9a9XNS.js +1 -0
  70. package/dist/gateway/static/root/assets/{registry-api-C0DCx3wv.js → registry-api-CHxgohY0.js} +1 -1
  71. package/dist/gateway/static/root/assets/remote-access-hub-C8b_k88G.js +1 -0
  72. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-D3dLOW04.js +5 -0
  73. package/dist/gateway/static/root/assets/scenes-page-DEowreZV.js +2 -0
  74. package/dist/gateway/static/root/assets/{schema-form-CblI9WUA.js → schema-form-ZxuIvD2_.js} +1 -1
  75. package/dist/gateway/static/root/assets/schemas-88fK3zzl.js +64 -0
  76. package/dist/gateway/static/root/assets/sessions-page-B_nPhera.js +1 -0
  77. package/dist/gateway/static/root/assets/settings-advanced-gate-BqhIOuus.js +1 -0
  78. package/dist/gateway/static/root/assets/{settings-form-section-BAaVyxJH.js → settings-form-section-TZRfg4yo.js} +1 -1
  79. package/dist/gateway/static/root/assets/{settings-page-CKNPbm5q.js → settings-page-a8qcJpdZ.js} +1 -1
  80. package/dist/gateway/static/root/assets/{settings-page-layout-DqNCGKxQ.js → settings-page-layout-BfvlRT9q.js} +1 -1
  81. package/dist/gateway/static/root/assets/setup-status-panel-CRj5Ruqn.js +1 -0
  82. package/dist/gateway/static/root/assets/{share-preview-page-BzMfp_HM.js → share-preview-page-DCt1pTWB.js} +1 -1
  83. package/dist/gateway/static/root/assets/shares-settings-BNbXPk--.js +1 -0
  84. package/dist/gateway/static/root/assets/skill-reload-api-CNMCLbav.js +1 -0
  85. package/dist/gateway/static/root/assets/{skills-page-DIht92q6.js → skills-page-BIOcg44X.js} +1 -1
  86. package/dist/gateway/static/root/assets/{skills-page.utils-DLYRiEn3.js → skills-page.utils-CgZdzT4I.js} +1 -1
  87. package/dist/gateway/static/root/assets/{system-settings-panel-yYs4YgYk.js → system-settings-panel-_YaRncA6.js} +1 -1
  88. package/dist/gateway/static/root/assets/task-detail-page-CAcfAG-c.js +1 -0
  89. package/dist/gateway/static/root/assets/tasks-CDR_RVbQ.js +1 -0
  90. package/dist/gateway/static/root/assets/{tunnel-api-BasDYxvx.js → tunnel-api-uOupJOoS.js} +1 -1
  91. package/dist/gateway/static/root/assets/turn-outcome-D0SnyZ3Z.js +1 -0
  92. package/dist/gateway/static/root/assets/{use-autosave-CWAUHhcb.js → use-autosave-BezzHBLE.js} +1 -1
  93. package/dist/gateway/static/root/assets/user-model-page-BFFeneDq.js +2 -0
  94. package/dist/gateway/static/root/assets/{voice-api-key-field-Kc4UlxZs.js → voice-api-key-field-BmYifdwL.js} +1 -1
  95. package/dist/gateway/static/root/assets/{voice-config-api-DTyMdGOR.js → voice-config-api-D_5Q2_A3.js} +1 -1
  96. package/dist/gateway/static/root/assets/{work-discovery-overlay-BPC_c9dO.js → work-discovery-overlay-4DmyEckJ.js} +1 -1
  97. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DBTciOrq.js → workflow-run-setup-panel-DeZe8bTZ.js} +2 -2
  98. package/dist/gateway/static/root/assets/workflows-page-Sv4hEc6W.js +6 -0
  99. package/dist/gateway/static/root/index.html +16 -16
  100. package/dist/package.js +1 -1
  101. package/dist/packages/computer-control-contract/src/index.js +10 -1
  102. package/dist/packages/gateway-contract/src/app-context.js +55 -0
  103. package/dist/packages/gateway-contract/src/automations.js +16 -17
  104. package/dist/packages/gateway-contract/src/capabilities.js +1078 -0
  105. package/dist/packages/gateway-contract/src/extension-capabilities.js +26 -0
  106. package/dist/packages/gateway-contract/src/home.js +3 -3
  107. package/dist/packages/gateway-contract/src/index.js +8 -0
  108. package/dist/packages/gateway-contract/src/product-delivery.js +19 -4
  109. package/dist/packages/gateway-contract/src/scenes.js +199 -0
  110. package/dist/packages/gateway-contract/src/task-runs.js +8 -4
  111. package/dist/packages/gateway-contract/src/tasks.js +5 -4
  112. package/dist/packages/realtime-client/src/index.js +17 -4
  113. package/dist/src/agent/agent-manager.d.ts +1 -0
  114. package/dist/src/agent/agent-manager.js +1 -0
  115. package/dist/src/agent/child-agent-factory.d.ts +2 -0
  116. package/dist/src/agent/child-agent-factory.js +5 -0
  117. package/dist/src/agent/commands/approved-verification.d.ts +14 -0
  118. package/dist/src/agent/commands/approved-verification.js +48 -0
  119. package/dist/src/agent/context/execution-scope.js +2 -1
  120. package/dist/src/agent/context/project-context.js +2 -1
  121. package/dist/src/agent/external-tools/cliProvider.js +123 -75
  122. package/dist/src/agent/external-tools/composio-provider.d.ts +1 -1
  123. package/dist/src/agent/external-tools/composio-provider.js +70 -12
  124. package/dist/src/agent/external-tools/endpoint-provider.js +14 -1
  125. package/dist/src/agent/inbound/turn-dispatcher.d.ts +2 -0
  126. package/dist/src/agent/inbound/turn-dispatcher.js +2 -1
  127. package/dist/src/agent/memory/compaction-chunks.d.ts +6 -1
  128. package/dist/src/agent/memory/compaction-chunks.js +16 -3
  129. package/dist/src/agent/memory/compaction-ledger.d.ts +3 -1
  130. package/dist/src/agent/memory/compaction-ledger.js +31 -18
  131. package/dist/src/agent/memory/compaction-request.d.ts +2 -0
  132. package/dist/src/agent/memory/compaction-request.js +6 -1
  133. package/dist/src/agent/memory/compaction.d.ts +19 -1
  134. package/dist/src/agent/memory/compaction.js +112 -30
  135. package/dist/src/agent/service/process-direct-streaming.d.ts +3 -0
  136. package/dist/src/agent/service/process-direct-streaming.js +19 -10
  137. package/dist/src/agent/service.js +1 -0
  138. package/dist/src/agent/service.types.d.ts +1 -0
  139. package/dist/src/agent/skills/config.js +2 -0
  140. package/dist/src/agent/skills/format-skills-prompt.js +14 -1
  141. package/dist/src/agent/skills/index.js +16 -8
  142. package/dist/src/agent/skills/types.d.ts +1 -1
  143. package/dist/src/agent/source-context/app-context.d.ts +4 -0
  144. package/dist/src/agent/source-context/app-context.js +36 -0
  145. package/dist/src/agent/source-context/injector.js +1 -0
  146. package/dist/src/agent/source-context/types.d.ts +5 -1
  147. package/dist/src/agent/tasks/task-judge-service.js +2 -1
  148. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  149. package/dist/src/agent/tool-manuals/computer.js +1 -1
  150. package/dist/src/agent/tools/automation-tool.d.ts +12 -1
  151. package/dist/src/agent/tools/automation-tool.js +106 -32
  152. package/dist/src/agent/tools/factory.d.ts +1 -0
  153. package/dist/src/agent/tools/factory.js +6 -1
  154. package/dist/src/agent/tools/scoped-workspace-tools.d.ts +8 -0
  155. package/dist/src/agent/tools/scoped-workspace-tools.js +81 -0
  156. package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -3
  157. package/dist/src/agent/tools/xopc-use-tool.js +997 -908
  158. package/dist/src/agent/workflow/subagent-runner.js +1 -0
  159. package/dist/src/agent-config/index.js +2 -2
  160. package/dist/src/agent-config/schema.d.ts +5 -0
  161. package/dist/src/agent-config/schema.js +14 -10
  162. package/dist/src/automations/api/routes.js +244 -164
  163. package/dist/src/automations/capabilities/drafts.d.ts +4 -0
  164. package/dist/src/automations/capabilities/drafts.js +95 -0
  165. package/dist/src/automations/capabilities/read.d.ts +4 -0
  166. package/dist/src/automations/capabilities/read.js +119 -0
  167. package/dist/src/automations/capabilities/write.d.ts +349 -0
  168. package/dist/src/automations/capabilities/write.js +172 -0
  169. package/dist/src/automations/domain/index.js +2 -2
  170. package/dist/src/automations/domain/validation.d.ts +77 -77
  171. package/dist/src/automations/domain/validation.js +9 -6
  172. package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -2
  173. package/dist/src/automations/index.js +6 -6
  174. package/dist/src/automations/service/automation-service.d.ts +31 -0
  175. package/dist/src/automations/service/automation-service.js +213 -75
  176. package/dist/src/automations/service/index.js +2 -2
  177. package/dist/src/automations/storage/automation-repository.d.ts +2 -0
  178. package/dist/src/automations/storage/automation-repository.js +9 -1
  179. package/dist/src/automations/storage/automation-run-repository.d.ts +4 -1
  180. package/dist/src/automations/storage/automation-run-repository.js +16 -3
  181. package/dist/src/automations/storage/index.js +3 -3
  182. package/dist/src/browser/automations/schema.d.ts +1 -1
  183. package/dist/src/browser/automations/service.d.ts +1 -1
  184. package/dist/src/browser/observation/format.js +4 -0
  185. package/dist/src/capabilities/adapters/http.d.ts +4 -0
  186. package/dist/src/capabilities/adapters/http.js +44 -0
  187. package/dist/src/capabilities/readiness/from-config.js +11 -7
  188. package/dist/src/capabilities/runtime/app-context.d.ts +3 -0
  189. package/dist/src/capabilities/runtime/app-context.js +72 -0
  190. package/dist/src/capabilities/runtime/atomic-operations.d.ts +11 -0
  191. package/dist/src/capabilities/runtime/atomic-operations.js +34 -0
  192. package/dist/src/capabilities/runtime/dispatcher.d.ts +67 -0
  193. package/dist/src/capabilities/runtime/dispatcher.js +170 -0
  194. package/dist/src/capabilities/runtime/errors.d.ts +6 -0
  195. package/dist/src/capabilities/runtime/errors.js +11 -0
  196. package/dist/src/capabilities/runtime/external-operations.d.ts +16 -0
  197. package/dist/src/capabilities/runtime/external-operations.js +92 -0
  198. package/dist/src/capabilities/runtime/product.d.ts +12 -0
  199. package/dist/src/capabilities/runtime/product.js +69 -0
  200. package/dist/src/capabilities/runtime/settings.d.ts +3 -0
  201. package/dist/src/capabilities/runtime/settings.js +27 -0
  202. package/dist/src/channels/index.js +2 -2
  203. package/dist/src/channels/manager.js +1 -1
  204. package/dist/src/cli/cli-log-level-preset.d.ts +2 -0
  205. package/dist/src/cli/cli-log-level-preset.js +4 -0
  206. package/dist/src/cli/command-catalog.js +4 -0
  207. package/dist/src/cli/command-loaders.js +1 -0
  208. package/dist/src/cli/command-manifest.js +4 -0
  209. package/dist/src/cli/commands/channels.js +1 -1
  210. package/dist/src/cli/commands/connectors.js +1 -1
  211. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  212. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  213. package/dist/src/cli/commands/mcp.d.ts +1 -0
  214. package/dist/src/cli/commands/mcp.js +51 -0
  215. package/dist/src/cli/commands/models.js +1 -1
  216. package/dist/src/cli/commands/onboard.js +1 -1
  217. package/dist/src/cli/commands/project.js +1 -1
  218. package/dist/src/computer/broker.d.ts +0 -1
  219. package/dist/src/computer/broker.js +4 -6
  220. package/dist/src/computer/evaluation-harness.d.ts +45 -0
  221. package/dist/src/computer/evaluation-harness.js +108 -0
  222. package/dist/src/computer/model-adapter.d.ts +37 -2
  223. package/dist/src/computer/model-adapter.js +333 -42
  224. package/dist/src/computer/model-policy.d.ts +4 -1
  225. package/dist/src/computer/model-policy.js +11 -3
  226. package/dist/src/computer/release-gate.d.ts +22 -0
  227. package/dist/src/computer/release-gate.js +19 -0
  228. package/dist/src/computer/runtime.js +14 -10
  229. package/dist/src/computer/task-state.d.ts +1 -0
  230. package/dist/src/computer/task-state.js +1 -0
  231. package/dist/src/config/models-json.d.ts +14 -8
  232. package/dist/src/config/models-json.js +1 -1
  233. package/dist/src/config/schema.d.ts +4 -0
  234. package/dist/src/config/schema.js +3 -9
  235. package/dist/src/connectors/composio-sessions.d.ts +4 -2
  236. package/dist/src/connectors/composio-sessions.js +10 -9
  237. package/dist/src/connectors/composio.js +10 -8
  238. package/dist/src/discussions/action-tasks.js +2 -1
  239. package/dist/src/discussions/recording.js +1 -1
  240. package/dist/src/execution-environments/local-worktree-manager.d.ts +1 -0
  241. package/dist/src/execution-environments/local-worktree-manager.js +13 -2
  242. package/dist/src/extensions/activation-context.js +3 -3
  243. package/dist/src/extensions/api.js +1 -1
  244. package/dist/src/extensions/normalize-manifest.js +6 -1
  245. package/dist/src/extensions/sdk/index.js +1 -1
  246. package/dist/src/extensions/sdk/media.js +1 -1
  247. package/dist/src/extensions/types/manifest.d.ts +3 -0
  248. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  249. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  250. package/dist/src/gateway/hono/middleware/scopes.js +1 -1
  251. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +5 -2
  252. package/dist/src/gateway/hono/routes/capability-operations.d.ts +3 -0
  253. package/dist/src/gateway/hono/routes/capability-operations.js +52 -0
  254. package/dist/src/gateway/hono/routes/lazy-bundles.js +16 -0
  255. package/dist/src/gateway/hono/routes/local-app-capabilities.d.ts +4 -0
  256. package/dist/src/gateway/hono/routes/local-app-capabilities.js +41 -0
  257. package/dist/src/gateway/hono/routes/local-apps.js +41 -9
  258. package/dist/src/gateway/hono/routes/models.js +2 -2
  259. package/dist/src/gateway/hono/routes/notes.js +215 -146
  260. package/dist/src/gateway/hono/routes/projects.js +217 -374
  261. package/dist/src/gateway/hono/routes/scenes.js +188 -75
  262. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +60 -16
  263. package/dist/src/gateway/hono/routes/session-input-handler.js +43 -1
  264. package/dist/src/gateway/hono/routes/sessions.js +17 -0
  265. package/dist/src/gateway/hono/routes/status.js +1 -1
  266. package/dist/src/gateway/hono/routes/tasks.js +182 -326
  267. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
  268. package/dist/src/gateway/hono/routes/voice.js +4 -4
  269. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  270. package/dist/src/gateway/media-access.js +2 -1
  271. package/dist/src/gateway/mobile-privacy.js +2 -2
  272. package/dist/src/gateway/scenes/host.js +14 -3
  273. package/dist/src/gateway/scenes/mailContext.js +1 -1
  274. package/dist/src/gateway/scenes/slackThreadSource.d.ts +41 -0
  275. package/dist/src/gateway/scenes/slackThreadSource.js +168 -0
  276. package/dist/src/gateway/security/gateway-scopes.d.ts +1 -1
  277. package/dist/src/gateway/security/gateway-scopes.js +5 -0
  278. package/dist/src/gateway/service/app-context-access.d.ts +11 -0
  279. package/dist/src/gateway/service/app-context-access.js +70 -0
  280. package/dist/src/gateway/service/run-gateway-agent.js +11 -2
  281. package/dist/src/gateway/service/session-input-coordinator.js +54 -15
  282. package/dist/src/gateway/service/sessions-api.d.ts +1 -0
  283. package/dist/src/gateway/service/sessions-api.js +3 -0
  284. package/dist/src/gateway/service/task-conversation-query-service.d.ts +3 -1
  285. package/dist/src/gateway/service/task-conversation-query-service.js +32 -3
  286. package/dist/src/gateway/service.d.ts +3 -0
  287. package/dist/src/gateway/service.js +69 -15
  288. package/dist/src/gateway/session-context-summary.js +2 -1
  289. package/dist/src/{tasks/task-outbox-dispatcher.d.ts → infra/domain-outbox-dispatcher.d.ts} +2 -2
  290. package/dist/src/{tasks/task-outbox-dispatcher.js → infra/domain-outbox-dispatcher.js} +10 -9
  291. package/dist/src/infra/operation-context.d.ts +2 -0
  292. package/dist/src/infra/operation-context.js +16 -0
  293. package/dist/src/local-apps/capabilities/contracts.d.ts +2 -0
  294. package/dist/src/local-apps/capabilities/contracts.js +32 -0
  295. package/dist/src/local-apps/capabilities/read.d.ts +3 -0
  296. package/dist/src/local-apps/capabilities/read.js +48 -0
  297. package/dist/src/local-apps/capabilities/runtime.d.ts +16 -0
  298. package/dist/src/local-apps/capabilities/runtime.js +66 -0
  299. package/dist/src/local-apps/capabilities/write.d.ts +3 -0
  300. package/dist/src/local-apps/capabilities/write.js +35 -0
  301. package/dist/src/local-apps/release-lock.d.ts +2 -0
  302. package/dist/src/local-apps/release-lock.js +20 -0
  303. package/dist/src/local-apps/runtime-entry.d.ts +0 -2
  304. package/dist/src/local-apps/runtime-entry.js +1 -14
  305. package/dist/src/local-apps/scaffold.js +4 -1
  306. package/dist/src/local-apps/service.d.ts +24 -1
  307. package/dist/src/local-apps/service.js +186 -43
  308. package/dist/src/local-apps/store.js +0 -2
  309. package/dist/src/mcp/capability-server.d.ts +4 -0
  310. package/dist/src/mcp/capability-server.js +96 -0
  311. package/dist/src/mcp/channel-bridge.js +1 -1
  312. package/dist/src/mcp/gateway-http-client.d.ts +7 -0
  313. package/dist/src/mcp/gateway-http-client.js +27 -5
  314. package/dist/src/media-understanding/openai-compatible-audio.js +1 -1
  315. package/dist/src/notes/agent-context.js +1 -1
  316. package/dist/src/notes/capabilities/read.d.ts +3 -0
  317. package/dist/src/notes/capabilities/read.js +96 -0
  318. package/dist/src/notes/capabilities/write.d.ts +7 -0
  319. package/dist/src/notes/capabilities/write.js +152 -0
  320. package/dist/src/notes/index.js +1 -1
  321. package/dist/src/notes/service.d.ts +12 -4
  322. package/dist/src/notes/service.js +188 -175
  323. package/dist/src/notes/store.d.ts +14 -9
  324. package/dist/src/notes/store.js +81 -21
  325. package/dist/src/notifications/service.d.ts +1 -0
  326. package/dist/src/notifications/service.js +5 -0
  327. package/dist/src/platform/client.d.ts +1 -1
  328. package/dist/src/platform/contracts.d.ts +1 -1
  329. package/dist/src/projects/capabilities/read.d.ts +3 -0
  330. package/dist/src/projects/capabilities/read.js +81 -0
  331. package/dist/src/projects/capabilities/write.d.ts +9 -0
  332. package/dist/src/projects/capabilities/write.js +260 -0
  333. package/dist/src/projects/index.js +2 -2
  334. package/dist/src/projects/project-change-events.d.ts +2 -0
  335. package/dist/src/projects/project-change-events.js +18 -0
  336. package/dist/src/projects/project-service.d.ts +11 -0
  337. package/dist/src/projects/project-service.js +121 -42
  338. package/dist/src/projects/project-store.js +12 -2
  339. package/dist/src/projects/project-workspace-creation.d.ts +3 -0
  340. package/dist/src/projects/project-workspace-creation.js +45 -0
  341. package/dist/src/projects/workspace-project.js +6 -0
  342. package/dist/src/providers/model-catalog-types.d.ts +2 -1
  343. package/dist/src/providers/model-reference-auditor.js +4 -4
  344. package/dist/src/providers/model-supplements.js +13 -3
  345. package/dist/src/providers/presentation.js +3 -3
  346. package/dist/src/providers/xopc-cloud-model-source.js +4 -2
  347. package/dist/src/realtime/runtime.js +4 -0
  348. package/dist/src/scenes/capabilities/read.d.ts +3 -0
  349. package/dist/src/scenes/capabilities/read.js +187 -0
  350. package/dist/src/scenes/capabilities/write.d.ts +3 -0
  351. package/dist/src/scenes/capabilities/write.js +151 -0
  352. package/dist/src/scenes/contracts.d.ts +2 -105
  353. package/dist/src/scenes/contracts.js +3 -88
  354. package/dist/src/scenes/execution.d.ts +1 -1
  355. package/dist/src/scenes/httpServices.d.ts +2 -0
  356. package/dist/src/scenes/inbox.d.ts +1 -0
  357. package/dist/src/scenes/inbox.js +7 -7
  358. package/dist/src/scenes/preferences.d.ts +3 -24
  359. package/dist/src/scenes/preferences.js +8 -30
  360. package/dist/src/scenes/repository.d.ts +1 -0
  361. package/dist/src/scenes/repository.js +7 -3
  362. package/dist/src/scenes/resultNotifications.js +2 -2
  363. package/dist/src/scenes/schedule.d.ts +1 -8
  364. package/dist/src/scenes/schedule.js +3 -15
  365. package/dist/src/scenes/service.d.ts +6 -0
  366. package/dist/src/scenes/service.js +29 -25
  367. package/dist/src/scenes/taskFollowUp/agentExecutor.d.ts +36 -0
  368. package/dist/src/scenes/taskFollowUp/agentExecutor.js +149 -0
  369. package/dist/src/scenes/taskFollowUp/branchInventory.d.ts +38 -0
  370. package/dist/src/scenes/taskFollowUp/branchInventory.js +70 -0
  371. package/dist/src/scenes/taskFollowUp/contracts.d.ts +91 -0
  372. package/dist/src/scenes/taskFollowUp/contracts.js +100 -0
  373. package/dist/src/scenes/taskFollowUp/resources.d.ts +19 -0
  374. package/dist/src/scenes/taskFollowUp/resources.js +97 -0
  375. package/dist/src/scenes/taskFollowUp/service.d.ts +810 -0
  376. package/dist/src/scenes/taskFollowUp/service.js +710 -0
  377. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.d.ts +2 -0
  378. package/dist/src/scenes/taskFollowUp/workspaceFingerprint.js +46 -0
  379. package/dist/src/scenes/templates.d.ts +2 -2
  380. package/dist/src/scenes/templates.js +1 -1
  381. package/dist/src/session/session-find.d.ts +17 -0
  382. package/dist/src/session/session-find.js +56 -0
  383. package/dist/src/session/store.d.ts +4 -0
  384. package/dist/src/session/store.js +43 -7
  385. package/dist/src/share/note-share-revocation.d.ts +3 -0
  386. package/dist/src/share/note-share-revocation.js +26 -0
  387. package/dist/src/storage/sqlite/migrations/190_scene_development.sql +37 -0
  388. package/dist/src/storage/sqlite/migrations/191_scene_task_follow_up.sql +27 -0
  389. package/dist/src/storage/sqlite/migrations/192_capability_operations.sql +20 -0
  390. package/dist/src/storage/sqlite/migrations/193_note_file_cleanup.sql +8 -0
  391. package/dist/src/storage/sqlite/migrations/194_capability_external_outcomes.sql +11 -0
  392. package/dist/src/storage/sqlite/migrations/195_automation_deleted_revisions.sql +4 -0
  393. package/dist/src/storage/sqlite/migrations/196_automation_run_requests.sql +23 -0
  394. package/dist/src/storage/sqlite/migrations/197_note_deletion_cleanup.sql +8 -0
  395. package/dist/src/storage/sqlite/migrations/198_project_workspace_creation.sql +7 -0
  396. package/dist/src/storage/sqlite/migrations/199_scene_resource_events.sql +488 -0
  397. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  398. package/dist/src/storage/sqlite/migrations/runner.js +6 -3
  399. package/dist/src/storage/sqlite/schema.js +1 -1
  400. package/dist/src/storage/sqlite/transaction.d.ts +5 -0
  401. package/dist/src/storage/sqlite/transaction.js +34 -3
  402. package/dist/src/tasks/capabilities/management.d.ts +195 -0
  403. package/dist/src/tasks/capabilities/management.js +111 -0
  404. package/dist/src/tasks/capabilities/read.d.ts +2 -0
  405. package/dist/src/tasks/capabilities/read.js +141 -0
  406. package/dist/src/tasks/capabilities/relations.d.ts +204 -0
  407. package/dist/src/tasks/capabilities/relations.js +140 -0
  408. package/dist/src/tasks/capabilities/runs.d.ts +2 -0
  409. package/dist/src/tasks/capabilities/runs.js +89 -0
  410. package/dist/src/tasks/capabilities/write.d.ts +207 -0
  411. package/dist/src/tasks/capabilities/write.js +107 -0
  412. package/dist/src/tasks/home-query-service.js +3 -2
  413. package/dist/src/tasks/index.d.ts +0 -1
  414. package/dist/src/tasks/index.js +9 -9
  415. package/dist/src/tasks/project-operating-view-service.js +2 -1
  416. package/dist/src/tasks/task-application-service.d.ts +1 -0
  417. package/dist/src/tasks/task-application-service.js +3 -2
  418. package/dist/src/tasks/task-change-events.js +5 -3
  419. package/dist/src/tasks/task-context-assembler.js +2 -1
  420. package/dist/src/tasks/task-deletion-service.js +2 -1
  421. package/dist/src/tasks/task-dependency-service.js +2 -1
  422. package/dist/src/tasks/task-handoff-service.js +2 -1
  423. package/dist/src/tasks/task-read-model-projector.js +2 -1
  424. package/dist/src/tasks/task-repository.d.ts +12 -7
  425. package/dist/src/tasks/task-repository.js +175 -154
  426. package/dist/src/tasks/task-run-coordinator.js +2 -1
  427. package/dist/src/tasks/task-run-dispatcher.js +2 -1
  428. package/dist/src/tasks/task-run-repository.d.ts +1 -0
  429. package/dist/src/tasks/task-run-repository.js +29 -14
  430. package/dist/src/tasks/task-signal-service.js +2 -1
  431. package/dist/src/tui/backends/embedded-backend.js +1 -1
  432. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  433. package/dist/src/tui/tui-commands.js +1 -1
  434. package/dist/src/user-context/config.d.ts +13 -0
  435. package/dist/src/user-context/config.js +2 -0
  436. package/dist/src/voice/platform-catalog.d.ts +1 -1
  437. package/dist/src/voice/realtime/runtime.js +3 -3
  438. package/dist/src/voice/stt/providers/alibaba-transcription.js +1 -1
  439. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +1 -1
  440. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +1 -1
  441. package/dist/src/work-discovery/incremental-repository.js +1 -1
  442. package/dist/src/work-discovery/index.js +1 -1
  443. package/dist/src/work-discovery/repository.d.ts +1 -1
  444. package/dist/src/work-discovery/repository.js +3 -2
  445. package/dist/src/work-discovery/service.d.ts +4 -0
  446. package/dist/src/work-discovery/service.js +36 -11
  447. package/dist/src/workflows/context/workflow-context.js +3 -2
  448. package/dist/src/workflows/service/workflow-run-service.js +2 -1
  449. package/package.json +6 -2
  450. package/skills/THIRD_PARTY_NOTICES.md +2 -2
  451. package/skills/documents/xlsx/SKILL.md +5 -0
  452. package/skills/engineering/build-xopc-local-app/SKILL.md +2 -0
  453. package/skills/tools/find-skills/SKILL.md +3 -0
  454. package/dist/gateway/static/root/assets/activity-store-DVUTs1fk.js +0 -1
  455. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-K3hTmu9d.js +0 -1
  456. package/dist/gateway/static/root/assets/appearance-settings-CU52MfIT.js +0 -1
  457. package/dist/gateway/static/root/assets/apps-page-ZpA1-6ad.js +0 -1
  458. package/dist/gateway/static/root/assets/automations-workspace-IEAxKRME.js +0 -7
  459. package/dist/gateway/static/root/assets/browser-settings-page-CU4VWsmX.js +0 -3
  460. package/dist/gateway/static/root/assets/capabilities-settings-panel-C9XQk3HL.js +0 -8
  461. package/dist/gateway/static/root/assets/channels-settings-Bqlhjooi.js +0 -1
  462. package/dist/gateway/static/root/assets/connector-service-page-BmH17JnO.js +0 -1
  463. package/dist/gateway/static/root/assets/connectors-page-zkx8Q-e6.js +0 -2
  464. package/dist/gateway/static/root/assets/desktop-pet-settings-CE4GOlMM.js +0 -1
  465. package/dist/gateway/static/root/assets/device-pairing-wizard-CdKJqnnw.js +0 -1
  466. package/dist/gateway/static/root/assets/files-Be5viEFY.js +0 -1
  467. package/dist/gateway/static/root/assets/gateway-realtime-CGOW0-b4.js +0 -1
  468. package/dist/gateway/static/root/assets/gateway-realtime-store-D4um_sV7.js +0 -1
  469. package/dist/gateway/static/root/assets/gateway-settings-CgXp2zq4.js +0 -1
  470. package/dist/gateway/static/root/assets/home-page-D6Idk732.js +0 -1
  471. package/dist/gateway/static/root/assets/index-1wIKA-kM.css +0 -1
  472. package/dist/gateway/static/root/assets/index-PFQHPGgi.js +0 -79
  473. package/dist/gateway/static/root/assets/local-app-workbench-page-BmAqTRb4.js +0 -2
  474. package/dist/gateway/static/root/assets/logs-page-ZjVYXXyM.js +0 -2
  475. package/dist/gateway/static/root/assets/management-settings-CSTkYVOZ.js +0 -1
  476. package/dist/gateway/static/root/assets/messages-4BtQKYlM.js +0 -3
  477. package/dist/gateway/static/root/assets/note-detail-panel-DuXCt-MM.js +0 -5
  478. package/dist/gateway/static/root/assets/notes-page-BjOgBVq5.js +0 -8
  479. package/dist/gateway/static/root/assets/product-delivery-CrAI8ZEa.js +0 -1
  480. package/dist/gateway/static/root/assets/project-detail-page-0zi4-i9X.js +0 -1
  481. package/dist/gateway/static/root/assets/projects-page-B18OxmJj.js +0 -1
  482. package/dist/gateway/static/root/assets/remote-access-hub-z-DxbuaE.js +0 -1
  483. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-DGsBTbo6.js +0 -5
  484. package/dist/gateway/static/root/assets/scenes-page-Bgba03B_.js +0 -1
  485. package/dist/gateway/static/root/assets/schemas-BaskVM5g.js +0 -64
  486. package/dist/gateway/static/root/assets/sessions-page-B1t3bMsm.js +0 -1
  487. package/dist/gateway/static/root/assets/settings-advanced-gate-CBX0Ezhf.js +0 -1
  488. package/dist/gateway/static/root/assets/setup-status-panel-Bw71C2X3.js +0 -1
  489. package/dist/gateway/static/root/assets/shares-settings-BoVDQolc.js +0 -1
  490. package/dist/gateway/static/root/assets/skill-reload-api-DtTptpAt.js +0 -1
  491. package/dist/gateway/static/root/assets/task-detail-page-vgkiGo-D.js +0 -1
  492. package/dist/gateway/static/root/assets/theme-store-CegIlB8d.js +0 -1
  493. package/dist/gateway/static/root/assets/user-model-page-CAGafNfP.js +0 -2
  494. package/dist/gateway/static/root/assets/workflows-page-CSxHVs1p.js +0 -6
  495. package/skills/creative/algorithmic-art/SKILL.md +0 -44
  496. package/skills/creative/algorithmic-art/templates/generator-template.js +0 -27
  497. package/skills/creative/algorithmic-art/templates/viewer.html +0 -27
@@ -2,12 +2,36 @@ import { init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/t
2
2
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
3
3
  import "../storage/sqlite/index.js";
4
4
  import { changedFieldsFromPatch, emitActivity, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
5
+ import { ExecutionEnvironmentStore } from "../execution-environments/store.js";
5
6
  import { ProjectStore } from "./project-store.js";
6
- import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, canonicalWorkspacePath, ensureWorkspaceDirectory, inferProjectNameFromWorkspaceRoot, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, resolveWorkspaceProjectRoot, workspaceDirectoryExists } from "./workspace-project.js";
7
+ import { enqueueProjectChanged } from "./project-change-events.js";
8
+ import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError, canonicalWorkspacePath, inferProjectNameFromWorkspaceRoot, isPathSameOrInsideWorkspace, isSafeAutoCreateWorkspaceRoot, resolveWorkspaceProjectRoot, workspaceDirectoryExists } from "./workspace-project.js";
9
+ import { drainProjectWorkspaceCreation, queueProjectWorkspaceCreation } from "./project-workspace-creation.js";
10
+ import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
11
+ import { publishAutomationProductEvent } from "../automations/product-events.js";
12
+ import { listPendingProjectUnderstandingRuns } from "../work-discovery/repository.js";
7
13
  import { inferProjectExecutionMode } from "./project-kind.js";
8
14
  import { bindSessionToProject, listProjectConversationIds, unbindSessionFromProject } from "./session-bind.js";
9
15
  //#region src/projects/project-service.ts
10
16
  init_transaction();
17
+ var ProjectDeletionBlockedError = class extends Error {
18
+ constructor() {
19
+ super("Delete the project execution environments before deleting the project");
20
+ this.name = "ProjectDeletionBlockedError";
21
+ }
22
+ };
23
+ var ProjectWorkspaceInvalidError = class extends Error {
24
+ constructor() {
25
+ super("Invalid workspace root");
26
+ this.name = "ProjectWorkspaceInvalidError";
27
+ }
28
+ };
29
+ var ProjectWorkspaceInUseError = class extends Error {
30
+ constructor() {
31
+ super("Delete the project execution environments before changing its workspace");
32
+ this.name = "ProjectWorkspaceInUseError";
33
+ }
34
+ };
11
35
  var ProjectService = class {
12
36
  constructor(store = new ProjectStore()) {
13
37
  this.store = store;
@@ -30,12 +54,12 @@ var ProjectService = class {
30
54
  create(input) {
31
55
  const rawWorkspaceRoot = input.workspaceRoot?.trim();
32
56
  const workspaceRoot = rawWorkspaceRoot ? canonicalWorkspacePath(rawWorkspaceRoot) : void 0;
33
- if (rawWorkspaceRoot && !workspaceRoot) throw new Error("Invalid workspace root");
57
+ if (rawWorkspaceRoot && !workspaceRoot) throw new ProjectWorkspaceInvalidError();
58
+ const needsWorkspaceCreation = Boolean(workspaceRoot && !workspaceDirectoryExists(workspaceRoot));
34
59
  if (workspaceRoot) {
35
60
  const existing = this.findByWorkspaceRoot(workspaceRoot);
36
61
  if (existing) throw new ProjectWorkspaceConflictError(existing);
37
- if (!workspaceDirectoryExists(workspaceRoot)) if (input.createWorkspaceRoot === true) ensureWorkspaceDirectory(workspaceRoot);
38
- else throw new ProjectWorkspaceMissingError(workspaceRoot);
62
+ if (needsWorkspaceCreation && input.createWorkspaceRoot !== true) throw new ProjectWorkspaceMissingError(workspaceRoot);
39
63
  }
40
64
  const name = input.name?.trim() || inferProjectNameFromWorkspaceRoot(workspaceRoot) || "";
41
65
  const slug = input.slug?.trim() || this.store.generateSlug(name);
@@ -45,35 +69,39 @@ var ProjectService = class {
45
69
  workspaceRoot,
46
70
  projectKind: input.projectKind
47
71
  });
48
- const project = this.store.create({
49
- ...input,
50
- name,
51
- slug,
52
- workspaceRoot,
53
- executionMode
54
- });
55
- emitActivity({
56
- type: "project.created",
57
- primaryObject: {
58
- kind: "project",
59
- id: project.id,
60
- title: project.name
61
- },
62
- actor: systemActivityActor(),
63
- source: systemActivitySource(),
64
- payload: {
65
- name: project.name,
66
- workspaceRoot: project.workspaceRoot,
67
- brief: project.brief
68
- },
69
- scopes: [{
70
- scopeKind: "project",
71
- scopeId: project.id,
72
- reason: "object_owner"
73
- }],
74
- nowMs: project.createdAt
72
+ return runSqliteWriteTransaction(() => {
73
+ const project = this.store.create({
74
+ ...input,
75
+ name,
76
+ slug,
77
+ workspaceRoot,
78
+ executionMode
79
+ });
80
+ if (needsWorkspaceCreation && workspaceRoot) queueProjectWorkspaceCreation(project.id, workspaceRoot);
81
+ emitActivity({
82
+ type: "project.created",
83
+ primaryObject: {
84
+ kind: "project",
85
+ id: project.id,
86
+ title: project.name
87
+ },
88
+ actor: systemActivityActor(),
89
+ source: systemActivitySource(),
90
+ payload: {
91
+ name: project.name,
92
+ workspaceRoot: project.workspaceRoot,
93
+ brief: project.brief
94
+ },
95
+ scopes: [{
96
+ scopeKind: "project",
97
+ scopeId: project.id,
98
+ reason: "object_owner"
99
+ }],
100
+ nowMs: project.createdAt
101
+ });
102
+ enqueueProjectChanged(project, [], "created");
103
+ return project;
75
104
  });
76
- return project;
77
105
  }
78
106
  get(id) {
79
107
  return this.store.get(id);
@@ -143,19 +171,26 @@ var ProjectService = class {
143
171
  };
144
172
  }
145
173
  update(id, input) {
174
+ if (!this.store.get(id)) throw new Error(`Project not found: ${id}`);
146
175
  const patch = { ...input };
176
+ let needsWorkspaceCreation = false;
147
177
  if (input.workspaceRoot !== void 0 && input.workspaceRoot !== null && input.workspaceRoot.trim()) {
148
178
  const workspaceRoot = canonicalWorkspacePath(input.workspaceRoot);
149
- if (!workspaceRoot) throw new Error("Invalid workspace root");
179
+ if (!workspaceRoot) throw new ProjectWorkspaceInvalidError();
150
180
  const existing = this.findByWorkspaceRoot(workspaceRoot, { excludeProjectId: id });
151
181
  if (existing) throw new ProjectWorkspaceConflictError(existing);
152
- if (!workspaceDirectoryExists(workspaceRoot)) if (input.createWorkspaceRoot === true) ensureWorkspaceDirectory(workspaceRoot);
153
- else throw new ProjectWorkspaceMissingError(workspaceRoot);
182
+ needsWorkspaceCreation = !workspaceDirectoryExists(workspaceRoot);
183
+ if (needsWorkspaceCreation && input.createWorkspaceRoot !== true) throw new ProjectWorkspaceMissingError(workspaceRoot);
154
184
  patch.workspaceRoot = workspaceRoot;
155
185
  }
156
186
  return runSqliteWriteTransaction(() => {
157
187
  const before = this.store.get(id);
188
+ if (patch.workspaceRoot !== void 0 && (patch.workspaceRoot || void 0) !== before?.workspaceRoot && new ExecutionEnvironmentStore().list({
189
+ projectId: id,
190
+ limit: 1
191
+ }).length) throw new ProjectWorkspaceInUseError();
158
192
  const project = this.store.update(id, patch);
193
+ if (needsWorkspaceCreation && project.workspaceRoot) queueProjectWorkspaceCreation(project.id, project.workspaceRoot);
159
194
  const changes = changedFieldsFromPatch(patch, ["createWorkspaceRoot"]);
160
195
  const type = before?.status !== project.status ? "project.status_changed" : before?.workspaceRoot !== project.workspaceRoot ? "project.workspace_changed" : "project.updated";
161
196
  emitActivity({
@@ -185,6 +220,7 @@ var ProjectService = class {
185
220
  }],
186
221
  nowMs: project.updatedAt
187
222
  });
223
+ enqueueProjectChanged(project, changes);
188
224
  return project;
189
225
  });
190
226
  }
@@ -195,7 +231,21 @@ var ProjectService = class {
195
231
  return this.update(id, { pinnedAt: null });
196
232
  }
197
233
  delete(id) {
198
- this.store.delete(id);
234
+ runSqliteWriteTransaction(() => {
235
+ const project = this.store.get(id);
236
+ if (!project) return;
237
+ if (new ExecutionEnvironmentStore().list({
238
+ projectId: id,
239
+ limit: 1
240
+ }).length) throw new ProjectDeletionBlockedError();
241
+ const deletedUnderstandingRunIds = listPendingProjectUnderstandingRuns(id).map((run) => run.id);
242
+ this.store.delete(id);
243
+ enqueueProjectChanged({
244
+ ...project,
245
+ version: project.version + 1,
246
+ updatedAt: Math.max(Date.now(), project.updatedAt + 1)
247
+ }, [], "deleted", deletedUnderstandingRunIds);
248
+ });
199
249
  }
200
250
  getWithDetails(id) {
201
251
  return this.store.getWithDetails(id);
@@ -204,22 +254,51 @@ var ProjectService = class {
204
254
  return this.store.listMilestones(projectId);
205
255
  }
206
256
  createMilestone(projectId, input) {
207
- return this.store.createMilestone(projectId, input);
257
+ return runSqliteWriteTransaction(() => {
258
+ const milestone = this.store.createMilestone(projectId, input);
259
+ this.recordMilestoneChange(projectId);
260
+ return milestone;
261
+ });
208
262
  }
209
263
  updateMilestone(projectId, milestoneId, input) {
210
- return this.store.updateMilestone(projectId, milestoneId, input);
264
+ return runSqliteWriteTransaction(() => {
265
+ const milestone = this.store.updateMilestone(projectId, milestoneId, input);
266
+ this.recordMilestoneChange(projectId);
267
+ return milestone;
268
+ });
211
269
  }
212
270
  deleteMilestone(projectId, milestoneId) {
213
- return this.store.deleteMilestone(projectId, milestoneId);
271
+ return runSqliteWriteTransaction(() => {
272
+ const deleted = this.store.deleteMilestone(projectId, milestoneId);
273
+ if (deleted) this.recordMilestoneChange(projectId);
274
+ return deleted;
275
+ });
276
+ }
277
+ recordMilestoneChange(projectId) {
278
+ enqueueProjectChanged(this.store.update(projectId, {}), ["milestones"]);
279
+ }
280
+ flushCommittedEffects(projectId) {
281
+ drainProjectWorkspaceCreation(projectId);
282
+ new DomainOutboxDispatcher(publishAutomationProductEvent).drain(100, "project");
214
283
  }
215
284
  listUpdates(projectId, limit) {
216
285
  return this.store.listUpdates(projectId, limit);
217
286
  }
218
287
  createUpdate(projectId, input) {
219
- return this.store.createUpdate(projectId, input);
288
+ return runSqliteWriteTransaction(() => {
289
+ const update = this.store.createUpdate(projectId, input);
290
+ enqueueProjectChanged(this.store.get(projectId), ["health", "updates"]);
291
+ return update;
292
+ });
220
293
  }
221
294
  attachSession(conversationId, projectId) {
222
- bindSessionToProject(conversationId, projectId);
295
+ runSqliteWriteTransaction(() => {
296
+ const previousProjectId = getSessionMetadata(conversationId)?.projectId;
297
+ if (previousProjectId === projectId) return;
298
+ bindSessionToProject(conversationId, projectId);
299
+ enqueueProjectChanged(this.store.update(projectId, {}), ["sessions"]);
300
+ if (previousProjectId && this.store.get(previousProjectId)) enqueueProjectChanged(this.store.update(previousProjectId, {}), ["sessions"]);
301
+ });
223
302
  }
224
303
  detachSession(conversationId) {
225
304
  unbindSessionFromProject(conversationId);
@@ -265,4 +344,4 @@ var ProjectService = class {
265
344
  }
266
345
  };
267
346
  //#endregion
268
- export { ProjectService };
347
+ export { ProjectDeletionBlockedError, ProjectService, ProjectWorkspaceInUseError, ProjectWorkspaceInvalidError };
@@ -112,7 +112,7 @@ var ProjectStore = class {
112
112
  ...input.status !== void 0 ? { status: input.status } : {},
113
113
  ...input.targetAt !== void 0 ? { targetAt: input.targetAt ?? void 0 } : {},
114
114
  ...input.sortOrder !== void 0 ? { sortOrder: Math.floor(input.sortOrder) } : {},
115
- updatedAt: Date.now()
115
+ updatedAt: Math.max(Date.now(), current.updatedAt + 1)
116
116
  };
117
117
  getSqliteDatabase().prepare(`UPDATE project_milestones SET title = ?, description = ?, status = ?, target_at = ?,
118
118
  sort_order = ?, updated_at = ? WHERE milestone_id = ? AND project_id = ?`).run(next.title, next.description ?? null, next.status, next.targetAt ?? null, next.sortOrder, next.updatedAt, milestoneId, projectId);
@@ -145,7 +145,17 @@ var ProjectStore = class {
145
145
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, projectId, input.health, summary, JSON.stringify(input.progress ?? []), JSON.stringify(input.risks ?? []), JSON.stringify(input.nextSteps ?? []), JSON.stringify(input.actor), createdAt);
146
146
  db.prepare(`UPDATE projects SET health = ?, updated_at = ?, version = version + 1 WHERE project_id = ?`).run(input.health, createdAt, projectId);
147
147
  });
148
- return this.listUpdates(projectId, 1)[0];
148
+ return {
149
+ id,
150
+ projectId,
151
+ health: input.health,
152
+ summary,
153
+ progress: input.progress ?? [],
154
+ risks: input.risks ?? [],
155
+ nextSteps: input.nextSteps ?? [],
156
+ actor: input.actor,
157
+ createdAt
158
+ };
149
159
  }
150
160
  create(input) {
151
161
  const now = Date.now();
@@ -0,0 +1,3 @@
1
+ export declare function queueProjectWorkspaceCreation(projectId: string, workspaceRoot: string): void;
2
+ /** A requested project ID means an explicit retry; background drains honor backoff. */
3
+ export declare function drainProjectWorkspaceCreation(projectId?: string): void;
@@ -0,0 +1,45 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { afterSqliteCommit, getSqliteDatabase, init_transaction } from "../storage/sqlite/transaction.js";
4
+ import { canonicalWorkspacePath, ensureWorkspaceDirectory } from "./workspace-project.js";
5
+ import { isAbsolute } from "node:path";
6
+ //#region src/projects/project-workspace-creation.ts
7
+ init_transaction();
8
+ init_logger();
9
+ const log = createLogger("ProjectWorkspaceCreation");
10
+ function queueProjectWorkspaceCreation(projectId, workspaceRoot) {
11
+ getSqliteDatabase().prepare(`INSERT INTO project_workspace_creation (project_id, workspace_root, created_at)
12
+ VALUES (?, ?, ?) ON CONFLICT(project_id) DO UPDATE SET workspace_root = excluded.workspace_root,
13
+ created_at = excluded.created_at, attempts = 0, next_attempt_at = 0`).run(projectId, workspaceRoot, Date.now());
14
+ afterSqliteCommit(() => drainProjectWorkspaceCreation(projectId));
15
+ }
16
+ /** A requested project ID means an explicit retry; background drains honor backoff. */
17
+ function drainProjectWorkspaceCreation(projectId) {
18
+ const db = getSqliteDatabase();
19
+ const rows = db.prepare(`SELECT q.project_id, q.workspace_root, q.attempts, p.workspace_root AS current_root
20
+ FROM project_workspace_creation q JOIN projects p ON p.project_id = q.project_id
21
+ WHERE (? IS NULL OR q.project_id = ?) AND (? IS NOT NULL OR q.next_attempt_at <= ?)
22
+ ORDER BY q.created_at LIMIT 100`).all(projectId ?? null, projectId ?? null, projectId ?? null, Date.now());
23
+ for (const row of rows) {
24
+ if (row.current_root !== row.workspace_root) {
25
+ db.prepare("DELETE FROM project_workspace_creation WHERE project_id = ? AND workspace_root = ?").run(row.project_id, row.workspace_root);
26
+ continue;
27
+ }
28
+ try {
29
+ if (!isAbsolute(row.workspace_root) || canonicalWorkspacePath(row.workspace_root) !== row.workspace_root) throw new Error("Workspace path changed since creation was requested");
30
+ ensureWorkspaceDirectory(row.workspace_root);
31
+ db.prepare("DELETE FROM project_workspace_creation WHERE project_id = ? AND workspace_root = ?").run(row.project_id, row.workspace_root);
32
+ } catch (error) {
33
+ db.prepare(`UPDATE project_workspace_creation SET attempts = attempts + 1, next_attempt_at = ?
34
+ WHERE project_id = ? AND workspace_root = ?`).run(Date.now() + Math.min(3e5, 1e3 * 2 ** Math.min(row.attempts, 8)), row.project_id, row.workspace_root);
35
+ if (row.attempts === 0) log.warn({
36
+ err: error,
37
+ projectId: row.project_id,
38
+ path: row.workspace_root
39
+ }, "Project workspace creation failed; recovery is pending");
40
+ if (projectId) throw error;
41
+ }
42
+ }
43
+ }
44
+ //#endregion
45
+ export { drainProjectWorkspaceCreation, queueProjectWorkspaceCreation };
@@ -48,6 +48,12 @@ function canonicalWorkspacePath(raw) {
48
48
  if (!statSync(normalized).isDirectory()) return normalized;
49
49
  return realpathSync.native(normalized);
50
50
  } catch {
51
+ let parent = dirname(normalized);
52
+ while (parent !== dirname(parent)) try {
53
+ return resolve(realpathSync.native(parent), relative(parent, normalized));
54
+ } catch {
55
+ parent = dirname(parent);
56
+ }
51
57
  return normalized;
52
58
  }
53
59
  }
@@ -1,8 +1,9 @@
1
+ import type { ComputerProfile } from '@xopcai/computer-control-contract';
1
2
  import type { VoiceManifest } from '@xopcai/realtime-protocol/voice';
2
3
  export interface CatalogModel {
3
4
  voice?: VoiceManifest;
4
5
  computerUse?: {
5
- profile: 'gui-plus-2026-02-26' | 'structured-tools-v1';
6
+ profile: ComputerProfile;
6
7
  };
7
8
  id: string;
8
9
  name: string;
@@ -1,12 +1,12 @@
1
- import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
1
+ import { init_model_policy, isComputerModel, isDedicatedComputerProfile } from "../computer/model-policy.js";
2
2
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
3
3
  import { getModelRegistry, init_model_registry } from "./model-registry.js";
4
4
  import { parseImageGenerationModelRef } from "../agent/image/generation/model-ref.js";
5
5
  import { getImageGenerationProvider } from "../agent/image/generation/provider-registry.js";
6
6
  //#region src/providers/model-reference-auditor.ts
7
+ init_model_policy();
7
8
  init_model_catalog_store();
8
9
  init_model_registry();
9
- init_model_policy();
10
10
  function asRecord(value) {
11
11
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
12
12
  }
@@ -53,9 +53,9 @@ function suggestedRef(ref, catalog) {
53
53
  const providerId = ref.split("/")[0];
54
54
  const source = Object.values(catalog.sources).find((entry) => entry.providerId === providerId);
55
55
  if (!source) return void 0;
56
- const available = new Set(source.models.filter((model) => model.availability === "available" && !model.computerUse).map((model) => model.id));
56
+ const available = new Set(source.models.filter((model) => model.availability === "available" && !isDedicatedComputerProfile(model.computerUse?.profile)).map((model) => model.id));
57
57
  if (source.recommendedModel && available.has(source.recommendedModel)) return `${providerId}/${source.recommendedModel}`;
58
- const first = source.models.find((model) => model.availability === "available" && !model.computerUse);
58
+ const first = source.models.find((model) => model.availability === "available" && !isDedicatedComputerProfile(model.computerUse?.profile));
59
59
  return first ? `${providerId}/${first.id}` : void 0;
60
60
  }
61
61
  function hasImageGenerationModel(ref) {
@@ -4,11 +4,15 @@ import { getModel } from "@earendil-works/pi-ai/compat";
4
4
  /** Correct narrowly scoped upstream catalog metadata while older pi-ai data is still installed. */
5
5
  function applyOfficialModelMetadataCorrections(model) {
6
6
  const correctedContextWindow = OPENAI_CONTEXT_WINDOW_CORRECTIONS.get(model.id);
7
- if ((model.provider === "openai" || model.provider === "openai-codex") && correctedContextWindow !== void 0 && model.contextWindow === STALE_OPENAI_CONTEXT_WINDOW) return {
7
+ const corrected = (model.provider === "openai" || model.provider === "openai-codex") && correctedContextWindow !== void 0 && model.contextWindow === STALE_OPENAI_CONTEXT_WINDOW ? {
8
8
  ...model,
9
9
  contextWindow: correctedContextWindow
10
+ } : model;
11
+ if (corrected.provider !== "openai" || corrected.api !== "openai-responses" || !OPENAI_COMPUTER_MODELS.has(corrected.id)) return corrected;
12
+ return {
13
+ ...corrected,
14
+ computerUse: { profile: "openai-responses-computer-v1" }
10
15
  };
11
- return model;
12
16
  }
13
17
  /**
14
18
  * Small local supplement for official model aliases that may lag in pi-ai.
@@ -39,7 +43,7 @@ function getSupplementalModels() {
39
43
  computerUse: { profile: "gui-plus-2026-02-26" }
40
44
  }];
41
45
  }
42
- var STALE_OPENAI_CONTEXT_WINDOW, OPENAI_CONTEXT_WINDOW_CORRECTIONS;
46
+ var STALE_OPENAI_CONTEXT_WINDOW, OPENAI_CONTEXT_WINDOW_CORRECTIONS, OPENAI_COMPUTER_MODELS;
43
47
  var init_model_supplements = __esmMin((() => {
44
48
  STALE_OPENAI_CONTEXT_WINDOW = 272e3;
45
49
  OPENAI_CONTEXT_WINDOW_CORRECTIONS = new Map([
@@ -51,6 +55,12 @@ var init_model_supplements = __esmMin((() => {
51
55
  ["gpt-5.6-sol", 105e4],
52
56
  ["gpt-5.6-terra", 105e4]
53
57
  ]);
58
+ OPENAI_COMPUTER_MODELS = new Set([
59
+ "gpt-6-astra",
60
+ "gpt-5.6-sol",
61
+ "gpt-5.6-terra",
62
+ "gpt-5.6-luna"
63
+ ]);
54
64
  }));
55
65
  //#endregion
56
66
  init_model_supplements();
@@ -1,4 +1,4 @@
1
- import { init_model_policy, isComputerModel } from "../computer/model-policy.js";
1
+ import { init_model_policy, isDedicatedComputerModel } from "../computer/model-policy.js";
2
2
  import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
3
3
  import { PROVIDER_META, getAllModels, getAllProviders, getModelsByProvider, getProviderDisplayName, init_providers, isProviderConfigured } from "./index.js";
4
4
  import { getDomesticProviderPreset, getDomesticProviderPresetIds } from "./domestic-presets.js";
@@ -246,7 +246,7 @@ function modelToCatalogView(model) {
246
246
  ...model.contextWindow ? { contextWindow: model.contextWindow } : {},
247
247
  ...model.maxTokens ? { maxTokens: model.maxTokens } : {},
248
248
  vision: input.includes("image"),
249
- recommended: !isComputerModel(model) && isRecommendedModel(model.provider, model.id)
249
+ recommended: !isDedicatedComputerModel(model) && isRecommendedModel(model.provider, model.id)
250
250
  };
251
251
  }
252
252
  function presetModelToCatalogView(provider, model) {
@@ -274,7 +274,7 @@ function sortModelsForPicker(models) {
274
274
  });
275
275
  }
276
276
  function getRecommendedModelsForProvider(provider, limit = 4) {
277
- const fromRegistry = sortModelsForPicker(getModelsByProvider(provider)).filter((model) => !isComputerModel(model) && isRecommendedModel(provider, model.id)).slice(0, limit).map(modelToCatalogView);
277
+ const fromRegistry = sortModelsForPicker(getModelsByProvider(provider)).filter((model) => !isDedicatedComputerModel(model) && isRecommendedModel(provider, model.id)).slice(0, limit).map(modelToCatalogView);
278
278
  if (fromRegistry.length > 0) return fromRegistry;
279
279
  const preset = getDomesticProviderPreset(provider);
280
280
  if (!preset) return [];
@@ -1,9 +1,11 @@
1
+ import { init_model_policy, isDedicatedComputerProfile } from "../computer/model-policy.js";
1
2
  import { voiceManifestSchema } from "../../packages/realtime-protocol/src/voice-catalog.js";
2
3
  import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
3
4
  import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
4
5
  import { getProviderAuthService, init_provider_auth_service } from "./provider-auth-service.js";
5
6
  //#region src/providers/xopc-cloud-model-source.ts
6
7
  init_voice();
8
+ init_model_policy();
7
9
  init_provider_auth_service();
8
10
  init_xopc_cloud_config();
9
11
  var XopcCloudModelError = class extends Error {
@@ -86,7 +88,7 @@ var XopcCloudModelSource = class {
86
88
  baseUrl: this.routerUrl,
87
89
  api: "openai-completions",
88
90
  etag: response.headers.get("x-xopc-model-catalog-version"),
89
- recommendedModel: models.find((model) => !model.computerUse)?.id ?? null,
91
+ recommendedModel: models.find((model) => !isDedicatedComputerProfile(model.computerUse?.profile))?.id ?? null,
90
92
  ...Object.keys(recommended).length > 0 ? { recommended } : {},
91
93
  ...search ? { search } : {},
92
94
  lastSuccessAt: Date.now()
@@ -140,7 +142,7 @@ function parseRecommendations(value, models) {
140
142
  }
141
143
  function modelMatchesRecommendation(model, capability) {
142
144
  switch (capability) {
143
- case "vision": return model.kind === "language" && model.input.includes("image") && !model.computerUse;
145
+ case "vision": return model.kind === "language" && model.input.includes("image") && !isDedicatedComputerProfile(model.computerUse?.profile);
144
146
  case "image-generation": return model.kind === "image" && model.operations.includes("images.generate");
145
147
  case "stt": return model.kind === "stt" && model.operations.includes("audio.transcription");
146
148
  case "tts": return model.kind === "tts" && model.operations.includes("audio.speech");
@@ -27,6 +27,10 @@ function serverMessage(kind, payload) {
27
27
  };
28
28
  }
29
29
  function isAuthorizedTopic(topic, scopes) {
30
+ if (topic === "resources:notes" || topic === "resources:projects") return hasGatewayScope(scopes, "workspace.read");
31
+ if (topic === "resources:tasks") return hasGatewayScope(scopes, "tasks.read");
32
+ if (topic === "resources:automations") return hasGatewayScope(scopes, "automations.read");
33
+ if (topic === "resources:scenes" || topic === "resources:local_apps") return hasGatewayScope(scopes, "gateway.admin");
30
34
  if (topic === "gateway") return hasGatewayScope(scopes, "gateway.status");
31
35
  if (topic === "logs") return hasGatewayScope(scopes, "gateway.admin");
32
36
  if (topic === "sessions" || topic.startsWith("session:")) return hasGatewayScope(scopes, "sessions.read");
@@ -0,0 +1,3 @@
1
+ import { type CapabilityContext, type CapabilityDispatcher } from '../../capabilities/runtime/dispatcher.js';
2
+ import type { SceneAccess } from '../httpServices.js';
3
+ export declare function registerSceneReadCapabilities(dispatcher: CapabilityDispatcher, getAccess: (context: CapabilityContext) => SceneAccess | undefined): void;