@xopcai/xopc 0.0.142 → 0.0.143

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 (543) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
  21. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  22. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  23. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  24. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
  26. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
  29. package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
  31. package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
  33. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  37. package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
  38. package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
  41. package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
  42. package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
  43. package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
  44. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  50. package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
  51. package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
  52. package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
  53. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
  55. package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
  56. package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
  57. package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
  58. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
  61. package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
  69. package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
  70. package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  76. package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
  77. package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
  78. package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
  79. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
  80. package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
  81. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  82. package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
  85. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  86. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  87. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  88. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  89. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  90. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  91. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  92. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  93. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  94. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  95. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  96. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  97. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  98. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  99. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  100. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  101. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  102. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  103. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  105. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  106. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  107. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  108. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  109. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  110. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  111. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  112. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  113. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  114. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  115. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  116. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  117. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  118. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  119. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  120. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  121. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  122. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  123. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  124. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  125. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  126. package/dist/gateway/static/root/index.html +9 -6
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +2 -0
  129. package/dist/src/agent/agent-manager.js +8 -0
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  132. package/dist/src/agent/background-review/prompts.js +3 -2
  133. package/dist/src/agent/background-review/prompts.js.map +1 -1
  134. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  135. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  136. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  137. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  138. package/dist/src/agent/goals/post-turn.js +5 -4
  139. package/dist/src/agent/goals/post-turn.js.map +1 -1
  140. package/dist/src/agent/mcp/mcp-transport.js +4 -1
  141. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  142. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  143. package/dist/src/agent/memory/context/planner.js +60 -14
  144. package/dist/src/agent/memory/context/planner.js.map +1 -1
  145. package/dist/src/agent/memory/context/types.d.ts +3 -1
  146. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  147. package/dist/src/agent/memory/lifecycle.js +50 -0
  148. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  149. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  150. package/dist/src/agent/memory/source-origin.js +19 -0
  151. package/dist/src/agent/memory/source-origin.js.map +1 -0
  152. package/dist/src/agent/memory/understanding/service.js +5 -0
  153. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  154. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  155. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  156. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  157. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  158. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  159. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  160. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  161. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  162. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  163. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  164. package/dist/src/agent/prompt/system-prompt.js +6 -3
  165. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  166. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  167. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  168. package/dist/src/agent/service.d.ts +2 -0
  169. package/dist/src/agent/service.js +9 -3
  170. package/dist/src/agent/service.js.map +1 -1
  171. package/dist/src/agent/starter-agents.js +1 -1
  172. package/dist/src/agent/starter-agents.js.map +1 -1
  173. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  174. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  175. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  176. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  177. package/dist/src/agent/tools/composio-tool.js +252 -35
  178. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  179. package/dist/src/agent/tools/factory.js +7 -3
  180. package/dist/src/agent/tools/factory.js.map +1 -1
  181. package/dist/src/agent/tools/index.d.ts +1 -1
  182. package/dist/src/agent/tools/index.js +2 -2
  183. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  184. package/dist/src/agent/tools/workflow-tool.js +3 -16
  185. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  186. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  187. package/dist/src/agent/workflow/builtins/index.js +226 -41
  188. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  190. package/dist/src/agent/workflow/catalog.js +158 -154
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/index.d.ts +4 -6
  193. package/dist/src/agent/workflow/index.js +2 -5
  194. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  195. package/dist/src/agent/workflow/snapshot.js +2 -2
  196. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  197. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  198. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  199. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  200. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  201. package/dist/src/agent/workflow/types.d.ts +31 -26
  202. package/dist/src/agent-manifest/index.d.ts +1 -0
  203. package/dist/src/agent-manifest/index.js +3 -1
  204. package/dist/src/agent-manifest/index.js.map +1 -1
  205. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  206. package/dist/src/agent-manifest/preset-chain.js +32 -0
  207. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  208. package/dist/src/agent-manifest/resolver.js +3 -10
  209. package/dist/src/agent-manifest/resolver.js.map +1 -1
  210. package/dist/src/agent-manifest/schema.d.ts +4 -4
  211. package/dist/src/automations/api/routes.js +13 -1
  212. package/dist/src/automations/api/routes.js.map +1 -1
  213. package/dist/src/automations/domain/validation.d.ts +14 -14
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  215. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  216. package/dist/src/browser/providers/browser-ext-install.js +39 -14
  217. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  218. package/dist/src/capabilities/store-connector.d.ts +0 -1
  219. package/dist/src/capabilities/store-connector.js +3 -5
  220. package/dist/src/capabilities/store-connector.js.map +1 -1
  221. package/dist/src/chat-commands/builtins/review.js +72 -73
  222. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  223. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  224. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  225. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +2 -2
  227. package/dist/src/cli/commands/extension-create.js.map +1 -1
  228. package/dist/src/cli/commands/extension-marketplace.js +42 -36
  229. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  230. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  231. package/dist/src/cli/commands/extension-pack.js +3 -2
  232. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  233. package/dist/src/commands/agents.config.d.ts +1 -0
  234. package/dist/src/commands/agents.config.js +1 -0
  235. package/dist/src/commands/agents.config.js.map +1 -1
  236. package/dist/src/config/schema.d.ts +6 -6
  237. package/dist/src/config/schema.js +6 -22
  238. package/dist/src/config/schema.js.map +1 -1
  239. package/dist/src/config/web-patch.d.ts +1 -1
  240. package/dist/src/connectors/approval.d.ts +2 -0
  241. package/dist/src/connectors/approval.js +33 -0
  242. package/dist/src/connectors/approval.js.map +1 -0
  243. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  244. package/dist/src/connectors/auth-provider-registry.js +17 -0
  245. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  246. package/dist/src/connectors/builtin-catalog.js +55 -116
  247. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  248. package/dist/src/connectors/catalog.js +7 -2
  249. package/dist/src/connectors/catalog.js.map +1 -1
  250. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  251. package/dist/src/connectors/composio-catalog.js +237 -0
  252. package/dist/src/connectors/composio-catalog.js.map +1 -0
  253. package/dist/src/connectors/composio-logo.d.ts +1 -0
  254. package/dist/src/connectors/composio-logo.js +51 -0
  255. package/dist/src/connectors/composio-logo.js.map +1 -0
  256. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  257. package/dist/src/connectors/composio-sessions.js +296 -0
  258. package/dist/src/connectors/composio-sessions.js.map +1 -0
  259. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  260. package/dist/src/connectors/composio-triggers.js +48 -5
  261. package/dist/src/connectors/composio-triggers.js.map +1 -1
  262. package/dist/src/connectors/composio.d.ts +31 -2
  263. package/dist/src/connectors/composio.js +374 -151
  264. package/dist/src/connectors/composio.js.map +1 -1
  265. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  266. package/dist/src/connectors/connector-memory-sync.js +90 -0
  267. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  268. package/dist/src/connectors/install.js +35 -92
  269. package/dist/src/connectors/install.js.map +1 -1
  270. package/dist/src/connectors/instances.js +6 -2
  271. package/dist/src/connectors/instances.js.map +1 -1
  272. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  273. package/dist/src/connectors/integration-strategy.js +29 -0
  274. package/dist/src/connectors/integration-strategy.js.map +1 -0
  275. package/dist/src/connectors/policy.d.ts +13 -0
  276. package/dist/src/connectors/policy.js +48 -0
  277. package/dist/src/connectors/policy.js.map +1 -0
  278. package/dist/src/connectors/providers.js +1 -1
  279. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  280. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  281. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  282. package/dist/src/connectors/types.d.ts +113 -4
  283. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  284. package/dist/src/connectors/workflow-preflight.js +70 -0
  285. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  286. package/dist/src/extensions/install-transaction.d.ts +16 -0
  287. package/dist/src/extensions/install-transaction.js +76 -0
  288. package/dist/src/extensions/install-transaction.js.map +1 -0
  289. package/dist/src/extensions/install.d.ts +2 -0
  290. package/dist/src/extensions/install.js +23 -1
  291. package/dist/src/extensions/install.js.map +1 -1
  292. package/dist/src/gateway/agents-admin.d.ts +2 -0
  293. package/dist/src/gateway/agents-admin.js +7 -0
  294. package/dist/src/gateway/agents-admin.js.map +1 -1
  295. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  296. package/dist/src/gateway/capability-presets-admin.js +11 -4
  297. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  298. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  299. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  300. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  301. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  302. package/dist/src/gateway/hono/routes/agents.js +3 -0
  303. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  305. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  307. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/goals.js +22 -3
  309. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  310. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  311. package/dist/src/gateway/hono/routes/home.js +244 -18
  312. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  314. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  315. package/dist/src/gateway/hono/routes/memory.js +14 -1
  316. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  317. package/dist/src/gateway/hono/routes/projects.js +103 -2
  318. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  319. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  320. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  321. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  322. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  323. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  324. package/dist/src/gateway/hono/routes/you.js +538 -0
  325. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  326. package/dist/src/gateway/hono/sse.d.ts +2 -1
  327. package/dist/src/gateway/hono/sse.js +2 -1
  328. package/dist/src/gateway/hono/sse.js.map +1 -1
  329. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  330. package/dist/src/gateway/service/marketplace-service.js +96 -40
  331. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  332. package/dist/src/gateway/service.d.ts +2 -0
  333. package/dist/src/gateway/service.js +7 -1
  334. package/dist/src/gateway/service.js.map +1 -1
  335. package/dist/src/goals/goal-service.d.ts +7 -5
  336. package/dist/src/goals/goal-service.js +25 -13
  337. package/dist/src/goals/goal-service.js.map +1 -1
  338. package/dist/src/goals/goal-store.js +46 -7
  339. package/dist/src/goals/goal-store.js.map +1 -1
  340. package/dist/src/goals/types.d.ts +24 -0
  341. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  342. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  343. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/index.d.ts +3 -0
  345. package/dist/src/storage/sqlite/index.js +4 -1
  346. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  347. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  348. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  349. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  350. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  351. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  352. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  353. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  354. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  355. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  356. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  357. package/dist/src/storage/sqlite/schema.js +1 -1
  358. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  359. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  360. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  361. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  362. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  363. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  364. package/dist/src/tui/components/assistant-message.js +15 -0
  365. package/dist/src/tui/components/assistant-message.js.map +1 -1
  366. package/dist/src/tui/tui-agent-events.js +85 -1
  367. package/dist/src/tui/tui-agent-events.js.map +1 -1
  368. package/dist/src/tui/tui-command-formatters.js +7 -7
  369. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  370. package/dist/src/tui/tui-commands.js +1 -1
  371. package/dist/src/tui/tui-startup-resources.js +1 -1
  372. package/dist/src/user-context/import.d.ts +12 -0
  373. package/dist/src/user-context/import.js +48 -0
  374. package/dist/src/user-context/import.js.map +1 -0
  375. package/dist/src/user-context/profile.d.ts +37 -0
  376. package/dist/src/user-context/profile.js +165 -0
  377. package/dist/src/user-context/profile.js.map +1 -0
  378. package/dist/src/user-context/projection.d.ts +54 -0
  379. package/dist/src/user-context/projection.js +121 -0
  380. package/dist/src/user-context/projection.js.map +1 -0
  381. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  382. package/dist/src/user-context/source-recommendations.js +86 -0
  383. package/dist/src/user-context/source-recommendations.js.map +1 -0
  384. package/dist/src/user-context/trust-policy.d.ts +11 -0
  385. package/dist/src/user-context/trust-policy.js +31 -0
  386. package/dist/src/user-context/trust-policy.js.map +1 -0
  387. package/dist/src/workflows/authoring/index.d.ts +1 -0
  388. package/dist/src/workflows/authoring/index.js +2 -0
  389. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  390. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  391. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  392. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  393. package/dist/src/workflows/domain/definition-utils.js +28 -26
  394. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  395. package/dist/src/workflows/domain/definition.d.ts +79 -6
  396. package/dist/src/workflows/domain/event.d.ts +18 -2
  397. package/dist/src/workflows/domain/index.js +3 -3
  398. package/dist/src/workflows/domain/run.d.ts +16 -2
  399. package/dist/src/workflows/domain/run.js.map +1 -1
  400. package/dist/src/workflows/domain/validation.d.ts +9 -5
  401. package/dist/src/workflows/domain/validation.js +183 -40
  402. package/dist/src/workflows/domain/validation.js.map +1 -1
  403. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  404. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  405. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  406. package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
  407. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  408. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  409. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  410. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  411. package/dist/src/workflows/engine/projector.js +43 -1
  412. package/dist/src/workflows/engine/projector.js.map +1 -1
  413. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  414. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  415. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  416. package/dist/src/workflows/index.js +4 -7
  417. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  418. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  419. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  420. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  421. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  422. package/dist/src/workflows/runtime/index.d.ts +1 -2
  423. package/dist/src/workflows/runtime/index.js +2 -5
  424. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  425. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  426. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  427. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  428. package/package.json +4 -3
  429. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  430. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  431. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  432. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  433. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  434. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  435. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  436. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  437. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  438. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  439. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  440. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  441. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  442. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  443. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  444. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  445. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  446. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  447. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  448. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  449. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  450. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  451. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  452. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  453. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  454. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  455. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  456. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  457. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  458. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  459. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  460. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  461. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  462. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  463. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  464. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  465. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  466. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  467. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  468. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  469. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  470. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  471. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  472. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  473. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  474. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  475. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  476. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  477. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  478. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  479. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  480. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  481. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  482. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  483. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  484. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  485. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  486. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  487. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  488. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  489. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  490. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  491. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  492. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  493. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  494. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  495. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  496. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  497. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  498. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  499. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  500. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  501. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  502. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  503. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  504. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  505. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  506. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  507. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  508. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  509. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  510. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  511. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  512. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  513. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  514. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  515. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  516. package/dist/src/agent/workflow/builtins/research.js +0 -188
  517. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  518. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  519. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  520. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  521. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  522. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  523. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  524. package/dist/src/agent/workflow/lint.d.ts +0 -38
  525. package/dist/src/agent/workflow/lint.js +0 -74
  526. package/dist/src/agent/workflow/lint.js.map +0 -1
  527. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  528. package/dist/src/agent/workflow/meta-locale.js +0 -62
  529. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  530. package/dist/src/agent/workflow/parser.d.ts +0 -20
  531. package/dist/src/agent/workflow/parser.js +0 -152
  532. package/dist/src/agent/workflow/parser.js.map +0 -1
  533. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  534. package/dist/src/agent/workflow/runtime.js +0 -402
  535. package/dist/src/agent/workflow/runtime.js.map +0 -1
  536. package/dist/src/connectors/oauth.d.ts +0 -22
  537. package/dist/src/connectors/oauth.js +0 -99
  538. package/dist/src/connectors/oauth.js.map +0 -1
  539. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  540. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  541. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  542. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  543. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ import { effectiveMemoryStatus, resolveMemoryStability } from "../agent/memory/lifecycle.js";
