@xopcai/xopc 0.0.231 → 0.0.233

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 (400) hide show
  1. package/README.md +1 -0
  2. package/README.zh-CN.md +1 -0
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  5. package/dist/extensions/telegram/src/config-schema.d.ts +4 -4
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  8. package/dist/gateway/static/root/assets/{activity-store-M0nAY5XB.js → activity-store-DQ5L3PTi.js} +1 -1
  9. package/dist/gateway/static/root/assets/agent-avatar-dicebear-Bps8fvBp.js +1 -0
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-JrK80PvP.js +1 -0
  11. package/dist/gateway/static/root/assets/agents-CJYEnz94.js +1 -0
  12. package/dist/gateway/static/root/assets/api-DE6tZKG0.js +1 -0
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-DP7YVRPn.js → app-management-settings-panel-BryzDVod.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-CVQ5n7y6.js → appearance-settings-BoweLBDm.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-Bt8_sWtU.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-7_DXaMTP.js → archive-plugin-DyujzZNu.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-mmr_mHRr.js → attachment-load-DmXGUWve.js} +1 -1
  18. package/dist/gateway/static/root/assets/attachment-preview-renderer-BDTD8YUe.js +12 -0
  19. package/dist/gateway/static/root/assets/{automations-page-DfY-T6Ga.js → automations-page-DrTVSK7o.js} +1 -1
  20. package/dist/gateway/static/root/assets/automations-workspace-86UTesz3.js +6 -0
  21. package/dist/gateway/static/root/assets/{binary-plugins-CO9QMEh2.js → binary-plugins-mFyeC74W.js} +2 -2
  22. package/dist/gateway/static/root/assets/{block-editor-CE14CVOy.js → block-editor-D5yMFrgH.js} +4 -4
  23. package/dist/gateway/static/root/assets/browser-settings-page-DfMU7yXv.js +8 -0
  24. package/dist/gateway/static/root/assets/browser-workflow-inputs-B6rLBtua.js +1 -0
  25. package/dist/gateway/static/root/assets/{browser-workflows-page-1wgXyoSO.js → browser-workflows-page-C74sg50f.js} +2 -2
  26. package/dist/gateway/static/root/assets/capabilities-settings-panel-lsHRuBlX.js +7 -0
  27. package/dist/gateway/static/root/assets/channels-settings-CxR_clkO.js +1 -0
  28. package/dist/gateway/static/root/assets/{channel-recipient-api-C5ABr73b.js → channels-status-swr-DowVNjNw.js} +1 -1
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-CdRW6Euc.js → chat-terminal-dock-BO6_BgjE.js} +2 -2
  30. package/dist/gateway/static/root/assets/{code-editor-dFzqyDXS.js → code-editor-D4_k-6QN.js} +1 -1
  31. package/dist/gateway/static/root/assets/connectors-page-CpNLyKB4.js +2 -0
  32. package/dist/gateway/static/root/assets/cron-expression-CYMXfk4M.js +2 -0
  33. package/dist/gateway/static/root/assets/date-picker-DIM_OkQP.js +1 -0
  34. package/dist/gateway/static/root/assets/dependency-picker-Cp8I6rsL.js +1 -0
  35. package/dist/gateway/static/root/assets/{desktop-pet-settings-MmOR4A3u.js → desktop-pet-settings-NjPiz3M_.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-CMO-J3cG.js → desktop-pet-wzSzZ6S8.js} +1 -1
  37. package/dist/gateway/static/root/assets/dist-DqPZM2MH2.js +1 -0
  38. package/dist/gateway/static/root/assets/{extension-debug-page-DdH0dG2_.js → extension-debug-page-CoMl13ET.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-page-Clg-KktN.js → extension-page-CXc1Lc8x.js} +1 -1
  40. package/dist/gateway/static/root/assets/extension-settings-page-CfEWpgjl.js +1 -0
  41. package/dist/gateway/static/root/assets/{gateway-config-api-DEHnF4Wm.js → gateway-config-api-yH4KAEkK.js} +1 -1
  42. package/dist/gateway/static/root/assets/gateway-config-swr-YyZJKvFf.js +1 -0
  43. package/dist/gateway/static/root/assets/{gateway-settings-DKkEXXj9.js → gateway-settings-BmjJIiKh.js} +1 -1
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry-B_zrtccP.js → gateway-startup-retry-Dnrl91pU.js} +1 -1
  45. package/dist/gateway/static/root/assets/heartbeat-settings-DGq9q4b6.js +1 -0
  46. package/dist/gateway/static/root/assets/home-page-Dj4B1wb3.js +1 -0
  47. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +1 -0
  48. package/dist/gateway/static/root/assets/{image-generation-api-YKP2me5Z.js → image-generation-api-BNzAAw4Y.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-BGf-TiZj.js +70 -0
  50. package/dist/gateway/static/root/assets/index-BTUuTnc9.css +2 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BvpEeHnm.js → keyboard-shortcuts-settings-CfNV1ysF.js} +1 -1
  52. package/dist/gateway/static/root/assets/local-app-workbench-page-IJg75WaN.js +2 -0
  53. package/dist/gateway/static/root/assets/{local-apps-page-Bzvn99eH.js → local-apps-page-MPd4Fl_l.js} +1 -1
  54. package/dist/gateway/static/root/assets/locale-store-D_dq_0LV.js +1 -0
  55. package/dist/gateway/static/root/assets/logs-page-NsfoazgK.js +2 -0
  56. package/dist/gateway/static/root/assets/management-settings-DeIjN4e0.js +1 -0
  57. package/dist/gateway/static/root/assets/markdown-editor-nDLmA_LF.js +2 -0
  58. package/dist/gateway/static/root/assets/markdown-split-BUAVv6Gu.js +1 -0
  59. package/dist/gateway/static/root/assets/markdown-view-CPkBOY3h.js +201 -0
  60. package/dist/gateway/static/root/assets/{media-plugins-D8I7OGnT.js → media-plugins-DFsVnOY-.js} +1 -1
  61. package/dist/gateway/static/root/assets/messages-D4qOHT4D.js +3 -0
  62. package/dist/gateway/static/root/assets/mobile-device-api-D9JevyCE.js +1 -0
  63. package/dist/gateway/static/root/assets/models-hub-cache-C5y2gzMU.js +1 -0
  64. package/dist/gateway/static/root/assets/{notes-api-EpgG-OQc.js → notes-api-BWSfTP1w.js} +1 -1
  65. package/dist/gateway/static/root/assets/{notes-page-CCvjGMhN.js → notes-page-CV8UJj7g.js} +1 -1
  66. package/dist/gateway/static/root/assets/notes-workbench-DrjMVgEI.js +4 -0
  67. package/dist/gateway/static/root/assets/{oauth-api-BwNLwbI8.js → oauth-api-DnanEBsf.js} +1 -1
  68. package/dist/gateway/static/root/assets/popover-select-3E24E65N.js +1 -0
  69. package/dist/gateway/static/root/assets/{product-open-page-MmMswmOU.js → product-open-page-zNg1KOy2.js} +1 -1
  70. package/dist/gateway/static/root/assets/project-detail-page-tfcGYL-O.js +1 -0
  71. package/dist/gateway/static/root/assets/projects-page-BkjnXLdJ.js +1 -0
  72. package/dist/gateway/static/root/assets/{registry-api-BFZrVYfy.js → registry-api-BeVzfRvs.js} +1 -1
  73. package/dist/gateway/static/root/assets/remote-access-hub-BXn-3n2d.js +1 -0
  74. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Dx6o7sLu.js → runtime-tools-settings-panel-BxoioSvT.js} +2 -2
  75. package/dist/gateway/static/root/assets/{schema-form-Cdd9c4vt.js → schema-form-vzbmscrE.js} +1 -1
  76. package/dist/gateway/static/root/assets/sessions-page-MLNjrOkw.js +1 -0
  77. package/dist/gateway/static/root/assets/settings-advanced-gate-ByNLBY2q.js +1 -0
  78. package/dist/gateway/static/root/assets/{settings-form-section-D0YxMnhm.js → settings-form-section-x9k7MWD3.js} +1 -1
  79. package/dist/gateway/static/root/assets/settings-loading-skeleton-BLFOD9h9.js +1 -0
  80. package/dist/gateway/static/root/assets/settings-page-CwgTooar.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-shell-layer-context-DCp6ykjQ.js +1 -0
  82. package/dist/gateway/static/root/assets/setup-status-panel-bnueBZg8.js +1 -0
  83. package/dist/gateway/static/root/assets/{share-preview-page-DiqBn-oE.js → share-preview-page-COTrPAd-.js} +1 -1
  84. package/dist/gateway/static/root/assets/shares-settings-D-v_psqL.js +1 -0
  85. package/dist/gateway/static/root/assets/skill-reload-api-DJICr4wh.js +1 -0
  86. package/dist/gateway/static/root/assets/{skills-page-CZwhWiRl.js → skills-page-D9wM6_Jn.js} +1 -1
  87. package/dist/gateway/static/root/assets/{skills-page.utils-kBGr8opZ.js → skills-page.utils-PtlQLM5a.js} +1 -1
  88. package/dist/gateway/static/root/assets/{system-settings-panel-CPBs6lWi.js → system-settings-panel-BR74mNEK.js} +1 -1
  89. package/dist/gateway/static/root/assets/task-detail-page-B-rmeE8t.js +1 -0
  90. package/dist/gateway/static/root/assets/{theme-store-Qgvo0Ga7.js → theme-store-Bud54q9e.js} +1 -1
  91. package/dist/gateway/static/root/assets/{use-autosave-C4YcEiP9.js → use-autosave-DH47MH7s.js} +1 -1
  92. package/dist/gateway/static/root/assets/user-context-page-B6eyxxOT.js +1 -0
  93. package/dist/gateway/static/root/assets/{vendor-codemirror-DRr7hFaD.js → vendor-codemirror--gTq3YAI.js} +16 -16
  94. package/dist/gateway/static/root/assets/voice-api-key-field-B59GaqRa.js +1 -0
  95. package/dist/gateway/static/root/assets/voice-config-api-C0ahrZ0e.js +1 -0
  96. package/dist/gateway/static/root/assets/{work-discovery-overlay-CKIdPEen.js → work-discovery-overlay-DTn4RCcx.js} +1 -1
  97. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BK44Vm5W.js → workflow-run-setup-panel-yDFoEX06.js} +2 -2
  98. package/dist/gateway/static/root/assets/workflows-page-BOwSbfWm.js +5 -0
  99. package/dist/gateway/static/root/index.html +16 -16
  100. package/dist/package.js +1 -1
  101. package/dist/packages/endpoint-tools-protocol/src/index.js +162 -2
  102. package/dist/packages/gateway-contract/src/product-delivery.js +6 -2
  103. package/dist/packages/gateway-contract/src/turn-outcome.js +77 -1
  104. package/dist/src/agent/agent-manager.d.ts +1 -2
  105. package/dist/src/agent/agent-manager.js +29 -44
  106. package/dist/src/agent/background-review/run-background-review.js +10 -15
  107. package/dist/src/agent/capabilities/definitions.d.ts +1 -1
  108. package/dist/src/agent/capabilities/definitions.js +2 -1
  109. package/dist/src/agent/embedded/run-for-session.js +1 -1
  110. package/dist/src/agent/external-tools/endpoint-provider.js +5 -1
  111. package/dist/src/agent/external-tools/mcp-provider.js +3 -13
  112. package/dist/src/agent/image/generation/runtime.js +1 -1
  113. package/dist/src/agent/image/tool-model-config.js +13 -14
  114. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -9
  115. package/dist/src/agent/mcp/bundle-mcp-policy.js +1 -13
  116. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  117. package/dist/src/agent/mcp/index.js +2 -2
  118. package/dist/src/agent/media-generation/runtime-shared.d.ts +1 -1
  119. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  120. package/dist/src/agent/memory/create-memory-manager.js +1 -1
  121. package/dist/src/agent/memory/manager.d.ts +1 -1
  122. package/dist/src/{agent-runtime/memory-runtime.d.ts → agent/memory/runtime.d.ts} +1 -1
  123. package/dist/src/{agent-runtime/memory-runtime.js → agent/memory/runtime.js} +2 -3
  124. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +0 -3
  125. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -3
  126. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -2
  127. package/dist/src/agent/prompt/sections/tooling.js +5 -0
  128. package/dist/src/agent/service.js +0 -1
  129. package/dist/src/agent/starter-agents.js +1 -8
  130. package/dist/src/agent/tools/create-share-tool.js +2 -1
  131. package/dist/src/agent/tools/exec-command.js +2 -1
  132. package/dist/src/agent/tools/executor.d.ts +1 -1
  133. package/dist/src/agent/tools/factory.js +2 -0
  134. package/dist/src/agent/tools/index.d.ts +1 -0
  135. package/dist/src/agent/tools/index.js +2 -1
  136. package/dist/src/agent/tools/publish-artifacts.d.ts +2 -0
  137. package/dist/src/agent/tools/publish-artifacts.js +82 -0
  138. package/dist/src/agent/tools/send-media.js +2 -1
  139. package/dist/src/agent/tools/workflow-tool.js +1 -5
  140. package/dist/src/agent-config/index.d.ts +2 -0
  141. package/dist/src/agent-config/index.js +11 -0
  142. package/dist/src/agent-config/resolver.d.ts +11 -0
  143. package/dist/src/agent-config/resolver.js +113 -0
  144. package/dist/src/agent-config/schema.d.ts +491 -0
  145. package/dist/src/agent-config/schema.js +172 -0
  146. package/dist/src/chat-commands/builtins/config.js +2 -2
  147. package/dist/src/chat-commands/builtins/review.js +1 -1
  148. package/dist/src/chat-commands/config-paths.js +1 -1
  149. package/dist/src/cli/command-catalog.js +4 -0
  150. package/dist/src/cli/command-loaders.js +1 -0
  151. package/dist/src/cli/command-manifest.js +4 -0
  152. package/dist/src/cli/commands/agents.js +2 -1
  153. package/dist/src/cli/commands/auth.js +1 -1
  154. package/dist/src/cli/commands/config.js +1 -1
  155. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  156. package/dist/src/cli/commands/doctor/checks/provider-auth.js +12 -4
  157. package/dist/src/cli/commands/image.js +3 -4
  158. package/dist/src/cli/commands/models.js +9 -3
  159. package/dist/src/cli/commands/onboard/model.js +13 -12
  160. package/dist/src/cli/commands/onboard.js +1 -1
  161. package/dist/src/cli/commands/providers.js +1 -1
  162. package/dist/src/cli/commands/support.d.ts +1 -0
  163. package/dist/src/cli/commands/support.js +51 -0
  164. package/dist/src/cli/commands/tunnel.js +3 -18
  165. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -1
  166. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  167. package/dist/src/commands/agents.config.d.ts +1 -3
  168. package/dist/src/commands/agents.config.js +9 -26
  169. package/dist/src/config/agent-model-intents.d.ts +10 -0
  170. package/dist/src/config/agent-model-intents.js +39 -0
  171. package/dist/src/config/agent-profile.d.ts +7 -9
  172. package/dist/src/config/agent-profile.js +30 -28
  173. package/dist/src/config/default-model.d.ts +1 -11
  174. package/dist/src/config/default-model.js +3 -11
  175. package/dist/src/config/index.js +3 -3
  176. package/dist/src/config/integration.d.ts +1 -1
  177. package/dist/src/config/reload.js +1 -1
  178. package/dist/src/config/rules.js +3 -3
  179. package/dist/src/config/schema.d.ts +187 -452
  180. package/dist/src/config/schema.js +53 -131
  181. package/dist/src/endpoint-tools/binding-service.d.ts +22 -0
  182. package/dist/src/endpoint-tools/binding-service.js +45 -0
  183. package/dist/src/endpoint-tools/index.d.ts +1 -0
  184. package/dist/src/endpoint-tools/index.js +2 -1
  185. package/dist/src/endpoint-tools/invocation-service.d.ts +1 -0
  186. package/dist/src/endpoint-tools/invocation-service.js +8 -0
  187. package/dist/src/endpoint-tools/policy.d.ts +4 -1
  188. package/dist/src/endpoint-tools/policy.js +68 -5
  189. package/dist/src/endpoint-tools/registry.js +1 -1
  190. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  191. package/dist/src/endpoint-tools/runtime.js +8 -0
  192. package/dist/src/extensions/activation-context.js +7 -11
  193. package/dist/src/files/file-service.js +14 -5
  194. package/dist/src/gateway/agent-builtin-tools.d.ts +250 -6
  195. package/dist/src/gateway/agent-builtin-tools.js +284 -46
  196. package/dist/src/gateway/agents-admin.d.ts +20 -62
  197. package/dist/src/gateway/agents-admin.js +36 -228
  198. package/dist/src/gateway/chat-stream/turn-outcome-collector.js +41 -6
  199. package/dist/src/gateway/device-routes.d.ts +3 -0
  200. package/dist/src/gateway/device-routes.js +47 -0
  201. package/dist/src/gateway/global-defaults-admin.d.ts +6 -20
  202. package/dist/src/gateway/global-defaults-admin.js +20 -120
  203. package/dist/src/gateway/heartbeat/service.js +1 -1
  204. package/dist/src/gateway/hono/app.js +4 -2
  205. package/dist/src/gateway/hono/lib/config-payload.d.ts +54 -137
  206. package/dist/src/gateway/hono/lib/config-payload.js +2 -4
  207. package/dist/src/gateway/hono/middleware/auth.js +36 -3
  208. package/dist/src/gateway/hono/middleware/scopes.d.ts +2 -12
  209. package/dist/src/gateway/hono/middleware/scopes.js +9 -18
  210. package/dist/src/gateway/hono/routes/agents.js +64 -100
  211. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  212. package/dist/src/gateway/hono/routes/device-push.d.ts +2 -0
  213. package/dist/src/gateway/hono/routes/{mobile.js → device-push.js} +40 -18
  214. package/dist/src/gateway/hono/routes/devices.d.ts +4 -0
  215. package/dist/src/gateway/hono/routes/devices.js +214 -0
  216. package/dist/src/gateway/hono/routes/endpoint-tools.js +68 -1
  217. package/dist/src/gateway/hono/routes/files.js +12 -1
  218. package/dist/src/gateway/hono/routes/global-defaults.js +5 -9
  219. package/dist/src/gateway/hono/routes/index.js +4 -2
  220. package/dist/src/gateway/hono/routes/lazy-bundles.js +12 -20
  221. package/dist/src/gateway/hono/routes/media.js +46 -2
  222. package/dist/src/gateway/hono/routes/models.js +2 -2
  223. package/dist/src/gateway/hono/routes/realtime.js +8 -1
  224. package/dist/src/gateway/hono/routes/status.js +9 -16
  225. package/dist/src/gateway/hono/routes/support.d.ts +3 -0
  226. package/dist/src/gateway/hono/routes/support.js +28 -0
  227. package/dist/src/gateway/hono/routes/tunnel.d.ts +0 -2
  228. package/dist/src/gateway/hono/routes/tunnel.js +10 -199
  229. package/dist/src/gateway/hono/routes/you.js +24 -0
  230. package/dist/src/gateway/image-generation-setup.d.ts +2 -2
  231. package/dist/src/gateway/image-generation-setup.js +8 -7
  232. package/dist/src/gateway/public-url.d.ts +1 -1
  233. package/dist/src/gateway/security/gateway-principal.d.ts +11 -0
  234. package/dist/src/gateway/security/gateway-principal.js +12 -0
  235. package/dist/src/gateway/security/gateway-scopes.d.ts +7 -0
  236. package/dist/src/gateway/security/gateway-scopes.js +66 -0
  237. package/dist/src/gateway/security/index.d.ts +2 -1
  238. package/dist/src/gateway/security/index.js +3 -2
  239. package/dist/src/gateway/service.js +7 -7
  240. package/dist/src/gateway/xopc-cloud-capability-setup.js +19 -21
  241. package/dist/src/heartbeat/index.js +1 -1
  242. package/dist/src/media/store.js +9 -0
  243. package/dist/src/migrations/index.d.ts +0 -1
  244. package/dist/src/migrations/index.js +1 -2
  245. package/dist/src/migrations/runner.js +1 -2
  246. package/dist/src/notifications/device-store.d.ts +1 -1
  247. package/dist/src/notifications/device-store.js +11 -11
  248. package/dist/src/notifications/store.js +3 -3
  249. package/dist/src/providers/index.js +1 -1
  250. package/dist/src/providers/model-reference-auditor.js +14 -9
  251. package/dist/src/realtime/runtime.d.ts +2 -0
  252. package/dist/src/realtime/runtime.js +27 -3
  253. package/dist/src/realtime/tickets.d.ts +6 -1
  254. package/dist/src/realtime/tickets.js +2 -1
  255. package/dist/src/remote-access/exposure-manager.js +3 -3
  256. package/dist/src/share/share-url.js +2 -2
  257. package/dist/src/storage/sqlite/device-access-repository.d.ts +54 -0
  258. package/dist/src/storage/sqlite/device-access-repository.js +194 -0
  259. package/dist/src/storage/sqlite/device-pairing-repository.d.ts +22 -0
  260. package/dist/src/storage/sqlite/device-pairing-repository.js +86 -0
  261. package/dist/src/storage/sqlite/endpoint-session-binding-repository.d.ts +8 -0
  262. package/dist/src/storage/sqlite/endpoint-session-binding-repository.js +32 -0
  263. package/dist/src/storage/sqlite/gateway-identity-repository.d.ts +10 -0
  264. package/dist/src/storage/sqlite/gateway-identity-repository.js +50 -0
  265. package/dist/src/storage/sqlite/index.d.ts +4 -0
  266. package/dist/src/storage/sqlite/index.js +5 -1
  267. package/dist/src/storage/sqlite/migrations/138_device_access.sql +96 -0
  268. package/dist/src/storage/sqlite/migrations/139_turn_outcome_artifact_backfill.sql +231 -0
  269. package/dist/src/storage/sqlite/migrations/140_endpoint_session_bindings.sql +8 -0
  270. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  271. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  272. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  273. package/dist/src/storage/sqlite/schema.js +1 -1
  274. package/dist/src/support/build-support-investigation-prompt.d.ts +2 -0
  275. package/dist/src/support/build-support-investigation-prompt.js +29 -0
  276. package/dist/src/support/collect-support-report.d.ts +16 -0
  277. package/dist/src/support/collect-support-report.js +216 -0
  278. package/dist/src/support/redact-support-report.d.ts +16 -0
  279. package/dist/src/support/redact-support-report.js +89 -0
  280. package/dist/src/support/types.d.ts +76 -0
  281. package/dist/src/support/types.js +18 -0
  282. package/dist/src/tunnel/consent.d.ts +1 -1
  283. package/dist/src/tunnel/consent.js +1 -1
  284. package/dist/src/tunnel/gateway-lifecycle.js +1 -1
  285. package/dist/src/tunnel/index.d.ts +1 -4
  286. package/dist/src/tunnel/index.js +3 -5
  287. package/dist/src/tunnel/tunnel-audit.d.ts +1 -1
  288. package/dist/src/tunnel/tunnel-config.js +1 -1
  289. package/dist/src/tunnel/tunnel-service.d.ts +2 -3
  290. package/dist/src/tunnel/tunnel-service.js +1 -20
  291. package/dist/src/tunnel/tunnel-types.d.ts +0 -6
  292. package/dist/src/user-context/user-avatar.d.ts +17 -0
  293. package/dist/src/user-context/user-avatar.js +116 -0
  294. package/dist/src/workflows/draft/workflow-draft-service.js +2 -2
  295. package/dist/src/workflows/service/workflow-run-service.js +3 -3
  296. package/package.json +4 -4
  297. package/dist/gateway/static/root/assets/agent-avatar-dicebear-CBqUnlvL.js +0 -1
  298. package/dist/gateway/static/root/assets/agents-7YO6znTT.js +0 -68
  299. package/dist/gateway/static/root/assets/api-BywYxpaS.js +0 -1
  300. package/dist/gateway/static/root/assets/apps-page-DSCia0DT.js +0 -1
  301. package/dist/gateway/static/root/assets/attachment-preview-renderer-Cmo-5BP5.js +0 -11
  302. package/dist/gateway/static/root/assets/automations-workspace-BpvD54D6.js +0 -6
  303. package/dist/gateway/static/root/assets/browser-settings-page-CeESA4Oj.js +0 -8
  304. package/dist/gateway/static/root/assets/browser-workflow-inputs-8NC2qDRF.js +0 -1
  305. package/dist/gateway/static/root/assets/capabilities-settings-panel-B_OXTojB.js +0 -7
  306. package/dist/gateway/static/root/assets/capability-presets-api-o0y9WgAI.js +0 -1
  307. package/dist/gateway/static/root/assets/capability-presets-settings-panel-D5nZecxV.js +0 -3
  308. package/dist/gateway/static/root/assets/channels-settings-BzmnWx6X.js +0 -1
  309. package/dist/gateway/static/root/assets/channels-status-swr-38FsOnR0.js +0 -1
  310. package/dist/gateway/static/root/assets/connectors-page-DX6OkwFQ.js +0 -2
  311. package/dist/gateway/static/root/assets/cron-expression-DYSMZsms.js +0 -2
  312. package/dist/gateway/static/root/assets/date-picker-DGCfX4tK.js +0 -1
  313. package/dist/gateway/static/root/assets/dependency-picker-DHDa4ht1.js +0 -1
  314. package/dist/gateway/static/root/assets/directory-picker-path-field-B9qoxDcn.js +0 -1
  315. package/dist/gateway/static/root/assets/dist-J_ySZvz0.js +0 -1
  316. package/dist/gateway/static/root/assets/extension-settings-page-eP3fJ2M6.js +0 -1
  317. package/dist/gateway/static/root/assets/file-code-corner-byQA1VfD.js +0 -1
  318. package/dist/gateway/static/root/assets/gateway-config-swr-BWGjnmDl.js +0 -1
  319. package/dist/gateway/static/root/assets/heartbeat-settings-DlBPNubY.js +0 -1
  320. package/dist/gateway/static/root/assets/home-page-BnOrLRfs.js +0 -1
  321. package/dist/gateway/static/root/assets/html-workspace-editor-bXK5tq64.js +0 -1
  322. package/dist/gateway/static/root/assets/index-0xQO5B_Q.js +0 -70
  323. package/dist/gateway/static/root/assets/index-CCyIdGuQ.css +0 -2
  324. package/dist/gateway/static/root/assets/local-app-workbench-page-Ch1rdUo8.js +0 -2
  325. package/dist/gateway/static/root/assets/locale-store-CXhjfe4q.js +0 -1
  326. package/dist/gateway/static/root/assets/logs-page-zxx2ExlY.js +0 -2
  327. package/dist/gateway/static/root/assets/management-settings-BQaeyOYm.js +0 -1
  328. package/dist/gateway/static/root/assets/markdown-editor-TWGaF7Xa.js +0 -2
  329. package/dist/gateway/static/root/assets/markdown-split-D9tmIiEm.js +0 -1
  330. package/dist/gateway/static/root/assets/markdown-view-RxNHwlNo.js +0 -201
  331. package/dist/gateway/static/root/assets/messages-BMdD0LWk.js +0 -3
  332. package/dist/gateway/static/root/assets/models-hub-cache-0RjEwafI.js +0 -1
  333. package/dist/gateway/static/root/assets/notes-workbench-9cgh77VH.js +0 -4
  334. package/dist/gateway/static/root/assets/popover-select-CccGri5Y.js +0 -1
  335. package/dist/gateway/static/root/assets/project-detail-page-hf6pmH4p.js +0 -1
  336. package/dist/gateway/static/root/assets/projects-page-By2U-Wdh.js +0 -1
  337. package/dist/gateway/static/root/assets/remote-access-hub-CUcpp7CQ.js +0 -1
  338. package/dist/gateway/static/root/assets/sessions-page-ByI82xS1.js +0 -1
  339. package/dist/gateway/static/root/assets/settings-advanced-gate-BCoI5IJ8.js +0 -1
  340. package/dist/gateway/static/root/assets/settings-loading-skeleton-y53gEKsF.js +0 -1
  341. package/dist/gateway/static/root/assets/settings-page-BoE_tToG.js +0 -1
  342. package/dist/gateway/static/root/assets/setup-status-panel-BQmyb5KC.js +0 -1
  343. package/dist/gateway/static/root/assets/shares-settings-Bf3VpZ-R.js +0 -1
  344. package/dist/gateway/static/root/assets/skill-reload-api-CXHlbuGS.js +0 -1
  345. package/dist/gateway/static/root/assets/task-detail-page-Bo0KSZ2v.js +0 -1
  346. package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +0 -1
  347. package/dist/gateway/static/root/assets/user-context-page-Cnj7gMX2.js +0 -1
  348. package/dist/gateway/static/root/assets/voice-api-key-field-BML8zCwZ.js +0 -1
  349. package/dist/gateway/static/root/assets/workflows-page-CB98MTwG.js +0 -5
  350. package/dist/src/agent-manifest/index.d.ts +0 -5
  351. package/dist/src/agent-manifest/index.js +0 -10
  352. package/dist/src/agent-manifest/preset-chain.d.ts +0 -10
  353. package/dist/src/agent-manifest/preset-chain.js +0 -30
  354. package/dist/src/agent-manifest/prompt.d.ts +0 -2
  355. package/dist/src/agent-manifest/prompt.js +0 -49
  356. package/dist/src/agent-manifest/resolver.d.ts +0 -32
  357. package/dist/src/agent-manifest/resolver.js +0 -114
  358. package/dist/src/agent-manifest/schema.d.ts +0 -695
  359. package/dist/src/agent-manifest/schema.js +0 -226
  360. package/dist/src/agent-manifest/validator.d.ts +0 -25
  361. package/dist/src/agent-manifest/validator.js +0 -74
  362. package/dist/src/agent-runtime/boundary-guard.d.ts +0 -12
  363. package/dist/src/agent-runtime/boundary-guard.js +0 -21
  364. package/dist/src/agent-runtime/index.d.ts +0 -7
  365. package/dist/src/agent-runtime/index.js +0 -8
  366. package/dist/src/agent-runtime/model-router.d.ts +0 -11
  367. package/dist/src/agent-runtime/model-router.js +0 -14
  368. package/dist/src/agent-runtime/run-trace.d.ts +0 -27
  369. package/dist/src/agent-runtime/run-trace.js +0 -51
  370. package/dist/src/agent-runtime/runtime-profile.d.ts +0 -26
  371. package/dist/src/agent-runtime/runtime-profile.js +0 -42
  372. package/dist/src/agent-runtime/tool-registry.d.ts +0 -28
  373. package/dist/src/agent-runtime/tool-registry.js +0 -50
  374. package/dist/src/agent-runtime/workflow-runtime.d.ts +0 -31
  375. package/dist/src/agent-runtime/workflow-runtime.js +0 -32
  376. package/dist/src/config/agent-typed-models.d.ts +0 -13
  377. package/dist/src/config/agent-typed-models.js +0 -48
  378. package/dist/src/gateway/capability-presets-admin.d.ts +0 -88
  379. package/dist/src/gateway/capability-presets-admin.js +0 -303
  380. package/dist/src/gateway/hono/lib/agent-model.d.ts +0 -35
  381. package/dist/src/gateway/hono/lib/agent-model.js +0 -97
  382. package/dist/src/gateway/hono/routes/capability-presets.d.ts +0 -3
  383. package/dist/src/gateway/hono/routes/capability-presets.js +0 -187
  384. package/dist/src/gateway/hono/routes/mobile.d.ts +0 -3
  385. package/dist/src/gateway/security/operator-scopes.d.ts +0 -37
  386. package/dist/src/gateway/security/operator-scopes.js +0 -147
  387. package/dist/src/migrations/config/default-capability-preset.d.ts +0 -10
  388. package/dist/src/migrations/config/default-capability-preset.js +0 -133
  389. package/dist/src/tunnel/enable-lan-pairing.d.ts +0 -8
  390. package/dist/src/tunnel/enable-lan-pairing.js +0 -41
  391. package/dist/src/tunnel/pair-context.d.ts +0 -36
  392. package/dist/src/tunnel/pair-context.js +0 -77
  393. package/dist/src/tunnel/pair-url.d.ts +0 -43
  394. package/dist/src/tunnel/pair-url.js +0 -117
  395. package/dist/src/tunnel/pairing-rate-limit.d.ts +0 -12
  396. package/dist/src/tunnel/pairing-rate-limit.js +0 -28
  397. package/dist/src/tunnel/pairing.d.ts +0 -21
  398. package/dist/src/tunnel/pairing.js +0 -103
  399. package/dist/src/tunnel/tunnel-qr.d.ts +0 -9
  400. package/dist/src/tunnel/tunnel-qr.js +0 -29
