@xopcai/xopc 0.0.211 → 0.0.214

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 (254) hide show
  1. package/README.md +39 -60
  2. package/README.zh-CN.md +39 -61
  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/{activity-store-BzjFoSr0.js → activity-store-k-mNF_Dq.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTfjhfVE.js → agent-avatar-dicebear-B5VyiQ_K.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-DM2l0hCI.js +68 -0
  8. package/dist/gateway/static/root/assets/{api-D269PnU9.js → api-BjN2udFQ.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BFpfQDWc.js → app-management-settings-panel-Bbul18ij.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-DLxFdqhY.js → appearance-settings-Bvvzgp00.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-BWd2KUkp.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-DPlH4dnc.js → archive-plugin-DjGVsAgd.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-xqfLLd0I.js → attachment-load-BCuUeuuO.js} +1 -1
  14. package/dist/gateway/static/root/assets/automations-page-Doof8nA6.js +1 -0
  15. package/dist/gateway/static/root/assets/automations-workspace-B2eTpWQN.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-C0tuoPXk.js → binary-plugins-B7WFf-lc.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-Deyphj1o.js → block-editor-CVwIwyUT.js} +47 -47
  18. package/dist/gateway/static/root/assets/browser-settings-page-D6ua52QD.js +8 -0
  19. package/dist/gateway/static/root/assets/{browser-workflow-inputs-CYEbXyRF.js → browser-workflow-inputs-Coz8pWzP.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-workflows-page-Bf0tPbGi.js → browser-workflows-page-8a3hnSXE.js} +2 -2
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-DfTpgo4L.js +7 -0
  22. package/dist/gateway/static/root/assets/{capability-presets-api-DPkFA_-R.js → capability-presets-api-BF3G84qe.js} +1 -1
  23. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DkjsA_Yn.js +3 -0
  24. package/dist/gateway/static/root/assets/{channel-recipient-api-DqKaAcnZ.js → channel-recipient-api-8Uz95P40.js} +1 -1
  25. package/dist/gateway/static/root/assets/channels-settings-Cv3pT5iN.js +1 -0
  26. package/dist/gateway/static/root/assets/channels-status-swr-NfU9X-P5.js +1 -0
  27. package/dist/gateway/static/root/assets/{chat-terminal-dock-CTDRZa7e.js → chat-terminal-dock-BYds3un1.js} +2 -2
  28. package/dist/gateway/static/root/assets/{chunk-KS7C4IRE-BMhrPKJC.js → chunk-KS7C4IRE-BaASWQor.js} +1 -1
  29. package/dist/gateway/static/root/assets/{connectors-api-Buu8fif8.js → connectors-api-Cj4deNtI.js} +1 -1
  30. package/dist/gateway/static/root/assets/connectors-page-CL6PMerr.js +2 -0
  31. package/dist/gateway/static/root/assets/{cron-expression-DTLR82NB.js → cron-expression-DjBh0ZL4.js} +1 -1
  32. package/dist/gateway/static/root/assets/{date-picker-DyNogHQH.js → date-picker-3cIzKCZU.js} +1 -1
  33. package/dist/gateway/static/root/assets/{dependency-picker-BpnCuo7B.js → dependency-picker-VZFStrz_.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-CDKI4gVB.js → desktop-pet-CRNQ4CKZ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{desktop-pet-settings-DjT5C2a3.js → desktop-pet-settings-CJBeLcbV.js} +1 -1
  36. package/dist/gateway/static/root/assets/directory-picker-path-field-Dbq9_c33.js +1 -0
  37. package/dist/gateway/static/root/assets/{extension-debug-page-DWf2z7q5.js → extension-debug-page-CSFZfcz5.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-page-Dorx0kf9.js → extension-page-W8vZ3Nl0.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-settings-page-B1wU9ZOB.js → extension-settings-page-D5zYR65b.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-config-api-B1lG4dNr.js → gateway-config-api-BnA56bxn.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-config-swr-BIxuwPQi.js → gateway-config-swr-l2w9ecXl.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-settings-DqIOqJjM.js → gateway-settings-CCOOGd8A.js} +1 -1
  43. package/dist/gateway/static/root/assets/{gateway-startup-retry-BpZgd4U-.js → gateway-startup-retry-XUzMGmLZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{heartbeat-settings-DG4Kmgkc.js → heartbeat-settings-AutxO-ec.js} +1 -1
  45. package/dist/gateway/static/root/assets/home-page-BMpQAeHr.js +1 -0
  46. package/dist/gateway/static/root/assets/{image-generation-api-PkhYohDa.js → image-generation-api-CDoOrDMq.js} +1 -1
  47. package/dist/gateway/static/root/assets/index-BIBAmAjw.js +108 -0
  48. package/dist/gateway/static/root/assets/index-DQzjgIkQ.css +2 -0
  49. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-6OQT3gQF.js → keyboard-shortcuts-settings-Bcc08kso.js} +1 -1
  50. package/dist/gateway/static/root/assets/local-app-workbench-page-ctXGGgj1.js +2 -0
  51. package/dist/gateway/static/root/assets/{local-apps-page-DfruRAmE.js → local-apps-page-CuwtmiCt.js} +1 -1
  52. package/dist/gateway/static/root/assets/{locale-store-C5MK9WcP.js → locale-store-BIOMAhmR.js} +1 -1
  53. package/dist/gateway/static/root/assets/logs-page-Vq-wDYVv.js +2 -0
  54. package/dist/gateway/static/root/assets/{management-settings-L1VYkywO.js → management-settings-gQwyJgL4.js} +1 -1
  55. package/dist/gateway/static/root/assets/{markdown-split-oqgHbqt-.js → markdown-split-DLSvtLDY.js} +1 -1
  56. package/dist/gateway/static/root/assets/{markdown-view-V4rcPPH0.js → markdown-view-BMDQYc6E.js} +1 -1
  57. package/dist/gateway/static/root/assets/{media-plugins-Bb6gSX2o.js → media-plugins-DFdpMglM.js} +1 -1
  58. package/dist/gateway/static/root/assets/messages-CbbZKEfO.js +3 -0
  59. package/dist/gateway/static/root/assets/notes-api-lKPk0Voa.js +1 -0
  60. package/dist/gateway/static/root/assets/{notes-page-B1rOXjpT.js → notes-page-BBhONbU4.js} +1 -1
  61. package/dist/gateway/static/root/assets/notes-workbench-CCFrzDRT.js +4 -0
  62. package/dist/gateway/static/root/assets/{page-tabs-CBuCKeyy.js → page-tabs-DoQq4tt6.js} +1 -1
  63. package/dist/gateway/static/root/assets/{preview-open-alternatives-BQ0tLfPO.js → preview-open-alternatives-BtJkAYOs.js} +1 -1
  64. package/dist/gateway/static/root/assets/{product-open-page-DPeFn7Hu.js → product-open-page-ClyG8t4A.js} +1 -1
  65. package/dist/gateway/static/root/assets/project-detail-page-CVeA23NS.js +1 -0
  66. package/dist/gateway/static/root/assets/projects-page-DFj-bwa5.js +1 -0
  67. package/dist/gateway/static/root/assets/registry-api-BFwvRxBn.js +2 -0
  68. package/dist/gateway/static/root/assets/remote-access-hub-BgIrBYNz.js +1 -0
  69. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BCfQNzjG.js → runtime-tools-settings-panel-DdTZPRU5.js} +2 -2
  70. package/dist/gateway/static/root/assets/{schema-form-Bo7YbHYN.js → schema-form-C3Q03Hyv.js} +1 -1
  71. package/dist/gateway/static/root/assets/sessions-page-wfBSuhmo.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-4zV9nthi.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-form-section-B9dnKr3M.js → settings-form-section-DdrNtxul.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYDV2JtY.js → settings-loading-skeleton-BFvEfK7v.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-page-DbrIYfS9.js → settings-page-B8iNNrLN.js} +1 -1
  76. package/dist/gateway/static/root/assets/setup-status-panel-DEBPLh04.js +1 -0
  77. package/dist/gateway/static/root/assets/{share-preview-page-olgr7LLN.js → share-preview-page-CrsscJs3.js} +1 -1
  78. package/dist/gateway/static/root/assets/shares-settings-Cpd3s8-P.js +1 -0
  79. package/dist/gateway/static/root/assets/skill-reload-api-BrDL4HAN.js +1 -0
  80. package/dist/gateway/static/root/assets/{skills-page-PE16CNw5.js → skills-page-B1sTkjZH.js} +1 -1
  81. package/dist/gateway/static/root/assets/{skills-page.utils-nXmBcBxt.js → skills-page.utils-CIcb0h3E.js} +1 -1
  82. package/dist/gateway/static/root/assets/{system-settings-panel-C3qPwAdY.js → system-settings-panel-MAl91hH_.js} +1 -1
  83. package/dist/gateway/static/root/assets/task-detail-page-C5wgYuvF.js +1 -0
  84. package/dist/gateway/static/root/assets/{theme-store-KR5Otp5w.js → theme-store-BrbF9cgL.js} +1 -1
  85. package/dist/gateway/static/root/assets/{typed-models-lib-lMZodtDF.js → typed-models-lib-Peglr65V.js} +1 -1
  86. package/dist/gateway/static/root/assets/{use-autosave-CKpatP3S.js → use-autosave-C10PZ1OV.js} +1 -1
  87. package/dist/gateway/static/root/assets/user-context-page-DsAfqOJy.js +1 -0
  88. package/dist/gateway/static/root/assets/{voice-api-key-field-CDcv0Wbh.js → voice-api-key-field-bdYmX3ph.js} +1 -1
  89. package/dist/gateway/static/root/assets/work-discovery-overlay-BI4wbLTm.js +1 -0
  90. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BAHYNlQt.js → workflow-run-setup-panel-CfmwGYkr.js} +2 -2
  91. package/dist/gateway/static/root/assets/workflows-page-D7tjtD97.js +5 -0
  92. package/dist/gateway/static/root/index.html +12 -10
  93. package/dist/package.js +1 -1
  94. package/dist/src/agent/agent-manager.js +4 -4
  95. package/dist/src/agent/embedded/model-runtime.js +1 -1
  96. package/dist/src/agent/embedded/run-for-session.js +1 -1
  97. package/dist/src/agent/image/tool-model-config.js +1 -1
  98. package/dist/src/agent/ipc/inbox.js +1 -1
  99. package/dist/src/agent/memory/create-memory-manager.js +1 -1
  100. package/dist/src/agent/service.js +2 -2
  101. package/dist/src/agent/session/session-inspector.js +1 -1
  102. package/dist/src/agent/skills/hub-lock.js +1 -1
  103. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  104. package/dist/src/agent-runtime/index.js +1 -1
  105. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  106. package/dist/src/ai-assist/text-assist.js +1 -1
  107. package/dist/src/auth/credentials.js +2 -2
  108. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  109. package/dist/src/auth/profiles/store.js +1 -1
  110. package/dist/src/auth/sync-provider-auth.js +2 -2
  111. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  112. package/dist/src/cli/commands/agent.js +2 -2
  113. package/dist/src/cli/commands/connectors.js +1 -1
  114. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  115. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  116. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  117. package/dist/src/cli/commands/models.js +2 -2
  118. package/dist/src/cli/commands/onboard.js +1 -1
  119. package/dist/src/cli/commands/profile.js +1 -1
  120. package/dist/src/cli/commands/tunnel.js +3 -3
  121. package/dist/src/cli/commands/update.js +1 -1
  122. package/dist/src/cli/extension-cli-register.js +1 -1
  123. package/dist/src/config/agent-profile.js +1 -1
  124. package/dist/src/config/index.js +5 -5
  125. package/dist/src/config/loader.js +1 -1
  126. package/dist/src/config/models-json.js +1 -1
  127. package/dist/src/connectors/composio-managed-client.d.ts +60 -0
  128. package/dist/src/connectors/composio-managed-client.js +135 -0
  129. package/dist/src/connectors/composio-managed-events.d.ts +41 -0
  130. package/dist/src/connectors/composio-managed-events.js +105 -0
  131. package/dist/src/connectors/composio-session-types.d.ts +91 -0
  132. package/dist/src/connectors/composio-session-types.js +1 -0
  133. package/dist/src/connectors/composio-sessions.d.ts +3 -91
  134. package/dist/src/connectors/composio-sessions.js +13 -7
  135. package/dist/src/connectors/composio.js +2 -1
  136. package/dist/src/connectors/connected-source-ingestion.js +67 -25
  137. package/dist/src/connectors/health.js +1 -1
  138. package/dist/src/connectors/learning-recipes.js +2 -0
  139. package/dist/src/connectors/runtime-adapter-registry.js +2 -2
  140. package/dist/src/discussions/sealer.js +2 -2
  141. package/dist/src/discussions/service.js +6 -2
  142. package/dist/src/discussions/transcript.d.ts +2 -0
  143. package/dist/src/discussions/transcript.js +16 -3
  144. package/dist/src/extensions/install.d.ts +10 -0
  145. package/dist/src/extensions/install.js +111 -14
  146. package/dist/src/extensions/loader.js +22 -18
  147. package/dist/src/extensions/lockfile.js +1 -1
  148. package/dist/src/gateway/agents-admin.js +2 -2
  149. package/dist/src/gateway/file-path-classifier.js +1 -1
  150. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  151. package/dist/src/gateway/hono/middleware/auth.js +2 -2
  152. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  153. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -1
  154. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  155. package/dist/src/gateway/hono/routes/connectors.js +11 -4
  156. package/dist/src/gateway/hono/routes/exposure.js +1 -1
  157. package/dist/src/gateway/hono/routes/home.d.ts +1 -1
  158. package/dist/src/gateway/hono/routes/home.js +2 -2
  159. package/dist/src/gateway/hono/routes/mcp.js +1 -1
  160. package/dist/src/gateway/hono/routes/models.js +1 -1
  161. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +2 -2
  162. package/dist/src/gateway/hono/routes/shares.js +1 -1
  163. package/dist/src/gateway/hono/routes/tunnel.js +3 -3
  164. package/dist/src/gateway/hono/routes/workflows.js +69 -0
  165. package/dist/src/gateway/index.js +2 -2
  166. package/dist/src/gateway/run-loop.js +1 -1
  167. package/dist/src/gateway/runtime-config.js +2 -2
  168. package/dist/src/gateway/security/audit.js +2 -2
  169. package/dist/src/gateway/service/config-coordinator.js +2 -2
  170. package/dist/src/gateway/service.d.ts +1 -0
  171. package/dist/src/gateway/service.js +23 -8
  172. package/dist/src/notes/note-attachment-sync.js +1 -1
  173. package/dist/src/notes/service.d.ts +1 -0
  174. package/dist/src/notes/service.js +2 -1
  175. package/dist/src/notes/types.d.ts +2 -0
  176. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  177. package/dist/src/providers/index.js +2 -2
  178. package/dist/src/providers/model-catalog-persistence.d.ts +1 -1
  179. package/dist/src/providers/model-catalog-store.d.ts +2 -60
  180. package/dist/src/providers/model-catalog-types.d.ts +60 -0
  181. package/dist/src/providers/model-catalog-types.js +1 -0
  182. package/dist/src/providers/model-registry.js +1 -1
  183. package/dist/src/providers/provider-disconnect-core.d.ts +11 -0
  184. package/dist/src/providers/provider-disconnect-core.js +35 -0
  185. package/dist/src/providers/provider-disconnect.d.ts +2 -10
  186. package/dist/src/providers/provider-disconnect.js +4 -26
  187. package/dist/src/providers/register-runtime-providers.js +1 -1
  188. package/dist/src/providers/xopc-cloud-catalog-coordinator.js +2 -2
  189. package/dist/src/runtime-tools/manager.js +41 -22
  190. package/dist/src/storage/sqlite/migrations/124_workflow_context_snapshots.sql +15 -0
  191. package/dist/src/storage/sqlite/migrations/125_project_workflow_presets.sql +12 -0
  192. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  193. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  194. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  195. package/dist/src/storage/sqlite/schema.js +1 -1
  196. package/dist/src/tasks/home-query-service.d.ts +12 -127
  197. package/dist/src/tasks/home-query-service.js +73 -271
  198. package/dist/src/tasks/index.js +2 -2
  199. package/dist/src/tui/tui-startup-resources.js +2 -2
  200. package/dist/src/tui/tui.js +1 -1
  201. package/dist/src/tui/xopc-tui-keybindings.d.ts +2 -2
  202. package/dist/src/tunnel/index.js +2 -2
  203. package/dist/src/voice/audio/normalize.d.ts +1 -0
  204. package/dist/src/voice/audio/normalize.js +24 -4
  205. package/dist/src/voice/local/wav.d.ts +3 -0
  206. package/dist/src/voice/local/wav.js +10 -4
  207. package/dist/src/work-discovery/analyzer.js +16 -4
  208. package/dist/src/work-discovery/service.js +6 -8
  209. package/dist/src/work-discovery/types.d.ts +3 -0
  210. package/dist/src/workflows/context/workflow-context-snapshot-repository.d.ts +21 -0
  211. package/dist/src/workflows/context/workflow-context-snapshot-repository.js +40 -0
  212. package/dist/src/workflows/context/workflow-context.d.ts +18 -0
  213. package/dist/src/workflows/context/workflow-context.js +159 -0
  214. package/dist/src/workflows/domain/run.d.ts +10 -1
  215. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  216. package/dist/src/workflows/engine/workflow-engine.js +2 -0
  217. package/dist/src/workflows/project-presets/project-workflow-preset-repository.d.ts +20 -0
  218. package/dist/src/workflows/project-presets/project-workflow-preset-repository.js +38 -0
  219. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  220. package/dist/src/workflows/service/workflow-run-service.js +108 -23
  221. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
  222. package/dist/src/workflows/service/workflow-writeback-service.d.ts +9 -0
  223. package/dist/src/workflows/service/workflow-writeback-service.js +106 -0
  224. package/package.json +20 -20
  225. package/dist/gateway/static/root/assets/agents-CjhgfuVJ.js +0 -68
  226. package/dist/gateway/static/root/assets/apps-page-CjmlGB5V.js +0 -1
  227. package/dist/gateway/static/root/assets/automations-page-4m6Ey6wG.js +0 -6
  228. package/dist/gateway/static/root/assets/browser-settings-page-CAGCYx8U.js +0 -8
  229. package/dist/gateway/static/root/assets/capabilities-settings-panel-CKfLsxTI.js +0 -7
  230. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CpipKNqX.js +0 -3
  231. package/dist/gateway/static/root/assets/channels-settings-Bvq-O4pt.js +0 -1
  232. package/dist/gateway/static/root/assets/channels-status-swr-CrMld2l7.js +0 -1
  233. package/dist/gateway/static/root/assets/connectors-page-CSQRzaVn.js +0 -2
  234. package/dist/gateway/static/root/assets/directory-picker-path-field-DlJY90TM.js +0 -1
  235. package/dist/gateway/static/root/assets/home-page-BhqItS_s.js +0 -1
  236. package/dist/gateway/static/root/assets/index-DLhvsU9B.css +0 -2
  237. package/dist/gateway/static/root/assets/index-_cuTcWjB.js +0 -107
  238. package/dist/gateway/static/root/assets/local-app-workbench-page-DWjTmzxw.js +0 -2
  239. package/dist/gateway/static/root/assets/logs-page-BA5efZ8B.js +0 -2
  240. package/dist/gateway/static/root/assets/messages-ctG2e-ix.js +0 -3
  241. package/dist/gateway/static/root/assets/notes-workbench-CkHXVmKP.js +0 -4
  242. package/dist/gateway/static/root/assets/project-detail-page-DCqet9-L.js +0 -1
  243. package/dist/gateway/static/root/assets/projects-page-D0t_AjzG.js +0 -1
  244. package/dist/gateway/static/root/assets/remote-access-hub-BUWPoBvw.js +0 -1
  245. package/dist/gateway/static/root/assets/sessions-page-vLhrrM3m.js +0 -1
  246. package/dist/gateway/static/root/assets/settings-advanced-gate-OP1y0Y8M.js +0 -1
  247. package/dist/gateway/static/root/assets/setup-status-panel-Cxc-Ejl5.js +0 -1
  248. package/dist/gateway/static/root/assets/shares-settings-ZOqC6-aA.js +0 -1
  249. package/dist/gateway/static/root/assets/skill-reload-api-DwvC3Iuf.js +0 -1
  250. package/dist/gateway/static/root/assets/task-detail-page-DCRB-5q-.js +0 -1
  251. package/dist/gateway/static/root/assets/user-context-page-CoiedRuA.js +0 -1
  252. package/dist/gateway/static/root/assets/work-discovery-overlay-CGdT22un.js +0 -1
  253. package/dist/gateway/static/root/assets/work-discovery-page-BwaU1RqI.js +0 -1
  254. package/dist/gateway/static/root/assets/workflows-page-DHYmh9G7.js +0 -5
