@xopcai/xopc 0.0.303 → 0.0.307

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 (431) hide show
  1. package/README.md +4 -4
  2. package/README.zh-CN.md +4 -4
  3. package/dist/browser-ext/dist/assets/{auth-B_9ZuGDx.js → auth-C3yV1y_l.js} +67 -22
  4. package/dist/browser-ext/dist/background.js +4 -4
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +3 -3
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/feishu/xopc.extension.json +0 -3
  9. package/dist/extensions/telegram/xopc.extension.json +1 -4
  10. package/dist/extensions/weixin/xopc.extension.json +0 -3
  11. package/dist/gateway/static/root/assets/{activity-store-DCi5rh4e.js → activity-store-wgSB2HYK.js} +1 -1
  12. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Ch3DzUvP.js → agent-avatar-dicebear-CZeQo09T.js} +1 -1
  13. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BPsRb9Ck.js +1 -0
  14. package/dist/gateway/static/root/assets/{agents-DXHD-ST3.js → agents-BlrHMbRx.js} +1 -1
  15. package/dist/gateway/static/root/assets/{api-CAV9PN9i.js → api-BKHmTb0w.js} +1 -1
  16. package/dist/gateway/static/root/assets/api-DFOlahZv.js +1 -0
  17. package/dist/gateway/static/root/assets/app-management-settings-panel-Bzw4fQP8.js +1 -0
  18. package/dist/gateway/static/root/assets/appearance-settings-8GZpUXva.js +1 -0
  19. package/dist/gateway/static/root/assets/apps-page-BkQQtIxH.js +1 -0
  20. package/dist/gateway/static/root/assets/{archive-plugin-BKGzaVvM.js → archive-plugin-CQ2NaoHb.js} +1 -1
  21. package/dist/gateway/static/root/assets/{attachment-load-8bARdLnp.js → attachment-load-BFi1H7yJ.js} +1 -1
  22. package/dist/gateway/static/root/assets/{automations-page-BAEenyzx.js → automations-page-CDBXcii_.js} +1 -1
  23. package/dist/gateway/static/root/assets/automations-workspace-CUpiTTiY.js +6 -0
  24. package/dist/gateway/static/root/assets/{binary-plugins-Cv3GS9Eo.js → binary-plugins-D07eWmOx.js} +1 -1
  25. package/dist/gateway/static/root/assets/{block-editor-D4ZIVQbk.css → block-editor-BdOTO0Yo.css} +1 -1
  26. package/dist/gateway/static/root/assets/{block-editor-DUeb92LG.js → block-editor-CtVnjyYU.js} +3 -3
  27. package/dist/gateway/static/root/assets/{browser-automation-inputs-BGT0xoTv.js → browser-automation-inputs-BzkJog8e.js} +1 -1
  28. package/dist/gateway/static/root/assets/{browser-automations-page-D1O22WIf.js → browser-automations-page-DyrSbDdG.js} +2 -2
  29. package/dist/gateway/static/root/assets/browser-settings-page-CqTxLpil.js +3 -0
  30. package/dist/gateway/static/root/assets/button-CS04eWY9.js +1 -0
  31. package/dist/gateway/static/root/assets/capabilities-settings-panel-BZ_-pnS6.js +8 -0
  32. package/dist/gateway/static/root/assets/channels-settings-DAD9qE3J.js +1 -0
  33. package/dist/gateway/static/root/assets/{channels-status-swr-C_icwbWj.js → channels-status-swr-B2JwuTjG.js} +1 -1
  34. package/dist/gateway/static/root/assets/{chat-terminal-dock-D-JYPVYl.js → chat-terminal-dock-B62SZdAo.js} +2 -2
  35. package/dist/gateway/static/root/assets/{computer-settings-page-Bcfp948A.js → computer-settings-page-ClSresNq.js} +1 -1
  36. package/dist/gateway/static/root/assets/connector-service-page-CPqVmNvx.js +1 -0
  37. package/dist/gateway/static/root/assets/connectors-page-BUQyg3CW.js +2 -0
  38. package/dist/gateway/static/root/assets/cron-expression-CTMi_tql.js +2 -0
  39. package/dist/gateway/static/root/assets/date-picker-B71AJK50.js +1 -0
  40. package/dist/gateway/static/root/assets/{dependency-picker-UtoUm57Q.js → dependency-picker-DlyGK-kA.js} +1 -1
  41. package/dist/gateway/static/root/assets/{desktop-pet-Bryx7gRM.js → desktop-pet-DGkbTE8_.js} +1 -1
  42. package/dist/gateway/static/root/assets/desktop-pet-settings-BY8r9j66.js +1 -0
  43. package/dist/gateway/static/root/assets/device-pairing-wizard-DzRrgd59.js +1 -0
  44. package/dist/gateway/static/root/assets/{extension-debug-page-DQlFTVBx.js → extension-debug-page-L8Mm1n3A.js} +1 -1
  45. package/dist/gateway/static/root/assets/{extension-page-BSsqRDXh.js → extension-page-CFc4vSNU.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-settings-page-DbVZv9ve.js → extension-settings-page-B5zWyHr3.js} +1 -1
  47. package/dist/gateway/static/root/assets/{gateway-config-swr-D5AM8cyQ.js → gateway-config-swr-B6wHa6ZI.js} +1 -1
  48. package/dist/gateway/static/root/assets/gateway-realtime-B53R0CA4.js +1 -0
  49. package/dist/gateway/static/root/assets/gateway-realtime-store-BLDgrJ30.js +1 -0
  50. package/dist/gateway/static/root/assets/gateway-settings-D7qmTH4R.js +1 -0
  51. package/dist/gateway/static/root/assets/{gateway-startup-retry-CSJWdnFs.js → gateway-startup-retry-DRzGnEV-.js} +1 -1
  52. package/dist/gateway/static/root/assets/{heartbeat-settings-Cxowc29b.js → heartbeat-settings-Glsl3X5b.js} +1 -1
  53. package/dist/gateway/static/root/assets/home-page-s9hDQ8Hc.js +1 -0
  54. package/dist/gateway/static/root/assets/{image-generation-api-BNh604hw.js → image-generation-api-Ck_pyDom.js} +1 -1
  55. package/dist/gateway/static/root/assets/imports-page-ByBX7ome.js +1 -0
  56. package/dist/gateway/static/root/assets/index-RBCkv8a_.js +79 -0
  57. package/dist/gateway/static/root/assets/index-cFU4S35z.css +1 -0
  58. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-C45RlO8a.js +1 -0
  59. package/dist/gateway/static/root/assets/local-app-workbench-page-DP0x2jpR.js +2 -0
  60. package/dist/gateway/static/root/assets/{local-apps-page-CXPaPDGm.js → local-apps-page-C_AQc2bI.js} +1 -1
  61. package/dist/gateway/static/root/assets/{locale-store-DLK05Y1a.js → locale-store-msTfRK8P.js} +1 -1
  62. package/dist/gateway/static/root/assets/logs-page-DvM8Pyok.js +2 -0
  63. package/dist/gateway/static/root/assets/management-settings-D1uwSutV.js +1 -0
  64. package/dist/gateway/static/root/assets/{markdown-view-B8maDRWh.js → markdown-view-BInabSKf.js} +2 -2
  65. package/dist/gateway/static/root/assets/{media-plugins-tSJ0CvcX.js → media-plugins-C4mhf13f.js} +1 -1
  66. package/dist/gateway/static/root/assets/messages-F74LVAiU.js +3 -0
  67. package/dist/gateway/static/root/assets/note-detail-panel-D35sErp2.js +5 -0
  68. package/dist/gateway/static/root/assets/notes-page-8jCDklDn.js +8 -0
  69. package/dist/gateway/static/root/assets/{page-tabs-CQx6H-GS.js → page-tabs-1go_BtX1.js} +1 -1
  70. package/dist/gateway/static/root/assets/{popover-select-DldSX8GX.js → popover-select-9i-ZtHXL.js} +1 -1
  71. package/dist/gateway/static/root/assets/{preview-open-alternatives-A3-bVtdy.js → preview-open-alternatives-DmoSC0j1.js} +1 -1
  72. package/dist/gateway/static/root/assets/{proactive-page-D46cR3sf.js → proactive-page-xAjKTIID.js} +1 -1
  73. package/dist/gateway/static/root/assets/{product-open-page-CujZXOea.js → product-open-page-gmi5LLwM.js} +1 -1
  74. package/dist/gateway/static/root/assets/project-detail-page-BUMQHy_N.js +1 -0
  75. package/dist/gateway/static/root/assets/projects-page-DT-Mt7XR.js +1 -0
  76. package/dist/gateway/static/root/assets/{registry-api-BMFL4vis.js → registry-api-BSWtko7U.js} +1 -1
  77. package/dist/gateway/static/root/assets/remote-access-hub-Clz3byir.js +1 -0
  78. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CR0qvq9C.js → runtime-tools-settings-panel-ClkOoxDl.js} +2 -2
  79. package/dist/gateway/static/root/assets/{schema-form-BUD9lLEE.js → schema-form-BuEmLiaU.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-tQRwktKm.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-DqWg9XS5.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-form-section-BZPCUH6a.js → settings-form-section-Dor39QON.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-page-XoHmqIdm.js → settings-page-Xj-yvIc8.js} +1 -1
  84. package/dist/gateway/static/root/assets/setup-status-panel-BB_sMB7P.js +1 -0
  85. package/dist/gateway/static/root/assets/share-preview-page-BFWZoXdm.js +2 -0
  86. package/dist/gateway/static/root/assets/shares-settings-oDALm4b6.js +1 -0
  87. package/dist/gateway/static/root/assets/skill-reload-api-DmwelnfK.js +1 -0
  88. package/dist/gateway/static/root/assets/skills-page-BE9JXz4U.js +2 -0
  89. package/dist/gateway/static/root/assets/{skills-page.utils-CH-quGxZ.js → skills-page.utils-Ii8qeXhs.js} +1 -1
  90. package/dist/gateway/static/root/assets/{system-settings-panel-CGC7eBso.js → system-settings-panel-Di6OSO-0.js} +1 -1
  91. package/dist/gateway/static/root/assets/task-detail-page-D1AWszc7.js +1 -0
  92. package/dist/gateway/static/root/assets/theme-store-1SZ-HFHX.js +1 -0
  93. package/dist/gateway/static/root/assets/tunnel-api-DDOlOYlj.js +1 -0
  94. package/dist/gateway/static/root/assets/{use-autosave-BydB6x2K.js → use-autosave-CQ8uWNnB.js} +1 -1
  95. package/dist/gateway/static/root/assets/user-model-page-C00i4ea0.js +2 -0
  96. package/dist/gateway/static/root/assets/{voice-api-key-field-CPUDBcag.js → voice-api-key-field-COTzshjL.js} +1 -1
  97. package/dist/gateway/static/root/assets/{voice-config-api-bZqN8-UF.js → voice-config-api-DgJML_uM.js} +1 -1
  98. package/dist/gateway/static/root/assets/{work-discovery-overlay-D_FmJbGH.js → work-discovery-overlay-_URrXbi4.js} +1 -1
  99. package/dist/gateway/static/root/assets/workflow-run-setup-panel-CALs-1nd.js +3 -0
  100. package/dist/gateway/static/root/assets/workflows-page-BUiBjz6m.js +6 -0
  101. package/dist/gateway/static/root/channel-icons/feishu.svg +6 -12
  102. package/dist/gateway/static/root/connector-icons/SOURCES.md +12 -0
  103. package/dist/gateway/static/root/connector-icons/dingtalk-mark.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/tencent-meeting-mark.svg +37 -0
  105. package/dist/gateway/static/root/connector-icons/wps-calendar.svg +14 -0
  106. package/dist/gateway/static/root/connector-icons/wps-docs.svg +14 -0
  107. package/dist/gateway/static/root/connector-icons/wps-mail.svg +7 -0
  108. package/dist/gateway/static/root/index.html +14 -12
  109. package/dist/package.js +1 -1
  110. package/dist/packages/gateway-contract/src/device-pairing.js +100 -7
  111. package/dist/packages/gateway-contract/src/gateway-scopes.js +53 -0
  112. package/dist/packages/gateway-contract/src/index.js +2 -0
  113. package/dist/packages/realtime-client/src/index.js +14 -2
  114. package/dist/packages/realtime-protocol/src/index.js +18 -14
  115. package/dist/src/agent/agent-instance-gateway.d.ts +2 -0
  116. package/dist/src/agent/agent-manager.d.ts +2 -0
  117. package/dist/src/agent/agent-manager.js +40 -12
  118. package/dist/src/agent/agent-scope.d.ts +4 -1
  119. package/dist/src/agent/agent-scope.js +19 -3
  120. package/dist/src/agent/commands/command-isolation.js +11 -9
  121. package/dist/src/agent/commands/command-registry.js +18 -33
  122. package/dist/src/agent/context/audit.js +12 -2
  123. package/dist/src/agent/context/coordinator.d.ts +13 -3
  124. package/dist/src/agent/context/coordinator.js +27 -11
  125. package/dist/src/agent/context/execution-context.js +42 -22
  126. package/dist/src/agent/context/execution-context.types.d.ts +4 -2
  127. package/dist/src/agent/context/execution-scope.d.ts +2 -2
  128. package/dist/src/agent/context/execution-scope.js +1 -1
  129. package/dist/src/agent/context/project-context.d.ts +2 -2
  130. package/dist/src/agent/context/project-context.js +3 -3
  131. package/dist/src/agent/embedded/run-for-session.d.ts +1 -0
  132. package/dist/src/agent/embedded/run-for-session.js +7 -1
  133. package/dist/src/agent/external-tools/composio-provider.js +83 -20
  134. package/dist/src/agent/external-tools/gateway-tools.js +2 -1
  135. package/dist/src/agent/inbound/attachment-pipeline.d.ts +2 -0
  136. package/dist/src/agent/inbound/attachment-pipeline.js +3 -3
  137. package/dist/src/agent/inbound/inbound-loop.js +1 -0
  138. package/dist/src/agent/inbound/turn-dispatcher.js +3 -3
  139. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  140. package/dist/src/agent/mcp/mcp-stdio-transport.js +5 -2
  141. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +1 -1
  142. package/dist/src/agent/memory/compaction-promotion.js +7 -2
  143. package/dist/src/agent/memory/create-memory-manager.js +1 -0
  144. package/dist/src/agent/memory/manager.d.ts +6 -0
  145. package/dist/src/agent/memory/manager.js +74 -39
  146. package/dist/src/agent/memory/runtime.d.ts +3 -3
  147. package/dist/src/agent/memory/runtime.js +11 -4
  148. package/dist/src/agent/orchestration/agent-orchestrator.js +4 -1
  149. package/dist/src/agent/prompt/cache-boundary.d.ts +2 -0
  150. package/dist/src/agent/prompt/cache-boundary.js +10 -1
  151. package/dist/src/agent/service/build-direct-message-content.d.ts +1 -0
  152. package/dist/src/agent/service/build-direct-message-content.js +2 -1
  153. package/dist/src/agent/service/direct-turn-helpers.js +3 -2
  154. package/dist/src/agent/service/process-direct-streaming.d.ts +3 -1
  155. package/dist/src/agent/service/process-direct-streaming.js +3 -2
  156. package/dist/src/agent/service/webchat-tts.d.ts +0 -4
  157. package/dist/src/agent/service/webchat-tts.js +20 -19
  158. package/dist/src/agent/tools/factory.js +3 -3
  159. package/dist/src/agent/tools/knowledge-memory-tool.d.ts +2 -2
  160. package/dist/src/agent/tools/knowledge-memory-tool.js +7 -7
  161. package/dist/src/browser/native-messaging-host.js +2 -2
  162. package/dist/src/channels/attachments/voice-stt-webchat.d.ts +3 -0
  163. package/dist/src/channels/attachments/voice-stt-webchat.js +22 -9
  164. package/dist/src/cli/commands/agent.js +2 -0
  165. package/dist/src/cli/commands/config.js +8 -9
  166. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  167. package/dist/src/cli/commands/extension-marketplace.js +69 -44
  168. package/dist/src/cli/commands/extension-pack.js +0 -2
  169. package/dist/src/cli/commands/extension.js +4 -25
  170. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  171. package/dist/src/cli/commands/onboard/gateway.js +2 -1
  172. package/dist/src/cli/utils/init-workspace-core.js +5 -2
  173. package/dist/src/config/index.js +2 -2
  174. package/dist/src/config/loader.d.ts +1 -0
  175. package/dist/src/config/loader.js +14 -1
  176. package/dist/src/config/schema.d.ts +22 -3
  177. package/dist/src/config/schema.js +13 -3
  178. package/dist/src/connectors/account-access.d.ts +4 -0
  179. package/dist/src/connectors/account-access.js +23 -0
  180. package/dist/src/connectors/approval-resume.d.ts +4 -0
  181. package/dist/src/connectors/approval-resume.js +23 -0
  182. package/dist/src/connectors/auth-provider-registry.d.ts +1 -0
  183. package/dist/src/connectors/auth-provider-registry.js +2 -1
  184. package/dist/src/connectors/authorization-attempts.d.ts +21 -0
  185. package/dist/src/connectors/authorization-attempts.js +33 -0
  186. package/dist/src/connectors/builtin-catalog.js +1 -3
  187. package/dist/src/connectors/catalog.js +2 -1
  188. package/dist/src/connectors/china-catalog.d.ts +2 -0
  189. package/dist/src/connectors/china-catalog.js +430 -0
  190. package/dist/src/connectors/composio-backends.d.ts +26 -0
  191. package/dist/src/connectors/composio-backends.js +65 -0
  192. package/dist/src/connectors/composio-catalog.js +2 -1
  193. package/dist/src/connectors/composio-managed-client.js +3 -1
  194. package/dist/src/connectors/composio-managed-events.js +5 -2
  195. package/dist/src/connectors/composio-session-types.d.ts +2 -0
  196. package/dist/src/connectors/composio-sessions.d.ts +11 -2
  197. package/dist/src/connectors/composio-sessions.js +137 -35
  198. package/dist/src/connectors/composio-triggers.js +4 -2
  199. package/dist/src/connectors/composio.d.ts +11 -8
  200. package/dist/src/connectors/composio.js +68 -84
  201. package/dist/src/connectors/connected-source-ingestion.js +4 -3
  202. package/dist/src/connectors/connection-recovery-service.js +25 -13
  203. package/dist/src/connectors/connector-identity.d.ts +2 -0
  204. package/dist/src/connectors/connector-identity.js +18 -5
  205. package/dist/src/connectors/content-enrichment.js +1 -1
  206. package/dist/src/connectors/instances.js +1 -7
  207. package/dist/src/connectors/learning-coordinator.js +4 -3
  208. package/dist/src/connectors/materialize.js +14 -1
  209. package/dist/src/connectors/policy.d.ts +1 -1
  210. package/dist/src/connectors/policy.js +1 -1
  211. package/dist/src/connectors/principal.js +24 -3
  212. package/dist/src/connectors/providers.d.ts +1 -0
  213. package/dist/src/connectors/providers.js +14 -2
  214. package/dist/src/connectors/runtime-adapter-registry.js +4 -9
  215. package/dist/src/connectors/secret-store.d.ts +4 -1
  216. package/dist/src/connectors/secret-store.js +7 -3
  217. package/dist/src/connectors/source-change-publisher.js +4 -2
  218. package/dist/src/connectors/types.d.ts +16 -11
  219. package/dist/src/connectors/workflow-preflight.d.ts +2 -1
  220. package/dist/src/connectors/workflow-preflight.js +20 -3
  221. package/dist/src/execution-environments/local-worktree-manager.js +17 -15
  222. package/dist/src/execution-environments/store.js +4 -2
  223. package/dist/src/execution-environments/types.d.ts +3 -0
  224. package/dist/src/execution-environments/types.js +2 -1
  225. package/dist/src/execution-environments/worktree-safety.d.ts +8 -0
  226. package/dist/src/execution-environments/worktree-safety.js +43 -0
  227. package/dist/src/extensions/activation-planner.d.ts +1 -1
  228. package/dist/src/extensions/activation-planner.js +1 -1
  229. package/dist/src/extensions/api-version.d.ts +4 -0
  230. package/dist/src/extensions/api-version.js +15 -0
  231. package/dist/src/extensions/api.d.ts +3 -9
  232. package/dist/src/extensions/api.js +26 -32
  233. package/dist/src/extensions/config-validation.d.ts +8 -0
  234. package/dist/src/extensions/config-validation.js +25 -0
  235. package/dist/src/extensions/extension-registry-impl.d.ts +20 -9
  236. package/dist/src/extensions/extension-registry-impl.js +79 -11
  237. package/dist/src/extensions/hooks.d.ts +1 -1
  238. package/dist/src/extensions/index.d.ts +2 -1
  239. package/dist/src/extensions/install-transaction.d.ts +2 -0
  240. package/dist/src/extensions/install-transaction.js +32 -21
  241. package/dist/src/extensions/install.js +18 -1
  242. package/dist/src/extensions/loader.d.ts +5 -5
  243. package/dist/src/extensions/loader.js +109 -47
  244. package/dist/src/extensions/lockfile.d.ts +3 -5
  245. package/dist/src/extensions/lockfile.js +41 -14
  246. package/dist/src/extensions/normalize-manifest.js +6 -60
  247. package/dist/src/extensions/sdk/index.d.ts +3 -2
  248. package/dist/src/extensions/sdk/index.js +2 -2
  249. package/dist/src/extensions/sdk/testing.js +0 -4
  250. package/dist/src/extensions/security.js +5 -7
  251. package/dist/src/extensions/types/core.d.ts +0 -5
  252. package/dist/src/extensions/types/index.d.ts +1 -1
  253. package/dist/src/extensions/types/manifest.d.ts +1 -25
  254. package/dist/src/extensions/types/providers.d.ts +1 -1
  255. package/dist/src/extensions/types/registration.d.ts +0 -12
  256. package/dist/src/extensions/update.js +71 -30
  257. package/dist/src/gateway/heartbeat/service.js +2 -2
  258. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
  259. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +47 -10
  260. package/dist/src/gateway/hono/routes/connectors.js +208 -17
  261. package/dist/src/gateway/hono/routes/context-sources.js +1 -1
  262. package/dist/src/gateway/hono/routes/devices.js +10 -7
  263. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +6 -0
  264. package/dist/src/gateway/hono/routes/extension-gateway.js +0 -33
  265. package/dist/src/gateway/hono/routes/home.js +4 -1
  266. package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -1
  267. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  268. package/dist/src/gateway/hono/routes/realtime.js +30 -8
  269. package/dist/src/gateway/hono/routes/user-model.js +25 -6
  270. package/dist/src/gateway/index.js +4 -1
  271. package/dist/src/gateway/lock.d.ts +2 -0
  272. package/dist/src/gateway/lock.js +31 -14
  273. package/dist/src/gateway/run-loop.js +2 -1
  274. package/dist/src/gateway/security/gateway-scopes.d.ts +2 -5
  275. package/dist/src/gateway/security/gateway-scopes.js +3 -45
  276. package/dist/src/gateway/security/index.js +2 -1
  277. package/dist/src/gateway/service.js +11 -7
  278. package/dist/src/heartbeat/index.js +1 -1
  279. package/dist/src/imports/importService.d.ts +1 -1
  280. package/dist/src/imports/inventory.js +16 -2
  281. package/dist/src/imports/productImport.js +5 -5
  282. package/dist/src/imports/types.d.ts +3 -3
  283. package/dist/src/infra/exec.d.ts +2 -2
  284. package/dist/src/infra/exec.js +32 -27
  285. package/dist/src/infra/run-command.js +15 -50
  286. package/dist/src/infra/update-restart.js +1 -1
  287. package/dist/src/knowledge/connected-knowledge-pipeline.js +13 -3
  288. package/dist/src/knowledge-memory/domain.d.ts +17 -1
  289. package/dist/src/knowledge-memory/index.js +2 -2
  290. package/dist/src/knowledge-memory/repository.d.ts +26 -4
  291. package/dist/src/knowledge-memory/repository.js +171 -36
  292. package/dist/src/mcp/channel-bridge.js +7 -3
  293. package/dist/src/media-understanding/registry.js +6 -1
  294. package/dist/src/migrations/knowledge-memory-read-policy-config.d.ts +2 -0
  295. package/dist/src/migrations/knowledge-memory-read-policy-config.js +48 -0
  296. package/dist/src/migrations/runner.js +2 -1
  297. package/dist/src/proactive/follow-ups.js +2 -1
  298. package/dist/src/process/bounded-output.d.ts +10 -0
  299. package/dist/src/process/bounded-output.js +41 -0
  300. package/dist/src/process/kill-tree.d.ts +6 -17
  301. package/dist/src/process/kill-tree.js +43 -75
  302. package/dist/src/process/process-spec.d.ts +39 -0
  303. package/dist/src/process/process-spec.js +13 -0
  304. package/dist/src/process/run-process.d.ts +4 -0
  305. package/dist/src/process/run-process.js +97 -0
  306. package/dist/src/providers/plugin-registry.d.ts +1 -1
  307. package/dist/src/providers/plugin-registry.js +6 -0
  308. package/dist/src/realtime/runtime.js +3 -1
  309. package/dist/src/session/store.js +1 -1
  310. package/dist/src/storage/sqlite/connection-wait-repository.d.ts +3 -0
  311. package/dist/src/storage/sqlite/connection-wait-repository.js +63 -2
  312. package/dist/src/storage/sqlite/connector-account-repository.d.ts +6 -0
  313. package/dist/src/storage/sqlite/connector-account-repository.js +35 -7
  314. package/dist/src/storage/sqlite/connector-repository.js +15 -10
  315. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +1 -1
  316. package/dist/src/storage/sqlite/device-pairing-approval.js +1 -1
  317. package/dist/src/storage/sqlite/index.d.ts +1 -1
  318. package/dist/src/storage/sqlite/index.js +6 -4
  319. package/dist/src/storage/sqlite/migrations/180_execution_environment_ownership.sql +7 -0
  320. package/dist/src/storage/sqlite/migrations/181_knowledge_item_status_events.sql +12 -0
  321. package/dist/src/storage/sqlite/migrations/182_connector_account_policies.sql +92 -0
  322. package/dist/src/storage/sqlite/migrations/183_connector_backend_consistency.sql +20 -0
  323. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  324. package/dist/src/storage/sqlite/migrations/runner.js +7 -7
  325. package/dist/src/storage/sqlite/schema.js +1 -1
  326. package/dist/src/storage/sqlite/schema.sql +13 -0
  327. package/dist/src/storage/sqlite/transcript-repository.d.ts +4 -0
  328. package/dist/src/storage/sqlite/transcript-repository.js +36 -1
  329. package/dist/src/tasks/home-query-service.js +3 -3
  330. package/dist/src/tui/backends/embedded-backend.d.ts +24 -8
  331. package/dist/src/tui/backends/embedded-backend.js +114 -10
  332. package/dist/src/tui/backends/gateway-realtime-backend.d.ts +18 -0
  333. package/dist/src/tui/backends/gateway-realtime-backend.js +31 -4
  334. package/dist/src/tui/components/assistant-message.d.ts +4 -1
  335. package/dist/src/tui/components/assistant-message.js +10 -2
  336. package/dist/src/tui/components/cell-render-mode.d.ts +4 -0
  337. package/dist/src/tui/components/cell-render-mode.js +1 -0
  338. package/dist/src/tui/components/chat-log.d.ts +17 -4
  339. package/dist/src/tui/components/chat-log.js +68 -50
  340. package/dist/src/tui/components/custom-editor.d.ts +2 -2
  341. package/dist/src/tui/components/custom-editor.js +5 -1
  342. package/dist/src/tui/components/pending-input-preview.d.ts +9 -0
  343. package/dist/src/tui/components/pending-input-preview.js +33 -0
  344. package/dist/src/tui/components/semantic-cell.d.ts +17 -0
  345. package/dist/src/tui/components/semantic-cell.js +29 -0
  346. package/dist/src/tui/components/tool-execution.d.ts +5 -1
  347. package/dist/src/tui/components/tool-execution.js +33 -10
  348. package/dist/src/tui/components/transcript-overlay.d.ts +29 -0
  349. package/dist/src/tui/components/transcript-overlay.js +114 -0
  350. package/dist/src/tui/components/tui-bottom-bar.js +3 -1
  351. package/dist/src/tui/components/user-message.d.ts +5 -1
  352. package/dist/src/tui/components/user-message.js +12 -1
  353. package/dist/src/tui/extension-host/load-extensions.d.ts +1 -1
  354. package/dist/src/tui/extension-host/runtime-context.js +2 -1
  355. package/dist/src/tui/extension-host/runtime.d.ts +1 -1
  356. package/dist/src/tui/format-tui-hotkeys.js +8 -1
  357. package/dist/src/tui/tui-agent-events.js +31 -0
  358. package/dist/src/tui/tui-backend.d.ts +23 -11
  359. package/dist/src/tui/tui-backend.js +1 -9
  360. package/dist/src/tui/tui-chat-input-state.d.ts +25 -0
  361. package/dist/src/tui/tui-chat-input-state.js +36 -0
  362. package/dist/src/tui/tui-command-formatters.js +2 -1
  363. package/dist/src/tui/tui-commands.js +1 -1
  364. package/dist/src/tui/tui-startup-resources.js +1 -1
  365. package/dist/src/tui/tui-types.d.ts +2 -1
  366. package/dist/src/tui/tui-types.js +2 -1
  367. package/dist/src/tui/tui.js +122 -30
  368. package/dist/src/tui/xopc-tui-keybindings.d.ts +23 -3
  369. package/dist/src/tui/xopc-tui-keybindings.js +22 -2
  370. package/dist/src/user-context/access-policy.d.ts +2 -2
  371. package/dist/src/user-context/access-policy.js +10 -2
  372. package/dist/src/user-context/config.d.ts +23 -6
  373. package/dist/src/user-context/config.js +54 -7
  374. package/dist/src/voice/platform-streams.js +11 -1
  375. package/dist/src/voice/realtime/omniEngine.js +13 -1
  376. package/dist/src/voice/realtime/runtime.js +2 -1
  377. package/dist/src/voice/tts/audio.js +1 -1
  378. package/dist/src/voice/tts/speech-registry.js +6 -1
  379. package/dist/src/workflows/domain/definition.d.ts +1 -0
  380. package/dist/src/workflows/domain/validation.js +1 -1
  381. package/dist/src/workflows/service/workflow-run-service.js +14 -0
  382. package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -0
  383. package/dist/src/workflows/service/workflow-session-bridge.js +1 -0
  384. package/package.json +5 -3
  385. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-4oGrNj3m.js +0 -1
  386. package/dist/gateway/static/root/assets/api-fPapljyb.js +0 -1
  387. package/dist/gateway/static/root/assets/app-management-settings-panel-CdXnNtTg.js +0 -1
  388. package/dist/gateway/static/root/assets/appearance-settings-izNAyDhW.js +0 -1
  389. package/dist/gateway/static/root/assets/apps-page-BQb3RCga.js +0 -1
  390. package/dist/gateway/static/root/assets/automations-workspace-5vTl4x0h.js +0 -6
  391. package/dist/gateway/static/root/assets/browser-settings-page-CH9prS-f.js +0 -3
  392. package/dist/gateway/static/root/assets/button-CGlRPNzi.js +0 -1
  393. package/dist/gateway/static/root/assets/capabilities-settings-panel-DMURlZbj.js +0 -8
  394. package/dist/gateway/static/root/assets/channels-settings-CFBS3Yqy.js +0 -1
  395. package/dist/gateway/static/root/assets/connectors-page-DI1c3BMz.js +0 -2
  396. package/dist/gateway/static/root/assets/cron-expression-BJMBFKCh.js +0 -2
  397. package/dist/gateway/static/root/assets/date-picker-BFRIn5y9.js +0 -1
  398. package/dist/gateway/static/root/assets/desktop-pet-settings-DFsyEJUr.js +0 -1
  399. package/dist/gateway/static/root/assets/device-pairing-wizard-C3TQVPRy.js +0 -1
  400. package/dist/gateway/static/root/assets/gateway-settings-DUqVsB3X.js +0 -1
  401. package/dist/gateway/static/root/assets/home-page-CLkumXdN.js +0 -1
  402. package/dist/gateway/static/root/assets/imports-page-DXNfRmk9.js +0 -1
  403. package/dist/gateway/static/root/assets/index-BLRIcVQa.css +0 -1
  404. package/dist/gateway/static/root/assets/index-gheM453N.js +0 -79
  405. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-5Hcec8Xf.js +0 -1
  406. package/dist/gateway/static/root/assets/local-app-workbench-page-BDg1-fcw.js +0 -2
  407. package/dist/gateway/static/root/assets/logs-page-BWZc5jwO.js +0 -2
  408. package/dist/gateway/static/root/assets/management-settings-COa3PhMs.js +0 -1
  409. package/dist/gateway/static/root/assets/messages-C9h8SImu.js +0 -3
  410. package/dist/gateway/static/root/assets/note-detail-panel-D_YGzNcR.js +0 -5
  411. package/dist/gateway/static/root/assets/notes-page-D1f2oI2-.js +0 -8
  412. package/dist/gateway/static/root/assets/project-detail-page-CRlD_Rwv.js +0 -1
  413. package/dist/gateway/static/root/assets/projects-page-mmX0SavY.js +0 -1
  414. package/dist/gateway/static/root/assets/remote-access-hub-Cqr3K6T5.js +0 -1
  415. package/dist/gateway/static/root/assets/sessions-page-CPkvbdJP.js +0 -1
  416. package/dist/gateway/static/root/assets/settings-advanced-gate-Cu0DAbeH.js +0 -1
  417. package/dist/gateway/static/root/assets/setup-status-panel-D8fQF1jZ.js +0 -1
  418. package/dist/gateway/static/root/assets/share-preview-page-BgHqwTuT.js +0 -2
  419. package/dist/gateway/static/root/assets/shares-settings-Id4vRHzI.js +0 -1
  420. package/dist/gateway/static/root/assets/skill-reload-api-BB2Fj_di.js +0 -1
  421. package/dist/gateway/static/root/assets/skills-page-BAwF4LpS.js +0 -2
  422. package/dist/gateway/static/root/assets/task-detail-page-BVjw812D.js +0 -1
  423. package/dist/gateway/static/root/assets/theme-store-KfFEGMlp.js +0 -1
  424. package/dist/gateway/static/root/assets/tunnel-api-Do98Xk05.js +0 -1
  425. package/dist/gateway/static/root/assets/user-model-page-Nv68a4ak.js +0 -2
  426. package/dist/gateway/static/root/assets/workflow-run-setup-panel-1lZ_btki.js +0 -3
  427. package/dist/gateway/static/root/assets/workflows-page-DFOhccm3.js +0 -6
  428. package/dist/src/extensions/when-context.d.ts +0 -6
  429. package/dist/src/extensions/when-context.js +0 -26
  430. package/dist/src/extensions/when-expression.d.ts +0 -11
  431. package/dist/src/extensions/when-expression.js +0 -213
