@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,385 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import { randomUUID } from "node:crypto";
3
+ //#region src/storage/sqlite/connector-repository.ts
4
+ function parseStringArray(value) {
5
+ try {
6
+ const parsed = JSON.parse(value);
7
+ return Array.isArray(parsed) ? parsed.filter((item) => typeof item === "string") : [];
8
+ } catch {
9
+ return [];
10
+ }
11
+ }
12
+ function parseObject(value) {
13
+ try {
14
+ const parsed = JSON.parse(value);
15
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
16
+ } catch {
17
+ return {};
18
+ }
19
+ }
20
+ function installationFromRow(row) {
21
+ return {
22
+ id: row.id,
23
+ connectorId: row.connector_id,
24
+ principalId: row.principal_id,
25
+ enabled: row.enabled === 1,
26
+ allowedAgentIds: parseStringArray(row.allowed_agent_ids_json),
27
+ maxScope: row.max_scope,
28
+ confirmationPolicy: row.confirmation_policy,
29
+ selectedConnectionIds: parseStringArray(row.selected_connection_ids_json),
30
+ createdAt: row.created_at,
31
+ updatedAt: row.updated_at
32
+ };
33
+ }
34
+ function connectionFromRow(row) {
35
+ return {
36
+ id: row.id,
37
+ installationId: row.installation_id ?? void 0,
38
+ connectorId: row.connector_id,
39
+ provider: row.provider,
40
+ principalId: row.principal_id,
41
+ providerConnectionId: row.provider_connection_id,
42
+ alias: row.alias ?? void 0,
43
+ identity: parseObject(row.identity_json),
44
+ status: row.status,
45
+ isDefault: row.is_default === 1,
46
+ connectedAt: row.connected_at ?? void 0,
47
+ expiresAt: row.expires_at ?? void 0,
48
+ lastError: row.last_error ?? void 0,
49
+ metadata: parseObject(row.metadata_json),
50
+ createdAt: row.created_at,
51
+ updatedAt: row.updated_at
52
+ };
53
+ }
54
+ function actionFromRow(row) {
55
+ return {
56
+ connectorId: row.connector_id,
57
+ actionId: row.action_id,
58
+ toolkit: row.toolkit ?? void 0,
59
+ scope: row.scope,
60
+ curated: row.curated === 1,
61
+ inputSchema: row.input_schema_json == null ? void 0 : JSON.parse(row.input_schema_json),
62
+ schemaVersion: row.schema_version ?? void 0,
63
+ cachedAt: row.cached_at
64
+ };
65
+ }
66
+ function auditFromRow(row) {
67
+ return {
68
+ id: row.id,
69
+ installationId: row.installation_id ?? void 0,
70
+ connectionId: row.connection_id ?? void 0,
71
+ connectorId: row.connector_id,
72
+ principalId: row.principal_id,
73
+ agentId: row.agent_id ?? void 0,
74
+ sessionKey: row.session_key ?? void 0,
75
+ actionId: row.action_id,
76
+ scope: row.scope,
77
+ decision: row.decision,
78
+ resultStatus: row.result_status,
79
+ durationMs: row.duration_ms ?? void 0,
80
+ errorCode: row.error_code ?? void 0,
81
+ createdAt: row.created_at
82
+ };
83
+ }
84
+ function catalogFromRow(row) {
85
+ try {
86
+ const definition = JSON.parse(row.definition_json);
87
+ if (!definition || typeof definition !== "object" || definition.id !== row.connector_id) return void 0;
88
+ return {
89
+ connectorId: row.connector_id,
90
+ provider: row.provider,
91
+ definition,
92
+ fetchedAt: row.fetched_at,
93
+ expiresAt: row.expires_at ?? void 0
94
+ };
95
+ } catch {
96
+ return;
97
+ }
98
+ }
99
+ function approvalFromRow(row) {
100
+ return {
101
+ id: row.id,
102
+ principalId: row.principal_id,
103
+ connectorId: row.connector_id,
104
+ connectionId: row.connection_id ?? void 0,
105
+ agentId: row.agent_id ?? void 0,
106
+ sessionKey: row.session_key ?? void 0,
107
+ actionId: row.action_id,
108
+ scope: row.scope,
109
+ argumentsHash: row.arguments_hash,
110
+ argumentsPreview: parseObject(row.arguments_preview_json),
111
+ status: row.status,
112
+ expiresAt: row.expires_at,
113
+ createdAt: row.created_at,
114
+ decidedAt: row.decided_at ?? void 0,
115
+ consumedAt: row.consumed_at ?? void 0
116
+ };
117
+ }
118
+ function createConnectorApproval(input) {
119
+ const record = {
120
+ ...input,
121
+ id: input.id ?? randomUUID(),
122
+ status: input.status ?? "pending",
123
+ createdAt: input.createdAt ?? (/* @__PURE__ */ new Date()).toISOString()
124
+ };
125
+ runSqliteWriteTransaction((db) => {
126
+ db.prepare(`
127
+ INSERT INTO connector_approvals (
128
+ id, principal_id, connector_id, connection_id, agent_id, session_key, action_id,
129
+ scope, arguments_hash, arguments_preview_json, status, expires_at, created_at,
130
+ decided_at, consumed_at
131
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
132
+ `).run(record.id, record.principalId, record.connectorId, record.connectionId ?? null, record.agentId ?? null, record.sessionKey ?? null, record.actionId, record.scope, record.argumentsHash, JSON.stringify(record.argumentsPreview), record.status, record.expiresAt, record.createdAt, record.decidedAt ?? null, record.consumedAt ?? null);
133
+ });
134
+ return record;
135
+ }
136
+ function getConnectorApproval(id) {
137
+ const row = getSqliteDatabase().prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id);
138
+ return row ? approvalFromRow(row) : void 0;
139
+ }
140
+ function listConnectorApprovals(options = {}) {
141
+ const clauses = [];
142
+ const values = [];
143
+ if (options.principalId) {
144
+ clauses.push("principal_id = ?");
145
+ values.push(options.principalId);
146
+ }
147
+ if (options.sessionKey) {
148
+ clauses.push("session_key = ?");
149
+ values.push(options.sessionKey);
150
+ }
151
+ if (options.status) {
152
+ clauses.push("status = ?");
153
+ values.push(options.status);
154
+ }
155
+ const where = clauses.length > 0 ? ` WHERE ${clauses.join(" AND ")}` : "";
156
+ values.push(Math.max(1, Math.min(options.limit ?? 100, 500)));
157
+ return getSqliteDatabase().prepare(`SELECT * FROM connector_approvals${where} ORDER BY created_at DESC, rowid DESC LIMIT ?`).all(...values).map(approvalFromRow);
158
+ }
159
+ function decideConnectorApproval(id, decision, now = /* @__PURE__ */ new Date()) {
160
+ return runSqliteWriteTransaction((db) => {
161
+ const current = db.prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id);
162
+ if (!current) return void 0;
163
+ if (current.status !== "pending" || Date.parse(current.expires_at) <= now.getTime()) {
164
+ if (current.status === "pending") db.prepare("UPDATE connector_approvals SET status = 'expired', decided_at = ? WHERE id = ?").run(now.toISOString(), id);
165
+ return approvalFromRow(db.prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id));
166
+ }
167
+ db.prepare("UPDATE connector_approvals SET status = ?, decided_at = ? WHERE id = ?").run(decision, now.toISOString(), id);
168
+ return approvalFromRow(db.prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id));
169
+ });
170
+ }
171
+ function consumeConnectorApproval(id, argumentsHash, now = /* @__PURE__ */ new Date()) {
172
+ return runSqliteWriteTransaction((db) => {
173
+ const current = db.prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id);
174
+ if (!current || current.arguments_hash !== argumentsHash) return void 0;
175
+ if (current.status !== "approved" || Date.parse(current.expires_at) <= now.getTime()) {
176
+ if (current.status === "approved" && Date.parse(current.expires_at) <= now.getTime()) db.prepare("UPDATE connector_approvals SET status = 'expired' WHERE id = ?").run(id);
177
+ return;
178
+ }
179
+ db.prepare("UPDATE connector_approvals SET status = 'consumed', consumed_at = ? WHERE id = ? AND status = 'approved'").run(now.toISOString(), id);
180
+ return approvalFromRow(db.prepare("SELECT * FROM connector_approvals WHERE id = ?").get(id));
181
+ });
182
+ }
183
+ function upsertConnectorCatalogEntry(input) {
184
+ runSqliteWriteTransaction((db) => {
185
+ db.prepare(`
186
+ INSERT INTO connector_catalog_entries (connector_id, provider, definition_json, fetched_at, expires_at)
187
+ VALUES (?, ?, ?, ?, ?)
188
+ ON CONFLICT(connector_id) DO UPDATE SET
189
+ provider = excluded.provider,
190
+ definition_json = excluded.definition_json,
191
+ fetched_at = excluded.fetched_at,
192
+ expires_at = excluded.expires_at
193
+ `).run(input.connectorId, input.provider, JSON.stringify(input.definition), input.fetchedAt, input.expiresAt ?? null);
194
+ });
195
+ return input;
196
+ }
197
+ function getCachedConnectorCatalogEntry(connectorId) {
198
+ const row = getSqliteDatabase().prepare("SELECT * FROM connector_catalog_entries WHERE connector_id = ?").get(connectorId);
199
+ return row ? catalogFromRow(row) : void 0;
200
+ }
201
+ function listCachedConnectorCatalogEntries(provider) {
202
+ return (provider ? getSqliteDatabase().prepare("SELECT * FROM connector_catalog_entries WHERE provider = ? ORDER BY connector_id").all(provider) : getSqliteDatabase().prepare("SELECT * FROM connector_catalog_entries ORDER BY provider, connector_id").all()).flatMap((row) => {
203
+ const entry = catalogFromRow(row);
204
+ return entry ? [entry] : [];
205
+ });
206
+ }
207
+ function upsertConnectorInstallation(input) {
208
+ const now = (/* @__PURE__ */ new Date()).toISOString();
209
+ return runSqliteWriteTransaction((db) => {
210
+ db.prepare(`
211
+ INSERT INTO connector_installations (
212
+ id, connector_id, principal_id, enabled, allowed_agent_ids_json, max_scope,
213
+ confirmation_policy, selected_connection_ids_json, created_at, updated_at
214
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
215
+ ON CONFLICT(id) DO UPDATE SET
216
+ connector_id = excluded.connector_id,
217
+ principal_id = excluded.principal_id,
218
+ enabled = excluded.enabled,
219
+ allowed_agent_ids_json = excluded.allowed_agent_ids_json,
220
+ max_scope = excluded.max_scope,
221
+ confirmation_policy = excluded.confirmation_policy,
222
+ selected_connection_ids_json = excluded.selected_connection_ids_json,
223
+ updated_at = excluded.updated_at
224
+ `).run(input.id, input.connectorId, input.principalId, input.enabled ? 1 : 0, JSON.stringify(input.allowedAgentIds), input.maxScope, input.confirmationPolicy, JSON.stringify(input.selectedConnectionIds), input.createdAt ?? now, input.updatedAt ?? now);
225
+ return getConnectorInstallation(input.id);
226
+ });
227
+ }
228
+ function getConnectorInstallation(id) {
229
+ const row = getSqliteDatabase().prepare("SELECT * FROM connector_installations WHERE id = ?").get(id);
230
+ return row ? installationFromRow(row) : void 0;
231
+ }
232
+ function listConnectorInstallations(principalId) {
233
+ return (principalId ? getSqliteDatabase().prepare("SELECT * FROM connector_installations WHERE principal_id = ? ORDER BY connector_id").all(principalId) : getSqliteDatabase().prepare("SELECT * FROM connector_installations ORDER BY principal_id, connector_id").all()).map(installationFromRow);
234
+ }
235
+ function deleteConnectorInstallation(id) {
236
+ return runSqliteWriteTransaction((db) => db.prepare("DELETE FROM connector_installations WHERE id = ?").run(id).changes > 0);
237
+ }
238
+ function upsertConnectorConnection(input) {
239
+ const now = (/* @__PURE__ */ new Date()).toISOString();
240
+ return runSqliteWriteTransaction((db) => {
241
+ if (input.isDefault) db.prepare("UPDATE connector_connections SET is_default = 0 WHERE principal_id = ? AND connector_id = ? AND id <> ?").run(input.principalId, input.connectorId, input.id);
242
+ db.prepare(`
243
+ INSERT INTO connector_connections (
244
+ id, installation_id, connector_id, provider, principal_id, provider_connection_id,
245
+ alias, identity_json, status, is_default, connected_at, expires_at, last_error,
246
+ metadata_json, created_at, updated_at
247
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
248
+ ON CONFLICT(id) DO UPDATE SET
249
+ installation_id = excluded.installation_id,
250
+ connector_id = excluded.connector_id,
251
+ provider = excluded.provider,
252
+ principal_id = excluded.principal_id,
253
+ provider_connection_id = excluded.provider_connection_id,
254
+ alias = excluded.alias,
255
+ identity_json = excluded.identity_json,
256
+ status = excluded.status,
257
+ is_default = excluded.is_default,
258
+ connected_at = excluded.connected_at,
259
+ expires_at = excluded.expires_at,
260
+ last_error = excluded.last_error,
261
+ metadata_json = excluded.metadata_json,
262
+ updated_at = excluded.updated_at
263
+ `).run(input.id, input.installationId ?? null, input.connectorId, input.provider, input.principalId, input.providerConnectionId, input.alias ?? null, JSON.stringify(input.identity), input.status, input.isDefault ? 1 : 0, input.connectedAt ?? null, input.expiresAt ?? null, input.lastError ?? null, JSON.stringify(input.metadata), input.createdAt ?? now, input.updatedAt ?? now);
264
+ return getConnectorConnection(input.id);
265
+ });
266
+ }
267
+ function getConnectorConnection(id) {
268
+ const row = getSqliteDatabase().prepare("SELECT * FROM connector_connections WHERE id = ?").get(id);
269
+ return row ? connectionFromRow(row) : void 0;
270
+ }
271
+ function listConnectorConnections(options = {}) {
272
+ const clauses = [];
273
+ const values = [];
274
+ if (options.principalId) {
275
+ clauses.push("principal_id = ?");
276
+ values.push(options.principalId);
277
+ }
278
+ if (options.connectorId) {
279
+ clauses.push("connector_id = ?");
280
+ values.push(options.connectorId);
281
+ }
282
+ const where = clauses.length > 0 ? ` WHERE ${clauses.join(" AND ")}` : "";
283
+ return getSqliteDatabase().prepare(`SELECT * FROM connector_connections${where} ORDER BY is_default DESC, updated_at DESC`).all(...values).map(connectionFromRow);
284
+ }
285
+ function deleteConnectorConnection(id) {
286
+ return runSqliteWriteTransaction((db) => db.prepare("DELETE FROM connector_connections WHERE id = ?").run(id).changes > 0);
287
+ }
288
+ function upsertConnectorActionMetadata(input) {
289
+ return runSqliteWriteTransaction((db) => {
290
+ db.prepare(`
291
+ INSERT INTO connector_action_metadata (
292
+ connector_id, action_id, toolkit, scope, curated, input_schema_json, schema_version, cached_at
293
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
294
+ ON CONFLICT(connector_id, action_id) DO UPDATE SET
295
+ toolkit = excluded.toolkit,
296
+ scope = excluded.scope,
297
+ curated = excluded.curated,
298
+ input_schema_json = excluded.input_schema_json,
299
+ schema_version = excluded.schema_version,
300
+ cached_at = excluded.cached_at
301
+ `).run(input.connectorId, input.actionId, input.toolkit ?? null, input.scope, input.curated ? 1 : 0, input.inputSchema === void 0 ? null : JSON.stringify(input.inputSchema), input.schemaVersion ?? null, input.cachedAt);
302
+ return input;
303
+ });
304
+ }
305
+ function listConnectorActionMetadata(connectorId) {
306
+ return getSqliteDatabase().prepare("SELECT * FROM connector_action_metadata WHERE connector_id = ? ORDER BY action_id").all(connectorId).map(actionFromRow);
307
+ }
308
+ function appendConnectorExecutionAudit(input) {
309
+ const record = {
310
+ ...input,
311
+ id: input.id ?? randomUUID(),
312
+ createdAt: input.createdAt ?? (/* @__PURE__ */ new Date()).toISOString()
313
+ };
314
+ runSqliteWriteTransaction((db) => {
315
+ db.prepare(`
316
+ INSERT INTO connector_execution_audit (
317
+ id, installation_id, connection_id, connector_id, principal_id, agent_id,
318
+ session_key, action_id, scope, decision, result_status, duration_ms, error_code, created_at
319
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
320
+ `).run(record.id, record.installationId ?? null, record.connectionId ?? null, record.connectorId, record.principalId, record.agentId ?? null, record.sessionKey ?? null, record.actionId, record.scope, record.decision, record.resultStatus, record.durationMs ?? null, record.errorCode ?? null, record.createdAt);
321
+ });
322
+ return record;
323
+ }
324
+ function listConnectorExecutionAudit(options = {}) {
325
+ const clauses = [];
326
+ const values = [];
327
+ if (options.principalId) {
328
+ clauses.push("principal_id = ?");
329
+ values.push(options.principalId);
330
+ }
331
+ if (options.connectorId) {
332
+ clauses.push("connector_id = ?");
333
+ values.push(options.connectorId);
334
+ }
335
+ const where = clauses.length > 0 ? ` WHERE ${clauses.join(" AND ")}` : "";
336
+ values.push(Math.max(1, Math.min(options.limit ?? 100, 500)));
337
+ return getSqliteDatabase().prepare(`SELECT * FROM connector_execution_audit${where} ORDER BY created_at DESC, rowid DESC LIMIT ?`).all(...values).map(auditFromRow);
338
+ }
339
+ function claimConnectorWebhookDelivery(input) {
340
+ const now = input.now ?? /* @__PURE__ */ new Date();
341
+ return runSqliteWriteTransaction((db) => {
342
+ const current = db.prepare("SELECT status, processing_at, payload_hash FROM connector_webhook_deliveries WHERE id = ?").get(input.id);
343
+ if (!current) {
344
+ db.prepare(`
345
+ INSERT INTO connector_webhook_deliveries (
346
+ id, provider, payload_hash, status, attempts, received_at, processing_at
347
+ ) VALUES (?, ?, ?, 'processing', 1, ?, ?)
348
+ `).run(input.id, input.provider, input.payloadHash, now.toISOString(), now.toISOString());
349
+ return "claimed";
350
+ }
351
+ if (current.payload_hash !== input.payloadHash) throw new Error("Webhook delivery id was reused with a different payload.");
352
+ if (current.status === "processed") return "processed";
353
+ const leaseMs = input.leaseMs ?? 5 * 6e4;
354
+ if (current.status === "processing" && current.processing_at && Date.parse(current.processing_at) + leaseMs > now.getTime()) return "in_flight";
355
+ db.prepare(`
356
+ UPDATE connector_webhook_deliveries
357
+ SET status = 'processing', attempts = attempts + 1, processing_at = ?, last_error = NULL
358
+ WHERE id = ?
359
+ `).run(now.toISOString(), input.id);
360
+ return "claimed";
361
+ });
362
+ }
363
+ function completeConnectorWebhookDelivery(id, now = /* @__PURE__ */ new Date()) {
364
+ runSqliteWriteTransaction((db) => {
365
+ db.prepare(`
366
+ UPDATE connector_webhook_deliveries
367
+ SET status = 'processed', processed_at = ?, processing_at = NULL, last_error = NULL
368
+ WHERE id = ?
369
+ `).run(now.toISOString(), id);
370
+ });
371
+ }
372
+ function releaseConnectorWebhookDelivery(id, error) {
373
+ const message = error instanceof Error ? error.message : String(error);
374
+ runSqliteWriteTransaction((db) => {
375
+ db.prepare(`
376
+ UPDATE connector_webhook_deliveries
377
+ SET status = 'pending', processing_at = NULL, last_error = ?
378
+ WHERE id = ? AND status = 'processing'
379
+ `).run(message.slice(0, 500), id);
380
+ });
381
+ }
382
+ //#endregion
383
+ export { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation };
384
+
385
+ //# sourceMappingURL=connector-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-repository.js","names":[],"sources":["../../../../src/storage/sqlite/connector-repository.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type {\n ConnectorActionMetadata,\n ConnectorApprovalRecord,\n ConnectorConnection,\n ConnectorDefinition,\n ConnectorExecutionAuditRecord,\n ConnectorInstallationPolicy,\n} from '../../connectors/types.js';\nimport { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';\n\ntype InstallationRow = {\n id: string;\n connector_id: string;\n principal_id: string;\n enabled: number;\n allowed_agent_ids_json: string;\n max_scope: ConnectorInstallationPolicy['maxScope'];\n confirmation_policy: ConnectorInstallationPolicy['confirmationPolicy'];\n selected_connection_ids_json: string;\n created_at: string;\n updated_at: string;\n};\n\ntype ConnectionRow = {\n id: string;\n installation_id: string | null;\n connector_id: string;\n provider: string;\n principal_id: string;\n provider_connection_id: string;\n alias: string | null;\n identity_json: string;\n status: ConnectorConnection['status'];\n is_default: number;\n connected_at: string | null;\n expires_at: string | null;\n last_error: string | null;\n metadata_json: string;\n created_at: string;\n updated_at: string;\n};\n\ntype ActionRow = {\n connector_id: string;\n action_id: string;\n toolkit: string | null;\n scope: ConnectorActionMetadata['scope'];\n curated: number;\n input_schema_json: string | null;\n schema_version: string | null;\n cached_at: string;\n};\n\ntype AuditRow = {\n id: string;\n installation_id: string | null;\n connection_id: string | null;\n connector_id: string;\n principal_id: string;\n agent_id: string | null;\n session_key: string | null;\n action_id: string;\n scope: ConnectorExecutionAuditRecord['scope'];\n decision: ConnectorExecutionAuditRecord['decision'];\n result_status: ConnectorExecutionAuditRecord['resultStatus'];\n duration_ms: number | null;\n error_code: string | null;\n created_at: string;\n};\n\ntype CatalogRow = {\n connector_id: string;\n provider: string;\n definition_json: string;\n fetched_at: string;\n expires_at: string | null;\n};\n\ntype ApprovalRow = {\n id: string;\n principal_id: string;\n connector_id: string;\n connection_id: string | null;\n agent_id: string | null;\n session_key: string | null;\n action_id: string;\n scope: ConnectorApprovalRecord['scope'];\n arguments_hash: string;\n arguments_preview_json: string;\n status: ConnectorApprovalRecord['status'];\n expires_at: string;\n created_at: string;\n decided_at: string | null;\n consumed_at: string | null;\n};\n\nexport type CachedConnectorCatalogEntry = {\n connectorId: string;\n provider: string;\n definition: ConnectorDefinition;\n fetchedAt: string;\n expiresAt?: string;\n};\n\nfunction parseStringArray(value: string): string[] {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter((item): item is string => typeof item === 'string') : [];\n } catch {\n return [];\n }\n}\n\nfunction parseObject(value: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {};\n } catch {\n return {};\n }\n}\n\nfunction installationFromRow(row: InstallationRow): ConnectorInstallationPolicy {\n return {\n id: row.id,\n connectorId: row.connector_id,\n principalId: row.principal_id,\n enabled: row.enabled === 1,\n allowedAgentIds: parseStringArray(row.allowed_agent_ids_json),\n maxScope: row.max_scope,\n confirmationPolicy: row.confirmation_policy,\n selectedConnectionIds: parseStringArray(row.selected_connection_ids_json),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n}\n\nfunction connectionFromRow(row: ConnectionRow): ConnectorConnection {\n return {\n id: row.id,\n installationId: row.installation_id ?? undefined,\n connectorId: row.connector_id,\n provider: row.provider,\n principalId: row.principal_id,\n providerConnectionId: row.provider_connection_id,\n alias: row.alias ?? undefined,\n identity: parseObject(row.identity_json),\n status: row.status,\n isDefault: row.is_default === 1,\n connectedAt: row.connected_at ?? undefined,\n expiresAt: row.expires_at ?? undefined,\n lastError: row.last_error ?? undefined,\n metadata: parseObject(row.metadata_json),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n}\n\nfunction actionFromRow(row: ActionRow): ConnectorActionMetadata {\n return {\n connectorId: row.connector_id,\n actionId: row.action_id,\n toolkit: row.toolkit ?? undefined,\n scope: row.scope,\n curated: row.curated === 1,\n inputSchema: row.input_schema_json == null ? undefined : JSON.parse(row.input_schema_json),\n schemaVersion: row.schema_version ?? undefined,\n cachedAt: row.cached_at,\n };\n}\n\nfunction auditFromRow(row: AuditRow): ConnectorExecutionAuditRecord {\n return {\n id: row.id,\n installationId: row.installation_id ?? undefined,\n connectionId: row.connection_id ?? undefined,\n connectorId: row.connector_id,\n principalId: row.principal_id,\n agentId: row.agent_id ?? undefined,\n sessionKey: row.session_key ?? undefined,\n actionId: row.action_id,\n scope: row.scope,\n decision: row.decision,\n resultStatus: row.result_status,\n durationMs: row.duration_ms ?? undefined,\n errorCode: row.error_code ?? undefined,\n createdAt: row.created_at,\n };\n}\n\nfunction catalogFromRow(row: CatalogRow): CachedConnectorCatalogEntry | undefined {\n try {\n const definition = JSON.parse(row.definition_json) as ConnectorDefinition;\n if (!definition || typeof definition !== 'object' || definition.id !== row.connector_id) return undefined;\n return {\n connectorId: row.connector_id,\n provider: row.provider,\n definition,\n fetchedAt: row.fetched_at,\n expiresAt: row.expires_at ?? undefined,\n };\n } catch {\n return undefined;\n }\n}\n\nfunction approvalFromRow(row: ApprovalRow): ConnectorApprovalRecord {\n return {\n id: row.id,\n principalId: row.principal_id,\n connectorId: row.connector_id,\n connectionId: row.connection_id ?? undefined,\n agentId: row.agent_id ?? undefined,\n sessionKey: row.session_key ?? undefined,\n actionId: row.action_id,\n scope: row.scope,\n argumentsHash: row.arguments_hash,\n argumentsPreview: parseObject(row.arguments_preview_json),\n status: row.status,\n expiresAt: row.expires_at,\n createdAt: row.created_at,\n decidedAt: row.decided_at ?? undefined,\n consumedAt: row.consumed_at ?? undefined,\n };\n}\n\nexport function createConnectorApproval(\n input: Omit<ConnectorApprovalRecord, 'id' | 'status' | 'createdAt'> & Partial<Pick<ConnectorApprovalRecord, 'id' | 'status' | 'createdAt'>>,\n): ConnectorApprovalRecord {\n const record: ConnectorApprovalRecord = {\n ...input,\n id: input.id ?? randomUUID(),\n status: input.status ?? 'pending',\n createdAt: input.createdAt ?? new Date().toISOString(),\n };\n runSqliteWriteTransaction((db) => {\n db.prepare(`\n INSERT INTO connector_approvals (\n id, principal_id, connector_id, connection_id, agent_id, session_key, action_id,\n scope, arguments_hash, arguments_preview_json, status, expires_at, created_at,\n decided_at, consumed_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `).run(\n record.id,\n record.principalId,\n record.connectorId,\n record.connectionId ?? null,\n record.agentId ?? null,\n record.sessionKey ?? null,\n record.actionId,\n record.scope,\n record.argumentsHash,\n JSON.stringify(record.argumentsPreview),\n record.status,\n record.expiresAt,\n record.createdAt,\n record.decidedAt ?? null,\n record.consumedAt ?? null,\n );\n });\n return record;\n}\n\nexport function getConnectorApproval(id: string): ConnectorApprovalRecord | undefined {\n const row = getSqliteDatabase().prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow | undefined;\n return row ? approvalFromRow(row) : undefined;\n}\n\nexport function listConnectorApprovals(options: {\n principalId?: string;\n sessionKey?: string;\n status?: ConnectorApprovalRecord['status'];\n limit?: number;\n} = {}): ConnectorApprovalRecord[] {\n const clauses: string[] = [];\n const values: Array<string | number> = [];\n if (options.principalId) {\n clauses.push('principal_id = ?');\n values.push(options.principalId);\n }\n if (options.sessionKey) {\n clauses.push('session_key = ?');\n values.push(options.sessionKey);\n }\n if (options.status) {\n clauses.push('status = ?');\n values.push(options.status);\n }\n const where = clauses.length > 0 ? ` WHERE ${clauses.join(' AND ')}` : '';\n values.push(Math.max(1, Math.min(options.limit ?? 100, 500)));\n const rows = getSqliteDatabase().prepare(\n `SELECT * FROM connector_approvals${where} ORDER BY created_at DESC, rowid DESC LIMIT ?`,\n ).all(...values) as ApprovalRow[];\n return rows.map(approvalFromRow);\n}\n\nexport function decideConnectorApproval(id: string, decision: 'approved' | 'denied', now = new Date()): ConnectorApprovalRecord | undefined {\n return runSqliteWriteTransaction((db) => {\n const current = db.prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow | undefined;\n if (!current) return undefined;\n if (current.status !== 'pending' || Date.parse(current.expires_at) <= now.getTime()) {\n if (current.status === 'pending') {\n db.prepare(\"UPDATE connector_approvals SET status = 'expired', decided_at = ? WHERE id = ?\")\n .run(now.toISOString(), id);\n }\n const updated = db.prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow;\n return approvalFromRow(updated);\n }\n db.prepare('UPDATE connector_approvals SET status = ?, decided_at = ? WHERE id = ?')\n .run(decision, now.toISOString(), id);\n const updated = db.prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow;\n return approvalFromRow(updated);\n });\n}\n\nexport function consumeConnectorApproval(id: string, argumentsHash: string, now = new Date()): ConnectorApprovalRecord | undefined {\n return runSqliteWriteTransaction((db) => {\n const current = db.prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow | undefined;\n if (!current || current.arguments_hash !== argumentsHash) return undefined;\n if (current.status !== 'approved' || Date.parse(current.expires_at) <= now.getTime()) {\n if (current.status === 'approved' && Date.parse(current.expires_at) <= now.getTime()) {\n db.prepare(\"UPDATE connector_approvals SET status = 'expired' WHERE id = ?\").run(id);\n }\n return undefined;\n }\n db.prepare(\"UPDATE connector_approvals SET status = 'consumed', consumed_at = ? WHERE id = ? AND status = 'approved'\")\n .run(now.toISOString(), id);\n const updated = db.prepare('SELECT * FROM connector_approvals WHERE id = ?').get(id) as ApprovalRow;\n return approvalFromRow(updated);\n });\n}\n\nexport function upsertConnectorCatalogEntry(input: CachedConnectorCatalogEntry): CachedConnectorCatalogEntry {\n runSqliteWriteTransaction((db) => {\n db.prepare(`\n INSERT INTO connector_catalog_entries (connector_id, provider, definition_json, fetched_at, expires_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(connector_id) DO UPDATE SET\n provider = excluded.provider,\n definition_json = excluded.definition_json,\n fetched_at = excluded.fetched_at,\n expires_at = excluded.expires_at\n `).run(\n input.connectorId,\n input.provider,\n JSON.stringify(input.definition),\n input.fetchedAt,\n input.expiresAt ?? null,\n );\n });\n return input;\n}\n\nexport function getCachedConnectorCatalogEntry(connectorId: string): CachedConnectorCatalogEntry | undefined {\n const row = getSqliteDatabase().prepare(\n 'SELECT * FROM connector_catalog_entries WHERE connector_id = ?',\n ).get(connectorId) as CatalogRow | undefined;\n return row ? catalogFromRow(row) : undefined;\n}\n\nexport function listCachedConnectorCatalogEntries(provider?: string): CachedConnectorCatalogEntry[] {\n const rows = (provider\n ? getSqliteDatabase().prepare('SELECT * FROM connector_catalog_entries WHERE provider = ? ORDER BY connector_id').all(provider)\n : getSqliteDatabase().prepare('SELECT * FROM connector_catalog_entries ORDER BY provider, connector_id').all()) as CatalogRow[];\n return rows.flatMap((row) => {\n const entry = catalogFromRow(row);\n return entry ? [entry] : [];\n });\n}\n\nexport function upsertConnectorInstallation(\n input: Omit<ConnectorInstallationPolicy, 'createdAt' | 'updatedAt'> & Partial<Pick<ConnectorInstallationPolicy, 'createdAt' | 'updatedAt'>>,\n): ConnectorInstallationPolicy {\n const now = new Date().toISOString();\n return runSqliteWriteTransaction((db) => {\n db.prepare(`\n INSERT INTO connector_installations (\n id, connector_id, principal_id, enabled, allowed_agent_ids_json, max_scope,\n confirmation_policy, selected_connection_ids_json, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n connector_id = excluded.connector_id,\n principal_id = excluded.principal_id,\n enabled = excluded.enabled,\n allowed_agent_ids_json = excluded.allowed_agent_ids_json,\n max_scope = excluded.max_scope,\n confirmation_policy = excluded.confirmation_policy,\n selected_connection_ids_json = excluded.selected_connection_ids_json,\n updated_at = excluded.updated_at\n `).run(\n input.id,\n input.connectorId,\n input.principalId,\n input.enabled ? 1 : 0,\n JSON.stringify(input.allowedAgentIds),\n input.maxScope,\n input.confirmationPolicy,\n JSON.stringify(input.selectedConnectionIds),\n input.createdAt ?? now,\n input.updatedAt ?? now,\n );\n return getConnectorInstallation(input.id)!;\n });\n}\n\nexport function getConnectorInstallation(id: string): ConnectorInstallationPolicy | undefined {\n const row = getSqliteDatabase().prepare('SELECT * FROM connector_installations WHERE id = ?').get(id) as InstallationRow | undefined;\n return row ? installationFromRow(row) : undefined;\n}\n\nexport function listConnectorInstallations(principalId?: string): ConnectorInstallationPolicy[] {\n const rows = (principalId\n ? getSqliteDatabase().prepare('SELECT * FROM connector_installations WHERE principal_id = ? ORDER BY connector_id').all(principalId)\n : getSqliteDatabase().prepare('SELECT * FROM connector_installations ORDER BY principal_id, connector_id').all()) as InstallationRow[];\n return rows.map(installationFromRow);\n}\n\nexport function deleteConnectorInstallation(id: string): boolean {\n return runSqliteWriteTransaction((db) => db.prepare('DELETE FROM connector_installations WHERE id = ?').run(id).changes > 0);\n}\n\nexport function upsertConnectorConnection(\n input: Omit<ConnectorConnection, 'createdAt' | 'updatedAt'> & Partial<Pick<ConnectorConnection, 'createdAt' | 'updatedAt'>>,\n): ConnectorConnection {\n const now = new Date().toISOString();\n return runSqliteWriteTransaction((db) => {\n if (input.isDefault) {\n db.prepare('UPDATE connector_connections SET is_default = 0 WHERE principal_id = ? AND connector_id = ? AND id <> ?')\n .run(input.principalId, input.connectorId, input.id);\n }\n db.prepare(`\n INSERT INTO connector_connections (\n id, installation_id, connector_id, provider, principal_id, provider_connection_id,\n alias, identity_json, status, is_default, connected_at, expires_at, last_error,\n metadata_json, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n installation_id = excluded.installation_id,\n connector_id = excluded.connector_id,\n provider = excluded.provider,\n principal_id = excluded.principal_id,\n provider_connection_id = excluded.provider_connection_id,\n alias = excluded.alias,\n identity_json = excluded.identity_json,\n status = excluded.status,\n is_default = excluded.is_default,\n connected_at = excluded.connected_at,\n expires_at = excluded.expires_at,\n last_error = excluded.last_error,\n metadata_json = excluded.metadata_json,\n updated_at = excluded.updated_at\n `).run(\n input.id,\n input.installationId ?? null,\n input.connectorId,\n input.provider,\n input.principalId,\n input.providerConnectionId,\n input.alias ?? null,\n JSON.stringify(input.identity),\n input.status,\n input.isDefault ? 1 : 0,\n input.connectedAt ?? null,\n input.expiresAt ?? null,\n input.lastError ?? null,\n JSON.stringify(input.metadata),\n input.createdAt ?? now,\n input.updatedAt ?? now,\n );\n return getConnectorConnection(input.id)!;\n });\n}\n\nexport function getConnectorConnection(id: string): ConnectorConnection | undefined {\n const row = getSqliteDatabase().prepare('SELECT * FROM connector_connections WHERE id = ?').get(id) as ConnectionRow | undefined;\n return row ? connectionFromRow(row) : undefined;\n}\n\nexport function listConnectorConnections(options: { principalId?: string; connectorId?: string } = {}): ConnectorConnection[] {\n const clauses: string[] = [];\n const values: string[] = [];\n if (options.principalId) {\n clauses.push('principal_id = ?');\n values.push(options.principalId);\n }\n if (options.connectorId) {\n clauses.push('connector_id = ?');\n values.push(options.connectorId);\n }\n const where = clauses.length > 0 ? ` WHERE ${clauses.join(' AND ')}` : '';\n const rows = getSqliteDatabase().prepare(`SELECT * FROM connector_connections${where} ORDER BY is_default DESC, updated_at DESC`).all(...values) as ConnectionRow[];\n return rows.map(connectionFromRow);\n}\n\nexport function deleteConnectorConnection(id: string): boolean {\n return runSqliteWriteTransaction((db) => db.prepare('DELETE FROM connector_connections WHERE id = ?').run(id).changes > 0);\n}\n\nexport function upsertConnectorActionMetadata(input: ConnectorActionMetadata): ConnectorActionMetadata {\n return runSqliteWriteTransaction((db) => {\n db.prepare(`\n INSERT INTO connector_action_metadata (\n connector_id, action_id, toolkit, scope, curated, input_schema_json, schema_version, cached_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(connector_id, action_id) DO UPDATE SET\n toolkit = excluded.toolkit,\n scope = excluded.scope,\n curated = excluded.curated,\n input_schema_json = excluded.input_schema_json,\n schema_version = excluded.schema_version,\n cached_at = excluded.cached_at\n `).run(\n input.connectorId,\n input.actionId,\n input.toolkit ?? null,\n input.scope,\n input.curated ? 1 : 0,\n input.inputSchema === undefined ? null : JSON.stringify(input.inputSchema),\n input.schemaVersion ?? null,\n input.cachedAt,\n );\n return input;\n });\n}\n\nexport function listConnectorActionMetadata(connectorId: string): ConnectorActionMetadata[] {\n const rows = getSqliteDatabase().prepare(\n 'SELECT * FROM connector_action_metadata WHERE connector_id = ? ORDER BY action_id',\n ).all(connectorId) as ActionRow[];\n return rows.map(actionFromRow);\n}\n\nexport function appendConnectorExecutionAudit(\n input: Omit<ConnectorExecutionAuditRecord, 'id' | 'createdAt'> & Partial<Pick<ConnectorExecutionAuditRecord, 'id' | 'createdAt'>>,\n): ConnectorExecutionAuditRecord {\n const record: ConnectorExecutionAuditRecord = {\n ...input,\n id: input.id ?? randomUUID(),\n createdAt: input.createdAt ?? new Date().toISOString(),\n };\n runSqliteWriteTransaction((db) => {\n db.prepare(`\n INSERT INTO connector_execution_audit (\n id, installation_id, connection_id, connector_id, principal_id, agent_id,\n session_key, action_id, scope, decision, result_status, duration_ms, error_code, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `).run(\n record.id,\n record.installationId ?? null,\n record.connectionId ?? null,\n record.connectorId,\n record.principalId,\n record.agentId ?? null,\n record.sessionKey ?? null,\n record.actionId,\n record.scope,\n record.decision,\n record.resultStatus,\n record.durationMs ?? null,\n record.errorCode ?? null,\n record.createdAt,\n );\n });\n return record;\n}\n\nexport function listConnectorExecutionAudit(options: { principalId?: string; connectorId?: string; limit?: number } = {}): ConnectorExecutionAuditRecord[] {\n const clauses: string[] = [];\n const values: Array<string | number> = [];\n if (options.principalId) {\n clauses.push('principal_id = ?');\n values.push(options.principalId);\n }\n if (options.connectorId) {\n clauses.push('connector_id = ?');\n values.push(options.connectorId);\n }\n const where = clauses.length > 0 ? ` WHERE ${clauses.join(' AND ')}` : '';\n values.push(Math.max(1, Math.min(options.limit ?? 100, 500)));\n const rows = getSqliteDatabase().prepare(\n `SELECT * FROM connector_execution_audit${where} ORDER BY created_at DESC, rowid DESC LIMIT ?`,\n ).all(...values) as AuditRow[];\n return rows.map(auditFromRow);\n}\n\nexport function claimConnectorWebhookDelivery(input: {\n id: string;\n provider: string;\n payloadHash: string;\n now?: Date;\n leaseMs?: number;\n}): 'claimed' | 'processed' | 'in_flight' {\n const now = input.now ?? new Date();\n return runSqliteWriteTransaction((db) => {\n const current = db.prepare('SELECT status, processing_at, payload_hash FROM connector_webhook_deliveries WHERE id = ?')\n .get(input.id) as { status: string; processing_at: string | null; payload_hash: string } | undefined;\n if (!current) {\n db.prepare(`\n INSERT INTO connector_webhook_deliveries (\n id, provider, payload_hash, status, attempts, received_at, processing_at\n ) VALUES (?, ?, ?, 'processing', 1, ?, ?)\n `).run(input.id, input.provider, input.payloadHash, now.toISOString(), now.toISOString());\n return 'claimed';\n }\n if (current.payload_hash !== input.payloadHash) throw new Error('Webhook delivery id was reused with a different payload.');\n if (current.status === 'processed') return 'processed';\n const leaseMs = input.leaseMs ?? 5 * 60_000;\n if (current.status === 'processing' && current.processing_at && Date.parse(current.processing_at) + leaseMs > now.getTime()) {\n return 'in_flight';\n }\n db.prepare(`\n UPDATE connector_webhook_deliveries\n SET status = 'processing', attempts = attempts + 1, processing_at = ?, last_error = NULL\n WHERE id = ?\n `).run(now.toISOString(), input.id);\n return 'claimed';\n });\n}\n\nexport function completeConnectorWebhookDelivery(id: string, now = new Date()): void {\n runSqliteWriteTransaction((db) => {\n db.prepare(`\n UPDATE connector_webhook_deliveries\n SET status = 'processed', processed_at = ?, processing_at = NULL, last_error = NULL\n WHERE id = ?\n `).run(now.toISOString(), id);\n });\n}\n\nexport function releaseConnectorWebhookDelivery(id: string, error: unknown): void {\n const message = error instanceof Error ? error.message : String(error);\n runSqliteWriteTransaction((db) => {\n db.prepare(`\n UPDATE connector_webhook_deliveries\n SET status = 'pending', processing_at = NULL, last_error = ?\n WHERE id = ? AND status = 'processing'\n `).run(message.slice(0, 500), id);\n });\n}\n"],"mappings":"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"}
@@ -16,3 +16,6 @@ export { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, findLat
16
16
  export { attachMemoryEvidence, finishKnowledgeSyncRun, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceItemSynthesisStatus, setKnowledgeSourceCursor, startKnowledgeSyncRun, upsertKnowledgeSourceItems, } from './knowledge-repository.js';
17
17
  export { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig, } from './config-repository.js';
18
18
  export { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent, } from './activity-repository.js';
19
+ export { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getConnectorConnection, getConnectorApproval, getConnectorInstallation, getCachedConnectorCatalogEntry, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, type CachedConnectorCatalogEntry, } from './connector-repository.js';
20
+ export { getUserTrustPolicy, setUserTrustPolicy, } from './user-trust-repository.js';
21
+ export { getUserProfilePromptState, setUserProfilePromptState, } from './user-profile-setup-repository.js';
@@ -17,4 +17,7 @@ import { USER_UNDERSTANDING_REMEDIATION_POLICY, appendMemorySignal, appendMemory
17
17
  import { attachMemoryEvidence, finishKnowledgeSyncRun, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
18
18
  import { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig } from "./config-repository.js";
19
19
  import { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent } from "./activity-repository.js";
20
- export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, classifyStoredRow, closeXopcDatabase, createObjectLinkRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, finishKnowledgeSyncRun, getActivityEventRecord, getCompactionCheckpointDetail, getCurrentSessionId, getGlobalSessionStats, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listActivityRecords, listCompactionCheckpoints, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
20
+ import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
21
+ import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
22
+ import { getUserProfilePromptState, setUserProfilePromptState } from "./user-profile-setup-repository.js";
23
+ export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, captureCompactionCheckpoint, claimConnectorWebhookDelivery, classifyStoredRow, closeXopcDatabase, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCompactionCheckpointDetail, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isXopcDatabaseOpen, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionCheckpoints, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, loadCheckpointRows, loadLlmMessagesForSession, loadTranscriptRows, loadTranscriptRowsForSession, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, releaseConnectorWebhookDelivery, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveAgentIdFromMemoriesDir, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreCompactionCheckpoint, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateSessionConfig, updateSessionStats, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
@@ -0,0 +1,94 @@
1
+ CREATE TABLE IF NOT EXISTS connector_catalog_entries (
2
+ connector_id TEXT PRIMARY KEY,
3
+ provider TEXT NOT NULL,
4
+ definition_json TEXT NOT NULL,
5
+ fetched_at TEXT NOT NULL,
6
+ expires_at TEXT
7
+ );
8
+
9
+ CREATE INDEX IF NOT EXISTS idx_connector_catalog_provider
10
+ ON connector_catalog_entries(provider, fetched_at DESC);
11
+
12
+ CREATE TABLE IF NOT EXISTS connector_installations (
13
+ id TEXT PRIMARY KEY,
14
+ connector_id TEXT NOT NULL,
15
+ principal_id TEXT NOT NULL,
16
+ enabled INTEGER NOT NULL DEFAULT 1 CHECK (enabled IN (0, 1)),
17
+ allowed_agent_ids_json TEXT NOT NULL DEFAULT '[]',
18
+ max_scope TEXT NOT NULL DEFAULT 'read' CHECK (max_scope IN ('read', 'write', 'admin')),
19
+ confirmation_policy TEXT NOT NULL DEFAULT 'writes'
20
+ CHECK (confirmation_policy IN ('always', 'writes', 'admin', 'never')),
21
+ selected_connection_ids_json TEXT NOT NULL DEFAULT '[]',
22
+ created_at TEXT NOT NULL,
23
+ updated_at TEXT NOT NULL,
24
+ UNIQUE(connector_id, principal_id)
25
+ );
26
+
27
+ CREATE INDEX IF NOT EXISTS idx_connector_installations_principal
28
+ ON connector_installations(principal_id, enabled, connector_id);
29
+
30
+ CREATE TABLE IF NOT EXISTS connector_connections (
31
+ id TEXT PRIMARY KEY,
32
+ installation_id TEXT REFERENCES connector_installations(id) ON DELETE SET NULL,
33
+ connector_id TEXT NOT NULL,
34
+ provider TEXT NOT NULL,
35
+ principal_id TEXT NOT NULL,
36
+ provider_connection_id TEXT NOT NULL,
37
+ alias TEXT,
38
+ identity_json TEXT NOT NULL DEFAULT '{}',
39
+ status TEXT NOT NULL DEFAULT 'unknown'
40
+ CHECK (status IN ('pending', 'active', 'expired', 'failed', 'revoked', 'disabled', 'unknown')),
41
+ is_default INTEGER NOT NULL DEFAULT 0 CHECK (is_default IN (0, 1)),
42
+ connected_at TEXT,
43
+ expires_at TEXT,
44
+ last_error TEXT,
45
+ metadata_json TEXT NOT NULL DEFAULT '{}',
46
+ created_at TEXT NOT NULL,
47
+ updated_at TEXT NOT NULL,
48
+ UNIQUE(provider, provider_connection_id)
49
+ );
50
+
51
+ CREATE INDEX IF NOT EXISTS idx_connector_connections_principal
52
+ ON connector_connections(principal_id, connector_id, status);
53
+
54
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_connector_connections_default
55
+ ON connector_connections(principal_id, connector_id)
56
+ WHERE is_default = 1;
57
+
58
+ CREATE TABLE IF NOT EXISTS connector_action_metadata (
59
+ connector_id TEXT NOT NULL,
60
+ action_id TEXT NOT NULL,
61
+ toolkit TEXT,
62
+ scope TEXT NOT NULL DEFAULT 'write' CHECK (scope IN ('read', 'write', 'admin')),
63
+ curated INTEGER NOT NULL DEFAULT 0 CHECK (curated IN (0, 1)),
64
+ input_schema_json TEXT,
65
+ schema_version TEXT,
66
+ cached_at TEXT NOT NULL,
67
+ PRIMARY KEY(connector_id, action_id)
68
+ );
69
+
70
+ CREATE INDEX IF NOT EXISTS idx_connector_action_scope
71
+ ON connector_action_metadata(connector_id, scope, curated);
72
+
73
+ CREATE TABLE IF NOT EXISTS connector_execution_audit (
74
+ id TEXT PRIMARY KEY,
75
+ installation_id TEXT REFERENCES connector_installations(id) ON DELETE SET NULL,
76
+ connection_id TEXT REFERENCES connector_connections(id) ON DELETE SET NULL,
77
+ connector_id TEXT NOT NULL,
78
+ principal_id TEXT NOT NULL,
79
+ agent_id TEXT,
80
+ session_key TEXT,
81
+ action_id TEXT NOT NULL,
82
+ scope TEXT NOT NULL CHECK (scope IN ('read', 'write', 'admin')),
83
+ decision TEXT NOT NULL CHECK (decision IN ('allowed', 'denied', 'confirmation_required')),
84
+ result_status TEXT NOT NULL CHECK (result_status IN ('success', 'error', 'not_executed')),
85
+ duration_ms INTEGER,
86
+ error_code TEXT,
87
+ created_at TEXT NOT NULL
88
+ );
89
+
90
+ CREATE INDEX IF NOT EXISTS idx_connector_audit_principal_time
91
+ ON connector_execution_audit(principal_id, created_at DESC);
92
+
93
+ CREATE INDEX IF NOT EXISTS idx_connector_audit_connector_time
94
+ ON connector_execution_audit(connector_id, created_at DESC);
@@ -0,0 +1,24 @@
1
+ CREATE TABLE IF NOT EXISTS connector_approvals (
2
+ id TEXT PRIMARY KEY,
3
+ principal_id TEXT NOT NULL,
4
+ connector_id TEXT NOT NULL,
5
+ connection_id TEXT REFERENCES connector_connections(id) ON DELETE SET NULL,
6
+ agent_id TEXT,
7
+ session_key TEXT,
8
+ action_id TEXT NOT NULL,
9
+ scope TEXT NOT NULL CHECK (scope IN ('read', 'write', 'admin')),
10
+ arguments_hash TEXT NOT NULL,
11
+ arguments_preview_json TEXT NOT NULL DEFAULT '{}',
12
+ status TEXT NOT NULL DEFAULT 'pending'
13
+ CHECK (status IN ('pending', 'approved', 'denied', 'expired', 'consumed')),
14
+ expires_at TEXT NOT NULL,
15
+ created_at TEXT NOT NULL,
16
+ decided_at TEXT,
17
+ consumed_at TEXT
18
+ );
19
+
20
+ CREATE INDEX IF NOT EXISTS idx_connector_approvals_pending
21
+ ON connector_approvals(principal_id, status, expires_at, created_at DESC);
22
+
23
+ CREATE INDEX IF NOT EXISTS idx_connector_approvals_session
24
+ ON connector_approvals(session_key, status, created_at DESC);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE IF NOT EXISTS connector_webhook_deliveries (
2
+ id TEXT PRIMARY KEY,
3
+ provider TEXT NOT NULL,
4
+ payload_hash TEXT NOT NULL,
5
+ status TEXT NOT NULL DEFAULT 'processing'
6
+ CHECK (status IN ('pending', 'processing', 'processed')),
7
+ attempts INTEGER NOT NULL DEFAULT 1,
8
+ received_at TEXT NOT NULL,
9
+ processing_at TEXT,
10
+ processed_at TEXT,
11
+ last_error TEXT
12
+ );
13
+
14
+ CREATE INDEX IF NOT EXISTS idx_connector_webhook_deliveries_status
15
+ ON connector_webhook_deliveries(provider, status, received_at DESC);
@@ -0,0 +1,6 @@
1
+ CREATE TABLE IF NOT EXISTS user_trust_policies (
2
+ principal_id TEXT PRIMARY KEY,
3
+ default_action_level TEXT NOT NULL DEFAULT 'confirm'
4
+ CHECK (default_action_level IN ('observe', 'suggest', 'confirm')),
5
+ updated_at TEXT NOT NULL
6
+ );
@@ -0,0 +1,14 @@
1
+ CREATE TABLE user_trust_policies_next (
2
+ principal_id TEXT PRIMARY KEY,
3
+ default_action_level TEXT NOT NULL DEFAULT 'confirm'
4
+ CHECK (default_action_level IN ('observe', 'suggest', 'confirm', 'auto')),
5
+ updated_at TEXT NOT NULL
6
+ );
7
+
8
+ INSERT INTO user_trust_policies_next (principal_id, default_action_level, updated_at)
9
+ SELECT principal_id, default_action_level, updated_at
10
+ FROM user_trust_policies;
11
+
12
+ DROP TABLE user_trust_policies;
13
+
14
+ ALTER TABLE user_trust_policies_next RENAME TO user_trust_policies;