@xopcai/xopc 0.0.191 → 0.0.192

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 (346) 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-B-tzXpDD.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DvEkT222.js → agent-avatar-dicebear-xOu0qNwc.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-CxuwvDk0.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-BTL9kayv.js → api-fMItZb-h.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-COpP_pKN.js → app-management-settings-panel-D6Rv3OWI.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DTVNUEDq.js → appearance-settings-CKoNCwco.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-wAb5dnHZ.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-IpX6VA0o.js → archive-plugin-BokNQBwH.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CKVFNUi1.js → attachment-load-Dx1HglsM.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-Drgazevs.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-BrfvfOS4.js → binary-plugins-CPYAflIG.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-D9sEfg32.js → block-editor-BFLgl8SS.js} +47 -47
  15. package/dist/gateway/static/root/assets/browser-settings-page-DmYlFJW7.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BixZ5lCR.js → browser-workflow-inputs-CqLnqA9z.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-YEFuodJI.js → browser-workflows-page-Db5v3HtE.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-D7Z8T0o5.js +7 -0
  19. package/dist/gateway/static/root/assets/capability-presets-api-lov0J9A2.js +1 -0
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-COjnwO0U.js +3 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-BThDGiO3.js → channel-recipient-api-DSJznouK.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-DcRYBNN7.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-C2UYdebT.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-3ccRyS3L.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-FVmvBG9H.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-Bm8koRoD.js → cron-expression-C9hhCiuo.js} +1 -1
  28. package/dist/gateway/static/root/assets/dependency-picker-CTtZFZug.js +1 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CMG3mcaJ.js → desktop-pet-DOUeNVmC.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-D8aaPb0x.js → desktop-pet-settings-D4704vtl.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-C95yW03b.js → directory-picker-path-field-DJDXeA1B.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-DsG7Z9lV.js → extension-debug-page-C0n2NMF1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-CUAXEbAt.js → extension-page-vG-xxRNs.js} +1 -1
  34. package/dist/gateway/static/root/assets/extension-settings-page-CtuY2THd.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-api-DL70Nakc.js → gateway-config-api-CZra7GuI.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-BgDxQ08c.js → gateway-settings-Cz33jRkR.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-EO9mKvzE.js → gateway-startup-retry-BbVV0udv.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-BX7q55uZ.js → heartbeat-settings-D2XMlA_U.js} +1 -1
  39. package/dist/gateway/static/root/assets/home-page-CPrHkPN6.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-BgrOvhaJ.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-Cg7Xnlu3.css +1 -0
  43. package/dist/gateway/static/root/assets/index-DzmbmOGA.js +150 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dt6wS5zW.js → keyboard-shortcuts-settings-BfyAEG1G.js} +1 -1
  45. package/dist/gateway/static/root/assets/local-app-workbench-page-Clz47vSr.js +2 -0
  46. package/dist/gateway/static/root/assets/{local-apps-page-DcD3-N00.js → local-apps-page-BYalcRSY.js} +1 -1
  47. package/dist/gateway/static/root/assets/{locale-store-deR2zRaE.js → locale-store-VOY1wMO9.js} +1 -1
  48. package/dist/gateway/static/root/assets/logs-page-Cxq9WMf5.js +2 -0
  49. package/dist/gateway/static/root/assets/{management-settings-B6EVkJQy.js → management-settings-BQf-6s32.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-Cy_2SN1Q.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-DRrtI2O0.js → media-plugins-CkDupqb2.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-DMJ-6-1m.js +3 -0
  54. package/dist/gateway/static/root/assets/{notes-page-fermYvpI.js → notes-page-kiGRR9jo.js} +1 -1
  55. package/dist/gateway/static/root/assets/notes-workbench-DkYkPGyB.js +4 -0
  56. package/dist/gateway/static/root/assets/{page-tabs-BO262zuu.js → page-tabs-CvzSdYVj.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-yZYTy-2e.js → preview-open-alternatives-kZ0nco7e.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-Dgy8XWhR.js → product-open-page-DgoieqQC.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-CeSjJd-N.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-fZ1rm4b9.js +1 -0
  61. package/dist/gateway/static/root/assets/remote-access-hub-CbYI6KC8.js +1 -0
  62. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bud_NTEZ.js +5 -0
  63. package/dist/gateway/static/root/assets/{schema-form-DdE4gtw_.js → schema-form-GlbsCBmv.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-sOJ_TnLm.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-BI0u77dt.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-form-section-CiYU8AvV.js → settings-form-section-CKLns16d.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bv03cWib.js → settings-loading-skeleton-BDzpxgk0.js} +1 -1
  68. package/dist/gateway/static/root/assets/settings-page-BH0pF7QB.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-page-layout-t_Ox1slk.js → settings-page-layout-J793iqfm.js} +1 -1
  70. package/dist/gateway/static/root/assets/{setup-status-panel-HRG_lK4_.js → setup-status-panel-CGsml89P.js} +1 -1
  71. package/dist/gateway/static/root/assets/{share-preview-page-DF8gW6bo.js → share-preview-page-UTm_7r0l.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-BM--lgUS.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-CGCOC-rV.js +1 -0
  74. package/dist/gateway/static/root/assets/skills-page-iLyaOl48.js +2 -0
  75. package/dist/gateway/static/root/assets/skills-page.utils-Bwid1TGB.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-Bv7GXFc6.js → system-settings-panel-BcB3p1e3.js} +1 -1
  78. package/dist/gateway/static/root/assets/task-detail-page-DQYEf08v.js +1 -0
  79. package/dist/gateway/static/root/assets/{theme-store-DnBOcGXi.js → theme-store-GVZOImyb.js} +1 -1
  80. package/dist/gateway/static/root/assets/{typed-models-lib-4XBsLEuv.js → typed-models-lib-CT2c85Ju.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-BN2QgFGn.js → use-autosave-CcvY7DTh.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-context-page-CGI41bfO.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-Ricc3QGo.js +1 -0
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-nmEAafFl.js → work-discovery-overlay-BoomfqhX.js} +1 -1
  86. package/dist/gateway/static/root/assets/{work-discovery-page-C5Kwe_bc.js → work-discovery-page-mbnepbQk.js} +1 -1
  87. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DSWG2xqL.js +3 -0
  88. package/dist/gateway/static/root/assets/workflows-page-DtV0ruyk.js +5 -0
  89. package/dist/gateway/static/root/index.html +7 -7
  90. package/dist/package.js +1 -1
  91. package/dist/src/agent/agent-manager.d.ts +2 -0
  92. package/dist/src/agent/agent-manager.js +76 -0
  93. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  94. package/dist/src/agent/background-review/prompts.js +1 -1
  95. package/dist/src/agent/background-review/run-background-review.js +3 -12
  96. package/dist/src/agent/embedded/run-for-session.js +3 -0
  97. package/dist/src/agent/embedded/run-turn.js +4 -1
  98. package/dist/src/agent/embedded/session-runner.js +3 -4
  99. package/dist/src/agent/embedded/types.d.ts +10 -1
  100. package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -2
  101. package/dist/src/agent/external-tools/mcp-provider.d.ts +1 -0
  102. package/dist/src/agent/external-tools/mcp-provider.js +21 -6
  103. package/dist/src/agent/image/generation/provider-registry.js +1 -0
  104. package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
  105. package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
  106. package/dist/src/agent/image/generation/providers/fal.js +12 -6
  107. package/dist/src/agent/image/generation/providers/google.js +8 -0
  108. package/dist/src/agent/image/generation/providers/minimax.js +20 -0
  109. package/dist/src/agent/image/generation/providers/openai.js +36 -26
  110. package/dist/src/agent/image/generation/types.d.ts +13 -0
  111. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
  112. package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
  113. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
  114. package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
  115. package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
  116. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
  117. package/dist/src/agent/mcp/index.js +2 -2
  118. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  119. package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
  120. package/dist/src/agent/mcp/mcp-transport.js +22 -4
  121. package/dist/src/agent/memory/compaction.js +19 -17
  122. package/dist/src/agent/memory/context-budget.js +2 -3
  123. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  124. package/dist/src/agent/memory/understanding/service.js +49 -20
  125. package/dist/src/agent/memory/understanding/types.d.ts +1 -0
  126. package/dist/src/agent/memory/user-context-coordinator.js +6 -0
  127. package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
  128. package/dist/src/agent/service/direct-turn-helpers.js +14 -5
  129. package/dist/src/agent/skills/index.d.ts +1 -1
  130. package/dist/src/agent/skills/index.js +2 -2
  131. package/dist/src/agent/skills/installer.d.ts +3 -10
  132. package/dist/src/agent/skills/installer.js +99 -156
  133. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
  134. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
  135. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
  136. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
  137. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
  138. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
  139. package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
  140. package/dist/src/agent/skills/marketplace/search.js +52 -21
  141. package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
  142. package/dist/src/agent/skills/skills-marketplace.js +2 -2
  143. package/dist/src/agent/skills/types.d.ts +0 -8
  144. package/dist/src/agent/tools/exec-command.d.ts +1 -0
  145. package/dist/src/agent/tools/exec-command.js +2 -1
  146. package/dist/src/agent/tools/factory.d.ts +1 -0
  147. package/dist/src/agent/tools/factory.js +17 -2
  148. package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
  149. package/dist/src/agent/tools/managed-job-tool.js +3 -2
  150. package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
  151. package/dist/src/agent/tools/skill-install-tool.js +8 -4
  152. package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
  153. package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
  154. package/dist/src/agent/tools/workflow-tool.js +14 -4
  155. package/dist/src/agent-manifest/schema.d.ts +20 -0
  156. package/dist/src/agent-manifest/schema.js +6 -1
  157. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  158. package/dist/src/cli/command-loaders.js +1 -0
  159. package/dist/src/cli/command-manifest.js +4 -0
  160. package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
  161. package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
  162. package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
  163. package/dist/src/cli/commands/doctor/flow.js +2 -0
  164. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  165. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  166. package/dist/src/cli/commands/models.js +0 -1
  167. package/dist/src/cli/commands/onboard/model.d.ts +16 -1
  168. package/dist/src/cli/commands/onboard/model.js +65 -4
  169. package/dist/src/cli/commands/onboard.js +13 -1
  170. package/dist/src/cli/commands/runtime.d.ts +1 -0
  171. package/dist/src/cli/commands/runtime.js +77 -0
  172. package/dist/src/cli/commands/setup.js +15 -1
  173. package/dist/src/cli/commands/skills.js +7 -4
  174. package/dist/src/cli/commands/update.js +1 -1
  175. package/dist/src/config/index.js +2 -2
  176. package/dist/src/config/schema.d.ts +125 -0
  177. package/dist/src/config/schema.js +77 -2
  178. package/dist/src/config/voice.d.ts +6 -0
  179. package/dist/src/config/voice.js +17 -0
  180. package/dist/src/extensions/install.js +1 -1
  181. package/dist/src/extensions/types/providers.d.ts +4 -0
  182. package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
  183. package/dist/src/gateway/capability-presets-admin.js +24 -6
  184. package/dist/src/gateway/chat-stream/mapper.js +8 -4
  185. package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
  186. package/dist/src/gateway/heartbeat/service.js +1 -1
  187. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  188. package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
  189. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  190. package/dist/src/gateway/hono/routes/local-apps.js +1 -1
  191. package/dist/src/gateway/hono/routes/models.js +2 -3
  192. package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
  193. package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
  194. package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
  195. package/dist/src/gateway/hono/routes/update.js +2 -2
  196. package/dist/src/gateway/hono/routes/voice.js +43 -2
  197. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  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.js +5 -5
  206. package/dist/src/heartbeat/index.js +1 -1
  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 +3 -3
  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/shares-settings-v_iLhxxa.js +0 -1
  338. package/dist/gateway/static/root/assets/skill-reload-api-S-bjtsXX.js +0 -1
  339. package/dist/gateway/static/root/assets/skills-page-BiNBfaX5.js +0 -2
  340. package/dist/gateway/static/root/assets/skills-page.utils-DlnGtvAH.js +0 -1
  341. package/dist/gateway/static/root/assets/task-detail-page-BhQcOpnx.js +0 -1
  342. package/dist/gateway/static/root/assets/user-context-page-PtcY7BoJ.js +0 -1
  343. package/dist/gateway/static/root/assets/voice-api-key-field-DnhJtC5l.js +0 -1
  344. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BnNWBDwz.js +0 -3
  345. package/dist/gateway/static/root/assets/workflows-page-Z_qzaohv.js +0 -11
  346. /package/dist/gateway/static/root/assets/{workflows-page-DLioOiRN.css → style-DLioOiRN.css} +0 -0
@@ -0,0 +1,41 @@
1
+ import { ProxyAgent, fetch } from "undici";
2
+ //#region src/runtime-tools/network.ts
3
+ const PROXY_AGENTS = /* @__PURE__ */ new Map();
4
+ function dispatcher(proxy) {
5
+ if (!proxy) return void 0;
6
+ const existing = PROXY_AGENTS.get(proxy);
7
+ if (existing) return existing;
8
+ const created = new ProxyAgent(proxy);
9
+ PROXY_AGENTS.set(proxy, created);
10
+ return created;
11
+ }
12
+ async function fetchRuntimeResource(params) {
13
+ const timeoutSignal = AbortSignal.timeout(params.timeoutMs);
14
+ const signal = params.signal ? AbortSignal.any([params.signal, timeoutSignal]) : timeoutSignal;
15
+ return await fetch(params.url, {
16
+ ...params.init,
17
+ dispatcher: dispatcher(params.proxy),
18
+ signal
19
+ });
20
+ }
21
+ async function readRuntimeResponseText(response, maxBytes) {
22
+ if (!response.body) return "";
23
+ const reader = response.body.getReader();
24
+ const chunks = [];
25
+ let bytes = 0;
26
+ try {
27
+ while (true) {
28
+ const { done, value } = await reader.read();
29
+ if (done) break;
30
+ bytes += value.byteLength;
31
+ if (bytes > maxBytes) throw new Error("Response exceeds size limit");
32
+ chunks.push(Buffer.from(value));
33
+ }
34
+ } catch (error) {
35
+ await reader.cancel().catch(() => {});
36
+ throw error;
37
+ }
38
+ return Buffer.concat(chunks, bytes).toString("utf8");
39
+ }
40
+ //#endregion
41
+ export { fetchRuntimeResource, readRuntimeResponseText };
@@ -0,0 +1,16 @@
1
+ import type { RuntimeKind } from './types.js';
2
+ export type OfflineBundleArtifact = {
3
+ archivePath: string;
4
+ archiveFile: string;
5
+ archiveType: 'zip' | 'tar.gz';
6
+ sha256: string;
7
+ };
8
+ export declare function bundledPythonArchiveName(params: {
9
+ version: string;
10
+ platform: string;
11
+ }): string;
12
+ export declare function resolveOfflineBundleArtifact(params: {
13
+ bundleDir: string;
14
+ runtime: RuntimeKind;
15
+ archiveFile: string;
16
+ }): Promise<OfflineBundleArtifact>;
@@ -0,0 +1,41 @@
1
+ import { RuntimeError } from "./errors.js";
2
+ import { sha256File } from "./downloader.js";
3
+ import { isAbsolute, join } from "node:path";
4
+ import { access, readFile } from "node:fs/promises";
5
+ //#region src/runtime-tools/offline-bundle.ts
6
+ function parseChecksum(text, archiveFile) {
7
+ for (const line of text.split(/\r?\n/).map((item) => item.trim()).filter(Boolean)) {
8
+ const match = line.match(/^([a-fA-F0-9]{64})(?:\s+[*]?(.+))?$/);
9
+ if (match && (!match[2] || match[2] === archiveFile)) return match[1].toLowerCase();
10
+ }
11
+ return null;
12
+ }
13
+ function bundledPythonArchiveName(params) {
14
+ const extension = params.platform.startsWith("win32-") ? "zip" : "tar.gz";
15
+ return `python-${params.version}-${params.platform}.${extension}`;
16
+ }
17
+ async function resolveOfflineBundleArtifact(params) {
18
+ if (!isAbsolute(params.bundleDir)) throw new RuntimeError("runtimeTools.download.bundleDir must be an absolute path", "RUNTIME_ARCHIVE_INVALID", params.runtime, "offline_bundle", false);
19
+ const archivePath = join(params.bundleDir, params.archiveFile);
20
+ try {
21
+ await access(archivePath);
22
+ } catch {
23
+ throw new RuntimeError(`Offline bundle is missing ${params.archiveFile}`, "RUNTIME_NOT_FOUND", params.runtime, "offline_bundle", true);
24
+ }
25
+ const checksumFiles = [`${archivePath}.sha256`, join(params.bundleDir, "SHASUMS256.txt")];
26
+ let expected = null;
27
+ for (const checksumPath of checksumFiles) try {
28
+ expected = parseChecksum(await readFile(checksumPath, "utf8"), params.archiveFile);
29
+ if (expected) break;
30
+ } catch {}
31
+ if (!expected) throw new RuntimeError(`Offline bundle has no checksum for ${params.archiveFile}`, "RUNTIME_CHECKSUM_MISMATCH", params.runtime, "offline_bundle", false);
32
+ if (await sha256File(archivePath) !== expected) throw new RuntimeError(`Offline bundle checksum mismatch for ${params.archiveFile}`, "RUNTIME_CHECKSUM_MISMATCH", params.runtime, "offline_bundle", true);
33
+ return {
34
+ archivePath,
35
+ archiveFile: params.archiveFile,
36
+ archiveType: params.archiveFile.endsWith(".zip") ? "zip" : "tar.gz",
37
+ sha256: expected
38
+ };
39
+ }
40
+ //#endregion
41
+ export { bundledPythonArchiveName, resolveOfflineBundleArtifact };
@@ -0,0 +1,7 @@
1
+ import type { RuntimeKind } from './types.js';
2
+ export declare function runtimeToolsRoot(stateDir: string): string;
3
+ export declare function runtimeVersionDir(stateDir: string, runtime: RuntimeKind, version: string): string;
4
+ export declare function runtimeManifestPath(stateDir: string, runtime: RuntimeKind): string;
5
+ export declare function runtimeLockPath(stateDir: string, runtime: RuntimeKind, version: string): string;
6
+ export declare function runtimeDownloadPath(stateDir: string, archiveFile: string): string;
7
+ export declare function runtimeStagingDir(stateDir: string, runtime: RuntimeKind, version: string, operationId: string): string;
@@ -0,0 +1,22 @@
1
+ import { join } from "node:path";
2
+ //#region src/runtime-tools/paths.ts
3
+ function runtimeToolsRoot(stateDir) {
4
+ return join(stateDir, "tools");
5
+ }
6
+ function runtimeVersionDir(stateDir, runtime, version) {
7
+ return join(runtimeToolsRoot(stateDir), runtime, "versions", version);
8
+ }
9
+ function runtimeManifestPath(stateDir, runtime) {
10
+ return join(runtimeToolsRoot(stateDir), "manifests", `${runtime}.json`);
11
+ }
12
+ function runtimeLockPath(stateDir, runtime, version) {
13
+ return join(runtimeToolsRoot(stateDir), "locks", `${runtime}-${version}.lock`);
14
+ }
15
+ function runtimeDownloadPath(stateDir, archiveFile) {
16
+ return join(runtimeToolsRoot(stateDir), "downloads", `${archiveFile}.partial`);
17
+ }
18
+ function runtimeStagingDir(stateDir, runtime, version, operationId) {
19
+ return join(runtimeToolsRoot(stateDir), "staging", `${runtime}-${version}-${operationId}`);
20
+ }
21
+ //#endregion
22
+ export { runtimeDownloadPath, runtimeLockPath, runtimeManifestPath, runtimeStagingDir, runtimeToolsRoot, runtimeVersionDir };
@@ -0,0 +1,7 @@
1
+ import type { RuntimeExecutables, RuntimeKind } from './types.js';
2
+ export declare function parseRuntimeVersion(output: string): string | null;
3
+ export declare function versionSatisfies(actual: string, requested: string): boolean;
4
+ export declare function probeSystemRuntime(runtime: RuntimeKind, requestedVersion: string): Promise<{
5
+ version: string;
6
+ executables: RuntimeExecutables;
7
+ } | null>;
@@ -0,0 +1,71 @@
1
+ import { runRuntimeCommand } from "./command.js";
2
+ import semver from "semver";
3
+ //#region src/runtime-tools/probe.ts
4
+ function parseRuntimeVersion(output) {
5
+ return output.match(/v?(\d+\.\d+\.\d+)/)?.[1] ?? null;
6
+ }
7
+ function versionSatisfies(actual, requested) {
8
+ const normalized = semver.valid(actual);
9
+ if (!normalized) return false;
10
+ if (/^\d+$/.test(requested)) return semver.major(normalized) === Number(requested);
11
+ if (/^\d+\.\d+$/.test(requested)) {
12
+ const [major, minor] = requested.split(".").map(Number);
13
+ return semver.major(normalized) === major && semver.minor(normalized) === minor;
14
+ }
15
+ return semver.satisfies(normalized, requested) || normalized === requested;
16
+ }
17
+ function commandNames(runtime) {
18
+ if (runtime === "node") return process.platform === "win32" ? ["node.exe", "node"] : ["node"];
19
+ if (runtime === "uv") return process.platform === "win32" ? ["uv.exe", "uv"] : ["uv"];
20
+ return process.platform === "win32" ? [
21
+ "python.exe",
22
+ "python3.exe",
23
+ "python"
24
+ ] : ["python3", "python"];
25
+ }
26
+ async function probeSystemRuntime(runtime, requestedVersion) {
27
+ for (const command of commandNames(runtime)) {
28
+ const versionResult = await runRuntimeCommand({
29
+ command,
30
+ args: ["--version"]
31
+ });
32
+ if (!versionResult.ok) continue;
33
+ const version = parseRuntimeVersion(`${versionResult.stdout}\n${versionResult.stderr}`);
34
+ if (!version || !versionSatisfies(version, requestedVersion)) continue;
35
+ if (runtime === "node") {
36
+ const npm = process.platform === "win32" ? "npm.cmd" : "npm";
37
+ const npx = process.platform === "win32" ? "npx.cmd" : "npx";
38
+ const [npmResult, npxResult] = await Promise.all([runRuntimeCommand({
39
+ command: npm,
40
+ args: ["--version"]
41
+ }), runRuntimeCommand({
42
+ command: npx,
43
+ args: ["--version"]
44
+ })]);
45
+ if (!npmResult.ok || !npxResult.ok) continue;
46
+ return {
47
+ version,
48
+ executables: {
49
+ primary: command,
50
+ node: command,
51
+ npm,
52
+ npx
53
+ }
54
+ };
55
+ }
56
+ return {
57
+ version,
58
+ executables: runtime === "uv" ? {
59
+ primary: command,
60
+ uv: command,
61
+ uvx: process.platform === "win32" ? "uvx.exe" : "uvx"
62
+ } : {
63
+ primary: command,
64
+ python: command
65
+ }
66
+ };
67
+ }
68
+ return null;
69
+ }
70
+ //#endregion
71
+ export { parseRuntimeVersion, probeSystemRuntime, versionSatisfies };
@@ -0,0 +1,10 @@
1
+ import type { RuntimeToolsConfig } from '../config/schema.js';
2
+ export type RuntimePruneResult = {
3
+ removed: string[];
4
+ reclaimedBytes: number;
5
+ };
6
+ export declare function pruneRuntimeTools(params: {
7
+ stateDir: string;
8
+ config: RuntimeToolsConfig;
9
+ now?: number;
10
+ }): Promise<RuntimePruneResult>;
@@ -0,0 +1,93 @@
1
+ import { runtimeToolsRoot } from "./paths.js";
2
+ import { readRuntimeManifest } from "./manifest-store.js";
3
+ import { join, resolve } from "node:path";
4
+ import { lstat, readdir, rm, stat } from "node:fs/promises";
5
+ //#region src/runtime-tools/prune.ts
6
+ const RUNTIMES = [
7
+ "node",
8
+ "uv",
9
+ "python"
10
+ ];
11
+ const STALE_TEMP_MS = 1440 * 60 * 1e3;
12
+ async function pathSize(path) {
13
+ const details = await lstat(path);
14
+ if (details.isSymbolicLink()) return details.size;
15
+ if (!details.isDirectory()) return details.size;
16
+ let total = 0;
17
+ for (const entry of await readdir(path)) total += await pathSize(join(path, entry));
18
+ return total;
19
+ }
20
+ async function listEntries(path) {
21
+ try {
22
+ return await Promise.all((await readdir(path)).map(async (name) => {
23
+ const entryPath = join(path, name);
24
+ return {
25
+ path: entryPath,
26
+ mtimeMs: (await stat(entryPath)).mtimeMs,
27
+ size: await pathSize(entryPath)
28
+ };
29
+ }));
30
+ } catch (error) {
31
+ if (error.code === "ENOENT") return [];
32
+ throw error;
33
+ }
34
+ }
35
+ async function pruneRuntimeTools(params) {
36
+ const removed = [];
37
+ let reclaimedBytes = 0;
38
+ const root = runtimeToolsRoot(params.stateDir);
39
+ for (const runtime of RUNTIMES) {
40
+ const entries = (await listEntries(join(root, runtime, "versions"))).sort((a, b) => b.mtimeMs - a.mtimeMs);
41
+ const manifest = await readRuntimeManifest(params.stateDir, runtime);
42
+ const entryPaths = new Set(entries.map((entry) => resolve(entry.path)));
43
+ const activePath = manifest && entryPaths.has(resolve(manifest.installDir)) ? resolve(manifest.installDir) : null;
44
+ const keep = /* @__PURE__ */ new Set();
45
+ if (activePath) keep.add(activePath);
46
+ for (const entry of entries) {
47
+ if (keep.size >= params.config.retention.keepVersions) break;
48
+ keep.add(resolve(entry.path));
49
+ }
50
+ for (const entry of entries) {
51
+ if (keep.has(resolve(entry.path))) continue;
52
+ await rm(entry.path, {
53
+ recursive: true,
54
+ force: true
55
+ });
56
+ removed.push(entry.path);
57
+ reclaimedBytes += entry.size;
58
+ }
59
+ }
60
+ const now = params.now ?? Date.now();
61
+ for (const entry of await listEntries(join(root, "staging"))) {
62
+ if (now - entry.mtimeMs < STALE_TEMP_MS) continue;
63
+ await rm(entry.path, {
64
+ recursive: true,
65
+ force: true
66
+ });
67
+ removed.push(entry.path);
68
+ reclaimedBytes += entry.size;
69
+ }
70
+ const maxCacheBytes = params.config.retention.maxCacheBytes;
71
+ if (maxCacheBytes !== void 0) {
72
+ const cacheEntries = (await listEntries(join(root, "downloads"))).sort((a, b) => b.mtimeMs - a.mtimeMs);
73
+ let retained = 0;
74
+ for (const entry of cacheEntries) {
75
+ if (retained + entry.size <= maxCacheBytes) {
76
+ retained += entry.size;
77
+ continue;
78
+ }
79
+ await rm(entry.path, {
80
+ recursive: true,
81
+ force: true
82
+ });
83
+ removed.push(entry.path);
84
+ reclaimedBytes += entry.size;
85
+ }
86
+ }
87
+ return {
88
+ removed,
89
+ reclaimedBytes
90
+ };
91
+ }
92
+ //#endregion
93
+ export { pruneRuntimeTools };
@@ -0,0 +1,70 @@
1
+ import type { RuntimeToolsConfig } from '../config/schema.js';
2
+ export type RuntimeKind = 'node' | 'uv' | 'python';
3
+ export type RuntimeSource = 'managed' | 'system';
4
+ export type RuntimeState = 'disabled' | 'unsupported' | 'absent' | 'installing' | 'ready' | 'degraded' | 'corrupted' | 'failed';
5
+ export interface RuntimeExecutables {
6
+ primary: string;
7
+ node?: string;
8
+ npm?: string;
9
+ npx?: string;
10
+ corepack?: string;
11
+ uv?: string;
12
+ uvx?: string;
13
+ python?: string;
14
+ }
15
+ export interface InstalledRuntimeManifest {
16
+ schemaVersion: 1;
17
+ runtime: RuntimeKind;
18
+ version: string;
19
+ source: RuntimeSource;
20
+ platform: string;
21
+ arch: string;
22
+ installDir: string;
23
+ executables: RuntimeExecutables;
24
+ installedAt: string;
25
+ verifiedAt: string;
26
+ distribution?: {
27
+ url: string;
28
+ sha256: string;
29
+ archiveFile: string;
30
+ catalogVersion: string;
31
+ };
32
+ probe: {
33
+ versionOutput: string;
34
+ packageManagerVersion?: string;
35
+ };
36
+ }
37
+ export interface ResolvedRuntime {
38
+ runtime: RuntimeKind;
39
+ version: string;
40
+ source: RuntimeSource;
41
+ executable: string;
42
+ executables: RuntimeExecutables;
43
+ installDir?: string;
44
+ }
45
+ export interface RuntimeStatus {
46
+ runtime: RuntimeKind;
47
+ state: RuntimeState;
48
+ requestedVersion: string;
49
+ resolved?: ResolvedRuntime;
50
+ message: string;
51
+ repairable: boolean;
52
+ }
53
+ export interface RuntimeRequest {
54
+ runtime: RuntimeKind;
55
+ version?: string;
56
+ allowProvision?: boolean;
57
+ signal?: AbortSignal;
58
+ }
59
+ export interface RuntimeManagerOptions {
60
+ stateDir: string;
61
+ config: RuntimeToolsConfig;
62
+ }
63
+ export interface RuntimeProgressEvent {
64
+ operationId: string;
65
+ runtime: RuntimeKind;
66
+ phase: 'resolve' | 'download' | 'verify' | 'extract' | 'install' | 'probe' | 'complete';
67
+ message: string;
68
+ downloadedBytes?: number;
69
+ totalBytes?: number;
70
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -2,8 +2,8 @@ import { isPathUnderWorkspace } from "../gateway/workspace-editor-path.js";
2
2
  import { relative, resolve } from "node:path";
3
3
  import { createReadStream } from "node:fs";
4
4
  import { lstat, readdir, realpath, stat } from "node:fs/promises";
5
- import { Readable, Transform } from "node:stream";
6
5
  import { pipeline } from "node:stream/promises";
6
+ import { Readable, Transform } from "node:stream";
7
7
  import { crc32, createDeflateRaw } from "node:zlib";
8
8
  //#region src/share/share-zip.ts
9
9
  const SIG_LOCAL = 67324752;
@@ -2,16 +2,20 @@ ALTER TABLE memory_evidence ADD COLUMN session_key TEXT;
2
2
  ALTER TABLE memory_evidence ADD COLUMN turn_id TEXT;
3
3
  ALTER TABLE memory_evidence ADD COLUMN tool_call_id TEXT;
4
4
 
5
+ -- Preserve evidence while treating deleted legacy sources like ON DELETE SET NULL.
5
6
  WITH legacy AS (
6
7
  SELECT
7
8
  r.record_id,
8
- json_extract(j.value, '$.sourceItemId') AS source_item_id,
9
+ source.item_id AS source_item_id,
9
10
  COALESCE(json_extract(j.value, '$.relation'), 'supports') AS relation,
10
11
  MAX(CAST(strftime('%s', json_extract(j.value, '$.observedAt')) AS INTEGER) * 1000) AS observed_at,
11
12
  MAX(json_extract(j.value, '$.sessionKey')) AS session_key,
12
13
  MAX(json_extract(j.value, '$.turnId')) AS turn_id,
13
14
  MAX(json_extract(j.value, '$.toolCallId')) AS tool_call_id
14
- FROM memory_records r, json_each(r.evidence_json) j
15
+ FROM memory_records r
16
+ JOIN json_each(r.evidence_json) j
17
+ LEFT JOIN knowledge_source_items source
18
+ ON source.item_id = json_extract(j.value, '$.sourceItemId')
15
19
  WHERE json_valid(r.evidence_json)
16
20
  GROUP BY r.record_id, source_item_id, relation
17
21
  )
@@ -26,29 +30,47 @@ WHERE evidence.record_id = legacy.record_id
26
30
  AND COALESCE(evidence.source_item_id, '') = COALESCE(legacy.source_item_id, '')
27
31
  AND evidence.relation = legacy.relation;
28
32
 
33
+ WITH legacy AS (
34
+ SELECT
35
+ r.record_id,
36
+ source.item_id AS source_item_id,
37
+ COALESCE(json_extract(j.value, '$.relation'), 'supports') AS relation,
38
+ MAX(json_extract(j.value, '$.sourceText')) AS excerpt,
39
+ MAX(json_extract(j.value, '$.confidence')) AS confidence,
40
+ MAX(CAST(strftime('%s', json_extract(j.value, '$.observedAt')) AS INTEGER) * 1000) AS observed_at,
41
+ MAX(json_extract(j.value, '$.sessionKey')) AS session_key,
42
+ MAX(json_extract(j.value, '$.turnId')) AS turn_id,
43
+ MAX(json_extract(j.value, '$.toolCallId')) AS tool_call_id,
44
+ MAX(r.created_at) AS created_at
45
+ FROM memory_records r
46
+ JOIN json_each(r.evidence_json) j
47
+ LEFT JOIN knowledge_source_items source
48
+ ON source.item_id = json_extract(j.value, '$.sourceItemId')
49
+ WHERE json_valid(r.evidence_json)
50
+ GROUP BY r.record_id, source_item_id, relation
51
+ )
29
52
  INSERT INTO memory_evidence (
30
53
  evidence_id, record_id, source_item_id, relation, excerpt, confidence,
31
54
  observed_at, session_key, turn_id, tool_call_id, created_at
32
55
  )
33
56
  SELECT
34
57
  lower(hex(randomblob(16))),
35
- r.record_id,
36
- json_extract(j.value, '$.sourceItemId'),
37
- COALESCE(json_extract(j.value, '$.relation'), 'supports'),
38
- json_extract(j.value, '$.sourceText'),
39
- json_extract(j.value, '$.confidence'),
40
- CAST(strftime('%s', json_extract(j.value, '$.observedAt')) AS INTEGER) * 1000,
41
- json_extract(j.value, '$.sessionKey'),
42
- json_extract(j.value, '$.turnId'),
43
- json_extract(j.value, '$.toolCallId'),
44
- r.created_at
45
- FROM memory_records r, json_each(r.evidence_json) j
46
- WHERE json_valid(r.evidence_json)
47
- AND NOT EXISTS (
48
- SELECT 1 FROM memory_evidence e
49
- WHERE e.record_id = r.record_id
50
- AND COALESCE(e.source_item_id, '') = COALESCE(json_extract(j.value, '$.sourceItemId'), '')
51
- AND e.relation = COALESCE(json_extract(j.value, '$.relation'), 'supports')
52
- );
58
+ legacy.record_id,
59
+ legacy.source_item_id,
60
+ legacy.relation,
61
+ legacy.excerpt,
62
+ legacy.confidence,
63
+ legacy.observed_at,
64
+ legacy.session_key,
65
+ legacy.turn_id,
66
+ legacy.tool_call_id,
67
+ legacy.created_at
68
+ FROM legacy
69
+ WHERE NOT EXISTS (
70
+ SELECT 1 FROM memory_evidence e
71
+ WHERE e.record_id = legacy.record_id
72
+ AND COALESCE(e.source_item_id, '') = COALESCE(legacy.source_item_id, '')
73
+ AND e.relation = legacy.relation
74
+ );
53
75
 
54
76
  ALTER TABLE memory_records DROP COLUMN evidence_json;
@@ -81,11 +81,7 @@ function attentionDetail(kind, status, locale, timeoutSeconds) {
81
81
  }
82
82
  function decisionFromTask(model, projectName) {
83
83
  const item = model.attention[0];
84
- if (!item || ![
85
- "input_required",
86
- "approval_required",
87
- "dependency_blocked"
88
- ].includes(item.kind)) return null;
84
+ if (!item || !["input_required", "approval_required"].includes(item.kind)) return null;
89
85
  const task = model.task;
90
86
  return {
91
87
  id: `task:${task.id}`,
@@ -13,9 +13,9 @@ import { ModelTaskContractPlanner, parseTaskContractResponse } from "./task-cont
13
13
  import { assembleTaskContext, buildTaskExecutionDirective, getTaskContextManifest, getTaskExecutionBrief } from "./task-context-assembler.js";
14
14
  import { TaskRunCoordinator } from "./task-run-coordinator.js";
15
15
  import { ProjectMonitoringService, decideProactiveDisposition } from "./project-monitoring-service.js";
16
- import { ProjectOperatingViewService } from "./project-operating-view-service.js";
16
+ import { ProjectOperatingViewService, projectTaskLane } from "./project-operating-view-service.js";
17
17
  import { TaskValueMetricsService } from "./task-value-metrics-service.js";
18
18
  import { TaskOutboxDispatcher } from "./task-outbox-dispatcher.js";
19
19
  import { TaskRunDispatcher } from "./task-run-dispatcher.js";
20
20
  import { TaskSignalService } from "./task-signal-service.js";
21
- export { AttentionGovernor, HomeQueryService, ModelTaskContractPlanner, ProjectMonitoringService, ProjectOperatingViewService, TaskApplicationService, TaskContextRepository, TaskDependencyError, TaskDependencyService, TaskOutboxDispatcher, TaskReadModelProjector, TaskRepository, TaskRunCoordinator, TaskRunDispatcher, TaskRunRepository, TaskSignalService, TaskValueMetricsService, TaskWorkflowCoordinator, assembleTaskContext, buildHomeBriefing, buildTaskExecutionDirective, decideProactiveDisposition, decisionFromTask, defineTaskContract, getTaskContextManifest, getTaskExecutionBrief, parseTaskContractResponse, resolveExecutionContext };
21
+ export { AttentionGovernor, HomeQueryService, ModelTaskContractPlanner, ProjectMonitoringService, ProjectOperatingViewService, TaskApplicationService, TaskContextRepository, TaskDependencyError, TaskDependencyService, TaskOutboxDispatcher, TaskReadModelProjector, TaskRepository, TaskRunCoordinator, TaskRunDispatcher, TaskRunRepository, TaskSignalService, TaskValueMetricsService, TaskWorkflowCoordinator, assembleTaskContext, buildHomeBriefing, buildTaskExecutionDirective, decideProactiveDisposition, decisionFromTask, defineTaskContract, getTaskContextManifest, getTaskExecutionBrief, parseTaskContractResponse, projectTaskLane, resolveExecutionContext };
@@ -1,5 +1,6 @@
1
- import type { ProjectOperatingView } from '@xopcai/gateway-contract';
1
+ import type { ProjectOperatingView, ProjectTaskCard } from '@xopcai/gateway-contract';
2
2
  import type { ProjectService } from '../projects/index.js';
3
+ export declare function projectTaskLane(card: Pick<ProjectTaskCard, 'phase' | 'operationalState' | 'attention'>): ProjectTaskCard['lane'];
3
4
  export declare class ProjectOperatingViewService {
4
5
  #private;
5
6
  private readonly projects;
@@ -4,14 +4,15 @@ import { TaskReadModelProjector } from "./task-read-model-projector.js";
4
4
  import { TaskDependencyService } from "./task-dependency-service.js";
5
5
  import { ProjectMonitoringService } from "./project-monitoring-service.js";
6
6
  //#region src/tasks/project-operating-view-service.ts
7
- function lane(card) {
7
+ function projectTaskLane(card) {
8
8
  if (card.phase === "closed") return "done";
9
- if (card.operationalState === "waiting" || card.operationalState === "blocked") return "needs_user";
9
+ if (card.attention.some((item) => item.kind === "input_required" || item.kind === "approval_required")) return "needs_user";
10
10
  if ([
11
11
  "queued",
12
12
  "running",
13
13
  "verifying"
14
14
  ].includes(card.operationalState)) return "moving";
15
+ if (card.operationalState === "waiting" || card.operationalState === "blocked") return "waiting";
15
16
  return "ready";
16
17
  }
17
18
  var ProjectOperatingViewService = class {
@@ -48,7 +49,7 @@ var ProjectOperatingViewService = class {
48
49
  };
49
50
  return {
50
51
  ...base,
51
- lane: lane(base)
52
+ lane: projectTaskLane(base)
52
53
  };
53
54
  });
54
55
  const recentReceipts = projectTasks.flatMap((task) => this.#runs.listReceipts(task.id, 10)).sort((a, b) => b.finalizedAt - a.finalizedAt).slice(0, 10);
@@ -56,6 +57,7 @@ var ProjectOperatingViewService = class {
56
57
  return {
57
58
  project,
58
59
  tasks: cards.sort((a, b) => b.updatedAt - a.updatedAt),
60
+ dependencyEdges: this.#dependencies.listProjectEdges(project.id),
59
61
  blockers: cards.flatMap((card) => card.attention.map((item) => ({
60
62
  id: item.sourceId ?? `${card.id}:${item.kind}`,
61
63
  kind: item.kind,
@@ -74,4 +76,4 @@ var ProjectOperatingViewService = class {
74
76
  }
75
77
  };
76
78
  //#endregion
77
- export { ProjectOperatingViewService };
79
+ export { ProjectOperatingViewService, projectTaskLane };
@@ -1,4 +1,4 @@
1
- import type { TaskDependencySummary } from '@xopcai/gateway-contract';
1
+ import type { ProjectTaskDependencyEdge, TaskDependencySummary } from '@xopcai/gateway-contract';
2
2
  import { type TaskAggregate } from './task-repository.js';
3
3
  export type TaskDependencyErrorCode = 'not_found' | 'conflict' | 'invalid_dependency' | 'cycle';
4
4
  export declare class TaskDependencyError extends Error {
@@ -10,6 +10,7 @@ export declare class TaskDependencyService {
10
10
  listDependencies(taskId: string): TaskDependencySummary[];
11
11
  listDependents(taskId: string): TaskDependencySummary[];
12
12
  listBlocking(taskId: string): TaskDependencySummary[];
13
+ listProjectEdges(projectId: string): ProjectTaskDependencyEdge[];
13
14
  listReadyDependents(taskId: string): TaskAggregate[];
14
15
  replace(input: {
15
16
  taskId: string;
@@ -23,6 +23,21 @@ var TaskDependencyService = class {
23
23
  listBlocking(taskId) {
24
24
  return this.listDependencies(taskId).filter((dependency) => dependency.phase !== "closed" || dependency.resolution !== "done");
25
25
  }
26
+ listProjectEdges(projectId) {
27
+ return getSqliteDatabase().prepare(`SELECT edge.depends_on_task_id AS dependency_task_id,
28
+ edge.task_id AS dependent_task_id
29
+ FROM task_dependencies edge
30
+ JOIN tasks dependency ON dependency.task_id = edge.depends_on_task_id
31
+ JOIN tasks dependent ON dependent.task_id = edge.task_id
32
+ WHERE dependency.project_id = ? AND dependent.project_id = ?
33
+ ORDER BY edge.created_at ASC, edge.depends_on_task_id ASC, edge.task_id ASC`).all(projectId, projectId).map((row) => {
34
+ const edge = row;
35
+ return {
36
+ dependencyTaskId: edge.dependency_task_id,
37
+ dependentTaskId: edge.dependent_task_id
38
+ };
39
+ });
40
+ }
26
41
  listReadyDependents(taskId) {
27
42
  return getSqliteDatabase().prepare(`SELECT dependent.task_id
28
43
  FROM task_dependencies completed_edge
@@ -3,8 +3,8 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
4
4
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
5
5
  import { parseModelRef } from "../../agent/models/selection.js";
6
- import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
7
6
  import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
7
+ import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
8
8
  import { buildTuiTranscriptTree, transcriptTreeEntryIdToRowNumber } from "../tui-transcript-tree.js";
9
9
  import { computeTuiSessionStats } from "../tui-session-stats.js";
10
10
  import { createRequire } from "node:module";
@@ -6,8 +6,8 @@ import { tmpdir } from "node:os";
6
6
  import { join } from "node:path";
7
7
  import { chmodSync, createWriteStream, existsSync, mkdirSync, rmSync } from "node:fs";
8
8
  import { randomBytes } from "node:crypto";
9
- import { Readable } from "node:stream";
10
9
  import { pipeline } from "node:stream/promises";
10
+ import { Readable } from "node:stream";
11
11
  //#region src/tunnel/frpc-binary.ts
12
12
  init_paths();
13
13
  init_logger();
@@ -14,7 +14,8 @@ export type UserContextScope = {
14
14
  type: 'global' | 'workspace' | 'project' | 'session';
15
15
  id?: string;
16
16
  };
17
- export type UnderstandingKind = 'preference' | 'boundary' | 'relationship' | 'routine' | 'current_state' | 'long_term_goal' | 'project_context' | 'task_lesson' | 'derived_insight';
17
+ export declare const UNDERSTANDING_KINDS: readonly ["preference", "boundary", "relationship", "routine", "current_state", "long_term_goal", "project_context", "task_lesson", "derived_insight"];
18
+ export type UnderstandingKind = typeof UNDERSTANDING_KINDS[number];
18
19
  export type UnderstandingStatus = 'candidate' | 'active' | 'needs_review' | 'stale' | 'archived' | 'rejected';
19
20
  export type UserUnderstanding = {
20
21
  id: string;