@@ -1,5 +1,5 @@
1
1
  /** App-level bindings wired by xopc TUI (subset of pi coding-agent). */
2
- export type XopcTuiAppKeybinding = 'app.interrupt' | 'app.clear' | 'app.exit' | 'app.suspend' | 'app.thinking.cycle' | 'app.model.cycleForward' | 'app.model.cycleBackward' | 'app.model.select' | 'app.tools.expand' | 'app.thinking.toggle' | 'app.session.resume' | 'app.session.tree' | 'app.session.fork' | 'app.session.togglePath' | 'app.session.toggleSort' | 'app.session.toggleNamedFilter' | 'app.session.rename' | 'app.session.delete' | 'app.session.deleteNoninvasive' | 'app.tree.foldOrUp' | 'app.tree.unfoldOrDown' | 'app.tree.filter.default' | 'app.tree.filter.noTools' | 'app.tree.filter.userOnly' | 'app.tree.filter.labeledOnly' | 'app.tree.filter.all' | 'app.tree.filter.cycleForward' | 'app.tree.filter.cycleBackward' | 'app.tree.editLabel' | 'app.tree.toggleLabelTimestamp' | 'app.editor.external' | 'app.clipboard.pasteImage' | 'app.message.followUp' | 'app.models.save' | 'app.models.enableAll' | 'app.models.clearAll' | 'app.models.toggleProvider' | 'app.models.reorderUp' | 'app.models.reorderDown';
2
+ export type XopcTuiAppKeybinding = 'app.interrupt' | 'app.clear' | 'app.exit' | 'app.suspend' | 'app.thinking.cycle' | 'app.model.cycleForward' | 'app.model.cycleBackward' | 'app.model.select' | 'app.tools.expand' | 'app.thinking.toggle' | 'app.transcript.open' | 'app.transcript.raw' | 'app.session.resume' | 'app.session.tree' | 'app.session.fork' | 'app.session.togglePath' | 'app.session.toggleSort' | 'app.session.toggleNamedFilter' | 'app.session.rename' | 'app.session.delete' | 'app.session.deleteNoninvasive' | 'app.tree.foldOrUp' | 'app.tree.unfoldOrDown' | 'app.tree.filter.default' | 'app.tree.filter.noTools' | 'app.tree.filter.userOnly' | 'app.tree.filter.labeledOnly' | 'app.tree.filter.all' | 'app.tree.filter.cycleForward' | 'app.tree.filter.cycleBackward' | 'app.tree.editLabel' | 'app.tree.toggleLabelTimestamp' | 'app.editor.external' | 'app.clipboard.pasteImage' | 'app.message.followUp' | 'app.message.editQueued' | 'app.message.deleteQueued' | 'app.models.save' | 'app.models.enableAll' | 'app.models.clearAll' | 'app.models.toggleProvider' | 'app.models.reorderUp' | 'app.models.reorderDown';
3
3
  declare module '@earendil-works/pi-tui' {
4
4
  interface Keybindings {
5
5
  'app.interrupt': true;
@@ -12,6 +12,8 @@ declare module '@earendil-works/pi-tui' {
12
12
  'app.model.select': true;
13
13
  'app.tools.expand': true;
14
14
  'app.thinking.toggle': true;
15
+ 'app.transcript.open': true;
16
+ 'app.transcript.raw': true;
15
17
  'app.session.resume': true;
16
18
  'app.session.tree': true;
17
19
  'app.session.fork': true;
@@ -35,6 +37,8 @@ declare module '@earendil-works/pi-tui' {
35
37
  'app.editor.external': true;
36
38
  'app.clipboard.pasteImage': true;
37
39
  'app.message.followUp': true;
40
+ 'app.message.editQueued': true;
41
+ 'app.message.deleteQueued': true;
38
42
  'app.models.save': true;
39
43
  'app.models.enableAll': true;
40
44
  'app.models.clearAll': true;
@@ -81,9 +85,17 @@ export declare const XOPC_TUI_KEYBINDINGS: {
81
85
  readonly description: "Toggle tool output";
82
86
  };
83
87
  readonly 'app.thinking.toggle': {
84
- readonly defaultKeys: "ctrl+t";
88
+ readonly defaultKeys: [];
85
89
  readonly description: "Toggle thinking block display";
86
90
  };
91
+ readonly 'app.transcript.open': {
92
+ readonly defaultKeys: "ctrl+t";
93
+ readonly description: "Open transcript view";
94
+ };
95
+ readonly 'app.transcript.raw': {
96
+ readonly defaultKeys: "alt+r";
97
+ readonly description: "Open raw transcript view";
98
+ };
87
99
  readonly 'app.session.resume': {
88
100
  readonly defaultKeys: "ctrl+shift+p";
89
101
  readonly description: "Session picker";
@@ -173,9 +185,17 @@ export declare const XOPC_TUI_KEYBINDINGS: {
173
185
  readonly description: "Paste image from clipboard";
174
186
  };
175
187
  readonly 'app.message.followUp': {
176
- readonly defaultKeys: "alt+enter";
188
+ readonly defaultKeys: "tab";
177
189
  readonly description: "Queue message while busy (or submit when idle)";
178
190
  };
191
+ readonly 'app.message.editQueued': {
192
+ readonly defaultKeys: "up";
193
+ readonly description: "Edit the last queued message when the composer is empty";
194
+ };
195
+ readonly 'app.message.deleteQueued': {
196
+ readonly defaultKeys: "ctrl+x";
197
+ readonly description: "Delete the last queued message";
198
+ };
179
199
  readonly 'app.models.save': {
180
200
  readonly defaultKeys: "ctrl+s";
181
201
  readonly description: "Save scoped model selection";
@@ -39,9 +39,17 @@ const XOPC_TUI_KEYBINDINGS = {
39
39
  description: "Toggle tool output"
40
40
  },
41
41
  "app.thinking.toggle": {
42
- defaultKeys: "ctrl+t",
42
+ defaultKeys: [],
43
43
  description: "Toggle thinking block display"
44
44
  },
45
+ "app.transcript.open": {
46
+ defaultKeys: "ctrl+t",
47
+ description: "Open transcript view"
48
+ },
49
+ "app.transcript.raw": {
50
+ defaultKeys: "alt+r",
51
+ description: "Open raw transcript view"
52
+ },
45
53
  "app.session.resume": {
46
54
  defaultKeys: "ctrl+shift+p",
47
55
  description: "Session picker"
@@ -131,9 +139,17 @@ const XOPC_TUI_KEYBINDINGS = {
131
139
  description: "Paste image from clipboard"
132
140
  },
133
141
  "app.message.followUp": {
134
- defaultKeys: "alt+enter",
142
+ defaultKeys: "tab",
135
143
  description: "Queue message while busy (or submit when idle)"
136
144
  },
145
+ "app.message.editQueued": {
146
+ defaultKeys: "up",
147
+ description: "Edit the last queued message when the composer is empty"
148
+ },
149
+ "app.message.deleteQueued": {
150
+ defaultKeys: "ctrl+x",
151
+ description: "Delete the last queued message"
152
+ },
137
153
  "app.models.save": {
138
154
  defaultKeys: "ctrl+s",
139
155
  description: "Save scoped model selection"
@@ -191,9 +207,13 @@ const XOPC_TUI_HOTKEY_ORDER = [
191
207
  "app.tree.toggleLabelTimestamp",
192
208
  "app.tools.expand",
193
209
  "app.thinking.toggle",
210
+ "app.transcript.open",
211
+ "app.transcript.raw",
194
212
  "app.editor.external",
195
213
  "app.clipboard.pasteImage",
196
214
  "app.message.followUp",
215
+ "app.message.editQueued",
216
+ "app.message.deleteQueued",
197
217
  "app.models.save",
198
218
  "app.models.enableAll",
199
219
  "app.models.clearAll",
@@ -1,11 +1,11 @@
1
1
  import type { Config } from '../config/schema.js';
2
- import type { KnowledgeSource } from '../knowledge-memory/index.js';
2
+ import type { KnowledgeReadPolicy } from '../knowledge-memory/index.js';
3
3
  export interface UserContextSessionAccess {
4
4
  enabled: boolean;
5
5
  userModel: boolean;
6
6
  knowledge: boolean;
7
7
  crossSessionHistory: boolean;
8
- knowledgeSources: readonly KnowledgeSource[];
8
+ knowledgePolicy: KnowledgeReadPolicy;
9
9
  }
10
10
  /** One policy boundary for every shared-context read and write path. */
11
11
  export declare function resolveUserContextSessionAccess(config: Config | undefined, conversationId: string | undefined): UserContextSessionAccess;
@@ -1,7 +1,9 @@
1
1
  import { getSessionConfig } from "../storage/sqlite/config-repository.js";
2
+ import { init_config, resolveKnowledgeReadPolicy } from "./config.js";
2
3
  import { getConversationRouting } from "../storage/sqlite/conversation-repository.js";
3
4
  import { init_session_key } from "../routing/session-key.js";
4
5
  //#region src/user-context/access-policy.ts
6
+ init_config();
5
7
  init_session_key();
6
8
  /** One policy boundary for every shared-context read and write path. */
7
9
  function resolveUserContextSessionAccess(config, conversationId) {
@@ -10,7 +12,10 @@ function resolveUserContextSessionAccess(config, conversationId) {
10
12
  userModel: false,
11
13
  knowledge: false,
12
14
  crossSessionHistory: false,
13
- knowledgeSources: []
15
+ knowledgePolicy: {
16
+ scopes: [],
17
+ contentSources: []
18
+ }
14
19
  };
15
20
  const session = getConversationRouting(conversationId);
16
21
  const mode = getSessionConfig(conversationId)?.userContextMode ?? "enabled";
@@ -20,7 +25,10 @@ function resolveUserContextSessionAccess(config, conversationId) {
20
25
  userModel: enabled && config.userContext.userModel.enabled,
21
26
  knowledge: enabled && config.userContext.knowledgeMemory.enabled,
22
27
  crossSessionHistory: enabled,
23
- knowledgeSources: enabled && config.userContext.knowledgeMemory.enabled ? config.userContext.knowledgeMemory.sources : []
28
+ knowledgePolicy: enabled && config.userContext.knowledgeMemory.enabled ? resolveKnowledgeReadPolicy(config.userContext.knowledgeMemory) : {
29
+ scopes: [],
30
+ contentSources: []
31
+ }
24
32
  };
25
33
  }
26
34
  //#endregion
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import type { KnowledgeReadPolicy } from '../knowledge-memory/domain.js';
2
3
  export declare const DEFAULT_CONTEXT_COMPACTION_POLICY: {
3
4
  enabled: boolean;
4
5
  triggerThreshold: number;
@@ -75,18 +76,25 @@ export declare const UserModelConfigSchema: z.ZodDefault<z.ZodObject<{
75
76
  staleRetentionDays: z.ZodDefault<z.ZodNumber>;
76
77
  }, z.core.$strict>>;
77
78
  }, z.core.$strict>>;
78
- export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodObject<{
79
+ export declare function normalizeKnowledgeMemoryConfigInput(input: unknown): unknown;
80
+ export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodPreprocess<z.ZodObject<{
79
81
  enabled: z.ZodDefault<z.ZodBoolean>;
80
82
  writePolicy: z.ZodDefault<z.ZodEnum<{
81
83
  allow: "allow";
82
84
  confirm: "confirm";
83
85
  deny: "deny";
84
86
  }>>;
85
- sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
87
+ readScopes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
86
88
  project: "project";
87
89
  session: "session";
90
+ agent: "agent";
88
91
  workspace: "workspace";
92
+ global: "global";
93
+ }>>>;
94
+ contentSources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
95
+ memory: "memory";
89
96
  connector: "connector";
97
+ local_import: "local_import";
90
98
  }>>>;
91
99
  searchStrategy: z.ZodDefault<z.ZodEnum<{
92
100
  "local-first": "local-first";
@@ -95,6 +103,7 @@ export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodObject<{
95
103
  "local-only": "local-only";
96
104
  "external-only": "external-only";
97
105
  }>>;
106
+ searchTimeoutMs: z.ZodDefault<z.ZodNumber>;
98
107
  writeStrategy: z.ZodDefault<z.ZodEnum<{
99
108
  "local-first": "local-first";
100
109
  "external-first": "external-first";
@@ -105,7 +114,7 @@ export declare const KnowledgeMemoryConfigSchema: z.ZodDefault<z.ZodObject<{
105
114
  allowExternalWrites: z.ZodDefault<z.ZodBoolean>;
106
115
  allowedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
107
116
  autoWriteKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
108
- }, z.core.$strict>>;
117
+ }, z.core.$strict>>>;
109
118
  export declare const ContextPlanningConfigSchema: z.ZodDefault<z.ZodObject<{
110
119
  enabled: z.ZodDefault<z.ZodBoolean>;
111
120
  maxAssertions: z.ZodDefault<z.ZodNumber>;
@@ -180,18 +189,24 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
180
189
  staleRetentionDays: z.ZodDefault<z.ZodNumber>;
181
190
  }, z.core.$strict>>;
182
191
  }, z.core.$strict>>;
183
- knowledgeMemory: z.ZodDefault<z.ZodObject<{
192
+ knowledgeMemory: z.ZodDefault<z.ZodPreprocess<z.ZodObject<{
184
193
  enabled: z.ZodDefault<z.ZodBoolean>;
185
194
  writePolicy: z.ZodDefault<z.ZodEnum<{
186
195
  allow: "allow";
187
196
  confirm: "confirm";
188
197
  deny: "deny";
189
198
  }>>;
190
- sources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
199
+ readScopes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
191
200
  project: "project";
192
201
  session: "session";
202
+ agent: "agent";
193
203
  workspace: "workspace";
204
+ global: "global";
205
+ }>>>;
206
+ contentSources: z.ZodDefault<z.ZodArray<z.ZodEnum<{
207
+ memory: "memory";
194
208
  connector: "connector";
209
+ local_import: "local_import";
195
210
  }>>>;
196
211
  searchStrategy: z.ZodDefault<z.ZodEnum<{
197
212
  "local-first": "local-first";
@@ -200,6 +215,7 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
200
215
  "local-only": "local-only";
201
216
  "external-only": "external-only";
202
217
  }>>;
218
+ searchTimeoutMs: z.ZodDefault<z.ZodNumber>;
203
219
  writeStrategy: z.ZodDefault<z.ZodEnum<{
204
220
  "local-first": "local-first";
205
221
  "external-first": "external-first";
@@ -210,7 +226,7 @@ export declare const UserContextConfigSchema: z.ZodDefault<z.ZodObject<{
210
226
  allowExternalWrites: z.ZodDefault<z.ZodBoolean>;
211
227
  allowedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
212
228
  autoWriteKinds: z.ZodOptional<z.ZodArray<z.ZodString>>;
213
- }, z.core.$strict>>;
229
+ }, z.core.$strict>>>;
214
230
  contextPlanning: z.ZodDefault<z.ZodObject<{
215
231
  enabled: z.ZodDefault<z.ZodBoolean>;
216
232
  maxAssertions: z.ZodDefault<z.ZodNumber>;
@@ -240,3 +256,4 @@ export type UserContextConfig = z.infer<typeof UserContextConfigSchema>;
240
256
  export type UserModelConfig = z.infer<typeof UserModelConfigSchema>;
241
257
  export type KnowledgeMemoryConfig = z.infer<typeof KnowledgeMemoryConfigSchema>;
242
258
  export type ContextPlanningConfig = z.infer<typeof ContextPlanningConfigSchema>;
259
+ export declare function resolveKnowledgeReadPolicy(config: KnowledgeMemoryConfig): KnowledgeReadPolicy;
@@ -10,6 +10,32 @@ function isValidTimeZone(value) {
10
10
  return false;
11
11
  }
12
12
  }
13
+ function normalizeKnowledgeMemoryConfigInput(input) {
14
+ if (!input || typeof input !== "object" || Array.isArray(input)) return input;
15
+ const memory = input;
16
+ if (!Array.isArray(memory.sources)) return input;
17
+ const oldSources = memory.sources.filter((source) => typeof source === "string");
18
+ const visibilityScopes = new Set([
19
+ "session",
20
+ "workspace",
21
+ "project"
22
+ ]);
23
+ const normalized = { ...memory };
24
+ if (!Array.isArray(normalized.readScopes)) normalized.readScopes = oldSources.filter((source) => visibilityScopes.has(source));
25
+ if (!Array.isArray(normalized.contentSources)) normalized.contentSources = [
26
+ ...oldSources.some((source) => visibilityScopes.has(source)) ? ["memory"] : [],
27
+ ...oldSources.includes("workspace") ? ["local_import"] : [],
28
+ ...oldSources.includes("connector") ? ["connector"] : []
29
+ ];
30
+ delete normalized.sources;
31
+ return normalized;
32
+ }
33
+ function resolveKnowledgeReadPolicy(config) {
34
+ return {
35
+ scopes: config.readScopes,
36
+ contentSources: config.contentSources
37
+ };
38
+ }
13
39
  var DEFAULT_CONTEXT_COMPACTION_POLICY, ContextCompactionPolicySchema, WritePolicySchema, MaintenanceTimeSchema, UserModelConfigSchema, KnowledgeMemoryConfigSchema, ContextPlanningConfigSchema, UserContextConfigSchema;
14
40
  var init_config = __esmMin((() => {
15
41
  init_response_language();
@@ -117,15 +143,27 @@ var init_config = __esmMin((() => {
117
143
  staleRetentionDays: 30
118
144
  }
119
145
  });
120
- KnowledgeMemoryConfigSchema = z.object({
146
+ KnowledgeMemoryConfigSchema = z.preprocess(normalizeKnowledgeMemoryConfigInput, z.object({
121
147
  enabled: z.boolean().default(true),
122
148
  writePolicy: WritePolicySchema.default("confirm"),
123
- sources: z.array(z.enum([
124
- "session",
149
+ readScopes: z.array(z.enum([
150
+ "global",
151
+ "agent",
125
152
  "workspace",
126
153
  "project",
154
+ "session"
155
+ ])).default([
156
+ "global",
157
+ "agent",
158
+ "workspace",
159
+ "project",
160
+ "session"
161
+ ]),
162
+ contentSources: z.array(z.enum([
163
+ "memory",
164
+ "local_import",
127
165
  "connector"
128
- ])).default(["session", "workspace"]),
166
+ ])).default(["memory", "local_import"]),
129
167
  searchStrategy: z.enum([
130
168
  "local-first",
131
169
  "external-first",
@@ -133,6 +171,7 @@ var init_config = __esmMin((() => {
133
171
  "local-only",
134
172
  "external-only"
135
173
  ]).default("fanout"),
174
+ searchTimeoutMs: z.number().int().min(100).max(3e4).default(2e3),
136
175
  writeStrategy: z.enum([
137
176
  "local-first",
138
177
  "external-first",
@@ -143,11 +182,19 @@ var init_config = __esmMin((() => {
143
182
  allowExternalWrites: z.boolean().default(false),
144
183
  allowedProviderIds: z.array(z.string().min(1)).optional(),
145
184
  autoWriteKinds: z.array(z.string().min(1)).optional()
146
- }).strict().default({
185
+ }).strict()).default({
147
186
  enabled: true,
148
187
  writePolicy: "confirm",
149
- sources: ["session", "workspace"],
188
+ readScopes: [
189
+ "global",
190
+ "agent",
191
+ "workspace",
192
+ "project",
193
+ "session"
194
+ ],
195
+ contentSources: ["memory", "local_import"],
150
196
  searchStrategy: "fanout",
197
+ searchTimeoutMs: 2e3,
151
198
  writeStrategy: "local-first",
152
199
  allowExternalWrites: false
153
200
  });
@@ -180,4 +227,4 @@ var init_config = __esmMin((() => {
180
227
  }));
181
228
  //#endregion
182
229
  init_config();
183
- export { ContextCompactionPolicySchema, ContextPlanningConfigSchema, DEFAULT_CONTEXT_COMPACTION_POLICY, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config };
230
+ export { ContextCompactionPolicySchema, ContextPlanningConfigSchema, DEFAULT_CONTEXT_COMPACTION_POLICY, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config, normalizeKnowledgeMemoryConfigInput, resolveKnowledgeReadPolicy };
@@ -46,6 +46,12 @@ function connect(url, token, signal, onEvent, onFailure) {
46
46
  socket,
47
47
  close,
48
48
  fail,
49
+ pause: () => {
50
+ if (!ended && socket.readyState === WebSocket.OPEN) socket.pause();
51
+ },
52
+ resume: () => {
53
+ if (!ended && socket.readyState === WebSocket.OPEN) socket.resume();
54
+ },
49
55
  send: (value) => {
50
56
  if (ended || socket.readyState !== WebSocket.OPEN) throw new Error("Platform voice is not connected");
51
57
  if (socket.bufferedAmount > MAX_BUFFERED_BYTES) throw new Error("Platform voice backpressure limit exceeded");
@@ -180,6 +186,9 @@ async function openPlatformTts(request) {
180
186
  start(value) {
181
187
  controller = value;
182
188
  },
189
+ pull(value) {
190
+ if ((value.desiredSize ?? 0) > 0) connection.resume();
191
+ },
183
192
  cancel() {
184
193
  ended = true;
185
194
  clearTimeout(timer);
@@ -206,8 +215,9 @@ async function openPlatformTts(request) {
206
215
  } else if (event.type === "response.audio.delta") {
207
216
  if (!ready || typeof event.delta !== "string" || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(event.delta)) throw new Error("Invalid platform audio");
208
217
  const bytes = Buffer.from(event.delta, "base64");
209
- if (bytes.length % 2 || (controller.desiredSize ?? 0) < bytes.length) throw new Error("Platform TTS audio buffer exceeded");
218
+ if (bytes.length % 2 || bytes.length > MAX_BUFFERED_BYTES) throw new Error("Invalid platform audio");
210
219
  controller.enqueue(bytes);
220
+ if ((controller.desiredSize ?? 0) <= 0) connection.pause();
211
221
  } else if (event.type === "session.finished") {
212
222
  ended = true;
213
223
  clearTimeout(timer);
@@ -11,10 +11,12 @@ const log = createLogger("Voice:Omni");
11
11
  const MAX_QUEUED_AUDIO_BYTES = 24e3 * 2 * 60;
12
12
  const MAX_PENDING_INPUT_BYTES = 64 * 1024;
13
13
  const UPLOAD_TIMEOUT_MS = 1e4;
14
+ const RESPONSE_START_TIMEOUT_MS = 3e4;
14
15
  const FAILURE_MESSAGES = {
15
16
  OMNI_UPLOAD_TIMEOUT: "The connection to the voice service stopped uploading audio. Check the network to your configured endpoint and reconnect.",
16
17
  OMNI_INPUT_RESET_TIMEOUT: "The voice service did not acknowledge clearing microphone input. Reconnect to continue.",
17
18
  OMNI_START_TIMEOUT: "The voice service did not become ready in time.",
19
+ OMNI_RESPONSE_START_TIMEOUT: "Your speech was transcribed, but the voice model did not start a reply within 30 seconds. Reconnect or select another realtime voice model.",
18
20
  OMNI_CONNECTION_FAILED: "Could not connect to the voice service. Check network and service availability.",
19
21
  OMNI_CONNECTION_REJECTED: "The voice service rejected the connection. Check account access, quota and route configuration.",
20
22
  OMNI_CONNECTION_CLOSED: "The voice service closed the connection.",
@@ -50,6 +52,7 @@ function createOmniVoiceEngine(options) {
50
52
  let uploadingBytes = 0;
51
53
  let uploadTimer;
52
54
  let turnSettled = false;
55
+ let responseStartTimer;
53
56
  const speaking = /* @__PURE__ */ new Set();
54
57
  const turn = new TurnCoordinator(options.silenceDurationMs, (_text, decision, turnId) => {
55
58
  if (closed || failed || muted || inputBlocked) return;
@@ -63,6 +66,10 @@ function createOmniVoiceEngine(options) {
63
66
  options.send("turn.committed", { turnId });
64
67
  turnSettled = true;
65
68
  if (active) publish(active);
69
+ else {
70
+ clearTimeout(responseStartTimer);
71
+ responseStartTimer = setTimeout(() => fail("OMNI_RESPONSE_START_TIMEOUT"), RESPONSE_START_TIMEOUT_MS);
72
+ }
66
73
  });
67
74
  function publish(response) {
68
75
  if (response.published || active !== response) return;
@@ -207,6 +214,7 @@ function createOmniVoiceEngine(options) {
207
214
  function fail(code, details = {}) {
208
215
  if (closed || failed) return;
209
216
  failed = true;
217
+ clearTimeout(responseStartTimer);
210
218
  turn.reset();
211
219
  log.warn({
212
220
  sessionId: options.callId,
@@ -230,6 +238,7 @@ function createOmniVoiceEngine(options) {
230
238
  options.onClose("omni_error", true);
231
239
  }
232
240
  function discardInput() {
241
+ clearTimeout(responseStartTimer);
233
242
  turn.reset();
234
243
  speaking.clear();
235
244
  turnSettled = false;
@@ -327,6 +336,7 @@ function createOmniVoiceEngine(options) {
327
336
  if (recorded.has(String(event.item_id)) || pendingInputs.has(String(event.item_id))) return;
328
337
  inputBlocked = false;
329
338
  pendingInputs.add(String(event.item_id));
339
+ clearTimeout(responseStartTimer);
330
340
  turnSettled = false;
331
341
  speaking.add(String(event.item_id));
332
342
  turn.start(String(event.item_id));
@@ -366,7 +376,8 @@ function createOmniVoiceEngine(options) {
366
376
  recoverable: true
367
377
  });
368
378
  } else if (event.type === "response.created") {
369
- if (muted || inputBlocked || speaking.size > 0) {
379
+ clearTimeout(responseStartTimer);
380
+ if (muted || inputBlocked) {
370
381
  cancellationPending = true;
371
382
  send("response.cancel");
372
383
  return;
@@ -513,6 +524,7 @@ function createOmniVoiceEngine(options) {
513
524
  clearTimeout(timer);
514
525
  clearTimeout(clearTimer);
515
526
  clearTimeout(uploadTimer);
527
+ clearTimeout(responseStartTimer);
516
528
  turn.reset();
517
529
  speaking.clear();
518
530
  inputQueue = [];
@@ -397,7 +397,6 @@ var VoiceRealtimeRuntime = class {
397
397
  unsubscribeSession?.();
398
398
  clearTimeout(startTimer);
399
399
  clearInterval(lifecycleTimer);
400
- abortController.abort(reason);
401
400
  try {
402
401
  await engine?.close();
403
402
  } catch (err) {
@@ -405,6 +404,8 @@ var VoiceRealtimeRuntime = class {
405
404
  err,
406
405
  sessionId: claim?.sessionId
407
406
  }, "Voice cleanup failed");
407
+ } finally {
408
+ abortController.abort(reason);
408
409
  }
409
410
  if (notify) send("session.closed", { reason });
410
411
  detachPrincipal();
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { join } from "path";
4
4
  import { unlink, writeFile } from "fs/promises";
5
- import { spawn } from "child_process";
6
5
  import { tmpdir } from "os";
6
+ import { spawn } from "child_process";
7
7
  //#region src/voice/tts/audio.ts
8
8
  /**
9
9
  * Audio Compression Utilities
@@ -20,6 +20,7 @@ function indexProvider(provider) {
20
20
  */
21
21
  function registerSpeechProvider(provider) {
22
22
  const keys = indexProvider(provider);
23
+ const previous = new Map(keys.map((key) => [key, registry.get(key)]));
23
24
  const conflicts = [];
24
25
  for (const key of keys) if (registry.has(key)) conflicts.push(key);
25
26
  if (conflicts.length > 0) log.warn({
@@ -28,7 +29,11 @@ function registerSpeechProvider(provider) {
28
29
  }, `Speech provider "${provider.id}" overrides existing registration(s): ${conflicts.join(", ")}`);
29
30
  for (const key of keys) registry.set(key, provider);
30
31
  return () => {
31
- for (const key of keys) if (registry.get(key) === provider) registry.delete(key);
32
+ for (const key of keys) if (registry.get(key) === provider) {
33
+ const prior = previous.get(key);
34
+ if (prior) registry.set(key, prior);
35
+ else registry.delete(key);
36
+ }
32
37
  };
33
38
  }
34
39
  /**
@@ -110,6 +110,7 @@ export interface WorkflowDefinitionManifest {
110
110
  }
111
111
  export interface WorkflowConnectorRequirement {
112
112
  connectorId: string;
113
+ accountIds?: string[];
113
114
  scope?: 'read' | 'write' | 'admin';
114
115
  connectionRequired?: boolean;
115
116
  optional?: boolean;
@@ -121,7 +121,7 @@ function validateManifest(value, errors) {
121
121
  field: "manifest.resources"
122
122
  });
123
123
  }
124
- if (value.connectors !== void 0 && (!Array.isArray(value.connectors) || value.connectors.some((connector) => !isRecord(connector) || typeof connector.connectorId !== "string" || connector.scope !== void 0 && ![
124
+ if (value.connectors !== void 0 && (!Array.isArray(value.connectors) || value.connectors.some((connector) => !isRecord(connector) || typeof connector.connectorId !== "string" || connector.accountIds !== void 0 && (!Array.isArray(connector.accountIds) || connector.accountIds.length === 0 || connector.accountIds.some((id) => typeof id !== "string" || !id.trim()) || new Set(connector.accountIds).size !== connector.accountIds.length) || connector.scope !== void 0 && ![
125
125
  "read",
126
126
  "write",
127
127
  "admin"
@@ -195,6 +195,7 @@ var WorkflowRunService = class {
195
195
  agentId: params.agentId,
196
196
  definitionId: params.definitionId,
197
197
  definitionTitle: definition.title,
198
+ connectorAccounts: connectorPreflight.accounts,
198
199
  triggerSource: params.source.kind,
199
200
  goal,
200
201
  parentConversationId: params.parentConversationId,
@@ -386,8 +387,21 @@ var WorkflowRunService = class {
386
387
  httpStatus: 400
387
388
  };
388
389
  }
390
+ const replayConnectors = preflightWorkflowConnectors({
391
+ definition,
392
+ config: this.options.service.currentConfig,
393
+ agentId: params.agentId
394
+ });
395
+ if (!replayConnectors.ok) return {
396
+ ok: false,
397
+ code: "connector_preflight_failed",
398
+ message: replayConnectors.issues.map((issue) => issue.message).join(" "),
399
+ httpStatus: 409,
400
+ details: replayConnectors
401
+ };
389
402
  const { conversationId } = await this.options.sessionBridge.prepareRunSession({
390
403
  runId: replayRunId,
404
+ connectorAccounts: replayConnectors.accounts,
391
405
  agentId: params.agentId,
392
406
  definitionId: existing.run.definitionId,
393
407
  definitionTitle: `${definition.title} replay`,
@@ -11,6 +11,7 @@ export interface PrepareWorkflowRunSessionParams {
11
11
  parentConversationId?: string;
12
12
  projectId?: string;
13
13
  triggerSource?: string;
14
+ connectorAccounts?: Record<string, string[]>;
14
15
  }
15
16
  export interface PrepareWorkflowRunSessionResult {
16
17
  conversationId: string;
@@ -48,6 +48,7 @@ var WorkflowSessionBridge = class {
48
48
  workflowRunId: params.runId,
49
49
  workflowDefinitionId: params.definitionId,
50
50
  workflowGoal: params.goal,
51
+ connectorAccounts: params.connectorAccounts ?? {},
51
52
  deferVisibilityUntilOutput: true,
52
53
  ...params.triggerSource ? { triggerSource: params.triggerSource } : {},
53
54
  ...params.parentConversationId ? { parentConversationId: params.parentConversationId } : {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.303",
3
+ "version": "0.0.307",
4
4
  "description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -78,7 +78,7 @@
78
78
  "@sinclair/typebox": "^0.34.49",
79
79
  "@vscode/ripgrep": "^1.18.0",
80
80
  "abort-controller": "^3.0.0",
81
- "adm-zip": "^0.6.0",
81
+ "adm-zip": "^0.6.1",
82
82
  "ajv": "^8.20.0",
83
83
  "chalk": "^5.6.2",
84
84
  "chokidar": "^5.0.0",
@@ -166,8 +166,8 @@
166
166
  "vitepress": "^1.6.4",
167
167
  "vitest": "4.1.5",
168
168
  "vue": "^3.5.35",
169
- "@xopcai/computer-control-contract": "0.1.0",
170
169
  "@xopcai/browser-control-contract": "0.1.0",
170
+ "@xopcai/computer-control-contract": "0.1.0",
171
171
  "@xopcai/endpoint-tools-client": "0.0.0",
172
172
  "@xopcai/endpoint-tools-protocol": "0.0.0",
173
173
  "@xopcai/gateway-contract": "0.0.0",
@@ -206,6 +206,8 @@
206
206
  "dev:gateway": "sh -c 'mkdir -p \"$HOME/.xopc-dev\" && XOPC_STATE_DIR=\"$HOME/.xopc-dev\" XOPC_CONFIG_PATH=\"$HOME/.xopc-dev/xopc.json\" XOPC_CONFIG=\"$HOME/.xopc-dev/xopc.json\" XOPC_LOG_DIR=\"$HOME/.xopc-dev/logs\" XOPC_LOG_LEVEL=info tsx src/cli/bin.ts gateway \"$@\"' --",
207
207
  "start": "node dist/src/cli/bin.js",
208
208
  "test": "vitest run src extensions/telegram/src extensions/feishu/src extensions/weixin/src",
209
+ "test:web:onboarding-visual": "node scripts/test-onboarding-visual.mjs",
210
+ "test:web:onboarding-visual:update": "node scripts/test-onboarding-visual.mjs --update",
209
211
  "test:quick-understanding": "XOPC_LOG_LEVEL=fatal vitest run src/work-discovery/__tests__/evaluation.test.ts src/user-context/sources/__tests__/activity-clustering.test.ts src/knowledge/__tests__/quick-understanding.e2e.test.ts src/connectors/__tests__/content-enrichment.test.ts src/connectors/__tests__/connected-source-ingestion.test.ts",
210
212
  "test:skills": "vitest run src/agent/skills/__tests__",
211
213
  "test:skills:regression": "./scripts/test-skills.sh",