@xopcai/xopc 0.0.325 → 0.0.330

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 (385) hide show
  1. package/README.md +4 -3
  2. package/README.zh-CN.md +4 -3
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CxfXpPWs.js → agent-avatar-dicebear-BDG0hI-J.js} +1 -1
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-ArM6Sm9S.js +1 -0
  7. package/dist/gateway/static/root/assets/agent-plugin-dialog-BX_Bhre1.js +1 -0
  8. package/dist/gateway/static/root/assets/agents-BiQqpMw0.js +70 -0
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-p7fZB4dT.js → app-management-settings-panel-DgttzUCG.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-C-clVcfp.js → appearance-settings-CHpyWV8Z.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-BhfYQcm8.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-Xm6xChUX.js → archive-plugin-B7Q7Oeo7.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-Di8kuG4L.js → attachment-load-BYwqQ8qN.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-GUZgDhKj.js → automations-page-CsvAtTNd.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-DMH_1Ped.js +7 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-OCrDjC9O.js → binary-plugins-DdgWCI-M.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-m9tqvu7x.js → block-editor-DyOagNnn.js} +3 -3
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-DSWXq9lI.js → browser-automation-inputs-CwF8OQFN.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-automations-page-DuOaridE.js → browser-automations-page-D_EQjiiu.js} +2 -2
  20. package/dist/gateway/static/root/assets/browser-settings-page-BE6691Jz.js +3 -0
  21. package/dist/gateway/static/root/assets/capabilities-page-MweWNrC1.js +2 -0
  22. package/dist/gateway/static/root/assets/capabilities-settings-panel-CdSWkh89.js +8 -0
  23. package/dist/gateway/static/root/assets/capability-header-actions-C5F2GNE9.js +1 -0
  24. package/dist/gateway/static/root/assets/capability-icon-BYm2-nS-.js +1 -0
  25. package/dist/gateway/static/root/assets/channels-NGfwR3He.js +1 -0
  26. package/dist/gateway/static/root/assets/{chat-terminal-dock-BfnVh8oo.js → chat-terminal-dock-C6tl9Rfw.js} +2 -2
  27. package/dist/gateway/static/root/assets/computer-settings-page-C0MsVw4l.js +1 -0
  28. package/dist/gateway/static/root/assets/connector-service-page-DsF60pPs.js +1 -0
  29. package/dist/gateway/static/root/assets/connectors-page-BE8NdQcR.js +2 -0
  30. package/dist/gateway/static/root/assets/{date-picker-CtDyij_x.js → date-picker-CELKKqYN.js} +1 -1
  31. package/dist/gateway/static/root/assets/dependency-picker-BcEwCnI5.js +1 -0
  32. package/dist/gateway/static/root/assets/{desktop-pet-BsIYCAkG.js → desktop-pet-Ww7Gm8-x.js} +1 -1
  33. package/dist/gateway/static/root/assets/desktop-pet-settings-D-dbAxGu.js +1 -0
  34. package/dist/gateway/static/root/assets/device-pairing-wizard-DsYY6szg.js +1 -0
  35. package/dist/gateway/static/root/assets/directory-picker-path-field-CVmuCRyO.js +1 -0
  36. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
  37. package/dist/gateway/static/root/assets/{extension-debug-page-Ct9pABNW.js → extension-debug-page-UUHNJj-d.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-page-BktsR4hj.js → extension-page-BvL452mX.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-settings-page-BQJc-vXH.js → extension-settings-page-CrNnUSOs.js} +1 -1
  40. package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +1 -0
  41. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
  42. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +1 -0
  43. package/dist/gateway/static/root/assets/{gateway-config-swr-CoQVulMd.js → gateway-config-swr-DMm1vU51.js} +1 -1
  44. package/dist/gateway/static/root/assets/gateway-settings-DrHhtZqv.js +1 -0
  45. package/dist/gateway/static/root/assets/{gateway-startup-retry-B5GJ-CQV.js → gateway-startup-retry-Ck6tj6yE.js} +1 -1
  46. package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +1 -0
  47. package/dist/gateway/static/root/assets/home-page-YgI6jfGA.js +1 -0
  48. package/dist/gateway/static/root/assets/{image-generation-api-DvWDkbk1.js → image-generation-api-BOh6j0BF.js} +1 -1
  49. package/dist/gateway/static/root/assets/imports-page-BuqdzA7h.js +1 -0
  50. package/dist/gateway/static/root/assets/index-DJmO2VAY.css +1 -0
  51. package/dist/gateway/static/root/assets/index-vCIBfJp7.js +121 -0
  52. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-ctJLm8TP.js → keyboard-shortcuts-settings-D9L7IdUg.js} +1 -1
  53. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +1 -0
  54. package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +1 -0
  55. package/dist/gateway/static/root/assets/local-app-workbench-page-DO8uUtos.js +1 -0
  56. package/dist/gateway/static/root/assets/{local-apps-page-BxC_LTqq.js → local-apps-page-BEvyufm7.js} +1 -1
  57. package/dist/gateway/static/root/assets/locale-store-DAOwT3Zp.js +1 -0
  58. package/dist/gateway/static/root/assets/logs-page-Jev1m9sS.js +2 -0
  59. package/dist/gateway/static/root/assets/management-settings-41i7B1RO.js +1 -0
  60. package/dist/gateway/static/root/assets/{markdown-view-Dft8ASFD.js → markdown-view-nL4xzvI8.js} +2 -2
  61. package/dist/gateway/static/root/assets/{media-plugins-ni5zJ4Ok.js → media-plugins-dHbcqMan.js} +1 -1
  62. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +1 -0
  63. package/dist/gateway/static/root/assets/messages-BZbt9x1y.js +3 -0
  64. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +1 -0
  65. package/dist/gateway/static/root/assets/note-detail-panel-DonP0E6Q.js +5 -0
  66. package/dist/gateway/static/root/assets/note-image-lightbox-1qg2v-9j.js +1 -0
  67. package/dist/gateway/static/root/assets/notes-page-CYHMeVKo.js +8 -0
  68. package/dist/gateway/static/root/assets/page-context-capture-button-BKsMcPOy.js +1 -0
  69. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +1 -0
  70. package/dist/gateway/static/root/assets/preview-open-alternatives-Du18QgWc.js +1 -0
  71. package/dist/gateway/static/root/assets/{product-open-page-DQctU8z3.js → product-open-page-IY1QL6s0.js} +1 -1
  72. package/dist/gateway/static/root/assets/project-detail-page-Bpw9mxfV.js +1 -0
  73. package/dist/gateway/static/root/assets/projects-page-BdYbDNUn.js +1 -0
  74. package/dist/gateway/static/root/assets/{registry-api-DWWO6ajd.js → registry-api-DCFXWBOt.js} +1 -1
  75. package/dist/gateway/static/root/assets/remote-access-hub-CLhbz3TF.js +1 -0
  76. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
  77. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-xhOSYfiX.js → runtime-tools-settings-panel-CuTFmXyj.js} +2 -2
  78. package/dist/gateway/static/root/assets/scenes-page-XwK2IEmr.js +2 -0
  79. package/dist/gateway/static/root/assets/{schema-form-z8IeSdBp.js → schema-form-qWQii8IU.js} +1 -1
  80. package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
  81. package/dist/gateway/static/root/assets/sessions-page-4-QoiDES.js +1 -0
  82. package/dist/gateway/static/root/assets/settings-advanced-gate-BggQVM1y.js +1 -0
  83. package/dist/gateway/static/root/assets/settings-form-section-B0ZBr0L9.js +1 -0
  84. package/dist/gateway/static/root/assets/{settings-page-Br9no5e4.js → settings-page-DpII4NO3.js} +1 -1
  85. package/dist/gateway/static/root/assets/settings-page-layout-X1x-2Cp9.js +1 -0
  86. package/dist/gateway/static/root/assets/setup-status-panel-HPpC7EE0.js +1 -0
  87. package/dist/gateway/static/root/assets/{share-preview-page-CE0SER59.js → share-preview-page-B2CGYZHc.js} +1 -1
  88. package/dist/gateway/static/root/assets/shares-settings-DhVCRYGP.js +1 -0
  89. package/dist/gateway/static/root/assets/skill-api-_ddww47C.js +1 -0
  90. package/dist/gateway/static/root/assets/skill-reload-api-XPZkWJJe.js +1 -0
  91. package/dist/gateway/static/root/assets/skills-page-uF7DkJMC.js +2 -0
  92. package/dist/gateway/static/root/assets/system-settings-panel-25ABVt7H.js +1 -0
  93. package/dist/gateway/static/root/assets/task-detail-page-gepxhO4j.js +1 -0
  94. package/dist/gateway/static/root/assets/tunnel-api-CwQGBI_4.js +1 -0
  95. package/dist/gateway/static/root/assets/use-autosave-CL3wytbs.js +1 -0
  96. package/dist/gateway/static/root/assets/user-model-page-DldQW9Wh.js +2 -0
  97. package/dist/gateway/static/root/assets/{voice-api-key-field-By6Lgbse.js → voice-api-key-field-zjAzQrx4.js} +1 -1
  98. package/dist/gateway/static/root/assets/voice-config-api-DvzQ-128.js +1 -0
  99. package/dist/gateway/static/root/assets/{work-discovery-overlay-DdhgIlyf.js → work-discovery-overlay-MaPPjWwl.js} +1 -1
  100. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BOJYQaxX.js → workflow-run-setup-panel-C3dQN1fE.js} +2 -2
  101. package/dist/gateway/static/root/assets/workflows-page-B9lnTU3U.js +6 -0
  102. package/dist/gateway/static/root/connector-icons/SOURCES.md +1 -0
  103. package/dist/gateway/static/root/connector-icons/wecom.svg +9 -0
  104. package/dist/gateway/static/root/index.html +20 -8
  105. package/dist/package.js +1 -1
  106. package/dist/src/agent/agent-instance-gateway.d.ts +2 -2
  107. package/dist/src/agent/agent-manager.d.ts +5 -2
  108. package/dist/src/agent/agent-manager.js +77 -23
  109. package/dist/src/agent/background-review/coordinator.d.ts +2 -7
  110. package/dist/src/agent/background-review/coordinator.js +17 -34
  111. package/dist/src/agent/background-review/prompts.d.ts +13 -5
  112. package/dist/src/agent/background-review/prompts.js +17 -12
  113. package/dist/src/agent/background-review/run-background-review.d.ts +3 -3
  114. package/dist/src/agent/background-review/run-background-review.js +59 -44
  115. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
  116. package/dist/src/agent/capabilities/definitions.d.ts +3 -2
  117. package/dist/src/agent/capabilities/definitions.js +3 -2
  118. package/dist/src/agent/context/execution-context.js +5 -2
  119. package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
  120. package/dist/src/agent/image/tool-model-config.js +1 -1
  121. package/dist/src/agent/mcp/index.js +1 -1
  122. package/dist/src/agent/mcp/mcp-transport.js +2 -2
  123. package/dist/src/agent/mcp/oauth/index.js +1 -1
  124. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +2 -2
  125. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +1 -1
  126. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  127. package/dist/src/agent/orchestration/llm-turn-retry.js +2 -15
  128. package/dist/src/agent/prompt/sections/tooling.js +3 -0
  129. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  130. package/dist/src/agent/service.d.ts +1 -0
  131. package/dist/src/agent/service.js +5 -2
  132. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +12 -0
  133. package/dist/src/agent/tasks/task-judge-service.js +1 -1
  134. package/dist/src/agent/tools/factory.js +3 -2
  135. package/dist/src/agent/tools/index.d.ts +1 -0
  136. package/dist/src/agent/tools/index.js +2 -1
  137. package/dist/src/agent/tools/user-context-tool.js +29 -4
  138. package/dist/src/agent/tools/workflow-manage-tool.d.ts +2 -0
  139. package/dist/src/agent/tools/workflow-manage-tool.js +225 -0
  140. package/dist/src/agent/tools/xopc-use-tool.js +1 -1
  141. package/dist/src/agent-catalog/capabilities.js +2 -2
  142. package/dist/src/auth/credentials.js +1 -1
  143. package/dist/src/auth/oauth-provider-lock.js +1 -1
  144. package/dist/src/auth/sync-provider-auth.js +1 -1
  145. package/dist/src/automations/capabilities/drafts.js +1 -1
  146. package/dist/src/automations/domain/types.d.ts +7 -1
  147. package/dist/src/automations/draft/automation-draft-service.js +13 -4
  148. package/dist/src/automations/service/action-executor.d.ts +2 -2
  149. package/dist/src/automations/service/action-executor.js +36 -13
  150. package/dist/src/automations/service/automation-service.js +2 -1
  151. package/dist/src/bootstrap/application-state.js +1 -1
  152. package/dist/src/browser/automations/index.js +2 -2
  153. package/dist/src/browser/automations/service.d.ts +11 -2
  154. package/dist/src/browser/automations/service.js +19 -5
  155. package/dist/src/capabilities/readiness/from-config.d.ts +0 -1
  156. package/dist/src/capabilities/readiness/from-config.js +2 -4
  157. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  158. package/dist/src/capabilities/runtime/product.js +1 -1
  159. package/dist/src/chat-commands/agent-edit.js +1 -1
  160. package/dist/src/chat-commands/builtins/config.js +1 -1
  161. package/dist/src/chat-previews/service.js +1 -2
  162. package/dist/src/cli/commands/agent.js +1 -1
  163. package/dist/src/cli/commands/agents.js +1 -1
  164. package/dist/src/cli/commands/auth.js +1 -1
  165. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  166. package/dist/src/cli/commands/extension-agent-plugin.js +2 -1
  167. package/dist/src/cli/commands/models.js +1 -1
  168. package/dist/src/cli/commands/onboard/model.js +3 -3
  169. package/dist/src/cli/commands/providers.js +1 -1
  170. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  171. package/dist/src/config/index.js +4 -4
  172. package/dist/src/config/loader.js +2 -2
  173. package/dist/src/config/models-json.js +1 -1
  174. package/dist/src/config/schema.js +5 -5
  175. package/dist/src/connectors/china-catalog.js +5 -1
  176. package/dist/src/connectors/connected-source-ingestion.js +6 -1
  177. package/dist/src/connectors/connected-source-observations.d.ts +10 -0
  178. package/dist/src/connectors/connected-source-observations.js +80 -0
  179. package/dist/src/connectors/connected-source-understanding.js +198 -8
  180. package/dist/src/connectors/learning-coordinator.js +63 -26
  181. package/dist/src/connectors/learning-recipes.js +19 -2
  182. package/dist/src/discussions/audio-repair.d.ts +1 -1
  183. package/dist/src/discussions/live-worker.js +1 -3
  184. package/dist/src/discussions/recording.js +2 -2
  185. package/dist/src/discussions/sealer.js +2 -2
  186. package/dist/src/extensions/agent-plugins/auth.d.ts +2 -2
  187. package/dist/src/extensions/agent-plugins/auth.js +6 -35
  188. package/dist/src/extensions/agent-plugins/credentials.d.ts +2 -0
  189. package/dist/src/extensions/agent-plugins/credentials.js +37 -0
  190. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +1 -0
  191. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +8 -0
  192. package/dist/src/extensions/agent-plugins/validation.js +1 -1
  193. package/dist/src/extensions/bundled-extension-activation.d.ts +3 -1
  194. package/dist/src/extensions/bundled-extension-activation.js +5 -8
  195. package/dist/src/extensions/marketplace.d.ts +4 -0
  196. package/dist/src/extensions/marketplace.js +4 -0
  197. package/dist/src/gateway/agents-admin.js +2 -2
  198. package/dist/src/gateway/file-path-classifier.js +1 -1
  199. package/dist/src/gateway/file-space-service.d.ts +9 -2
  200. package/dist/src/gateway/gateway-workflow-host.types.d.ts +1 -0
  201. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  202. package/dist/src/gateway/hono/routes/agent-plugins.js +2 -1
  203. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +27 -5
  204. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -2
  205. package/dist/src/gateway/hono/routes/config.js +0 -3
  206. package/dist/src/gateway/hono/routes/connectors.js +3 -10
  207. package/dist/src/gateway/hono/routes/context-sources.d.ts +0 -1
  208. package/dist/src/gateway/hono/routes/context-sources.js +12 -15
  209. package/dist/src/gateway/hono/routes/notes.js +2 -2
  210. package/dist/src/gateway/hono/routes/projects.js +2 -2
  211. package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
  212. package/dist/src/gateway/hono/routes/status.js +0 -1
  213. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  214. package/dist/src/gateway/hono/routes/user-model.js +21 -3
  215. package/dist/src/gateway/hono/routes/voice.js +0 -67
  216. package/dist/src/gateway/hono/routes/workflows.js +1 -23
  217. package/dist/src/gateway/image-generation-setup.js +2 -2
  218. package/dist/src/gateway/lock.js +1 -1
  219. package/dist/src/gateway/service/config-coordinator.d.ts +4 -4
  220. package/dist/src/gateway/service/config-coordinator.js +6 -6
  221. package/dist/src/gateway/service/marketplace-service.js +8 -6
  222. package/dist/src/gateway/service.d.ts +1 -1
  223. package/dist/src/gateway/service.js +20 -18
  224. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  225. package/dist/src/home-intelligence/generator.js +7 -6
  226. package/dist/src/home-intelligence/host.js +1 -1
  227. package/dist/src/local-apps/service.js +1 -1
  228. package/dist/src/media-understanding/types.d.ts +1 -1
  229. package/dist/src/memory-maintenance/service.d.ts +1 -0
  230. package/dist/src/memory-maintenance/service.js +13 -0
  231. package/dist/src/migrations/retired-local-stt.d.ts +2 -0
  232. package/dist/src/migrations/retired-local-stt.js +52 -0
  233. package/dist/src/migrations/runner.js +2 -1
  234. package/dist/src/providers/model-catalog-persistence.js +1 -1
  235. package/dist/src/providers/model-response.d.ts +2 -0
  236. package/dist/src/providers/model-response.js +24 -1
  237. package/dist/src/session/turn-outcome-projector.js +1 -1
  238. package/dist/src/storage/sqlite/connection.js +1 -0
  239. package/dist/src/storage/sqlite/migrations/207_user_model_policy_contract.sql +121 -0
  240. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  241. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  242. package/dist/src/storage/sqlite/schema.js +1 -1
  243. package/dist/src/storage/sqlite/sql-assets.d.ts +1 -0
  244. package/dist/src/storage/sqlite/sql-assets.js +7 -4
  245. package/dist/src/tasks/capabilities/read.js +2 -2
  246. package/dist/src/tasks/index.js +2 -2
  247. package/dist/src/tasks/task-application-service.d.ts +1 -0
  248. package/dist/src/tasks/task-application-service.js +4 -2
  249. package/dist/src/tasks/task-context-assembler.js +10 -1
  250. package/dist/src/tasks/task-run-dispatcher.d.ts +1 -0
  251. package/dist/src/tasks/task-run-dispatcher.js +15 -2
  252. package/dist/src/tui/backends/embedded-backend.js +6 -3
  253. package/dist/src/tui/tui-commands.js +2 -2
  254. package/dist/src/tui/tui-startup-resources.js +1 -1
  255. package/dist/src/tui/tui.js +3 -3
  256. package/dist/src/user-context/sources/consent-repository.d.ts +7 -0
  257. package/dist/src/user-context/sources/consent-repository.js +81 -0
  258. package/dist/src/user-context/sources/index.d.ts +1 -0
  259. package/dist/src/user-context/sources/index.js +2 -1
  260. package/dist/src/user-context/sources/repository.js +73 -1
  261. package/dist/src/user-context/sources/types.d.ts +16 -0
  262. package/dist/src/user-model/action-rule-suggestions.d.ts +11 -0
  263. package/dist/src/user-model/action-rule-suggestions.js +29 -0
  264. package/dist/src/user-model/bootstrap.js +1 -1
  265. package/dist/src/user-model/capture/executor.js +83 -7
  266. package/dist/src/user-model/capture/semantic.d.ts +5 -2
  267. package/dist/src/user-model/capture/semantic.js +27 -11
  268. package/dist/src/user-model/domain.d.ts +26 -0
  269. package/dist/src/user-model/domain.js +40 -2
  270. package/dist/src/user-model/index.d.ts +2 -0
  271. package/dist/src/user-model/index.js +6 -4
  272. package/dist/src/user-model/maintenance-policy.d.ts +1 -0
  273. package/dist/src/user-model/maintenance-policy.js +13 -0
  274. package/dist/src/user-model/observation-repository.d.ts +48 -0
  275. package/dist/src/user-model/observation-repository.js +100 -0
  276. package/dist/src/user-model/repository.d.ts +5 -0
  277. package/dist/src/user-model/repository.js +121 -10
  278. package/dist/src/user-model/usage-policy.d.ts +5 -2
  279. package/dist/src/user-model/usage-policy.js +2 -2
  280. package/dist/src/voice/audio/normalize.d.ts +1 -1
  281. package/dist/src/voice/audio/normalize.js +1 -1
  282. package/dist/src/voice/{local → audio}/wav.js +1 -1
  283. package/dist/src/voice/language-profile.js +10 -16
  284. package/dist/src/voice/metadata/builtin.js +0 -46
  285. package/dist/src/voice/platform-streams.js +15 -7
  286. package/dist/src/voice/realtime/agentEngine.js +19 -3
  287. package/dist/src/voice/realtime/pcmFrameBuffer.js +2 -1
  288. package/dist/src/voice/realtime/persona-context.js +1 -1
  289. package/dist/src/voice/realtime/playback-echo.js +16 -1
  290. package/dist/src/voice/stt/providers/index.d.ts +0 -1
  291. package/dist/src/voice/stt/providers/index.js +1 -2
  292. package/dist/src/voice/stt/types.js +3 -4
  293. package/dist/src/voice/tts/merge-config.js +1 -1
  294. package/dist/src/voice/tts/speech-registry.d.ts +1 -1
  295. package/dist/src/voice/tts/types.d.ts +1 -1
  296. package/dist/src/work-discovery/analyzer.js +6 -5
  297. package/dist/src/work-discovery/service.js +2 -2
  298. package/dist/src/work-discovery/types.d.ts +1 -1
  299. package/dist/src/workflows/authoring/index.d.ts +1 -0
  300. package/dist/src/workflows/authoring/index.js +2 -1
  301. package/dist/src/workflows/authoring/workflow-draft-defaults.d.ts +3 -0
  302. package/dist/src/workflows/authoring/workflow-draft-defaults.js +63 -0
  303. package/dist/src/workflows/context/workflow-context.js +5 -1
  304. package/dist/src/workflows/domain/index.js +1 -1
  305. package/dist/src/workflows/engine/workflow-engine.js +1 -1
  306. package/dist/src/workflows/index.js +4 -4
  307. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  308. package/dist/src/workflows/service/workflow-run-service.js +39 -7
  309. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  310. package/package.json +12 -16
  311. package/skills/engineering/workflow-authoring/SKILL.md +32 -0
  312. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CDHe8gJf.js +0 -1
  313. package/dist/gateway/static/root/assets/agent-plugin-dialog-DMv-udoZ.js +0 -1
  314. package/dist/gateway/static/root/assets/agents-D_xOAXgj.js +0 -1
  315. package/dist/gateway/static/root/assets/apps-page-Dz2g7eAN.js +0 -1
  316. package/dist/gateway/static/root/assets/automations-workspace-BUZhG9aJ.js +0 -7
  317. package/dist/gateway/static/root/assets/browser-settings-page-D2_PgHep.js +0 -3
  318. package/dist/gateway/static/root/assets/capabilities-settings-panel-7Y_pJqyt.js +0 -8
  319. package/dist/gateway/static/root/assets/channels-settings-B-Igy1ro.js +0 -1
  320. package/dist/gateway/static/root/assets/computer-settings-page-aRG2lU4w.js +0 -1
  321. package/dist/gateway/static/root/assets/connector-service-page-B5EhnfJH.js +0 -1
  322. package/dist/gateway/static/root/assets/connectors-page-7HfRt1LW.js +0 -2
  323. package/dist/gateway/static/root/assets/dependency-picker-z6ouWxmz.js +0 -1
  324. package/dist/gateway/static/root/assets/desktop-pet-settings-z-0aQ5ct.js +0 -1
  325. package/dist/gateway/static/root/assets/device-pairing-wizard-DlmhQvY5.js +0 -1
  326. package/dist/gateway/static/root/assets/gateway-settings-BfDVlvy6.js +0 -1
  327. package/dist/gateway/static/root/assets/home-page-CI_eQTPL.js +0 -1
  328. package/dist/gateway/static/root/assets/imports-page-DFpQfHVU.js +0 -1
  329. package/dist/gateway/static/root/assets/index-19rMUT3d.js +0 -121
  330. package/dist/gateway/static/root/assets/index-BKL5tg2f.css +0 -1
  331. package/dist/gateway/static/root/assets/local-app-workbench-page-C9kaP3Dy.js +0 -1
  332. package/dist/gateway/static/root/assets/locale-store-BPZR8x9b.js +0 -1
  333. package/dist/gateway/static/root/assets/logs-page-Ok5SpG-G.js +0 -2
  334. package/dist/gateway/static/root/assets/management-settings-aOzRaQHM.js +0 -1
  335. package/dist/gateway/static/root/assets/messages-kFWhF6_t.js +0 -3
  336. package/dist/gateway/static/root/assets/note-detail-panel-C9OEltN9.js +0 -5
  337. package/dist/gateway/static/root/assets/notes-page-Dj9rMgdi.js +0 -8
  338. package/dist/gateway/static/root/assets/page-context-capture-button-BJA3d8vU.js +0 -1
  339. package/dist/gateway/static/root/assets/page-tabs-Dyc3wKkl.js +0 -1
  340. package/dist/gateway/static/root/assets/preview-open-alternatives-tIOIQbNX.js +0 -1
  341. package/dist/gateway/static/root/assets/project-detail-page-Dy-EwZcc.js +0 -1
  342. package/dist/gateway/static/root/assets/projects-page-JaGKa6rM.js +0 -1
  343. package/dist/gateway/static/root/assets/remote-access-hub-Cb8-nd60.js +0 -1
  344. package/dist/gateway/static/root/assets/scenes-page-ClBkFdRY.js +0 -2
  345. package/dist/gateway/static/root/assets/sessions-page-BYW5l_nY.js +0 -1
  346. package/dist/gateway/static/root/assets/settings-advanced-gate-CDNwmXuH.js +0 -1
  347. package/dist/gateway/static/root/assets/settings-form-section-BXTJAser.js +0 -1
  348. package/dist/gateway/static/root/assets/settings-page-layout-D6745w0p.js +0 -1
  349. package/dist/gateway/static/root/assets/setup-status-panel-D2N9764S.js +0 -1
  350. package/dist/gateway/static/root/assets/shares-settings-Dk3_QOKQ.js +0 -1
  351. package/dist/gateway/static/root/assets/skill-reload-api-CPt61fEv.js +0 -1
  352. package/dist/gateway/static/root/assets/skills-page-Db6PB2C6.js +0 -2
  353. package/dist/gateway/static/root/assets/skills-page.utils-DrtW5FBy.js +0 -1
  354. package/dist/gateway/static/root/assets/system-settings-panel-CuY1Zh5s.js +0 -1
  355. package/dist/gateway/static/root/assets/task-detail-page-o7RiDUMi.js +0 -1
  356. package/dist/gateway/static/root/assets/tunnel-api-PGHDgvWb.js +0 -1
  357. package/dist/gateway/static/root/assets/use-autosave-B55oBQUt.js +0 -1
  358. package/dist/gateway/static/root/assets/user-model-page-DspelwAa.js +0 -2
  359. package/dist/gateway/static/root/assets/voice-config-api-BaxITrwZ.js +0 -1
  360. package/dist/gateway/static/root/assets/workflows-page-6ObD0IQZ.js +0 -6
  361. package/dist/src/voice/local/model-files.d.ts +0 -14
  362. package/dist/src/voice/local/model-files.js +0 -92
  363. package/dist/src/voice/local/model-manager.d.ts +0 -18
  364. package/dist/src/voice/local/model-manager.js +0 -133
  365. package/dist/src/voice/local/models.d.ts +0 -28
  366. package/dist/src/voice/local/models.js +0 -99
  367. package/dist/src/voice/local/provider-switch.d.ts +0 -4
  368. package/dist/src/voice/local/provider-switch.js +0 -36
  369. package/dist/src/voice/local/runtime-client.d.ts +0 -28
  370. package/dist/src/voice/local/runtime-client.js +0 -183
  371. package/dist/src/voice/local/runtime-worker.d.ts +0 -1
  372. package/dist/src/voice/local/runtime-worker.js +0 -271
  373. package/dist/src/voice/stt/providers/local-transcription.d.ts +0 -2
  374. package/dist/src/voice/stt/providers/local-transcription.js +0 -53
  375. package/dist/src/workflows/draft/index.d.ts +0 -3
  376. package/dist/src/workflows/draft/index.js +0 -3
  377. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +0 -22
  378. package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -54
  379. package/dist/src/workflows/draft/workflow-draft-service.d.ts +0 -12
  380. package/dist/src/workflows/draft/workflow-draft-service.js +0 -125
  381. package/dist/src/workflows/draft/workflow-draft-validator.d.ts +0 -4
  382. package/dist/src/workflows/draft/workflow-draft-validator.js +0 -123
  383. package/dist/src/workflows/draft/workflow-draft.types.d.ts +0 -44
  384. package/dist/src/workflows/draft/workflow-draft.types.js +0 -1
  385. /package/dist/src/voice/{local → audio}/wav.d.ts +0 -0
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ import { ComputerConfigSchema, init_config } from "../computer/config.js";
2
3
  import { AgentModelsOverrideSchema, ImageGenerationRouteSchema, ModelRouteSchema } from "../agent-config/schema.js";