@@ -1,6 +1,6 @@
1
1
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
2
- import { extractProfileAgentId, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
2
  import { init_providers, resolveModel } from "../../providers/index.js";
3
+ import { extractProfileAgentId, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
4
4
  import { TaskRepository } from "../../tasks/task-repository.js";
5
5
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
6
6
  import { TaskRunRepository } from "../../tasks/task-run-repository.js";
@@ -15,10 +15,12 @@ import { CatalogWorkflowDefinitionRegistry } from "../registry/catalog-workflow-
15
15
  import { validateWorkflowJsonSchema } from "../domain/schema-validation.js";
16
16
  import { isTerminalWorkflowRunStatus } from "../domain/run.js";
17
17
  import "../domain/index.js";
18
+ import { resolveWorkflowContext } from "../context/workflow-context.js";
18
19
  import { WorkflowEngine } from "../engine/workflow-engine.js";
19
20
  import "../engine/index.js";
20
21
  import { WorkflowEventStore } from "../store/event-store.js";
21
22
  import { WorkflowRunStore } from "../store/run-store.js";
23
+ import { WorkflowWritebackService, resolveWorkflowWritebackPolicy } from "./workflow-writeback-service.js";
22
24
  import { randomUUID } from "node:crypto";
23
25
  //#region src/workflows/service/workflow-run-service.ts
24
26
  init_resolve_route();
@@ -131,7 +133,59 @@ var WorkflowRunService = class {
131
133
  const runId = randomUUID();
132
134
  const goal = params.goal ?? "";
133
135
  const linkedTaskRun = params.taskRunId ? new TaskRunRepository().get(params.taskRunId) : void 0;
134
- const projectId = params.projectId?.trim() || (linkedTaskRun ? new TaskRepository().get(linkedTaskRun.taskId)?.projectId : void 0) || (params.parentSessionKey?.trim() ? (await this.options.service.sessionIndexInstance.getStore().getMetadata(params.parentSessionKey.trim()))?.projectId : void 0);
136
+ const inheritedProjectId = params.projectId?.trim() || (linkedTaskRun ? new TaskRepository().get(linkedTaskRun.taskId)?.projectId : void 0) || (params.parentSessionKey?.trim() ? (await this.options.service.sessionIndexInstance.getStore().getMetadata(params.parentSessionKey.trim()))?.projectId : void 0);
137
+ const taskId = linkedTaskRun?.taskId;
138
+ const requestedContextRefs = params.contextRefs ? [...inheritedProjectId && !params.contextRefs.some((ref) => ref.kind === "project" && ref.id === inheritedProjectId) ? [{
139
+ kind: "project",
140
+ id: inheritedProjectId,
141
+ role: "scope"
142
+ }] : [], ...params.contextRefs] : buildDefaultWorkflowContextRefs({
143
+ projectId: inheritedProjectId,
144
+ taskId,
145
+ source: params.source
146
+ });
147
+ const passiveContextRefs = requestedContextRefs.filter((ref) => ![
148
+ "project",
149
+ "task",
150
+ "note"
151
+ ].includes(ref.kind));
152
+ let resolvedContext;
153
+ try {
154
+ resolvedContext = await resolveWorkflowContext({
155
+ runId,
156
+ projectId: inheritedProjectId,
157
+ refs: requestedContextRefs.filter((ref) => [
158
+ "project",
159
+ "task",
160
+ "note"
161
+ ].includes(ref.kind)),
162
+ config: this.options.service.currentConfig,
163
+ reuseSnapshotId: params.contextSnapshotId
164
+ });
165
+ } catch (cause) {
166
+ return {
167
+ ok: false,
168
+ code: "invalid_input",
169
+ message: cause instanceof Error ? cause.message : "Workflow context could not be resolved",
170
+ httpStatus: 400
171
+ };
172
+ }
173
+ const projectId = resolvedContext?.projectId ?? inheritedProjectId;
174
+ const contextRefs = resolvedContext ? [...resolvedContext.refs, ...passiveContextRefs] : requestedContextRefs;
175
+ let writebackPolicy;
176
+ try {
177
+ writebackPolicy = resolveWorkflowWritebackPolicy(params.writebackPolicy, {
178
+ projectId,
179
+ taskId
180
+ });
181
+ } catch (cause) {
182
+ return {
183
+ ok: false,
184
+ code: "invalid_input",
185
+ message: cause instanceof Error ? cause.message : "Invalid workflow writeback policy",
186
+ httpStatus: 400
187
+ };
188
+ }
135
189
  const { sessionKey } = await this.options.sessionBridge.prepareRunSession({
136
190
  runId,
137
191
  agentId: params.agentId,
@@ -177,7 +231,8 @@ var WorkflowRunService = class {
177
231
  eventStore,
178
232
  runStore,
179
233
  sessionKey,
180
- projectId
234
+ projectId,
235
+ contextInstructions: resolvedContext?.instructions
181
236
  });
182
237
  const limits = resolveWorkflowRunLimits({
183
238
  config: this.options.service.currentConfig,
@@ -200,8 +255,9 @@ var WorkflowRunService = class {
200
255
  agentId: params.agentId,
201
256
  taskRunId: params.taskRunId,
202
257
  projectId,
203
- contextRefs: params.contextRefs,
204
- writebackPolicy: params.writebackPolicy,
258
+ contextRefs,
259
+ contextSnapshot: resolvedContext?.snapshot,
260
+ writebackPolicy,
205
261
  sessionKey,
206
262
  source,
207
263
  input: inputEnvelope,
@@ -246,6 +302,7 @@ var WorkflowRunService = class {
246
302
  taskRunId: existing.run.metadata?.taskRunId,
247
303
  projectId,
248
304
  contextRefs: existing.run.metadata?.contextRefs,
305
+ contextSnapshotId: existing.run.metadata?.contextSnapshot?.id,
249
306
  writebackPolicy: existing.run.metadata?.writebackPolicy,
250
307
  input: existing.run.metadata?.input ? void 0 : existing.run.input,
251
308
  inputEnvelope: existing.run.metadata?.input,
@@ -281,6 +338,43 @@ var WorkflowRunService = class {
281
338
  const goal = buildReplayGoal(existing, params.scope, targets.targets.length);
282
339
  const parentSessionKey = existing.run.source.kind === "chat" ? existing.run.source.sessionKey : void 0;
283
340
  const projectId = existing.run.metadata?.projectId;
341
+ const taskRunId = existing.run.metadata?.taskRunId;
342
+ const taskId = taskRunId ? new TaskRunRepository().get(taskRunId)?.taskId : void 0;
343
+ let writebackPolicy;
344
+ try {
345
+ writebackPolicy = resolveWorkflowWritebackPolicy(existing.run.metadata?.writebackPolicy, {
346
+ projectId,
347
+ taskId
348
+ });
349
+ } catch (cause) {
350
+ return {
351
+ ok: false,
352
+ code: "invalid_input",
353
+ message: cause instanceof Error ? cause.message : "Invalid workflow writeback policy",
354
+ httpStatus: 400
355
+ };
356
+ }
357
+ let resolvedContext;
358
+ try {
359
+ resolvedContext = await resolveWorkflowContext({
360
+ runId: replayRunId,
361
+ projectId,
362
+ refs: existing.run.metadata?.contextRefs?.filter((ref) => [
363
+ "project",
364
+ "task",
365
+ "note"
366
+ ].includes(ref.kind)) ?? [],
367
+ config: this.options.service.currentConfig,
368
+ reuseSnapshotId: existing.run.metadata?.contextSnapshot?.id
369
+ });
370
+ } catch (cause) {
371
+ return {
372
+ ok: false,
373
+ code: "invalid_input",
374
+ message: cause instanceof Error ? cause.message : "Workflow context snapshot could not be loaded",
375
+ httpStatus: 400
376
+ };
377
+ }
284
378
  const { sessionKey } = await this.options.sessionBridge.prepareRunSession({
285
379
  runId: replayRunId,
286
380
  agentId: params.agentId,
@@ -298,7 +392,8 @@ var WorkflowRunService = class {
298
392
  eventStore,
299
393
  runStore: replayRunStore,
300
394
  sessionKey,
301
- projectId
395
+ projectId,
396
+ contextInstructions: resolvedContext?.instructions
302
397
  });
303
398
  const limits = resolveWorkflowRunLimits({
304
399
  config: this.options.service.currentConfig,
@@ -318,10 +413,11 @@ var WorkflowRunService = class {
318
413
  metadata: buildWorkflowRunMetadata({
319
414
  definition,
320
415
  agentId: params.agentId,
321
- taskRunId: existing.run.metadata?.taskRunId,
416
+ taskRunId,
322
417
  projectId,
323
418
  contextRefs: existing.run.metadata?.contextRefs,
324
- writebackPolicy: existing.run.metadata?.writebackPolicy,
419
+ contextSnapshot: resolvedContext?.snapshot,
420
+ writebackPolicy,
325
421
  sessionKey,
326
422
  source,
327
423
  input: inputEnvelope,
@@ -466,9 +562,11 @@ var WorkflowRunService = class {
466
562
  return new WorkflowEngine({
467
563
  cwd: workspace,
468
564
  projectId: params.projectId,
565
+ contextInstructions: params.contextInstructions,
469
566
  eventStore: params.eventStore,
470
567
  runStore: params.runStore,
471
568
  runner,
569
+ hooks: [{ afterRun: ({ runId, status }) => new WorkflowWritebackService().apply(params.runStore, runId, status) }],
472
570
  resolveModelId: (modelId) => {
473
571
  return resolveModel(resolveModelRef(gatewayService.currentConfig, profileAgentId, modelId));
474
572
  },
@@ -539,7 +637,7 @@ function buildWorkflowRunMetadata(params) {
539
637
  taskId,
540
638
  source: params.source
541
639
  });
542
- const writebackPolicy = params.writebackPolicy ?? buildDefaultWorkflowWritebackPolicy({
640
+ const writebackPolicy = resolveWorkflowWritebackPolicy(params.writebackPolicy, {
543
641
  projectId,
544
642
  taskId
545
643
  });
@@ -549,6 +647,7 @@ function buildWorkflowRunMetadata(params) {
549
647
  agentId: params.agentId,
550
648
  projectId,
551
649
  contextRefs,
650
+ contextSnapshot: params.contextSnapshot,
552
651
  writebackPolicy,
553
652
  retryOfRunId: params.retryOfRunId,
554
653
  replay: params.replay,
@@ -583,20 +682,6 @@ function buildDefaultWorkflowContextRefs(params) {
583
682
  });
584
683
  return refs;
585
684
  }
586
- function buildDefaultWorkflowWritebackPolicy(params) {
587
- const targets = [];
588
- if (params.projectId) targets.push({
589
- kind: "project",
590
- id: params.projectId,
591
- mode: "record"
592
- });
593
- if (params.taskId) targets.push({
594
- kind: "task",
595
- id: params.taskId,
596
- mode: "evaluate"
597
- });
598
- return { targets };
599
- }
600
685
  function resolveWorkflowReplayTargets(view, scope) {
601
686
  const phaseTitleById = new Map(view.phases.map((phase) => [phase.id, phase.title]));
602
687
  const failedStatuses = new Set(["error", "skipped"]);
@@ -6,6 +6,7 @@ export interface StartWorkflowRunServiceParams {
6
6
  parentSessionKey?: string;
7
7
  projectId?: string;
8
8
  contextRefs?: WorkflowRunContextRef[];
9
+ contextSnapshotId?: string;
9
10
  writebackPolicy?: WorkflowRunWritebackPolicy;
10
11
  input?: unknown;
11
12
  inputEnvelope?: WorkflowRunInputEnvelope;
@@ -0,0 +1,9 @@
1
+ import type { WorkflowRunMetadata } from '../domain/index.js';
2
+ import type { WorkflowRunStore } from '../store/run-store.js';
3
+ export declare class WorkflowWritebackService {
4
+ apply(runStore: WorkflowRunStore, runId: string, status: 'succeeded' | 'failed' | 'cancelled'): Promise<void>;
5
+ }
6
+ export declare function resolveWorkflowWritebackPolicy(requested: WorkflowRunMetadata['writebackPolicy'] | undefined, scope: {
7
+ projectId?: string;
8
+ taskId?: string;
9
+ }): NonNullable<WorkflowRunMetadata['writebackPolicy']>;
@@ -0,0 +1,106 @@
1
+ import { createLogger } from "../../utils/logger/index.js";
2
+ import { init_logger } from "../../utils/logger.js";
3
+ import { TaskRunRepository } from "../../tasks/task-run-repository.js";
4
+ import { ProjectService } from "../../projects/project-service.js";
5
+ //#region src/workflows/service/workflow-writeback-service.ts
6
+ init_logger();
7
+ const log = createLogger("WorkflowWriteback");
8
+ var WorkflowWritebackService = class {
9
+ async apply(runStore, runId, status) {
10
+ try {
11
+ const view = await runStore.readRunView(runId);
12
+ if (!view) return;
13
+ const summary = view.run.result?.summary?.trim() || view.run.error?.message?.trim() || `Workflow ${status}`;
14
+ const taskRunId = view.run.metadata?.taskRunId;
15
+ const linkedTaskRun = taskRunId ? new TaskRunRepository().get(taskRunId) : void 0;
16
+ for (const target of view.run.metadata?.writebackPolicy?.targets ?? []) {
17
+ if (target.kind === "project") {
18
+ if (target.id !== view.run.metadata?.projectId || !["record", "suggest"].includes(target.mode)) continue;
19
+ const projects = new ProjectService();
20
+ const project = projects.get(target.id);
21
+ if (!project) continue;
22
+ const risks = view.run.result?.sections?.filter((section) => section.kind === "risks").flatMap((section) => section.items.map((item) => item.title)) ?? [];
23
+ projects.createUpdate(target.id, {
24
+ health: project.health,
25
+ summary: target.mode === "suggest" ? `Workflow suggestion: ${summary}` : summary,
26
+ risks,
27
+ nextSteps: view.run.result?.followUps?.map((item) => item.title) ?? [],
28
+ actor: {
29
+ kind: "workflow",
30
+ runId,
31
+ definitionId: view.run.definitionId,
32
+ status
33
+ }
34
+ });
35
+ continue;
36
+ }
37
+ if (target.mode !== "evaluate" || !linkedTaskRun || linkedTaskRun.taskId !== target.id) continue;
38
+ new TaskRunRepository().finalize({
39
+ runId: linkedTaskRun.id,
40
+ expectedVersion: linkedTaskRun.version,
41
+ receipt: {
42
+ status,
43
+ summary,
44
+ changes: [],
45
+ evidence: (view.run.result?.artifacts ?? []).map((artifact) => ({
46
+ kind: "artifact",
47
+ title: artifact.title ?? artifact.name,
48
+ summary: artifact.name,
49
+ provenance: "tool",
50
+ strength: "observed",
51
+ observedAt: artifact.createdAtMs
52
+ })),
53
+ verification: {
54
+ status: "unverified",
55
+ checks: []
56
+ },
57
+ remainingWork: status === "succeeded" ? [] : [view.run.error?.message ?? "Workflow did not complete"],
58
+ ...view.run.result?.followUps?.[0]?.title ? { nextAction: view.run.result.followUps[0].title } : {},
59
+ needsUser: true,
60
+ completionVerdict: status === "succeeded" ? "partial" : "not_achieved",
61
+ ...status === "failed" ? { failure: {
62
+ code: view.run.error?.code ?? "runtime_error",
63
+ phase: "workflow",
64
+ recoveryAction: "Review the workflow result and retry when ready."
65
+ } } : {},
66
+ contextTraceId: view.run.metadata?.contextSnapshot?.traceId
67
+ },
68
+ actor: {
69
+ kind: "agent",
70
+ id: view.run.metadata?.agentId
71
+ }
72
+ });
73
+ }
74
+ } catch (err) {
75
+ log.warn({
76
+ err,
77
+ runId,
78
+ phase: "writeback"
79
+ }, "Workflow result writeback failed");
80
+ }
81
+ }
82
+ };
83
+ function resolveWorkflowWritebackPolicy(requested, scope) {
84
+ const targets = (requested?.targets ?? defaultTargets(scope)).filter((target, index, all) => all.findIndex((candidate) => candidate.kind === target.kind && candidate.id === target.id && candidate.mode === target.mode) === index);
85
+ for (const target of targets) {
86
+ if (target.kind === "project") {
87
+ if (!scope.projectId || target.id !== scope.projectId || !["record", "suggest"].includes(target.mode)) throw new Error("Workflow project writeback must target the bound project");
88
+ continue;
89
+ }
90
+ if (!scope.taskId || target.id !== scope.taskId || target.mode !== "evaluate") throw new Error("Workflow task writeback must evaluate the linked task");
91
+ }
92
+ return { targets };
93
+ }
94
+ function defaultTargets(scope) {
95
+ return [...scope.projectId ? [{
96
+ kind: "project",
97
+ id: scope.projectId,
98
+ mode: "record"
99
+ }] : [], ...scope.taskId ? [{
100
+ kind: "task",
101
+ id: scope.taskId,
102
+ mode: "evaluate"
103
+ }] : []];
104
+ }
105
+ //#endregion
106
+ export { WorkflowWritebackService, resolveWorkflowWritebackPolicy };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.211",
4
- "description": "Local-first AI system that remembers context, coordinates AI, and sustains long-term progress.",
3
+ "version": "0.0.214",
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",
7
7
  "types": "dist/src/index.d.ts",
@@ -30,26 +30,26 @@
30
30
  "access": "public"
31
31
  },
32
32
  "keywords": [
33
- "agent-os",
34
- "ai-agent",
33
+ "agentic-ai",
34
+ "ai-agents",
35
+ "ai-assistant",
36
+ "ai-memory",
37
+ "automation",
35
38
  "byok",
36
39
  "cli",
37
- "cron",
38
- "desktop",
39
- "extensions",
40
- "gateway",
41
- "task-loop-os",
42
- "llm",
40
+ "desktop-app",
41
+ "electron",
42
+ "knowledge-management",
43
+ "local-ai",
43
44
  "local-first",
44
45
  "mcp",
45
- "multi-agent",
46
46
  "ollama",
47
+ "open-source",
48
+ "personal-ai",
47
49
  "self-hosted",
48
- "telegram",
49
- "tui",
50
- "voice-ai",
51
- "weixin",
52
- "workflow"
50
+ "task-management",
51
+ "typescript",
52
+ "workflow-automation"
53
53
  ],
54
54
  "author": "xopcai <lyxopc.ai@gmail.com>",
55
55
  "license": "MIT",
@@ -67,10 +67,10 @@
67
67
  "dependencies": {
68
68
  "@composio/core": "0.14.1",
69
69
  "@composio/experimental": "0.2.0",
70
- "@earendil-works/pi-agent-core": "0.84.2",
71
- "@earendil-works/pi-ai": "0.84.2",
72
- "@earendil-works/pi-coding-agent": "0.84.2",
73
- "@earendil-works/pi-tui": "0.84.2",
70
+ "@earendil-works/pi-agent-core": "0.84.4",
71
+ "@earendil-works/pi-ai": "0.84.4",
72
+ "@earendil-works/pi-coding-agent": "0.84.4",
73
+ "@earendil-works/pi-tui": "0.84.4",
74
74
  "@grammyjs/runner": "^2.0.3",
75
75
  "@hono/node-server": "^2.0.4",
76
76
  "@inquirer/prompts": "^8.5.0",