2
+ import { classifyMemoryContextOrigin } from "../agent/memory/source-origin.js";
3
+ //#region src/user-context/projection.ts
4
+ const ALWAYS_PERSONAL_KINDS = new Set([
5
+ "user_profile",
6
+ "preference",
7
+ "boundary",
8
+ "relationship",
9
+ "commitment",
10
+ "routine",
11
+ "personal_logistics",
12
+ "current_state",
13
+ "tool_preference",
14
+ "long_term_goal"
15
+ ]);
16
+ const CONTEXTUAL_USER_KINDS = new Set([
17
+ "project_context",
18
+ "open_question",
19
+ "milestone",
20
+ "derived_insight",
21
+ "task_lesson"
22
+ ]);
23
+ function isUserContextRecord(record) {
24
+ if (ALWAYS_PERSONAL_KINDS.has(record.kind)) return true;
25
+ return CONTEXTUAL_USER_KINDS.has(record.kind) && record.tags?.includes("user-understanding") === true;
26
+ }
27
+ function isUserContextMemoryKind(value) {
28
+ return typeof value === "string" && (ALWAYS_PERSONAL_KINDS.has(value) || CONTEXTUAL_USER_KINDS.has(value));
29
+ }
30
+ function facetForMemoryKind(kind) {
31
+ if (kind === "user_profile" || kind === "personal_logistics") return "basics";
32
+ if (kind === "preference" || kind === "routine" || kind === "tool_preference" || kind === "task_lesson") return "collaboration";
33
+ if (kind === "boundary") return "boundaries";
34
+ if (kind === "relationship") return "people";
35
+ if (kind === "current_state" || kind === "open_question") return "current";
36
+ return "priorities";
37
+ }
38
+ function originForMemoryRecord(record) {
39
+ const origin = classifyMemoryContextOrigin(record);
40
+ return origin === "told_by_user" ? "told_by_you" : origin;
41
+ }
42
+ function projectUserContextRecord(record) {
43
+ const lifecycle = resolveMemoryStability(record);
44
+ const latestEvidenceAt = record.evidence?.map((evidence) => evidence.observedAt).filter((value) => Boolean(value)).sort().at(-1);
45
+ return {
46
+ id: record.id,
47
+ statement: record.content,
48
+ facet: facetForMemoryKind(record.kind),
49
+ kind: record.kind,
50
+ status: effectiveMemoryStatus(record),
51
+ origin: originForMemoryRecord(record),
52
+ sourceName: record.source.provider ?? "local",
53
+ updatedAt: record.updatedAt,
54
+ sensitivity: record.sensitivity ?? "normal",
55
+ explicitness: record.explicitness,
56
+ durability: record.durability,
57
+ canReference: record.disclosurePolicy !== "silent",
58
+ stability: lifecycle.band,
59
+ stabilityScore: lifecycle.score,
60
+ reviewAt: lifecycle.reviewAt,
61
+ reviewDue: lifecycle.reviewDue,
62
+ evidenceCount: record.evidence?.length ?? 0,
63
+ sourcePath: record.source.path,
64
+ latestEvidenceAt
65
+ };
66
+ }
67
+ function isPersonalContextConnector(definition) {
68
+ return definition.capabilities.includes("context") || definition.capabilities.includes("memory_source");
69
+ }
70
+ function recordsDerivedFromPersonalContextSource(records, agentId, connectorId) {
71
+ return records.filter((record) => record.scope.agentId === agentId && record.source.provider === connectorId && isUserContextRecord(record));
72
+ }
73
+ function projectPersonalContextSources(definitions, instances, records = []) {
74
+ const instanceByConnector = /* @__PURE__ */ new Map();
75
+ for (const instance of instances) {
76
+ const current = instanceByConnector.get(instance.connectorId) ?? [];
77
+ current.push(instance);
78
+ instanceByConnector.set(instance.connectorId, current);
79
+ }
80
+ return definitions.filter(isPersonalContextConnector).map((definition) => {
81
+ const connected = instanceByConnector.get(definition.id) ?? [];
82
+ const relatedRecords = records.filter((record) => record.source.provider === definition.id);
83
+ const latestHealth = connected.filter((instance) => instance.usage.lastHealthCheckAt && instance.usage.lastHealthStatus).sort((left, right) => Date.parse(right.usage.lastHealthCheckAt) - Date.parse(left.usage.lastHealthCheckAt))[0]?.usage;
84
+ const permissionDetails = definition.permissions?.data ?? [];
85
+ const canWrite = permissionDetails.some((permission) => /(?:^|[.:/_-])(write|create|update|delete|manage|send|admin)(?:$|[.:/_-])/i.test(permission));
86
+ return {
87
+ id: definition.id,
88
+ displayName: definition.displayName,
89
+ description: definition.description,
90
+ category: definition.category,
91
+ capabilities: definition.capabilities.filter((capability) => capability === "context" || capability === "memory_source" || capability === "tools" || capability === "events"),
92
+ access: {
93
+ context: definition.capabilities.includes("context"),
94
+ memory: definition.capabilities.includes("memory_source"),
95
+ read: definition.capabilities.includes("context") || definition.capabilities.includes("resources") || definition.capabilities.includes("tools"),
96
+ write: canWrite
97
+ },
98
+ permissionDetails,
99
+ installed: connected.length > 0,
100
+ enabled: connected.some((instance) => instance.enabled),
101
+ status: connected[0]?.status ?? "not_installed",
102
+ instanceId: connected[0]?.instanceId,
103
+ lastConnectedAt: connected.map((instance) => instance.lastConnectedAt).filter((value) => Boolean(value)).sort().at(-1),
104
+ lastHealthCheckAt: latestHealth?.lastHealthCheckAt,
105
+ lastHealthStatus: latestHealth?.lastHealthStatus,
106
+ lastActivityAt: connected.flatMap((instance) => [
107
+ instance.lastConnectedAt,
108
+ instance.usage.lastHealthCheckAt,
109
+ ...instance.audit.map((entry) => entry.at)
110
+ ]).filter((value) => Boolean(value)).sort().at(-1),
111
+ derivedUnderstandingCount: relatedRecords.length
112
+ };
113
+ }).sort((left, right) => {
114
+ if (left.installed !== right.installed) return left.installed ? -1 : 1;
115
+ return left.displayName.localeCompare(right.displayName);
116
+ });
117
+ }
118
+ //#endregion
119
+ export { facetForMemoryKind, isPersonalContextConnector, isUserContextMemoryKind, isUserContextRecord, originForMemoryRecord, projectPersonalContextSources, projectUserContextRecord, recordsDerivedFromPersonalContextSource };
120
+
121
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","names":[],"sources":["../../../src/user-context/projection.ts"],"sourcesContent":["import type { MemoryKind, MemoryRecord } from '../agent/memory/types.js';\nimport { effectiveMemoryStatus, resolveMemoryStability } from '../agent/memory/lifecycle.js';\nimport { classifyMemoryContextOrigin } from '../agent/memory/source-origin.js';\nimport type { ConnectorDefinition, ConnectorInstance } from '../connectors/types.js';\n\nexport type UserContextFacet =\n | 'basics'\n | 'collaboration'\n | 'boundaries'\n | 'priorities'\n | 'people'\n | 'current';\n\nexport type UserContextOrigin = 'told_by_you' | 'observed' | 'inferred' | 'connected_source';\n\nconst ALWAYS_PERSONAL_KINDS = new Set<MemoryKind>([\n 'user_profile',\n 'preference',\n 'boundary',\n 'relationship',\n 'commitment',\n 'routine',\n 'personal_logistics',\n 'current_state',\n 'tool_preference',\n 'long_term_goal',\n]);\n\nconst CONTEXTUAL_USER_KINDS = new Set<MemoryKind>([\n 'project_context',\n 'open_question',\n 'milestone',\n 'derived_insight',\n 'task_lesson',\n]);\n\nexport function isUserContextRecord(record: MemoryRecord): boolean {\n if (ALWAYS_PERSONAL_KINDS.has(record.kind)) return true;\n return CONTEXTUAL_USER_KINDS.has(record.kind) && record.tags?.includes('user-understanding') === true;\n}\n\nexport function isUserContextMemoryKind(value: unknown): value is MemoryKind {\n return typeof value === 'string'\n && (ALWAYS_PERSONAL_KINDS.has(value as MemoryKind) || CONTEXTUAL_USER_KINDS.has(value as MemoryKind));\n}\n\nexport function facetForMemoryKind(kind: MemoryKind): UserContextFacet {\n if (kind === 'user_profile' || kind === 'personal_logistics') return 'basics';\n if (kind === 'preference' || kind === 'routine' || kind === 'tool_preference' || kind === 'task_lesson') {\n return 'collaboration';\n }\n if (kind === 'boundary') return 'boundaries';\n if (kind === 'relationship') return 'people';\n if (kind === 'current_state' || kind === 'open_question') return 'current';\n return 'priorities';\n}\n\nexport function originForMemoryRecord(record: MemoryRecord): UserContextOrigin {\n const origin = classifyMemoryContextOrigin(record);\n return origin === 'told_by_user' ? 'told_by_you' : origin;\n}\n\nexport function projectUserContextRecord(record: MemoryRecord) {\n const lifecycle = resolveMemoryStability(record);\n const latestEvidenceAt = record.evidence\n ?.map((evidence) => evidence.observedAt)\n .filter((value): value is string => Boolean(value))\n .sort()\n .at(-1);\n return {\n id: record.id,\n statement: record.content,\n facet: facetForMemoryKind(record.kind),\n kind: record.kind,\n status: effectiveMemoryStatus(record),\n origin: originForMemoryRecord(record),\n sourceName: record.source.provider ?? 'local',\n updatedAt: record.updatedAt,\n sensitivity: record.sensitivity ?? 'normal',\n explicitness: record.explicitness,\n durability: record.durability,\n canReference: record.disclosurePolicy !== 'silent',\n stability: lifecycle.band,\n stabilityScore: lifecycle.score,\n reviewAt: lifecycle.reviewAt,\n reviewDue: lifecycle.reviewDue,\n evidenceCount: record.evidence?.length ?? 0,\n sourcePath: record.source.path,\n latestEvidenceAt,\n };\n}\n\nexport function isPersonalContextConnector(definition: ConnectorDefinition): boolean {\n return definition.capabilities.includes('context') || definition.capabilities.includes('memory_source');\n}\n\nexport function recordsDerivedFromPersonalContextSource(\n records: MemoryRecord[],\n agentId: string,\n connectorId: string,\n): MemoryRecord[] {\n return records.filter((record) => (\n record.scope.agentId === agentId\n && record.source.provider === connectorId\n && isUserContextRecord(record)\n ));\n}\n\nexport function projectPersonalContextSources(\n definitions: ConnectorDefinition[],\n instances: ConnectorInstance[],\n records: MemoryRecord[] = [],\n) {\n const instanceByConnector = new Map<string, ConnectorInstance[]>();\n for (const instance of instances) {\n const current = instanceByConnector.get(instance.connectorId) ?? [];\n current.push(instance);\n instanceByConnector.set(instance.connectorId, current);\n }\n return definitions\n .filter(isPersonalContextConnector)\n .map((definition) => {\n const connected = instanceByConnector.get(definition.id) ?? [];\n const relatedRecords = records.filter((record) => record.source.provider === definition.id);\n const latestHealth = connected\n .filter((instance) => instance.usage.lastHealthCheckAt && instance.usage.lastHealthStatus)\n .sort((left, right) => (\n Date.parse(right.usage.lastHealthCheckAt!) - Date.parse(left.usage.lastHealthCheckAt!)\n ))[0]?.usage;\n const permissionDetails = definition.permissions?.data ?? [];\n const canWrite = permissionDetails.some((permission) => (\n /(?:^|[.:/_-])(write|create|update|delete|manage|send|admin)(?:$|[.:/_-])/i.test(permission)\n ));\n return {\n id: definition.id,\n displayName: definition.displayName,\n description: definition.description,\n category: definition.category,\n capabilities: definition.capabilities.filter((capability) => (\n capability === 'context' || capability === 'memory_source' || capability === 'tools' || capability === 'events'\n )),\n access: {\n context: definition.capabilities.includes('context'),\n memory: definition.capabilities.includes('memory_source'),\n read: definition.capabilities.includes('context')\n || definition.capabilities.includes('resources')\n || definition.capabilities.includes('tools'),\n write: canWrite,\n },\n permissionDetails,\n installed: connected.length > 0,\n enabled: connected.some((instance) => instance.enabled),\n status: connected[0]?.status ?? 'not_installed',\n instanceId: connected[0]?.instanceId,\n lastConnectedAt: connected\n .map((instance) => instance.lastConnectedAt)\n .filter((value): value is string => Boolean(value))\n .sort()\n .at(-1),\n lastHealthCheckAt: latestHealth?.lastHealthCheckAt,\n lastHealthStatus: latestHealth?.lastHealthStatus,\n lastActivityAt: connected\n .flatMap((instance) => [\n instance.lastConnectedAt,\n instance.usage.lastHealthCheckAt,\n ...instance.audit.map((entry) => entry.at),\n ])\n .filter((value): value is string => Boolean(value))\n .sort()\n .at(-1),\n derivedUnderstandingCount: relatedRecords.length,\n };\n })\n .sort((left, right) => {\n if (left.installed !== right.installed) return left.installed ? -1 : 1;\n return left.displayName.localeCompare(right.displayName);\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ConnectorDefinition } from '../connectors/types.js';
2
+ type GoalSummary = {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ };
7
+ export declare function buildGoalSourceRecommendations(definitions: ConnectorDefinition[], installedConnectorIds: Set<string>, goals: GoalSummary[]): {
8
+ sourceId: string;
9
+ sourceName: string;
10
+ goalId: string;
11
+ goalTitle: string;
12
+ }[];
13
+ export {};
@@ -0,0 +1,86 @@
1
+ //#region src/user-context/source-recommendations.ts
2
+ const DOMAINS = [
3
+ [
4
+ "calendar",
5
+ "schedule",
6
+ "meeting",
7
+ "deadline",
8
+ "event",
9
+ "日历",
10
+ "日程",
11
+ "会议",
12
+ "截止",
13
+ "预约"
14
+ ],
15
+ [
16
+ "email",
17
+ "gmail",
18
+ "outlook",
19
+ "mail",
20
+ "inbox",
21
+ "邮件",
22
+ "邮箱",
23
+ "收件箱"
24
+ ],
25
+ [
26
+ "docs",
27
+ "document",
28
+ "notion",
29
+ "drive",
30
+ "knowledge",
31
+ "wiki",
32
+ "文档",
33
+ "知识库",
34
+ "资料"
35
+ ],
36
+ [
37
+ "github",
38
+ "gitlab",
39
+ "code",
40
+ "repository",
41
+ "issue",
42
+ "代码",
43
+ "仓库",
44
+ "开发"
45
+ ],
46
+ [
47
+ "slack",
48
+ "teams",
49
+ "chat",
50
+ "message",
51
+ "消息",
52
+ "群聊",
53
+ "沟通"
54
+ ]
55
+ ];
56
+ function buildGoalSourceRecommendations(definitions, installedConnectorIds, goals) {
57
+ const recommendations = [];
58
+ for (const definition of definitions) {
59
+ if (installedConnectorIds.has(definition.id)) continue;
60
+ const sourceText = [
61
+ definition.id,
62
+ definition.displayName,
63
+ definition.description,
64
+ ...definition.tags ?? []
65
+ ].join(" ").toLowerCase();
66
+ for (const goal of goals) {
67
+ const goalText = `${goal.title} ${goal.description ?? ""}`.toLowerCase();
68
+ let score = 0;
69
+ for (const keywords of DOMAINS) if (keywords.some((keyword) => sourceText.includes(keyword)) && keywords.some((keyword) => goalText.includes(keyword))) score += 3;
70
+ const genericTerms = goalText.match(/[a-z][a-z0-9_-]{3,}/g) ?? [];
71
+ score += new Set(genericTerms.filter((term) => sourceText.includes(term))).size;
72
+ if (score > 0) recommendations.push({
73
+ sourceId: definition.id,
74
+ sourceName: definition.displayName,
75
+ goalId: goal.id,
76
+ goalTitle: goal.title,
77
+ score
78
+ });
79
+ }
80
+ }
81
+ return recommendations.sort((left, right) => right.score - left.score || left.sourceName.localeCompare(right.sourceName)).filter((item, index, all) => all.findIndex((candidate) => candidate.sourceId === item.sourceId) === index).slice(0, 3).map(({ score: _score, ...item }) => item);
82
+ }
83
+ //#endregion
84
+ export { buildGoalSourceRecommendations };
85
+
86
+ //# sourceMappingURL=source-recommendations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-recommendations.js","names":[],"sources":["../../../src/user-context/source-recommendations.ts"],"sourcesContent":["import type { ConnectorDefinition } from '../connectors/types.js';\n\ntype GoalSummary = { id: string; title: string; description?: string };\n\nconst DOMAINS = [\n ['calendar', 'schedule', 'meeting', 'deadline', 'event', '日历', '日程', '会议', '截止', '预约'],\n ['email', 'gmail', 'outlook', 'mail', 'inbox', '邮件', '邮箱', '收件箱'],\n ['docs', 'document', 'notion', 'drive', 'knowledge', 'wiki', '文档', '知识库', '资料'],\n ['github', 'gitlab', 'code', 'repository', 'issue', '代码', '仓库', '开发'],\n ['slack', 'teams', 'chat', 'message', '消息', '群聊', '沟通'],\n] as const;\n\nexport function buildGoalSourceRecommendations(\n definitions: ConnectorDefinition[],\n installedConnectorIds: Set<string>,\n goals: GoalSummary[],\n) {\n const recommendations: Array<{\n sourceId: string;\n sourceName: string;\n goalId: string;\n goalTitle: string;\n score: number;\n }> = [];\n\n for (const definition of definitions) {\n if (installedConnectorIds.has(definition.id)) continue;\n const sourceText = [definition.id, definition.displayName, definition.description, ...(definition.tags ?? [])]\n .join(' ')\n .toLowerCase();\n for (const goal of goals) {\n const goalText = `${goal.title} ${goal.description ?? ''}`.toLowerCase();\n let score = 0;\n for (const keywords of DOMAINS) {\n if (keywords.some((keyword) => sourceText.includes(keyword)) && keywords.some((keyword) => goalText.includes(keyword))) {\n score += 3;\n }\n }\n const genericTerms = goalText.match(/[a-z][a-z0-9_-]{3,}/g) ?? [];\n score += new Set(genericTerms.filter((term) => sourceText.includes(term))).size;\n if (score > 0) {\n recommendations.push({\n sourceId: definition.id,\n sourceName: definition.displayName,\n goalId: goal.id,\n goalTitle: goal.title,\n score,\n });\n }\n }\n }\n\n return recommendations\n .sort((left, right) => right.score - left.score || left.sourceName.localeCompare(right.sourceName))\n .filter((item, index, all) => all.findIndex((candidate) => candidate.sourceId === item.sourceId) === index)\n .slice(0, 3)\n .map(({ score: _score, ...item }) => item);\n}\n"],"mappings":";AAIA,MAAM,UAAU;CACd;EAAC;EAAY;EAAY;EAAW;EAAY;EAAS;EAAM;EAAM;EAAM;EAAM;EAAK;CACtF;EAAC;EAAS;EAAS;EAAW;EAAQ;EAAS;EAAM;EAAM;EAAM;CACjE;EAAC;EAAQ;EAAY;EAAU;EAAS;EAAa;EAAQ;EAAM;EAAO;EAAK;CAC/E;EAAC;EAAU;EAAU;EAAQ;EAAc;EAAS;EAAM;EAAM;EAAK;CACrE;EAAC;EAAS;EAAS;EAAQ;EAAW;EAAM;EAAM;EAAK;CACxD;AAED,SAAgB,+BACd,aACA,uBACA,OACA;CACA,MAAM,kBAMD,EAAE;AAEP,MAAK,MAAM,cAAc,aAAa;AACpC,MAAI,sBAAsB,IAAI,WAAW,GAAG,CAAE;EAC9C,MAAM,aAAa;GAAC,WAAW;GAAI,WAAW;GAAa,WAAW;GAAa,GAAI,WAAW,QAAQ,EAAE;GAAE,CAC3G,KAAK,IAAI,CACT,aAAa;AAChB,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,WAAW,GAAG,KAAK,MAAM,GAAG,KAAK,eAAe,KAAK,aAAa;GACxE,IAAI,QAAQ;AACZ,QAAK,MAAM,YAAY,QACrB,KAAI,SAAS,MAAM,YAAY,WAAW,SAAS,QAAQ,CAAC,IAAI,SAAS,MAAM,YAAY,SAAS,SAAS,QAAQ,CAAC,CACpH,UAAS;GAGb,MAAM,eAAe,SAAS,MAAM,uBAAuB,IAAI,EAAE;AACjE,YAAS,IAAI,IAAI,aAAa,QAAQ,SAAS,WAAW,SAAS,KAAK,CAAC,CAAC,CAAC;AAC3E,OAAI,QAAQ,EACV,iBAAgB,KAAK;IACnB,UAAU,WAAW;IACrB,YAAY,WAAW;IACvB,QAAQ,KAAK;IACb,WAAW,KAAK;IAChB;IACD,CAAC;;;AAKR,QAAO,gBACJ,MAAM,MAAM,UAAU,MAAM,QAAQ,KAAK,SAAS,KAAK,WAAW,cAAc,MAAM,WAAW,CAAC,CAClG,QAAQ,MAAM,OAAO,QAAQ,IAAI,WAAW,cAAc,UAAU,aAAa,KAAK,SAAS,KAAK,MAAM,CAC1G,MAAM,GAAG,EAAE,CACX,KAAK,EAAE,OAAO,QAAQ,GAAG,WAAW,KAAK"}
@@ -0,0 +1,11 @@
1
+ export declare const USER_TRUST_LEVELS: readonly ["observe", "suggest", "confirm", "auto"];
2
+ export type UserTrustLevel = typeof USER_TRUST_LEVELS[number];
3
+ export declare const DEFAULT_USER_TRUST_LEVEL: UserTrustLevel;
4
+ export type UserTrustPolicy = {
5
+ principalId: string;
6
+ defaultActionLevel: UserTrustLevel;
7
+ updatedAt?: string;
8
+ };
9
+ export declare function isUserTrustLevel(value: unknown): value is UserTrustLevel;
10
+ export declare function resolveAutomationSafetyForTrust(level: UserTrustLevel, requested: 'suggest_only' | 'ask_before_apply' | 'auto_apply' | undefined): 'suggest_only' | 'ask_before_apply' | 'auto_apply';
11
+ export declare function buildActionTrustPrompt(level: UserTrustLevel): string;
@@ -0,0 +1,31 @@
1
+ //#region src/user-context/trust-policy.ts
2
+ const USER_TRUST_LEVELS = [
3
+ "observe",
4
+ "suggest",
5
+ "confirm",
6
+ "auto"
7
+ ];
8
+ const DEFAULT_USER_TRUST_LEVEL = "confirm";
9
+ function isUserTrustLevel(value) {
10
+ return typeof value === "string" && USER_TRUST_LEVELS.includes(value);
11
+ }
12
+ function resolveAutomationSafetyForTrust(level, requested) {
13
+ if (level === "observe" || level === "suggest") return "suggest_only";
14
+ if (level === "confirm") return requested === "suggest_only" ? "suggest_only" : "ask_before_apply";
15
+ return requested ?? "suggest_only";
16
+ }
17
+ function buildActionTrustPrompt(level) {
18
+ const shared = [
19
+ "## Action Trust Boundary",
20
+ `Current default: ${level}.`,
21
+ "- This controls agent-initiated or proactive actions. A direct user request in the current turn is explicit approval to carry out that request within existing safety and permission boundaries.",
22
+ "- Never expand connector permissions, workflow scope, credentials, or access because of this setting.",
23
+ "- Irreversible, destructive, financial, permission-expanding, or public external actions still require explicit confirmation."
24
+ ];
25
+ const instruction = level === "observe" ? "- For proactive work, observe and build context only; do not prepare or initiate actions." : level === "suggest" ? "- For proactive work, explain the recommendation and rationale, then let the user decide whether to proceed." : level === "confirm" ? "- For proactive work, prepare the action, but request approval before executing any mutating or external step." : "- For proactive work, you may execute within already-authorized, recoverable boundaries without asking each time.";
26
+ return [...shared, instruction].join("\n");
27
+ }
28
+ //#endregion
29
+ export { DEFAULT_USER_TRUST_LEVEL, USER_TRUST_LEVELS, buildActionTrustPrompt, isUserTrustLevel, resolveAutomationSafetyForTrust };
30
+
31
+ //# sourceMappingURL=trust-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-policy.js","names":[],"sources":["../../../src/user-context/trust-policy.ts"],"sourcesContent":["export const USER_TRUST_LEVELS = ['observe', 'suggest', 'confirm', 'auto'] as const;\n\nexport type UserTrustLevel = typeof USER_TRUST_LEVELS[number];\n\nexport const DEFAULT_USER_TRUST_LEVEL: UserTrustLevel = 'confirm';\n\nexport type UserTrustPolicy = {\n principalId: string;\n defaultActionLevel: UserTrustLevel;\n updatedAt?: string;\n};\n\nexport function isUserTrustLevel(value: unknown): value is UserTrustLevel {\n return typeof value === 'string' && USER_TRUST_LEVELS.includes(value as UserTrustLevel);\n}\n\nexport function resolveAutomationSafetyForTrust(\n level: UserTrustLevel,\n requested: 'suggest_only' | 'ask_before_apply' | 'auto_apply' | undefined,\n): 'suggest_only' | 'ask_before_apply' | 'auto_apply' {\n if (level === 'observe' || level === 'suggest') return 'suggest_only';\n if (level === 'confirm') {\n return requested === 'suggest_only' ? 'suggest_only' : 'ask_before_apply';\n }\n return requested ?? 'suggest_only';\n}\n\nexport function buildActionTrustPrompt(level: UserTrustLevel): string {\n const shared = [\n '## Action Trust Boundary',\n `Current default: ${level}.`,\n '- This controls agent-initiated or proactive actions. A direct user request in the current turn is explicit approval to carry out that request within existing safety and permission boundaries.',\n '- Never expand connector permissions, workflow scope, credentials, or access because of this setting.',\n '- Irreversible, destructive, financial, permission-expanding, or public external actions still require explicit confirmation.',\n ];\n const instruction = level === 'observe'\n ? '- For proactive work, observe and build context only; do not prepare or initiate actions.'\n : level === 'suggest'\n ? '- For proactive work, explain the recommendation and rationale, then let the user decide whether to proceed.'\n : level === 'confirm'\n ? '- For proactive work, prepare the action, but request approval before executing any mutating or external step.'\n : '- For proactive work, you may execute within already-authorized, recoverable boundaries without asking each time.';\n return [...shared, instruction].join('\\n');\n}\n"],"mappings":";AAAA,MAAa,oBAAoB;CAAC;CAAW;CAAW;CAAW;CAAO;AAI1E,MAAa,2BAA2C;AAQxD,SAAgB,iBAAiB,OAAyC;AACxE,QAAO,OAAO,UAAU,YAAY,kBAAkB,SAAS,MAAwB;;AAGzF,SAAgB,gCACd,OACA,WACoD;AACpD,KAAI,UAAU,aAAa,UAAU,UAAW,QAAO;AACvD,KAAI,UAAU,UACZ,QAAO,cAAc,iBAAiB,iBAAiB;AAEzD,QAAO,aAAa;;AAGtB,SAAgB,uBAAuB,OAA+B;CACpE,MAAM,SAAS;EACb;EACA,oBAAoB,MAAM;EAC1B;EACA;EACA;EACD;CACD,MAAM,cAAc,UAAU,YAC1B,8FACA,UAAU,YACR,iHACA,UAAU,YACR,mHACA;AACR,QAAO,CAAC,GAAG,QAAQ,YAAY,CAAC,KAAK,KAAK"}
@@ -0,0 +1 @@
1
+ export * from './workflow-draft-store.js';
@@ -0,0 +1,2 @@
1
+ import { WorkflowDraftConflictError, WorkflowDraftStore } from "./workflow-draft-store.js";
2
+ export { WorkflowDraftConflictError, WorkflowDraftStore };
@@ -0,0 +1,33 @@
1
+ import type { WorkflowDefinitionManifest, WorkflowGraph } from '../domain/definition.js';
2
+ export interface WorkflowAuthoringDraft {
3
+ id: string;
4
+ workflowName: string;
5
+ graph: WorkflowGraph;
6
+ manifest: WorkflowDefinitionManifest;
7
+ baseRevision: number;
8
+ createdAtMs: number;
9
+ updatedAtMs: number;
10
+ }
11
+ export interface SaveWorkflowAuthoringDraftInput {
12
+ id?: string;
13
+ workflowName: string;
14
+ graph: WorkflowGraph;
15
+ manifest?: WorkflowDefinitionManifest;
16
+ baseRevision?: number;
17
+ expectedUpdatedAtMs?: number;
18
+ }
19
+ export declare class WorkflowDraftStore {
20
+ private readonly draftsDir;
21
+ constructor(options?: {
22
+ userDir?: string;
23
+ });
24
+ list(workflowName?: string): WorkflowAuthoringDraft[];
25
+ get(id: string): WorkflowAuthoringDraft | null;
26
+ save(input: SaveWorkflowAuthoringDraftInput): WorkflowAuthoringDraft;
27
+ remove(id: string): boolean;
28
+ private readFile;
29
+ }
30
+ export declare class WorkflowDraftConflictError extends Error {
31
+ readonly currentUpdatedAtMs?: number;
32
+ constructor(currentUpdatedAtMs?: number);
33
+ }
@@ -0,0 +1,74 @@
1
+ import { defaultUserDir } from "../../agent/workflow/catalog.js";
2
+ import { join } from "node:path";
3
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
4
+ import { randomUUID } from "node:crypto";
5
+ //#region src/workflows/authoring/workflow-draft-store.ts
6
+ var WorkflowDraftStore = class {
7
+ draftsDir;
8
+ constructor(options = {}) {
9
+ this.draftsDir = join(options.userDir ?? defaultUserDir(), ".drafts");
10
+ }
11
+ list(workflowName) {
12
+ if (!existsSync(this.draftsDir)) return [];
13
+ return readdirSync(this.draftsDir).filter((file) => file.endsWith(".json")).map((file) => this.readFile(join(this.draftsDir, file))).filter((draft) => Boolean(draft) && (!workflowName || draft.workflowName === workflowName)).sort((left, right) => right.updatedAtMs - left.updatedAtMs);
14
+ }
15
+ get(id) {
16
+ requireDraftId(id);
17
+ return this.readFile(join(this.draftsDir, `${id}.json`));
18
+ }
19
+ save(input) {
20
+ if (!input.graph || input.graph.schemaVersion !== 1 || !Array.isArray(input.graph.nodes) || !Array.isArray(input.graph.edges)) throw new Error("workflow draft graph is invalid");
21
+ const id = input.id ?? randomUUID();
22
+ requireDraftId(id);
23
+ const existing = this.get(id);
24
+ if (input.expectedUpdatedAtMs !== void 0 && input.expectedUpdatedAtMs !== existing?.updatedAtMs) throw new WorkflowDraftConflictError(existing?.updatedAtMs);
25
+ const now = Math.max(Date.now(), (existing?.updatedAtMs ?? 0) + 1);
26
+ const draft = {
27
+ id,
28
+ workflowName: input.workflowName.trim(),
29
+ graph: structuredClone(input.graph),
30
+ manifest: structuredClone(input.manifest ?? {}),
31
+ baseRevision: input.baseRevision ?? existing?.baseRevision ?? 0,
32
+ createdAtMs: existing?.createdAtMs ?? now,
33
+ updatedAtMs: now
34
+ };
35
+ if (!draft.workflowName) throw new Error("workflowName is required");
36
+ mkdirSync(this.draftsDir, { recursive: true });
37
+ writeJsonAtomic(join(this.draftsDir, `${id}.json`), draft);
38
+ return draft;
39
+ }
40
+ remove(id) {
41
+ requireDraftId(id);
42
+ const path = join(this.draftsDir, `${id}.json`);
43
+ if (!existsSync(path)) return false;
44
+ unlinkSync(path);
45
+ return true;
46
+ }
47
+ readFile(path) {
48
+ try {
49
+ const value = JSON.parse(readFileSync(path, "utf-8"));
50
+ return value && typeof value.id === "string" && value.graph?.schemaVersion === 1 ? value : null;
51
+ } catch {
52
+ return null;
53
+ }
54
+ }
55
+ };
56
+ var WorkflowDraftConflictError = class extends Error {
57
+ constructor(currentUpdatedAtMs) {
58
+ super("workflow draft was changed by another editor");
59
+ this.currentUpdatedAtMs = currentUpdatedAtMs;
60
+ this.name = "WorkflowDraftConflictError";
61
+ }
62
+ };
63
+ function requireDraftId(id) {
64
+ if (!/^[a-zA-Z0-9_-]+$/.test(id)) throw new Error("invalid workflow draft id");
65
+ }
66
+ function writeJsonAtomic(path, value) {
67
+ const temporaryPath = `${path}.${randomUUID()}.tmp`;
68
+ writeFileSync(temporaryPath, `${JSON.stringify(value, null, 2)}\n`, "utf-8");
69
+ renameSync(temporaryPath, path);
70
+ }
71
+ //#endregion
72
+ export { WorkflowDraftConflictError, WorkflowDraftStore };
73
+
74
+ //# sourceMappingURL=workflow-draft-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-draft-store.js","names":[],"sources":["../../../../src/workflows/authoring/workflow-draft-store.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { defaultUserDir } from '../../agent/workflow/catalog.js';\nimport type { WorkflowDefinitionManifest, WorkflowGraph } from '../domain/definition.js';\n\nexport interface WorkflowAuthoringDraft {\n id: string;\n workflowName: string;\n graph: WorkflowGraph;\n manifest: WorkflowDefinitionManifest;\n baseRevision: number;\n createdAtMs: number;\n updatedAtMs: number;\n}\n\nexport interface SaveWorkflowAuthoringDraftInput {\n id?: string;\n workflowName: string;\n graph: WorkflowGraph;\n manifest?: WorkflowDefinitionManifest;\n baseRevision?: number;\n expectedUpdatedAtMs?: number;\n}\n\nexport class WorkflowDraftStore {\n private readonly draftsDir: string;\n\n constructor(options: { userDir?: string } = {}) {\n this.draftsDir = join(options.userDir ?? defaultUserDir(), '.drafts');\n }\n\n list(workflowName?: string): WorkflowAuthoringDraft[] {\n if (!existsSync(this.draftsDir)) return [];\n return readdirSync(this.draftsDir)\n .filter((file) => file.endsWith('.json'))\n .map((file) => this.readFile(join(this.draftsDir, file)))\n .filter((draft): draft is WorkflowAuthoringDraft => Boolean(draft) && (!workflowName || draft.workflowName === workflowName))\n .sort((left, right) => right.updatedAtMs - left.updatedAtMs);\n }\n\n get(id: string): WorkflowAuthoringDraft | null {\n requireDraftId(id);\n return this.readFile(join(this.draftsDir, `${id}.json`));\n }\n\n save(input: SaveWorkflowAuthoringDraftInput): WorkflowAuthoringDraft {\n if (!input.graph || input.graph.schemaVersion !== 1 || !Array.isArray(input.graph.nodes) || !Array.isArray(input.graph.edges)) {\n throw new Error('workflow draft graph is invalid');\n }\n const id = input.id ?? randomUUID();\n requireDraftId(id);\n const existing = this.get(id);\n if (input.expectedUpdatedAtMs !== undefined && input.expectedUpdatedAtMs !== existing?.updatedAtMs) {\n throw new WorkflowDraftConflictError(existing?.updatedAtMs);\n }\n const now = Math.max(Date.now(), (existing?.updatedAtMs ?? 0) + 1);\n const draft: WorkflowAuthoringDraft = {\n id,\n workflowName: input.workflowName.trim(),\n graph: structuredClone(input.graph),\n manifest: structuredClone(input.manifest ?? {}),\n baseRevision: input.baseRevision ?? existing?.baseRevision ?? 0,\n createdAtMs: existing?.createdAtMs ?? now,\n updatedAtMs: now,\n };\n if (!draft.workflowName) throw new Error('workflowName is required');\n mkdirSync(this.draftsDir, { recursive: true });\n writeJsonAtomic(join(this.draftsDir, `${id}.json`), draft);\n return draft;\n }\n\n remove(id: string): boolean {\n requireDraftId(id);\n const path = join(this.draftsDir, `${id}.json`);\n if (!existsSync(path)) return false;\n unlinkSync(path);\n return true;\n }\n\n private readFile(path: string): WorkflowAuthoringDraft | null {\n try {\n const value = JSON.parse(readFileSync(path, 'utf-8')) as WorkflowAuthoringDraft;\n return value && typeof value.id === 'string' && value.graph?.schemaVersion === 1 ? value : null;\n } catch {\n return null;\n }\n }\n}\n\nexport class WorkflowDraftConflictError extends Error {\n constructor(readonly currentUpdatedAtMs?: number) {\n super('workflow draft was changed by another editor');\n this.name = 'WorkflowDraftConflictError';\n }\n}\n\nfunction requireDraftId(id: string): void {\n if (!/^[a-zA-Z0-9_-]+$/.test(id)) throw new Error('invalid workflow draft id');\n}\n\nfunction writeJsonAtomic(path: string, value: unknown): void {\n const temporaryPath = `${path}.${randomUUID()}.tmp`;\n writeFileSync(temporaryPath, `${JSON.stringify(value, null, 2)}\\n`, 'utf-8');\n renameSync(temporaryPath, path);\n}\n"],"mappings":";;;;;AA0BA,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,UAAgC,EAAE,EAAE;AAC9C,OAAK,YAAY,KAAK,QAAQ,WAAW,gBAAgB,EAAE,UAAU;;CAGvE,KAAK,cAAiD;AACpD,MAAI,CAAC,WAAW,KAAK,UAAU,CAAE,QAAO,EAAE;AAC1C,SAAO,YAAY,KAAK,UAAU,CAC/B,QAAQ,SAAS,KAAK,SAAS,QAAQ,CAAC,CACxC,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK,WAAW,KAAK,CAAC,CAAC,CACxD,QAAQ,UAA2C,QAAQ,MAAM,KAAK,CAAC,gBAAgB,MAAM,iBAAiB,cAAc,CAC5H,MAAM,MAAM,UAAU,MAAM,cAAc,KAAK,YAAY;;CAGhE,IAAI,IAA2C;AAC7C,iBAAe,GAAG;AAClB,SAAO,KAAK,SAAS,KAAK,KAAK,WAAW,GAAG,GAAG,OAAO,CAAC;;CAG1D,KAAK,OAAgE;AACnE,MAAI,CAAC,MAAM,SAAS,MAAM,MAAM,kBAAkB,KAAK,CAAC,MAAM,QAAQ,MAAM,MAAM,MAAM,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM,MAAM,CAC3H,OAAM,IAAI,MAAM,kCAAkC;EAEpD,MAAM,KAAK,MAAM,MAAM,YAAY;AACnC,iBAAe,GAAG;EAClB,MAAM,WAAW,KAAK,IAAI,GAAG;AAC7B,MAAI,MAAM,wBAAwB,KAAA,KAAa,MAAM,wBAAwB,UAAU,YACrF,OAAM,IAAI,2BAA2B,UAAU,YAAY;EAE7D,MAAM,MAAM,KAAK,IAAI,KAAK,KAAK,GAAG,UAAU,eAAe,KAAK,EAAE;EAClE,MAAM,QAAgC;GACpC;GACA,cAAc,MAAM,aAAa,MAAM;GACvC,OAAO,gBAAgB,MAAM,MAAM;GACnC,UAAU,gBAAgB,MAAM,YAAY,EAAE,CAAC;GAC/C,cAAc,MAAM,gBAAgB,UAAU,gBAAgB;GAC9D,aAAa,UAAU,eAAe;GACtC,aAAa;GACd;AACD,MAAI,CAAC,MAAM,aAAc,OAAM,IAAI,MAAM,2BAA2B;AACpE,YAAU,KAAK,WAAW,EAAE,WAAW,MAAM,CAAC;AAC9C,kBAAgB,KAAK,KAAK,WAAW,GAAG,GAAG,OAAO,EAAE,MAAM;AAC1D,SAAO;;CAGT,OAAO,IAAqB;AAC1B,iBAAe,GAAG;EAClB,MAAM,OAAO,KAAK,KAAK,WAAW,GAAG,GAAG,OAAO;AAC/C,MAAI,CAAC,WAAW,KAAK,CAAE,QAAO;AAC9B,aAAW,KAAK;AAChB,SAAO;;CAGT,SAAiB,MAA6C;AAC5D,MAAI;GACF,MAAM,QAAQ,KAAK,MAAM,aAAa,MAAM,QAAQ,CAAC;AACrD,UAAO,SAAS,OAAO,MAAM,OAAO,YAAY,MAAM,OAAO,kBAAkB,IAAI,QAAQ;UACrF;AACN,UAAO;;;;AAKb,IAAa,6BAAb,cAAgD,MAAM;CACpD,YAAY,oBAAsC;AAChD,QAAM,+CAA+C;AADlC,OAAA,qBAAA;AAEnB,OAAK,OAAO;;;AAIhB,SAAS,eAAe,IAAkB;AACxC,KAAI,CAAC,mBAAmB,KAAK,GAAG,CAAE,OAAM,IAAI,MAAM,4BAA4B;;AAGhF,SAAS,gBAAgB,MAAc,OAAsB;CAC3D,MAAM,gBAAgB,GAAG,KAAK,GAAG,YAAY,CAAC;AAC9C,eAAc,eAAe,GAAG,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC,KAAK,QAAQ;AAC5E,YAAW,eAAe,KAAK"}
@@ -1,16 +1,18 @@
1
- import type { WorkflowMeta } from '../../agent/workflow/types.js';
2
- import type { WorkflowDefinition, WorkflowDefinitionManifest } from './definition.js';
1
+ import type { WorkflowDefinition, WorkflowDefinitionManifest, WorkflowGraph, WorkflowPhaseDefinition } from './definition.js';
3
2
  export declare const DEFAULT_WORKFLOW_CONCURRENCY = 4;
4
3
  export declare const DEFAULT_WORKFLOW_TIMEOUT_SEC: number;
5
4
  export declare const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;
6
5
  export interface WorkflowDefinitionBuildInput {
7
6
  name: string;
8
7
  source: 'builtin' | 'user';
9
- script: string;
10
- meta: WorkflowMeta;
8
+ graph: WorkflowGraph;
11
9
  manifest?: WorkflowDefinitionManifest;
10
+ phases?: WorkflowPhaseDefinition[];
11
+ revision?: number;
12
+ createdAtMs?: number;
12
13
  }
13
14
  export declare function buildWorkflowDefinition(input: WorkflowDefinitionBuildInput): WorkflowDefinition;
15
+ export declare function deriveWorkflowPhases(graph: WorkflowGraph): WorkflowPhaseDefinition[];
14
16
  export declare function hashWorkflowStableValue(value: unknown): string;
15
17
  export declare function normalizeWorkflowDefinitionId(value: string): string;
16
18
  export declare function toWorkflowDefinitionTitle(value: string): string;
@@ -5,66 +5,68 @@ const DEFAULT_WORKFLOW_TIMEOUT_SEC = 1800;
5
5
  const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;
6
6
  function buildWorkflowDefinition(input) {
7
7
  const nowMs = Date.now();
8
- const phases = input.meta.phases?.map((phase, index) => ({
9
- id: normalizeWorkflowDefinitionId(phase.title) || `phase-${index + 1}`,
10
- title: phase.title,
11
- description: phase.detail
12
- })) ?? [];
13
8
  const manifest = input.manifest;
14
9
  const manifestDefaults = manifest?.defaults ?? {};
15
- const runtimeHash = hashWorkflowStableValue(input.script);
10
+ const phases = input.phases ?? deriveWorkflowPhases(input.graph);
11
+ const graphHash = hashWorkflowStableValue(input.graph);
16
12
  const base = {
17
13
  id: input.name,
18
14
  name: input.name,
19
15
  title: manifest?.title ?? toWorkflowDefinitionTitle(input.name),
20
- description: manifest?.description ?? input.meta.description,
16
+ description: manifest?.description ?? "",
21
17
  version: manifest?.version ?? "1.0.0",
18
+ revision: input.revision ?? 1,
22
19
  inputSchema: manifest?.inputSchema,
23
20
  outputSchema: manifest?.outputSchema,
24
21
  phases,
25
- runtime: {
26
- kind: "script",
27
- source: input.script
28
- },
22
+ graph: structuredClone(input.graph),
29
23
  defaults: {
30
24
  concurrency: normalizePositiveInt(manifestDefaults.concurrency, 4),
31
25
  timeoutSec: normalizePositiveInt(manifestDefaults.timeoutSec, DEFAULT_WORKFLOW_TIMEOUT_SEC),
32
- maxSubagents: normalizePositiveInt(manifestDefaults.maxSubagents, input.meta.estimatedAgents?.max ?? 100)
26
+ maxSubagents: normalizePositiveInt(manifestDefaults.maxSubagents, 100)
33
27
  },
34
28
  permissions: manifest?.permissions,
35
29
  resources: manifest?.resources,
30
+ connectors: manifest?.connectors,
36
31
  metadata: {
37
- tags: manifest?.tags ?? input.meta.tags ?? [],
32
+ tags: manifest?.tags ?? [],
38
33
  builtIn: input.source === "builtin",
39
34
  source: input.source,
40
- whenToUse: manifest?.whenToUse ?? input.meta.whenToUse,
41
- estimatedAgents: input.meta.estimatedAgents,
42
- examplePrompts: input.meta.examplePrompts,
43
- i18n: input.meta.i18n,
44
- createdAtMs: nowMs,
35
+ whenToUse: manifest?.whenToUse,
36
+ estimatedAgents: manifest?.estimatedAgents,
37
+ examplePrompts: manifest?.examplePrompts,
38
+ i18n: manifest?.i18n,
39
+ createdAtMs: input.createdAtMs ?? nowMs,
45
40
  updatedAtMs: nowMs
46
41
  }
47
42
  };
48
43
  return {
49
44
  ...base,
50
- runtimeHash,
51
45
  contentHash: hashWorkflowStableValue({
52
- id: base.id,
53
46
  name: base.name,
54
47
  title: base.title,
55
48
  description: base.description,
56
49
  version: base.version,
57
- inputSchema: base.inputSchema,
58
- outputSchema: base.outputSchema,
59
- phases: base.phases,
60
- runtimeHash,
50
+ revision: base.revision,
51
+ graphHash,
61
52
  defaults: base.defaults,
62
53
  permissions: base.permissions,
63
54
  resources: base.resources,
64
- tags: base.metadata.tags
55
+ connectors: base.connectors
65
56
  })
66
57
  };
67
58
  }
59
+ function deriveWorkflowPhases(graph) {
60
+ const phases = /* @__PURE__ */ new Map();
61
+ for (const node of graph.nodes) {
62
+ if (!node.phaseId || phases.has(node.phaseId)) continue;
63
+ phases.set(node.phaseId, {
64
+ id: node.phaseId,
65
+ title: toWorkflowDefinitionTitle(node.phaseId)
66
+ });
67
+ }
68
+ return [...phases.values()];
69
+ }
68
70
  function hashWorkflowStableValue(value) {
69
71
  return createHash("sha256").update(stableStringify(value)).digest("hex");
70
72
  }
@@ -85,6 +87,6 @@ function toWorkflowDefinitionTitle(value) {
85
87
  return value.split(/[_-]+/g).filter(Boolean).map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`).join(" ");
86
88
  }
87
89
  //#endregion
88
- export { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, hashWorkflowStableValue, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle };
90
+ export { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, deriveWorkflowPhases, hashWorkflowStableValue, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle };
89
91
 
90
92
  //# sourceMappingURL=definition-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"definition-utils.js","names":[],"sources":["../../../../src/workflows/domain/definition-utils.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type { WorkflowMeta } from '../../agent/workflow/types.js';\n\nimport type { WorkflowDefinition, WorkflowDefinitionManifest } from './definition.js';\n\nexport const DEFAULT_WORKFLOW_CONCURRENCY = 4;\nexport const DEFAULT_WORKFLOW_TIMEOUT_SEC = 30 * 60;\nexport const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;\n\nexport interface WorkflowDefinitionBuildInput {\n name: string;\n source: 'builtin' | 'user';\n script: string;\n meta: WorkflowMeta;\n manifest?: WorkflowDefinitionManifest;\n}\n\nexport function buildWorkflowDefinition(input: WorkflowDefinitionBuildInput): WorkflowDefinition {\n const nowMs = Date.now();\n const phases = input.meta.phases?.map((phase, index) => ({\n id: normalizeWorkflowDefinitionId(phase.title) || `phase-${index + 1}`,\n title: phase.title,\n description: phase.detail,\n })) ?? [];\n\n const manifest = input.manifest;\n const manifestDefaults = manifest?.defaults ?? {};\n\n const runtimeHash = hashWorkflowStableValue(input.script);\n const base = {\n id: input.name,\n name: input.name,\n title: manifest?.title ?? toWorkflowDefinitionTitle(input.name),\n description: manifest?.description ?? input.meta.description,\n version: manifest?.version ?? '1.0.0',\n inputSchema: manifest?.inputSchema,\n outputSchema: manifest?.outputSchema,\n phases,\n runtime: {\n kind: 'script' as const,\n source: input.script,\n },\n defaults: {\n concurrency: normalizePositiveInt(manifestDefaults.concurrency, DEFAULT_WORKFLOW_CONCURRENCY),\n timeoutSec: normalizePositiveInt(manifestDefaults.timeoutSec, DEFAULT_WORKFLOW_TIMEOUT_SEC),\n maxSubagents: normalizePositiveInt(\n manifestDefaults.maxSubagents,\n input.meta.estimatedAgents?.max ?? DEFAULT_WORKFLOW_MAX_SUBAGENTS,\n ),\n },\n permissions: manifest?.permissions,\n resources: manifest?.resources,\n metadata: {\n tags: manifest?.tags ?? input.meta.tags ?? [],\n builtIn: input.source === 'builtin',\n source: input.source,\n whenToUse: manifest?.whenToUse ?? input.meta.whenToUse,\n estimatedAgents: input.meta.estimatedAgents,\n examplePrompts: input.meta.examplePrompts,\n i18n: input.meta.i18n,\n createdAtMs: nowMs,\n updatedAtMs: nowMs,\n },\n };\n\n return {\n ...base,\n runtimeHash,\n contentHash: hashWorkflowStableValue({\n id: base.id,\n name: base.name,\n title: base.title,\n description: base.description,\n version: base.version,\n inputSchema: base.inputSchema,\n outputSchema: base.outputSchema,\n phases: base.phases,\n runtimeHash,\n defaults: base.defaults,\n permissions: base.permissions,\n resources: base.resources,\n tags: base.metadata.tags,\n }),\n };\n}\n\nexport function hashWorkflowStableValue(value: unknown): string {\n return createHash('sha256').update(stableStringify(value)).digest('hex');\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(',')}]`;\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record)\n .filter((key) => record[key] !== undefined)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`)\n .join(',')}}`;\n}\n\nfunction normalizePositiveInt(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 1) {\n return fallback;\n }\n return Math.floor(value);\n}\n\nexport function normalizeWorkflowDefinitionId(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nexport function toWorkflowDefinitionTitle(value: string): string {\n return value\n .split(/[_-]+/g)\n .filter(Boolean)\n .map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`)\n .join(' ');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"definition-utils.js","names":[],"sources":["../../../../src/workflows/domain/definition-utils.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type {\n WorkflowDefinition,\n WorkflowDefinitionManifest,\n WorkflowGraph,\n WorkflowPhaseDefinition,\n} from './definition.js';\n\nexport const DEFAULT_WORKFLOW_CONCURRENCY = 4;\nexport const DEFAULT_WORKFLOW_TIMEOUT_SEC = 30 * 60;\nexport const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;\n\nexport interface WorkflowDefinitionBuildInput {\n name: string;\n source: 'builtin' | 'user';\n graph: WorkflowGraph;\n manifest?: WorkflowDefinitionManifest;\n phases?: WorkflowPhaseDefinition[];\n revision?: number;\n createdAtMs?: number;\n}\n\nexport function buildWorkflowDefinition(input: WorkflowDefinitionBuildInput): WorkflowDefinition {\n const nowMs = Date.now();\n const manifest = input.manifest;\n const manifestDefaults = manifest?.defaults ?? {};\n const phases = input.phases ?? deriveWorkflowPhases(input.graph);\n const graphHash = hashWorkflowStableValue(input.graph);\n const base = {\n id: input.name,\n name: input.name,\n title: manifest?.title ?? toWorkflowDefinitionTitle(input.name),\n description: manifest?.description ?? '',\n version: manifest?.version ?? '1.0.0',\n revision: input.revision ?? 1,\n inputSchema: manifest?.inputSchema,\n outputSchema: manifest?.outputSchema,\n phases,\n graph: structuredClone(input.graph),\n defaults: {\n concurrency: normalizePositiveInt(manifestDefaults.concurrency, DEFAULT_WORKFLOW_CONCURRENCY),\n timeoutSec: normalizePositiveInt(manifestDefaults.timeoutSec, DEFAULT_WORKFLOW_TIMEOUT_SEC),\n maxSubagents: normalizePositiveInt(manifestDefaults.maxSubagents, DEFAULT_WORKFLOW_MAX_SUBAGENTS),\n },\n permissions: manifest?.permissions,\n resources: manifest?.resources,\n connectors: manifest?.connectors,\n metadata: {\n tags: manifest?.tags ?? [],\n builtIn: input.source === 'builtin',\n source: input.source,\n whenToUse: manifest?.whenToUse,\n estimatedAgents: manifest?.estimatedAgents,\n examplePrompts: manifest?.examplePrompts,\n i18n: manifest?.i18n,\n createdAtMs: input.createdAtMs ?? nowMs,\n updatedAtMs: nowMs,\n },\n } satisfies Omit<WorkflowDefinition, 'contentHash'>;\n\n return {\n ...base,\n contentHash: hashWorkflowStableValue({\n name: base.name,\n title: base.title,\n description: base.description,\n version: base.version,\n revision: base.revision,\n graphHash,\n defaults: base.defaults,\n permissions: base.permissions,\n resources: base.resources,\n connectors: base.connectors,\n }),\n };\n}\n\nexport function deriveWorkflowPhases(graph: WorkflowGraph): WorkflowPhaseDefinition[] {\n const phases = new Map<string, WorkflowPhaseDefinition>();\n for (const node of graph.nodes) {\n if (!node.phaseId || phases.has(node.phaseId)) continue;\n phases.set(node.phaseId, {\n id: node.phaseId,\n title: toWorkflowDefinitionTitle(node.phaseId),\n });\n }\n return [...phases.values()];\n}\n\nexport function hashWorkflowStableValue(value: unknown): string {\n return createHash('sha256').update(stableStringify(value)).digest('hex');\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => stableStringify(item)).join(',')}]`;\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record)\n .filter((key) => record[key] !== undefined)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`)\n .join(',')}}`;\n}\n\nfunction normalizePositiveInt(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 1) return fallback;\n return Math.floor(value);\n}\n\nexport function normalizeWorkflowDefinitionId(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n}\n\nexport function toWorkflowDefinitionTitle(value: string): string {\n return value\n .split(/[_-]+/g)\n .filter(Boolean)\n .map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`)\n .join(' ');\n}\n"],"mappings":"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"}