3
4
  import { resolveEffectiveAgentConfig } from "../agent-config/resolver.js";
4
5
  import { init_agent_config } from "../agent-config/index.js";
5
6
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
6
- import { ComputerConfigSchema, init_config } from "../computer/config.js";
7
7
  import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config as init_config$1 } from "../user-context/config.js";
8
8
  import { init_public_url, validatePublicUrl } from "./public-url.js";
9
9
  import { PlatformConfigSchema, init_contracts } from "../platform/contracts.js";
@@ -685,7 +685,7 @@ enabled: z.boolean().default(false) }).default({ enabled: false });
685
685
  }).catchall(SttProviderConfigCatchallSchema);
686
686
  STTFallbackConfigSchema = z.object({
687
687
  enabled: z.boolean().default(false),
688
- order: z.array(z.string().min(1)).default(["xopc-local"])
688
+ order: z.array(z.string().min(1)).default([])
689
689
  });
690
690
  MediaUnderstandingCapabilitiesSchema = z.array(z.enum([
691
691
  "image",
@@ -705,12 +705,12 @@ enabled: z.boolean().default(false) }).default({ enabled: false });
705
705
  prompt: z.string().optional()
706
706
  }).catchall(SttProviderConfigCatchallSchema);
707
707
  STTConfigSchema = z.object({
708
- enabled: z.boolean().default(true),
708
+ enabled: z.boolean().default(false),
709
709
  /** Primary provider id — any registered MediaUnderstandingProvider id. */
710
- provider: z.string().min(1).default("xopc-local"),
710
+ provider: z.string().min(1).default("openai"),
711
711
  fallback: STTFallbackConfigSchema.default({
712
712
  enabled: false,
713
- order: ["xopc-local"]
713
+ order: []
714
714
  }),
715
715
  timeoutMs: z.number().int().min(1e3).max(18e4).optional(),
716
716
  /** Ordered model entries for this capability (OpenClaw `tools.media.audio.models`). */
@@ -52,7 +52,7 @@ const CHINA_CONNECTORS = [
52
52
  {
53
53
  id: "wecom-workspace",
54
54
  version: "1.3.0",
55
- displayName: "企业微信办公",
55
+ displayName: "企业微信",
56
56
  description: "扫码连接企业微信,搜索和读取文档、查询联系人和待办,并按权限创建待办。",
57
57
  category: "docs",
58
58
  kind: "cli",
@@ -67,6 +67,10 @@ const CHINA_CONNECTORS = [
67
67
  "联系人",
68
68
  "待办"
69
69
  ],
70
+ branding: {
71
+ logoUrl: "/connector-icons/wecom.svg",
72
+ source: "builtin"
73
+ },
70
74
  verificationLevel: "beta",
71
75
  auth: { mode: "cli" },
72
76
  setup: {},
@@ -71,6 +71,7 @@ function personEntities(record) {
71
71
  "username",
72
72
  "owner",
73
73
  "owners",
74
+ "organizer",
74
75
  "assignee",
75
76
  "attendees",
76
77
  "participants"
@@ -97,7 +98,11 @@ function connectionIdentities(identity) {
97
98
  return [...new Set(Object.values(identity).filter((value) => typeof value === "string").map((value) => value.trim().toLowerCase()).filter(Boolean))];
98
99
  }
99
100
  function hasOwnerAttribution(toolkit, people, ownerIdentities) {
100
- const attributableRoles = toolkit === "gmail" ? new Set(["sender", "from"]) : toolkit === "googlecalendar" ? new Set(["organizer"]) : new Set([
101
+ const attributableRoles = toolkit === "gmail" ? new Set(["sender", "from"]) : toolkit === "googlecalendar" ? new Set(["organizer", "attendees"]) : toolkit === "linear" ? new Set([
102
+ "author",
103
+ "user",
104
+ "assignee"
105
+ ]) : new Set([
101
106
  "author",
102
107
  "user",
103
108
  "username",
@@ -0,0 +1,10 @@
1
+ import type { KnowledgeSourceItem } from '../knowledge/types.js';
2
+ import { type UserModelObservation } from '../user-model/index.js';
3
+ import type { UnderstandingConsentReceipt } from '../user-context/sources/types.js';
4
+ /** Stores content-free, owner-attributed observations before optional model analysis. */
5
+ export declare function recordConnectedSourceObservations(input: {
6
+ items: KnowledgeSourceItem[];
7
+ consent?: UnderstandingConsentReceipt;
8
+ sourceGrantId?: string;
9
+ nowMs?: number;
10
+ }): UserModelObservation[];
@@ -0,0 +1,80 @@
1
+ import { recordUserModelObservation } from "../user-model/observation-repository.js";
2
+ import "../user-model/index.js";
3
+ //#region src/connectors/connected-source-observations.ts
4
+ const DAY_MS = 864e5;
5
+ function timestamp(value) {
6
+ if (!value) return void 0;
7
+ const parsed = Date.parse(value);
8
+ return Number.isFinite(parsed) ? parsed : void 0;
9
+ }
10
+ function observationShape(toolkit, item) {
11
+ const occurredAt = timestamp(item.occurredAt) ?? timestamp(item.sourceUpdatedAt);
12
+ const common = {
13
+ itemType: item.itemType,
14
+ ...occurredAt === void 0 ? {} : { occurredAt }
15
+ };
16
+ if (toolkit === "gmail") return {
17
+ domain: "behavior",
18
+ type: "sent_message_activity",
19
+ value: common
20
+ };
21
+ if (toolkit === "googlecalendar") return {
22
+ domain: "goals",
23
+ type: "calendar_commitment",
24
+ value: common
25
+ };
26
+ if (toolkit === "github") return {
27
+ domain: "capabilities",
28
+ type: "authored_code_activity",
29
+ value: common
30
+ };
31
+ if (toolkit === "linear") return {
32
+ domain: "goals",
33
+ type: "assigned_work_activity",
34
+ value: common
35
+ };
36
+ if (toolkit === "googledrive") return {
37
+ domain: "digital_life",
38
+ type: "document_activity",
39
+ value: common
40
+ };
41
+ }
42
+ /** Stores content-free, owner-attributed observations before optional model analysis. */
43
+ function recordConnectedSourceObservations(input) {
44
+ if (!input.consent || !input.sourceGrantId) return [];
45
+ const now = input.nowMs ?? Date.now();
46
+ return input.items.flatMap((item) => {
47
+ if (item.metadata.actorAttributed !== true) return [];
48
+ const toolkit = typeof item.metadata.toolkit === "string" ? item.metadata.toolkit : "";
49
+ const shape = observationShape(toolkit, item);
50
+ if (!shape || !input.consent.allowedDomains.includes(shape.domain) || input.consent.deniedDomains.includes(shape.domain)) return [];
51
+ const observedAt = timestamp(item.occurredAt) ?? timestamp(item.sourceUpdatedAt) ?? now;
52
+ const value = {
53
+ ...input.consent.allowedFields.includes("status") ? { itemType: shape.value.itemType } : {},
54
+ ...input.consent.allowedFields.includes("timestamps") && shape.value.occurredAt !== void 0 ? { occurredAt: shape.value.occurredAt } : {}
55
+ };
56
+ if (!Object.keys(value).length) return [];
57
+ return [recordUserModelObservation({
58
+ domain: shape.domain,
59
+ type: shape.type,
60
+ subject: {
61
+ type: "user",
62
+ id: "self"
63
+ },
64
+ value,
65
+ context: {
66
+ toolkit,
67
+ collectionScope: item.collectionScope
68
+ },
69
+ sensitivityCategories: [],
70
+ ownerAttribution: "user",
71
+ observedAt,
72
+ deleteAfter: Math.max(now, observedAt) + input.consent.rawRetentionDays * DAY_MS,
73
+ sourceGrantId: input.sourceGrantId,
74
+ sourceItemId: item.id,
75
+ contentHash: `connected:${item.sourceInstanceId}:${item.contentHash}:${shape.type}`
76
+ })];
77
+ });
78
+ }
79
+ //#endregion
80
+ export { recordConnectedSourceObservations };
@@ -9,6 +9,9 @@ import "../knowledge-memory/index.js";
9
9
  import { reconcileAssertion } from "../user-model/repository.js";
10
10
  import "../user-model/index.js";
11
11
  import { claimRegisteredExtraction } from "../user-context/extraction/registry.js";
12
+ import { recordConnectedSourceObservations } from "./connected-source-observations.js";
13
+ import { getActiveUnderstandingConsent } from "../user-context/sources/consent-repository.js";
14
+ import { getUnderstandingSourceRun } from "../user-context/sources/repository.js";
12
15
  import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
13
16
  import { analyzeUnderstandingSources } from "../work-discovery/analyzer.js";
14
17
  import { createHash } from "node:crypto";
@@ -45,6 +48,90 @@ function timestamp(value) {
45
48
  const parsed = Date.parse(value);
46
49
  return Number.isFinite(parsed) ? parsed : void 0;
47
50
  }
51
+ const CONSENT_FIELD_KEYS = {
52
+ title: new Set([
53
+ "title",
54
+ "subject",
55
+ "name",
56
+ "fullName",
57
+ "repository"
58
+ ]),
59
+ content: new Set([
60
+ "content",
61
+ "body",
62
+ "text",
63
+ "snippet",
64
+ "description",
65
+ "summary"
66
+ ]),
67
+ participants: new Set([
68
+ "from",
69
+ "to",
70
+ "cc",
71
+ "bcc",
72
+ "sender",
73
+ "author",
74
+ "organizer",
75
+ "attendees",
76
+ "participants",
77
+ "assignee",
78
+ "owners"
79
+ ]),
80
+ status: new Set([
81
+ "status",
82
+ "state",
83
+ "labels"
84
+ ]),
85
+ timestamps: new Set([
86
+ "createdAt",
87
+ "updatedAt",
88
+ "modifiedAt",
89
+ "start",
90
+ "end",
91
+ "created_at",
92
+ "updated_at",
93
+ "modified_at"
94
+ ]),
95
+ owner_activity: new Set([
96
+ "user",
97
+ "username",
98
+ "owner"
99
+ ])
100
+ };
101
+ function consentFilteredText(textValue, allowedFields) {
102
+ if (!textValue) return void 0;
103
+ try {
104
+ const parsed = JSON.parse(textValue);
105
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return void 0;
106
+ const allowedKeys = new Set([...allowedFields].flatMap((field) => [...CONSENT_FIELD_KEYS[field] ?? []]));
107
+ const filtered = Object.fromEntries(Object.entries(parsed).filter(([key]) => allowedKeys.has(key)));
108
+ return Object.keys(filtered).length ? JSON.stringify(filtered) : void 0;
109
+ } catch {
110
+ return allowedFields.has("content") ? textValue.slice(0, 24e3) : void 0;
111
+ }
112
+ }
113
+ function itemsAllowedByConsent(items, consent) {
114
+ if (!consent) return [];
115
+ const allowed = new Set(consent.allowedFields);
116
+ return items.map((item) => {
117
+ const filteredText = consentFilteredText(item.text, allowed);
118
+ return {
119
+ id: item.id,
120
+ sourceId: item.sourceId,
121
+ type: item.type,
122
+ title: allowed.has("title") ? item.title : item.type,
123
+ ...filteredText ? { text: filteredText } : {},
124
+ ...allowed.has("owner_activity") ? { ownerAttribution: item.ownerAttribution } : { ownerAttribution: "unknown" },
125
+ ...allowed.has("timestamps") && item.occurredAt !== void 0 ? { occurredAt: item.occurredAt } : {},
126
+ ...allowed.has("timestamps") && item.modifiedAt !== void 0 ? { modifiedAt: item.modifiedAt } : {},
127
+ ...allowed.has("timestamps") && item.startsAt !== void 0 ? { startsAt: item.startsAt } : {},
128
+ ...allowed.has("timestamps") && item.endsAt !== void 0 ? { endsAt: item.endsAt } : {},
129
+ ...allowed.has("status") && item.group ? { group: item.group } : {},
130
+ evidenceRef: item.evidenceRef,
131
+ sensitivity: item.sensitivity
132
+ };
133
+ });
134
+ }
48
135
  function connectedItemsForUnderstanding(items) {
49
136
  return [...items].sort((left, right) => Number(right.itemType === "connected_content") - Number(left.itemType === "connected_content")).slice(0, MAX_CONNECTED_ITEMS).flatMap((item) => {
50
137
  const value = normalizedValue(item);
@@ -67,7 +154,7 @@ function connectedItemsForUnderstanding(items) {
67
154
  });
68
155
  }
69
156
  function isPortraitCandidate(candidate) {
70
- return candidate.category === "preference" || candidate.category === "routine" || candidate.category === "communication";
157
+ return candidate.category === "role" || candidate.category === "responsibility" || candidate.category === "capability" || candidate.category === "preference" || candidate.category === "routine" || candidate.category === "communication";
71
158
  }
72
159
  function durableEvidence(candidate, items) {
73
160
  const evidence = [...new Set(candidate.evidenceRefs ?? [])].flatMap((ref) => items.get(ref) ?? []);
@@ -75,6 +162,23 @@ function durableEvidence(candidate, items) {
75
162
  const dates = new Set(evidence.map((item) => item.occurredAt ?? item.modifiedAt).filter((value) => value !== void 0).map((value) => new Date(value).toISOString().slice(0, 10)));
76
163
  return candidate.confidence === "high" && evidence.every((item) => item.ownerAttribution === "user") && evidence.length >= required && dates.size >= required ? evidence : [];
77
164
  }
165
+ function candidatePolicy(candidate) {
166
+ const statement = candidate.statement.toLocaleLowerCase();
167
+ const sensitivityCategories = [
168
+ ["health", /\b(health|medical|diagnos|medication|therapy|disability)\b|健康|疾病|诊断|用药|治疗|残疾/i],
169
+ ["financial", /\b(salary|income|debt|bank|account balance|credit card)\b|工资|收入|债务|银行|余额|信用卡/i],
170
+ ["political", /\b(political|party|election|vote[dr]?)\b|政治|政党|选举|投票/i],
171
+ ["religious", /\b(religio|church|mosque|temple|faith)\b|宗教|教会|清真寺|寺庙|信仰/i],
172
+ ["sexuality", /\b(sexual|orientation|gender identity)\b|性取向|性别认同/i],
173
+ ["trauma", /\b(trauma|abuse|assault)\b|创伤|虐待|侵害/i],
174
+ ["credential", /\b(password|secret key|api key|token)\b|密码|密钥|令牌/i]
175
+ ].filter(([, pattern]) => pattern.test(statement)).map(([name]) => name);
176
+ return {
177
+ domain: candidate.category === "role" ? "identity" : candidate.category === "responsibility" ? "goals" : candidate.category === "capability" ? "capabilities" : candidate.category === "routine" ? "behavior" : "preferences",
178
+ sensitivity: sensitivityCategories.length ? sensitivityCategories.includes("health") || sensitivityCategories.includes("financial") ? "regulated" : "personal" : "normal",
179
+ sensitivityCategories
180
+ };
181
+ }
78
182
  async function deriveConnectedSourceUnderstanding(input) {
79
183
  const sourceItems = [...new Set(input.sourceItemIds)].slice(0, MAX_CONNECTED_ITEMS).flatMap((itemId) => getKnowledgeSourceItem(itemId) ?? []).filter((item) => item.sourceInstanceId === input.sourceInstanceId && item.metadata.agentId === input.agentId && !item.deletedAt);
80
184
  const items = connectedItemsForUnderstanding(sourceItems);
@@ -91,14 +195,23 @@ async function deriveConnectedSourceUnderstanding(input) {
91
195
  status: "completed"
92
196
  };
93
197
  }
198
+ const sourceRun = getUnderstandingSourceRun(input.sourceRunId);
199
+ const consentReceipt = sourceRun ? getActiveUnderstandingConsent(sourceRun.grantId) ?? void 0 : void 0;
200
+ const modelItems = itemsAllowedByConsent(items, consentReceipt);
201
+ recordConnectedSourceObservations({
202
+ items: sourceItems,
203
+ consent: consentReceipt,
204
+ sourceGrantId: sourceRun?.grantId
205
+ });
206
+ const effectiveProcessingPolicy = input.processingPolicy === "remote_allowed" && consentReceipt?.processingPolicy === "remote_allowed" ? "remote_allowed" : "local_only";
94
207
  const extraction = claimRegisteredExtraction({
95
208
  extractorId: "connector-semantic",
96
209
  sourceRef: `understanding-source-run:${input.sourceRunId}`,
97
210
  contentForHash: sourceItems.map((item) => `${item.id}:${item.contentHash}`).join("\n"),
98
- processingPolicy: input.processingPolicy,
211
+ processingPolicy: effectiveProcessingPolicy,
99
212
  destination: "remote_model"
100
213
  });
101
- if (!allowsRemoteSourceProcessing([input.processingPolicy]) || !extraction.shouldExecute) return {
214
+ if (!allowsRemoteSourceProcessing([effectiveProcessingPolicy]) || !extraction.shouldExecute) return {
102
215
  created: 0,
103
216
  knowledgeCount: 0,
104
217
  status: "completed"
@@ -106,16 +219,17 @@ async function deriveConnectedSourceUnderstanding(input) {
106
219
  try {
107
220
  const analysis = await (input.analyze ?? analyzeUnderstandingSources)({
108
221
  config: input.config,
109
- items
222
+ items: modelItems
110
223
  });
111
224
  input.assertAuthorized?.();
112
- const byRef = new Map(items.map((item) => [item.evidenceRef, item]));
225
+ const byRef = new Map(modelItems.map((item) => [item.evidenceRef, item]));
113
226
  const outputs = [];
114
227
  let created = 0;
115
228
  for (const candidate of analysis.profileCandidates.filter(isPortraitCandidate)) {
229
+ const policy = candidatePolicy(candidate);
116
230
  const evidenceItems = durableEvidence(candidate, byRef);
117
231
  const candidateKey = `connected-profile:${candidate.category}:${candidate.factKey}`;
118
- if (!evidenceItems.length) {
232
+ if (!evidenceItems.length || !consentReceipt || !consentReceipt.allowedDomains.includes(policy.domain) || consentReceipt.deniedDomains.includes(policy.domain)) {
119
233
  outputs.push({
120
234
  candidateKey,
121
235
  outcome: "rejected"
@@ -141,7 +255,7 @@ async function deriveConnectedSourceUnderstanding(input) {
141
255
  predicate: `${candidate.category}.connected.${candidate.factKey}`,
142
256
  cardinality: "single",
143
257
  scope: { type: "global" },
144
- kind: candidate.category === "communication" ? "preference" : candidate.category,
258
+ kind: candidate.category === "role" ? "identity" : candidate.category === "responsibility" ? "derived_insight" : candidate.category === "communication" ? "preference" : candidate.category,
145
259
  value: candidate.statement,
146
260
  normalizedValue: candidate.statement.toLocaleLowerCase(),
147
261
  statement: candidate.statement,
@@ -151,7 +265,18 @@ async function deriveConnectedSourceUnderstanding(input) {
151
265
  consequence: "medium",
152
266
  actionability: .6,
153
267
  volatility: candidate.category === "routine" || candidate.category === "communication" ? "slow" : "stable",
154
- sensitivity: "normal",
268
+ sensitivity: policy.sensitivity,
269
+ domain: policy.domain,
270
+ layer: "pattern",
271
+ sensitivityCategories: policy.sensitivityCategories,
272
+ purposeIds: ["personalization", "work_assistance"],
273
+ allowedUses: [
274
+ "answer",
275
+ "rank",
276
+ "recommend"
277
+ ],
278
+ allowedAgentIds: consentReceipt.allowedAgentIds,
279
+ consentReceiptId: consentReceipt.id,
155
280
  disclosurePolicy: "referenceable",
156
281
  observedAt: evidenceItem.occurredAt ?? evidenceItem.modifiedAt ?? Date.now(),
157
282
  createdBy: "connector",
@@ -182,6 +307,71 @@ async function deriveConnectedSourceUnderstanding(input) {
182
307
  });
183
308
  continue;
184
309
  }
310
+ const goalEvidence = evidenceRefs.flatMap((ref) => {
311
+ const item = byRef.get(ref);
312
+ return item?.ownerAttribution === "user" ? [item] : [];
313
+ });
314
+ if (consentReceipt?.allowedDomains.includes("goals") && !consentReceipt.deniedDomains.includes("goals") && thread.confidence !== "low" && goalEvidence.length) {
315
+ const observedAt = Math.max(...goalEvidence.map((item) => item.occurredAt ?? item.modifiedAt ?? Date.now()));
316
+ const validityDays = thread.horizon === "current" ? 30 : thread.horizon === "ongoing" ? 90 : 365;
317
+ let goalCreated = false;
318
+ for (const evidenceItem of goalEvidence) {
319
+ const evidence = createContextEvidence({
320
+ sourceType: "connector",
321
+ sourceInstanceId: input.sourceInstanceId,
322
+ sourceRef: evidenceItem.evidenceRef,
323
+ redactedExcerpt: evidenceItem.title.slice(0, 600),
324
+ trustLevel: "owner",
325
+ observedAt: evidenceItem.occurredAt ?? evidenceItem.modifiedAt ?? observedAt
326
+ });
327
+ const result = reconcileAssertion({
328
+ subject: {
329
+ type: "goal",
330
+ id: thread.topicKey
331
+ },
332
+ predicate: "goal.connected.current_state",
333
+ cardinality: "single",
334
+ scope: { type: "global" },
335
+ kind: "current_state",
336
+ value: {
337
+ title: thread.title,
338
+ summary: thread.summary,
339
+ status: thread.status
340
+ },
341
+ normalizedValue: `${thread.status}:${thread.title}:${thread.summary}`.toLocaleLowerCase(),
342
+ statement: `${thread.title}: ${thread.summary}`,
343
+ authority: "user_observed",
344
+ confidence: thread.confidence === "high" ? .9 : .72,
345
+ inferredImportance: thread.horizon === "current" ? .8 : .65,
346
+ consequence: "medium",
347
+ actionability: .85,
348
+ volatility: "event",
349
+ sensitivity: "normal",
350
+ domain: "goals",
351
+ layer: "fact",
352
+ sensitivityCategories: [],
353
+ purposeIds: ["personalization", "work_assistance"],
354
+ allowedUses: [
355
+ "answer",
356
+ "rank",
357
+ "recommend",
358
+ "remind"
359
+ ],
360
+ allowedAgentIds: consentReceipt.allowedAgentIds,
361
+ consentReceiptId: consentReceipt.id,
362
+ disclosurePolicy: "referenceable",
363
+ observedAt,
364
+ validFrom: observedAt,
365
+ validTo: observedAt + validityDays * 864e5,
366
+ reviewAt: observedAt + Math.min(validityDays, 14) * 864e5,
367
+ createdBy: "connector",
368
+ evidenceId: evidence.id,
369
+ evidenceConfidence: thread.confidence === "high" ? .9 : .72
370
+ });
371
+ goalCreated ||= result.action === "created" || result.action === "superseded";
372
+ }
373
+ if (goalCreated) created += 1;
374
+ }
185
375
  const result = writeKnowledgeItem({
186
376
  kind: "work_thread",
187
377
  scope: { type: "global" },
@@ -3,19 +3,18 @@ import { init_logger } from "../utils/logger.js";
3
3
  import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "../storage/sqlite/connector-learning-repository.js";
4
4
  import { getConnectorAccount, reconcileConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
5
5
  import { getConnectorInstallation, listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
6
+ import { pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
6
7
  import { getConnectorSyncPolicyForConnection } from "../storage/sqlite/connector-sync-policy-repository.js";
7
8
  import { init_sqlite } from "../storage/sqlite/index.js";
8
9
  import { connectorIdentityKey, normalizeConnectorIdentity } from "./connector-identity.js";
9
10
  import { ComposioSessionsAdapter } from "./composio-sessions.js";
10
11
  import { buildConnectorLearningArguments, getConnectorLearningPlan } from "./learning-recipes.js";
11
12
  import { getConnectorDefinition } from "./catalog.js";
12
- import { getWorkspacePath } from "../config/workspace-path-helpers.js";
13
- import { ConnectedKnowledgePipeline } from "../knowledge/connected-knowledge-pipeline.js";
14
- import "../knowledge/index.js";
15
13
  import { ingestComposioConnectedSource } from "./connected-source-ingestion.js";
14
+ import { getActiveUnderstandingConsent, grantUnderstandingConsent } from "../user-context/sources/consent-repository.js";
15
+ import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
16
16
  import { deriveConnectedSourceUnderstanding } from "./connected-source-understanding.js";
17
17
  import { listConnectedContentCandidates, readConnectedContent } from "./content-enrichment.js";
18
- import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
19
18
  //#region src/connectors/learning-coordinator.ts
20
19
  init_sqlite();
21
20
  init_logger();
@@ -33,25 +32,60 @@ function connectorSourceCategory(toolkit) {
33
32
  if (toolkit === "github" || toolkit === "linear") return "code_activity";
34
33
  return "files";
35
34
  }
36
- function ensureUnderstandingSourceRun(job, toolkit, displayName) {
35
+ function ensureUnderstandingSourceRun(job, toolkit, displayName, config) {
37
36
  const existing = listUnderstandingSourceGrants({ includeRevoked: true }).find((grant) => grant.sourceKey === `connector-account:${job.accountId}`);
38
37
  if (existing?.status === "revoked") throw new Error("Source authorization was revoked.");
38
+ const grant = existing ?? upsertUnderstandingSourceGrant({
39
+ sourceKey: `connector-account:${job.accountId}`,
40
+ adapterId: `connector:${job.connectorId}`,
41
+ category: connectorSourceCategory(toolkit),
42
+ platform: "all",
43
+ displayName,
44
+ accessMode: "continuous",
45
+ retentionPolicy: config.userContext.userModel.processingPolicy === "remote_allowed" ? "derived_only" : "bounded_raw",
46
+ processingPolicy: config.userContext.userModel.processingPolicy,
47
+ config: {
48
+ connectorId: job.connectorId,
49
+ accountId: job.accountId,
50
+ readOnly: true
51
+ }
52
+ });
53
+ if (!getActiveUnderstandingConsent(grant.id)) grantUnderstandingConsent({
54
+ grantId: grant.id,
55
+ purposes: ["personalization", "work_assistance"],
56
+ allowedDomains: [
57
+ "identity",
58
+ "goals",
59
+ "capabilities",
60
+ "behavior",
61
+ "preferences",
62
+ "relationships",
63
+ "environment",
64
+ "digital_life"
65
+ ],
66
+ deniedDomains: [
67
+ "health",
68
+ "emotion",
69
+ "life_history",
70
+ "resources_constraints"
71
+ ],
72
+ allowedFields: [
73
+ "title",
74
+ "content",
75
+ "timestamps",
76
+ "participants",
77
+ "owner_activity",
78
+ "status"
79
+ ],
80
+ accessMode: grant.accessMode,
81
+ lookbackDays: getConnectorLearningPlan(toolkit)?.bootstrapWindowDays ?? 30,
82
+ rawRetentionDays: grant.retentionPolicy === "bounded_raw" ? 7 : 0,
83
+ processingPolicy: grant.processingPolicy,
84
+ allowedAgentIds: [job.agentId],
85
+ disclosureVersion: "connector-understanding-v1"
86
+ });
39
87
  return getOrCreateConnectorUnderstandingSourceRun({
40
- grantId: (existing ?? upsertUnderstandingSourceGrant({
41
- sourceKey: `connector-account:${job.accountId}`,
42
- adapterId: `connector:${job.connectorId}`,
43
- category: connectorSourceCategory(toolkit),
44
- platform: "all",
45
- displayName,
46
- accessMode: "continuous",
47
- retentionPolicy: "bounded_raw",
48
- processingPolicy: "remote_allowed",
49
- config: {
50
- connectorId: job.connectorId,
51
- accountId: job.accountId,
52
- readOnly: true
53
- }
54
- })).id,
88
+ grantId: grant.id,
55
89
  connectorLearningJobId: job.id,
56
90
  kind: job.mode,
57
91
  status: "queued",
@@ -105,7 +139,7 @@ function startConnectorLearningCoordinator(options) {
105
139
  idempotencyKey: request.idempotencyKey ?? (mode === "bootstrap" ? `bootstrap:${connection.accountId}:v1` : `incremental:${connection.accountId}:${request.reason ?? "manual"}:${bucket}`),
106
140
  nextRunAt: request.nextRunAt
107
141
  });
108
- ensureUnderstandingSourceRun(job, definition.runtime.toolkit, definition.displayName);
142
+ ensureUnderstandingSourceRun(job, definition.runtime.toolkit, definition.displayName, options.getConfig());
109
143
  publish(job);
110
144
  queueMicrotask(() => void runNow());
111
145
  return job;
@@ -123,7 +157,7 @@ function startConnectorLearningCoordinator(options) {
123
157
  if (definition?.runtime.type !== "composio" || definition.runtime.role !== "toolkit") throw new Error(`Connector learning is unavailable for ${job.connectorId}.`);
124
158
  const plan = getConnectorLearningPlan(definition.runtime.toolkit);
125
159
  if (!plan) throw new Error(`Connector learning has no plan for ${definition.runtime.toolkit}.`);
126
- const sourceRun = ensureUnderstandingSourceRun(job, plan.toolkit, definition.displayName);
160
+ const sourceRun = ensureUnderstandingSourceRun(job, plan.toolkit, definition.displayName, options.getConfig());
127
161
  updateUnderstandingSourceRun(sourceRun.id, { status: "running" });
128
162
  let connection = listConnectorConnections().find((candidate) => candidate.id === job.connectionId);
129
163
  if (!connection) throw new Error("Connector account no longer exists.");
@@ -286,10 +320,13 @@ function startConnectorLearningCoordinator(options) {
286
320
  lastCollectedAt: Date.now()
287
321
  });
288
322
  publish(completed);
289
- const retention = new ConnectedKnowledgePipeline({
290
- agentId: job.agentId,
291
- workspaceId: getWorkspacePath(options.getConfig())
292
- }).pruneBoundedRetention(job.sourceInstanceId, Date.now() - plan.bootstrapWindowDays * 24 * 60 * 6e4);
323
+ const sourceGrant = getUnderstandingSourceGrant(sourceRun.grantId);
324
+ const activeConsent = getActiveUnderstandingConsent(sourceRun.grantId);
325
+ const rawRetentionDays = sourceGrant?.retentionPolicy === "bounded_raw" ? activeConsent?.rawRetentionDays ?? 7 : 0;
326
+ const retention = {
327
+ rawDeleted: pruneBoundedKnowledgeSourceItems(job.sourceInstanceId, rawRetentionDays === 0 ? Date.now() + 1 : Date.now() - rawRetentionDays * 864e5),
328
+ derivedDeleted: 0
329
+ };
293
330
  if (retention.rawDeleted || retention.derivedDeleted) log.info({
294
331
  jobId: job.id,
295
332
  sourceInstanceId: job.sourceInstanceId,
@@ -12,9 +12,16 @@ function buildConnectorLearningArguments(plan, stream, input, identity) {
12
12
  }
13
13
  if (plan.toolkit === "gmail") {
14
14
  const after = cursor?.checkpoint ? Math.floor(Date.parse(cursor.checkpoint) / 1e3) : NaN;
15
+ const baseQuery = typeof stream.arguments.query === "string" ? stream.arguments.query.trim() : "";
16
+ const incrementalQuery = Number.isFinite(after) ? `after:${after}` : "";
15
17
  return {
16
18
  ...stream.arguments,
17
- ...Number.isFinite(after) ? { query: `after:${after} -in:spam -in:trash` } : {},
19
+ ...baseQuery || incrementalQuery ? { query: [
20
+ baseQuery,
21
+ incrementalQuery,
22
+ "-in:spam",
23
+ "-in:trash"
24
+ ].filter(Boolean).join(" ") } : {},
18
25
  ...cursor?.pageToken ? { page_token: cursor.pageToken } : {}
19
26
  };
20
27
  }
@@ -39,6 +46,16 @@ const PLANS = {
39
46
  toolkit: "gmail",
40
47
  identityProbe: { actionId: "GMAIL_GET_PROFILE" },
41
48
  streams: [{
49
+ scope: "sent-messages",
50
+ actionId: "GMAIL_FETCH_EMAILS",
51
+ kind: "activity",
52
+ arguments: {
53
+ max_results: 30,
54
+ include_payload: true,
55
+ verbose: false,
56
+ query: "in:sent newer_than:30d"
57
+ }
58
+ }, {
42
59
  scope: "messages",
43
60
  actionId: "GMAIL_FETCH_EMAILS",
44
61
  kind: "activity",
@@ -46,7 +63,7 @@ const PLANS = {
46
63
  max_results: 30,
47
64
  include_payload: true,
48
65
  verbose: false,
49
- query: "newer_than:30d -in:spam -in:trash"
66
+ query: "newer_than:30d -in:sent"
50
67
  }
51
68
  }],
52
69
  bootstrapWindowDays: 30,
@@ -1,4 +1,4 @@
1
- import type { DecodedPcmAudio } from '../voice/local/wav.js';
1
+ import type { DecodedPcmAudio } from '../voice/audio/wav.js';
2
2
  export interface AudioRange {
3
3
  startedAtMs: number;
4
4
  endedAtMs: number;
@@ -51,9 +51,7 @@ var DiscussionLiveWorker = class {
51
51
  }
52
52
  resolveConcurrency() {
53
53
  if (this.deps.transcribeSegment) return this.concurrency;
54
- const config = this.deps.getConfig();
55
- const sttConfig = mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media);
56
- return sttConfig.provider === "xopc-local" || sttConfig.provider === "local" ? 1 : this.concurrency;
54
+ return this.concurrency;
57
55
  }
58
56
  async processOne() {
59
57
  const segment = claimNextDiscussionTranscriptSegment(this.owner);
@@ -1,11 +1,11 @@
1
1
  import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
2
  import { DISCUSSION_MAX_DURATION_MS } from "../../packages/gateway-contract/src/discussions.js";
3
3
  import { init_src } from "../../packages/gateway-contract/src/index.js";
4
- import { decodeWavToMonoFloat32 } from "../voice/local/wav.js";
5
- import { forEachNormalizedAudioSegment } from "../voice/audio/normalize.js";
6
4
  import { resolveNoteMediaDir } from "../notes/paths.js";
7
5
  import { DiscussionServiceError } from "./errors.js";
8
6
  import { getDiscussionCapture, updateDiscussionCapture } from "./repository.js";
7
+ import { decodeWavToMonoFloat32 } from "../voice/audio/wav.js";
8
+ import { forEachNormalizedAudioSegment } from "../voice/audio/normalize.js";
9
9
  import { join } from "node:path";
10
10
  import { createReadStream } from "node:fs";
11
11
  import { createHash, randomUUID } from "node:crypto";