@@ -1,7 +1,12 @@
1
1
  import type { RealtimeClientKind } from '@xopcai/realtime-protocol';
2
+ import type { GatewayScope } from '../gateway/security/gateway-scopes.js';
2
3
  export interface RealtimeTicketClaim {
3
4
  clientId: string;
4
5
  clientKind: RealtimeClientKind;
6
+ principalId: string;
7
+ deviceId?: string;
8
+ accessSessionId?: string;
9
+ scopes: readonly GatewayScope[];
5
10
  expiresAt: number;
6
11
  }
7
12
  export interface IssuedRealtimeTicket extends RealtimeTicketClaim {
@@ -9,7 +14,7 @@ export interface IssuedRealtimeTicket extends RealtimeTicketClaim {
9
14
  }
10
15
  export declare class RealtimeTicketStore {
11
16
  private readonly claims;
12
- issue(clientId: string, clientKind: RealtimeClientKind, now?: number): IssuedRealtimeTicket;
17
+ issue(clientId: string, clientKind: RealtimeClientKind, principal: Omit<RealtimeTicketClaim, 'clientId' | 'clientKind' | 'expiresAt'>, now?: number): IssuedRealtimeTicket;
13
18
  consume(ticket: string, clientId: string, clientKind: RealtimeClientKind, now?: number): RealtimeTicketClaim | undefined;
14
19
  private prune;
15
20
  }
@@ -7,13 +7,14 @@ function ticketKey(ticket) {
7
7
  }
8
8
  var RealtimeTicketStore = class {
9
9
  claims = /* @__PURE__ */ new Map();
10
- issue(clientId, clientKind, now = Date.now()) {
10
+ issue(clientId, clientKind, principal, now = Date.now()) {
11
11
  this.prune(now);
12
12
  if (this.claims.size >= MAX_OUTSTANDING_TICKETS) throw new Error("Too many outstanding realtime tickets");
13
13
  const ticket = crypto.randomBytes(32).toString("base64url");
14
14
  const claim = {
15
15
  clientId,
16
16
  clientKind,
17
+ ...principal,
17
18
  expiresAt: now + TICKET_TTL_MS
18
19
  };
19
20
  this.claims.set(ticketKey(ticket), claim);
@@ -2,11 +2,11 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { isTailscaleInstalled } from "../infra/tailscale.js";
4
4
  import { resolveGatewayBindMode } from "../config/gateway-bind.js";
5
- import { getTunnelConsentState } from "../tunnel/consent.js";
6
- import { getTunnelService } from "../tunnel/tunnel-service.js";
7
- import { maybeAutoStartTunnelFromConfig } from "../tunnel/gateway-lifecycle.js";
8
5
  import { collectExposureConflicts } from "./exposure-guards.js";
9
6
  import { getTailscaleExposureState, maybeStartTailscaleFromConfig, stopTailscaleExposure } from "../gateway/tailscale-lifecycle.js";
7
+ import { getTunnelService } from "../tunnel/tunnel-service.js";
8
+ import { getTunnelConsentState } from "../tunnel/consent.js";
9
+ import { maybeAutoStartTunnelFromConfig } from "../tunnel/gateway-lifecycle.js";
10
10
  //#region src/remote-access/exposure-manager.ts
11
11
  init_logger();
12
12
  const log = createLogger("ExposureManager");
@@ -1,5 +1,5 @@
1
+ import { enumerateLanGatewayCandidates } from "../gateway/host.js";
1
2
  import { loadTunnelState } from "../tunnel/tunnel-state.js";
2
- import { resolveLanGatewayUrl } from "../tunnel/tunnel-qr.js";
3
3
  //#region src/share/share-url.ts
4
4
  function resolveShareUrl(token, ctx) {
5
5
  const tunnelState = loadTunnelState();
@@ -32,7 +32,7 @@ function resolveShareUrl(token, ctx) {
32
32
  };
33
33
  }
34
34
  function buildLanUrl(host, port, path) {
35
- const lanBase = resolveLanGatewayUrl(host, port);
35
+ const lanBase = isLoopbackHost(host) ? null : enumerateLanGatewayCandidates(port).find((candidate) => candidate.address === host)?.url ?? `http://${host.includes(":") ? `[${host}]` : host}:${port}`;
36
36
  if (!lanBase) return null;
37
37
  return `${lanBase.replace(/\/+$/, "")}${path}`;
38
38
  }
@@ -0,0 +1,54 @@
1
+ import crypto from 'node:crypto';
2
+ import type { GatewayScope } from '../../gateway/security/gateway-scopes.js';
3
+ export type DevicePlatform = 'ios' | 'android';
4
+ export type DevicePublicKeyJwk = crypto.webcrypto.JsonWebKey;
5
+ export type DeviceRecord = {
6
+ id: string;
7
+ displayName: string;
8
+ platform: DevicePlatform;
9
+ publicKeyJwk: DevicePublicKeyJwk;
10
+ scopes: GatewayScope[];
11
+ createdAt: number;
12
+ lastSeenAt?: number;
13
+ revokedAt?: number;
14
+ };
15
+ export type DeviceAccessIdentity = {
16
+ deviceId: string;
17
+ accessSessionId: string;
18
+ scopes: GatewayScope[];
19
+ };
20
+ export type DeviceTokenPair = {
21
+ accessToken: string;
22
+ accessTokenExpiresAt: number;
23
+ refreshToken: string;
24
+ refreshTokenExpiresAt: number;
25
+ };
26
+ export declare function createDevice(input: {
27
+ id?: string;
28
+ displayName: string;
29
+ platform: DevicePlatform;
30
+ publicKeyJwk: DevicePublicKeyJwk;
31
+ scopes: readonly GatewayScope[];
32
+ now?: number;
33
+ }): DeviceRecord;
34
+ export declare function getDevice(deviceId: string): DeviceRecord | undefined;
35
+ export declare function listDevices(): DeviceRecord[];
36
+ export declare function issueDeviceTokenPair(deviceId: string, now?: number): DeviceTokenPair;
37
+ export declare function authenticateDeviceAccessToken(token: string, now?: number): DeviceAccessIdentity | undefined;
38
+ export declare function buildRefreshProofMessage(input: {
39
+ credentialId: string;
40
+ timestamp: number;
41
+ nonce: string;
42
+ requestId: string;
43
+ nextRefreshToken: string;
44
+ }): string;
45
+ export declare function rotateDeviceRefreshToken(input: {
46
+ refreshToken: string;
47
+ timestamp: number;
48
+ nonce: string;
49
+ requestId: string;
50
+ nextRefreshToken: string;
51
+ signature: string;
52
+ now?: number;
53
+ }): DeviceTokenPair;
54
+ export declare function revokeDevice(deviceId: string, now?: number): boolean;
@@ -0,0 +1,194 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import { parseGatewayScopes } from "../../gateway/security/gateway-scopes.js";
3
+ import crypto from "node:crypto";
4
+ //#region src/storage/sqlite/device-access-repository.ts
5
+ const ACCESS_TOKEN_TTL_MS = 900 * 1e3;
6
+ const REFRESH_TOKEN_TTL_MS = 2160 * 60 * 60 * 1e3;
7
+ const REFRESH_PROOF_MAX_AGE_MS = 300 * 1e3;
8
+ const ACCESS_TOKEN_PREFIX = "xopc_at_";
9
+ const REFRESH_TOKEN_PREFIX = "xopc_rt_";
10
+ function tokenHash(token) {
11
+ return crypto.createHash("sha256").update(token).digest("hex");
12
+ }
13
+ function buildToken(prefix, id) {
14
+ return `${prefix}${id}_${crypto.randomBytes(32).toString("base64url")}`;
15
+ }
16
+ function parseToken(token, prefix) {
17
+ if (!token.startsWith(prefix)) return void 0;
18
+ const separator = token.indexOf("_", prefix.length);
19
+ if (separator <= prefix.length || separator === token.length - 1) return void 0;
20
+ return { id: token.slice(prefix.length, separator) };
21
+ }
22
+ function deviceFromRow(row) {
23
+ return {
24
+ id: row.device_id,
25
+ displayName: row.display_name,
26
+ platform: row.platform,
27
+ publicKeyJwk: JSON.parse(row.public_key_jwk),
28
+ scopes: parseGatewayScopes(row.scopes_json),
29
+ createdAt: row.created_at,
30
+ ...row.last_seen_at === null ? {} : { lastSeenAt: row.last_seen_at },
31
+ ...row.revoked_at === null ? {} : { revokedAt: row.revoked_at }
32
+ };
33
+ }
34
+ function createDevice(input) {
35
+ const id = input.id ?? crypto.randomUUID();
36
+ const createdAt = input.now ?? Date.now();
37
+ getSqliteDatabase().prepare(`
38
+ INSERT INTO devices (
39
+ device_id, display_name, platform, public_key_jwk, scopes_json, created_at
40
+ ) VALUES (?, ?, ?, ?, ?, ?)
41
+ `).run(id, input.displayName, input.platform, JSON.stringify(input.publicKeyJwk), JSON.stringify([...new Set(input.scopes)]), createdAt);
42
+ return getDevice(id);
43
+ }
44
+ function getDevice(deviceId) {
45
+ const row = getSqliteDatabase().prepare("SELECT * FROM devices WHERE device_id = ?").get(deviceId);
46
+ return row ? deviceFromRow(row) : void 0;
47
+ }
48
+ function listDevices() {
49
+ return getSqliteDatabase().prepare("SELECT * FROM devices ORDER BY created_at DESC").all().map(deviceFromRow);
50
+ }
51
+ function issueAccessToken(deviceId, now) {
52
+ const accessSessionId = crypto.randomUUID();
53
+ const accessToken = buildToken(ACCESS_TOKEN_PREFIX, accessSessionId);
54
+ const accessTokenExpiresAt = now + ACCESS_TOKEN_TTL_MS;
55
+ getSqliteDatabase().prepare(`
56
+ INSERT INTO device_access_sessions (
57
+ session_id, device_id, token_hash, expires_at, created_at
58
+ ) VALUES (?, ?, ?, ?, ?)
59
+ `).run(accessSessionId, deviceId, tokenHash(accessToken), accessTokenExpiresAt, now);
60
+ return {
61
+ accessToken,
62
+ accessTokenExpiresAt
63
+ };
64
+ }
65
+ function issueDeviceTokenPair(deviceId, now = Date.now()) {
66
+ const device = getDevice(deviceId);
67
+ if (!device || device.revokedAt !== void 0) throw new Error("Device is unavailable");
68
+ const refreshCredentialId = crypto.randomUUID();
69
+ const refreshToken = buildToken(REFRESH_TOKEN_PREFIX, refreshCredentialId);
70
+ const refreshTokenExpiresAt = now + REFRESH_TOKEN_TTL_MS;
71
+ return {
72
+ ...runSqliteWriteTransaction((db) => {
73
+ const issuedAccess = issueAccessToken(deviceId, now);
74
+ db.prepare(`
75
+ INSERT INTO device_refresh_credentials (
76
+ credential_id, device_id, token_hash, expires_at, created_at
77
+ ) VALUES (?, ?, ?, ?, ?)
78
+ `).run(refreshCredentialId, deviceId, tokenHash(refreshToken), refreshTokenExpiresAt, now);
79
+ return issuedAccess;
80
+ }),
81
+ refreshToken,
82
+ refreshTokenExpiresAt
83
+ };
84
+ }
85
+ function authenticateDeviceAccessToken(token, now = Date.now()) {
86
+ const parsed = parseToken(token, ACCESS_TOKEN_PREFIX);
87
+ if (!parsed) return void 0;
88
+ const row = getSqliteDatabase().prepare(`
89
+ SELECT a.session_id, a.device_id, a.token_hash, a.expires_at, a.revoked_at,
90
+ d.scopes_json, d.revoked_at AS device_revoked_at
91
+ FROM device_access_sessions a
92
+ JOIN devices d ON d.device_id = a.device_id
93
+ WHERE a.session_id = ?
94
+ `).get(parsed.id);
95
+ if (!row || row.expires_at <= now || row.revoked_at !== null || row.device_revoked_at !== null || !crypto.timingSafeEqual(Buffer.from(row.token_hash, "hex"), Buffer.from(tokenHash(token), "hex"))) return;
96
+ getSqliteDatabase().prepare("UPDATE devices SET last_seen_at = ? WHERE device_id = ?").run(now, row.device_id);
97
+ return {
98
+ deviceId: row.device_id,
99
+ accessSessionId: row.session_id,
100
+ scopes: parseGatewayScopes(row.scopes_json)
101
+ };
102
+ }
103
+ function buildRefreshProofMessage(input) {
104
+ return `xopc-device-refresh-v2\n${input.credentialId}\n${input.timestamp}\n${input.nonce}\n${input.requestId}\n${input.nextRefreshToken}`;
105
+ }
106
+ function verifyRefreshProof(publicKeyJwk, message, signature) {
107
+ try {
108
+ const publicKey = crypto.createPublicKey({
109
+ key: publicKeyJwk,
110
+ format: "jwk"
111
+ });
112
+ return crypto.verify("sha256", Buffer.from(message), {
113
+ key: publicKey,
114
+ dsaEncoding: "ieee-p1363"
115
+ }, Buffer.from(signature, "base64url"));
116
+ } catch {
117
+ return false;
118
+ }
119
+ }
120
+ function rotateDeviceRefreshToken(input) {
121
+ const now = input.now ?? Date.now();
122
+ const parsed = parseToken(input.refreshToken, REFRESH_TOKEN_PREFIX);
123
+ const nextParsed = parseToken(input.nextRefreshToken, REFRESH_TOKEN_PREFIX);
124
+ if (!parsed || !nextParsed || parsed.id === nextParsed.id) throw new Error("Invalid refresh credential");
125
+ if (Math.abs(now - input.timestamp) > REFRESH_PROOF_MAX_AGE_MS) throw new Error("Refresh proof expired");
126
+ const result = runSqliteWriteTransaction((db) => {
127
+ const credential = db.prepare(`
128
+ SELECT credential_id, device_id, token_hash, expires_at, replaced_by,
129
+ rotation_request_id, revoked_at
130
+ FROM device_refresh_credentials WHERE credential_id = ?
131
+ `).get(parsed.id);
132
+ const suppliedHash = tokenHash(input.refreshToken);
133
+ if (!credential || credential.token_hash !== suppliedHash) throw new Error("Invalid refresh credential");
134
+ const deviceRow = db.prepare("SELECT * FROM devices WHERE device_id = ?").get(credential.device_id);
135
+ if (!deviceRow || deviceRow.revoked_at !== null) throw new Error("Device is unavailable");
136
+ const message = buildRefreshProofMessage({
137
+ credentialId: credential.credential_id,
138
+ timestamp: input.timestamp,
139
+ nonce: input.nonce,
140
+ requestId: input.requestId,
141
+ nextRefreshToken: input.nextRefreshToken
142
+ });
143
+ if (!verifyRefreshProof(JSON.parse(deviceRow.public_key_jwk), message, input.signature)) throw new Error("Invalid refresh proof");
144
+ if (credential.replaced_by === nextParsed.id && credential.rotation_request_id === input.requestId) {
145
+ const nextCredential = db.prepare(`
146
+ SELECT credential_id, device_id, token_hash, expires_at, replaced_by,
147
+ rotation_request_id, revoked_at
148
+ FROM device_refresh_credentials WHERE credential_id = ?
149
+ `).get(nextParsed.id);
150
+ if (nextCredential?.token_hash === tokenHash(input.nextRefreshToken)) return {
151
+ ...issueAccessToken(credential.device_id, now),
152
+ refreshToken: input.nextRefreshToken,
153
+ refreshTokenExpiresAt: nextCredential.expires_at
154
+ };
155
+ }
156
+ if (credential.replaced_by !== null || credential.revoked_at !== null) {
157
+ db.prepare("UPDATE devices SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, credential.device_id);
158
+ db.prepare("UPDATE device_access_sessions SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, credential.device_id);
159
+ db.prepare("UPDATE device_refresh_credentials SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, credential.device_id);
160
+ return "reused";
161
+ }
162
+ if (credential.expires_at <= now) throw new Error("Refresh credential expired");
163
+ const access = issueAccessToken(credential.device_id, now);
164
+ const refreshTokenExpiresAt = now + REFRESH_TOKEN_TTL_MS;
165
+ db.prepare(`
166
+ INSERT INTO device_refresh_credentials (
167
+ credential_id, device_id, token_hash, expires_at, created_at
168
+ ) VALUES (?, ?, ?, ?, ?)
169
+ `).run(nextParsed.id, credential.device_id, tokenHash(input.nextRefreshToken), refreshTokenExpiresAt, now);
170
+ db.prepare(`
171
+ UPDATE device_refresh_credentials
172
+ SET last_used_at = ?, replaced_by = ?, rotation_request_id = ?, revoked_at = ?
173
+ WHERE credential_id = ?
174
+ `).run(now, nextParsed.id, input.requestId, now, credential.credential_id);
175
+ return {
176
+ ...access,
177
+ refreshToken: input.nextRefreshToken,
178
+ refreshTokenExpiresAt
179
+ };
180
+ });
181
+ if (result === "reused") throw new Error("Refresh credential reuse detected");
182
+ return result;
183
+ }
184
+ function revokeDevice(deviceId, now = Date.now()) {
185
+ return runSqliteWriteTransaction((db) => {
186
+ const changed = db.prepare("UPDATE devices SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, deviceId).changes > 0;
187
+ db.prepare("UPDATE device_access_sessions SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, deviceId);
188
+ db.prepare("UPDATE device_refresh_credentials SET revoked_at = ? WHERE device_id = ? AND revoked_at IS NULL").run(now, deviceId);
189
+ db.prepare("DELETE FROM device_push_endpoints WHERE device_id = ?").run(deviceId);
190
+ return changed;
191
+ });
192
+ }
193
+ //#endregion
194
+ export { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken };
@@ -0,0 +1,22 @@
1
+ export type DeviceRoute = {
2
+ id: string;
3
+ kind: 'xopc-secure-link' | 'tailscale' | 'custom-https';
4
+ url: string;
5
+ };
6
+ export type DevicePairingSetup = {
7
+ id: string;
8
+ token: string;
9
+ routes: DeviceRoute[];
10
+ expiresAt: number;
11
+ };
12
+ export type PairingConsumeResult = {
13
+ ok: true;
14
+ pairingId: string;
15
+ routes: DeviceRoute[];
16
+ } | {
17
+ ok: false;
18
+ reason: 'invalid' | 'expired' | 'consumed';
19
+ };
20
+ export declare function createDevicePairingSetup(routes: readonly DeviceRoute[], now?: number): DevicePairingSetup;
21
+ export declare function consumeDevicePairingToken(token: string, now?: number): PairingConsumeResult;
22
+ export declare function isDevicePairingSetupActive(pairingId: string, now?: number): boolean;
@@ -0,0 +1,86 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import crypto from "node:crypto";
3
+ //#region src/storage/sqlite/device-pairing-repository.ts
4
+ const PAIRING_TOKEN_PREFIX = "xopc_pair_";
5
+ const PAIRING_TTL_MS = 600 * 1e3;
6
+ const PAIRING_ATTEMPTS = 5;
7
+ function hashToken(token) {
8
+ return crypto.createHash("sha256").update(token).digest("hex");
9
+ }
10
+ function hashesMatch(left, right) {
11
+ return crypto.timingSafeEqual(Buffer.from(left, "hex"), Buffer.from(right, "hex"));
12
+ }
13
+ function tokenId(token) {
14
+ if (!token.startsWith(PAIRING_TOKEN_PREFIX)) return void 0;
15
+ const separator = token.indexOf("_", 10);
16
+ if (separator <= 10 || separator === token.length - 1) return void 0;
17
+ return token.slice(10, separator);
18
+ }
19
+ function createDevicePairingSetup(routes, now = Date.now()) {
20
+ if (routes.length === 0) throw new Error("No secure mobile route is available");
21
+ const id = crypto.randomUUID();
22
+ const token = `${PAIRING_TOKEN_PREFIX}${id}_${crypto.randomBytes(32).toString("base64url")}`;
23
+ const expiresAt = now + PAIRING_TTL_MS;
24
+ runSqliteWriteTransaction((db) => {
25
+ db.prepare("DELETE FROM device_pairing_sessions WHERE expires_at <= ? OR consumed_at IS NOT NULL").run(now);
26
+ db.prepare(`
27
+ INSERT INTO device_pairing_sessions (
28
+ pairing_id, secret_hash, routes_json, expires_at, attempts_remaining, created_at
29
+ ) VALUES (?, ?, ?, ?, ?, ?)
30
+ `).run(id, hashToken(token), JSON.stringify(routes), expiresAt, PAIRING_ATTEMPTS, now);
31
+ });
32
+ return {
33
+ id,
34
+ token,
35
+ routes: [...routes],
36
+ expiresAt
37
+ };
38
+ }
39
+ function consumeDevicePairingToken(token, now = Date.now()) {
40
+ const id = tokenId(token);
41
+ if (!id) return {
42
+ ok: false,
43
+ reason: "invalid"
44
+ };
45
+ return runSqliteWriteTransaction((db) => {
46
+ const row = db.prepare("SELECT * FROM device_pairing_sessions WHERE pairing_id = ?").get(id);
47
+ if (!row || row.attempts_remaining <= 0) return {
48
+ ok: false,
49
+ reason: "invalid"
50
+ };
51
+ if (row.consumed_at !== null) return {
52
+ ok: false,
53
+ reason: "consumed"
54
+ };
55
+ if (row.expires_at <= now) return {
56
+ ok: false,
57
+ reason: "expired"
58
+ };
59
+ if (!hashesMatch(row.secret_hash, hashToken(token))) {
60
+ db.prepare(`
61
+ UPDATE device_pairing_sessions
62
+ SET attempts_remaining = attempts_remaining - 1
63
+ WHERE pairing_id = ? AND attempts_remaining > 0
64
+ `).run(id);
65
+ return {
66
+ ok: false,
67
+ reason: "invalid"
68
+ };
69
+ }
70
+ db.prepare("UPDATE device_pairing_sessions SET consumed_at = ? WHERE pairing_id = ?").run(now, id);
71
+ return {
72
+ ok: true,
73
+ pairingId: id,
74
+ routes: JSON.parse(row.routes_json)
75
+ };
76
+ });
77
+ }
78
+ function isDevicePairingSetupActive(pairingId, now = Date.now()) {
79
+ const row = getSqliteDatabase().prepare(`
80
+ SELECT 1 FROM device_pairing_sessions
81
+ WHERE pairing_id = ? AND expires_at > ? AND consumed_at IS NULL AND attempts_remaining > 0
82
+ `).get(pairingId, now);
83
+ return Boolean(row);
84
+ }
85
+ //#endregion
86
+ export { consumeDevicePairingToken, createDevicePairingSetup, isDevicePairingSetupActive };
@@ -0,0 +1,8 @@
1
+ export interface StoredEndpointSessionBinding {
2
+ sessionKey: string;
3
+ endpointId: string;
4
+ boundAt: number;
5
+ }
6
+ export declare function getEndpointSessionBinding(sessionKey: string): StoredEndpointSessionBinding | undefined;
7
+ export declare function setEndpointSessionBinding(binding: StoredEndpointSessionBinding): StoredEndpointSessionBinding;
8
+ export declare function deleteEndpointSessionBinding(sessionKey: string): boolean;
@@ -0,0 +1,32 @@
1
+ import { getSqliteDatabase } from "./transaction.js";
2
+ //#region src/storage/sqlite/endpoint-session-binding-repository.ts
3
+ function fromRow(row) {
4
+ return {
5
+ sessionKey: row.session_key,
6
+ endpointId: row.endpoint_id,
7
+ boundAt: row.bound_at
8
+ };
9
+ }
10
+ function getEndpointSessionBinding(sessionKey) {
11
+ const row = getSqliteDatabase().prepare(`
12
+ SELECT session_key, endpoint_id, bound_at
13
+ FROM endpoint_session_bindings
14
+ WHERE session_key = ?
15
+ `).get(sessionKey);
16
+ return row ? fromRow(row) : void 0;
17
+ }
18
+ function setEndpointSessionBinding(binding) {
19
+ getSqliteDatabase().prepare(`
20
+ INSERT INTO endpoint_session_bindings (session_key, endpoint_id, bound_at)
21
+ VALUES (?, ?, ?)
22
+ ON CONFLICT(session_key) DO UPDATE SET
23
+ endpoint_id = excluded.endpoint_id,
24
+ bound_at = excluded.bound_at
25
+ `).run(binding.sessionKey, binding.endpointId, binding.boundAt);
26
+ return binding;
27
+ }
28
+ function deleteEndpointSessionBinding(sessionKey) {
29
+ return getSqliteDatabase().prepare("DELETE FROM endpoint_session_bindings WHERE session_key = ?").run(sessionKey).changes > 0;
30
+ }
31
+ //#endregion
32
+ export { deleteEndpointSessionBinding, getEndpointSessionBinding, setEndpointSessionBinding };
@@ -0,0 +1,10 @@
1
+ export type GatewayIdentity = {
2
+ id: string;
3
+ publicKey: string;
4
+ privateKey: string;
5
+ createdAt: number;
6
+ };
7
+ export declare function getOrCreateGatewayIdentity(now?: number): GatewayIdentity;
8
+ export declare function signGatewayPayload(payload: string): string;
9
+ export declare function getGatewayIdentityPublicKeyRaw(identity?: GatewayIdentity): string;
10
+ export declare function clearGatewayIdentityForTest(): void;
@@ -0,0 +1,50 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import crypto from "node:crypto";
3
+ //#region src/storage/sqlite/gateway-identity-repository.ts
4
+ function fromRow(row) {
5
+ return {
6
+ id: row.gateway_id,
7
+ publicKey: row.public_key,
8
+ privateKey: row.private_key,
9
+ createdAt: row.created_at
10
+ };
11
+ }
12
+ function getOrCreateGatewayIdentity(now = Date.now()) {
13
+ return runSqliteWriteTransaction((db) => {
14
+ const existing = db.prepare("SELECT * FROM gateway_identity WHERE singleton_id = 1").get();
15
+ if (existing) return fromRow(existing);
16
+ const keys = crypto.generateKeyPairSync("ed25519");
17
+ const identity = {
18
+ id: crypto.randomUUID(),
19
+ publicKey: keys.publicKey.export({
20
+ type: "spki",
21
+ format: "pem"
22
+ }).toString(),
23
+ privateKey: keys.privateKey.export({
24
+ type: "pkcs8",
25
+ format: "pem"
26
+ }).toString(),
27
+ createdAt: now
28
+ };
29
+ db.prepare(`
30
+ INSERT INTO gateway_identity (
31
+ singleton_id, gateway_id, public_key, private_key, created_at
32
+ ) VALUES (1, ?, ?, ?, ?)
33
+ `).run(identity.id, identity.publicKey, identity.privateKey, identity.createdAt);
34
+ return identity;
35
+ });
36
+ }
37
+ function signGatewayPayload(payload) {
38
+ const identity = getOrCreateGatewayIdentity();
39
+ return crypto.sign(null, Buffer.from(payload), identity.privateKey).toString("base64url");
40
+ }
41
+ function getGatewayIdentityPublicKeyRaw(identity = getOrCreateGatewayIdentity()) {
42
+ const jwk = crypto.createPublicKey(identity.publicKey).export({ format: "jwk" });
43
+ if (typeof jwk.x !== "string") throw new Error("Gateway identity public key is invalid");
44
+ return jwk.x;
45
+ }
46
+ function clearGatewayIdentityForTest() {
47
+ getSqliteDatabase().prepare("DELETE FROM gateway_identity").run();
48
+ }
49
+ //#endregion
50
+ export { clearGatewayIdentityForTest, getGatewayIdentityPublicKeyRaw, getOrCreateGatewayIdentity, signGatewayPayload };
@@ -5,6 +5,10 @@ export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, } from './m
5
5
  export { discoverSqlMigrations, listRegisteredMigrationTargets } from './migrations/discover.js';
6
6
  export { closeXopcDatabase, getXopcDatabase, isXopcDatabaseOpen, openXopcDatabase, requireXopcDatabase, resetXopcDatabaseSingletonForTest, type OpenXopcDatabaseOptions, type XopcDatabase, } from './connection.js';
7
7
  export { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';
8
+ export { deleteEndpointSessionBinding, getEndpointSessionBinding, setEndpointSessionBinding, type StoredEndpointSessionBinding, } from './endpoint-session-binding-repository.js';
9
+ export { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken, type DeviceAccessIdentity, type DevicePlatform, type DevicePublicKeyJwk, type DeviceRecord, type DeviceTokenPair, } from './device-access-repository.js';
10
+ export { clearGatewayIdentityForTest, getOrCreateGatewayIdentity, signGatewayPayload, type GatewayIdentity, } from './gateway-identity-repository.js';
11
+ export { consumeDevicePairingToken, createDevicePairingSetup, isDevicePairingSetupActive, type DevicePairingSetup, type DeviceRoute, type PairingConsumeResult, } from './device-pairing-repository.js';
8
12
  export { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, hasIndependentExtractionOutput, listContextExtractionOutputs, listContextExtractionRuns, type ContextExtractionOutput, type ContextExtractionRun, type ContextExtractionStatus, type ContextObjectType, } from './context-extraction-repository.js';
9
13
  export { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, listContextObjectRelations, listTemporalAssertions, type ContextObjectRelation, type ContextTemporalAssertion, } from './context-relation-repository.js';
10
14
  export { finishContextConsolidationRun, getContextConsolidationRun, listContextConsolidationDecisions, listContextConsolidationRuns, recordContextConsolidationDecision, startContextConsolidationRun, type ContextConsolidationDecision, type ContextConsolidationRun, } from './context-consolidation-repository.js';
@@ -6,6 +6,10 @@ import { XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, applyPendingMi
6
6
  import { ensureXopcDatabaseSchema } from "./schema.js";
7
7
  import { closeXopcDatabase, getXopcDatabase, isXopcDatabaseOpen, openXopcDatabase, requireXopcDatabase, resetXopcDatabaseSingletonForTest } from "./connection.js";
8
8
  import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
9
+ import { deleteEndpointSessionBinding, getEndpointSessionBinding, setEndpointSessionBinding } from "./endpoint-session-binding-repository.js";
10
+ import { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken } from "./device-access-repository.js";
11
+ import { clearGatewayIdentityForTest, getOrCreateGatewayIdentity, signGatewayPayload } from "./gateway-identity-repository.js";
12
+ import { consumeDevicePairingToken, createDevicePairingSetup, isDevicePairingSetupActive } from "./device-pairing-repository.js";
9
13
  import { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, hasIndependentExtractionOutput, listContextExtractionOutputs, listContextExtractionRuns } from "./context-extraction-repository.js";
10
14
  import { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, listContextObjectRelations, listTemporalAssertions } from "./context-relation-repository.js";
11
15
  import { finishContextConsolidationRun, getContextConsolidationRun, listContextConsolidationDecisions, listContextConsolidationRuns, recordContextConsolidationDecision, startContextConsolidationRun } from "./context-consolidation-repository.js";
@@ -36,4 +40,4 @@ import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeC
36
40
  import { getConnectorAccount, listConnectorAccounts, reconcileConnectorAccount, refreshConnectorAccountCurrent } from "./connector-account-repository.js";
37
41
  import { getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, listConnectorSyncPolicies, upsertConnectorSyncPolicy } from "./connector-sync-policy-repository.js";
38
42
  import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
39
- export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, closeTemporalAssertions, closeUnderstandingValidity, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeConnectorApproval, consumeContextConsent, countKnowledgeSourceItems, countMemoryRecordsBySourceInstanceId, createCollaborationRule, createConnectorApproval, createContextEvidence, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, createUnderstanding, decideConnectorApproval, decideContextConsent, deleteCollaborationRule, deleteConnectorConnection, deleteConnectorInstallation, deleteKnowledgeSourceItems, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteMemoryRecordsBySourceInstanceId, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, deleteUnderstanding, discoverSqlMigrations, enqueueConnectorLearningJob, ensureContextConsent, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findSessionInput, findSessionKeyBySessionId, finishContextConsolidationRun, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextConsolidationRun, getContextExtractionRun, getCurrentSessionId, getEndpointPrincipal, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getMemoryTurnFeedback, getNoteAgentContextRecord, getNoteRecord, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSqliteDatabase, getTurnPersonalization, getUnderstanding, getUserPeopleIndexState, getUserPerson, getUserProfile, getUserTrustPolicy, getXopcDatabase, hasContextConsent, hasIndependentExtractionOutput, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isUnderstandingSuppressed, isXopcDatabaseOpen, linkContextObjects, linkUnderstandingEvidence, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextConsolidationDecisions, listContextConsolidationRuns, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUnderstandingEvidence, listUnderstandingStatusEvents, listUnderstandings, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recordContextConsolidationDecision, recordContextFeedback, recordContextRun, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, rejectUnderstanding, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, reviseCollaborationRule, reviseUnderstanding, revokeEndpointPrincipal, runSqliteWriteTransaction, searchActiveUnderstandings, searchMemoryRecords, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setCollaborationRuleStatus, setConnectorLearningPaused, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setMemoryProviderState, setMemoryRecordStatus, setMemoryTurnFeedback, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUnderstandingStatus, setUserTrustPolicy, startContextConsolidationRun, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUnderstandingFeedback, summarizeUserPeople, summarizeUserUnderstandingQuality, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, updateUserProfile, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
43
+ export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeTemporalAssertions, closeUnderstandingValidity, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeConnectorApproval, consumeContextConsent, consumeDevicePairingToken, countKnowledgeSourceItems, countMemoryRecordsBySourceInstanceId, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, createUnderstanding, decideConnectorApproval, decideContextConsent, deleteCollaborationRule, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteKnowledgeSourceItems, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteMemoryRecordsBySourceInstanceId, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, deleteUnderstanding, discoverSqlMigrations, enqueueConnectorLearningJob, ensureContextConsent, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findSessionInput, findSessionKeyBySessionId, finishContextConsolidationRun, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextConsolidationRun, getContextExtractionRun, getCurrentSessionId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getMemoryTurnFeedback, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSqliteDatabase, getTurnPersonalization, getUnderstanding, getUserPeopleIndexState, getUserPerson, getUserProfile, getUserTrustPolicy, getXopcDatabase, hasContextConsent, hasIndependentExtractionOutput, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isUnderstandingSuppressed, isXopcDatabaseOpen, issueDeviceTokenPair, linkContextObjects, linkUnderstandingEvidence, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextConsolidationDecisions, listContextConsolidationRuns, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listDevices, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUnderstandingEvidence, listUnderstandingStatusEvents, listUnderstandings, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recordContextConsolidationDecision, recordContextFeedback, recordContextRun, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, rejectUnderstanding, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, reviseCollaborationRule, reviseUnderstanding, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchActiveUnderstandings, searchMemoryRecords, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setMemoryProviderState, setMemoryRecordStatus, setMemoryTurnFeedback, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUnderstandingStatus, setUserTrustPolicy, signGatewayPayload, startContextConsolidationRun, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeMemoryRecallFeedback, summarizeUnderstandingFeedback, summarizeUserPeople, summarizeUserUnderstandingQuality, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, updateUserProfile, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };