@xopcai/xopc 0.0.369 → 0.0.370

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 (384) hide show
  1. package/README.md +59 -174
  2. package/README.zh-CN.md +59 -174
  3. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_md.js +131 -0
  4. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js +30 -0
  5. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha2.js +252 -0
  6. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha256.js +16 -0
  7. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js +66 -0
  8. package/dist/browser-ext/dist/sidepanel.js +21 -1
  9. package/dist/browser-ext/manifest.json +1 -1
  10. package/dist/extensions/telegram/xopc.extension.json +1 -1
  11. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Stj17S9u.js → agent-avatar-dicebear-C61i1QbX.js} +1 -1
  12. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-0fCR1DHx.js +1 -0
  13. package/dist/gateway/static/root/assets/agent-plugin-dialog-Di99mUTT.js +1 -0
  14. package/dist/gateway/static/root/assets/agents-BRZZmYH_.js +66 -0
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-pJFe6M6c.js → app-management-settings-panel-noqqxkds.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-BrxSpBWa.js → appearance-settings-DG8QN0gR.js} +1 -1
  17. package/dist/gateway/static/root/assets/{apps-page-DegSl5Lh.js → apps-page-CgiyzFYo.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-BZQ_VHjp.js → automations-page-CgAcRFDS.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BIkxIpab.js +6 -0
  20. package/dist/gateway/static/root/assets/{block-editor-3XjFv3kK.js → block-editor-B1VE-jAe.js} +3 -3
  21. package/dist/gateway/static/root/assets/browser-automations-page-CIjyMS6f.js +3 -0
  22. package/dist/gateway/static/root/assets/{browser-settings-page-ch2_bQF0.js → browser-settings-page-BMAivBfp.js} +2 -2
  23. package/dist/gateway/static/root/assets/{capabilities-DO-vfNKI.js → capabilities-CY4SiHcP.js} +1 -1
  24. package/dist/gateway/static/root/assets/{capabilities-B48r0DDa.js → capabilities-gjQtMhKu.js} +1 -1
  25. package/dist/gateway/static/root/assets/capabilities-page-DRdcfo68.js +2 -0
  26. package/dist/gateway/static/root/assets/{capabilities-settings-panel-NckMsJ5N.js → capabilities-settings-panel-ZuL6pWjM.js} +4 -4
  27. package/dist/gateway/static/root/assets/{capability-header-actions-CY8KCO9j.js → capability-header-actions-D0GC1FEv.js} +1 -1
  28. package/dist/gateway/static/root/assets/{channels-CHOS2CGa.js → channels-CgE22Pzd.js} +1 -1
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bwknnb4c.js → chat-terminal-dock-CEjh1utz.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-B2xeFCSt.js → computer-settings-page-vFHJAmQr.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-C83DnAqK.js → connector-service-page-DTrwZ4kV.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DRcMiTWu.js +1 -0
  33. package/dist/gateway/static/root/assets/copy-text-row-C1gaJwlZ.js +1 -0
  34. package/dist/gateway/static/root/assets/{date-picker-Bq9GR-DU.js → date-picker-NfGIPSYY.js} +1 -1
  35. package/dist/gateway/static/root/assets/dependency-picker-CqguveUi.js +1 -0
  36. package/dist/gateway/static/root/assets/{desktop-pet-BwsbQw8V.js → desktop-pet-CTx1zkJm.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-settings-sL9i44pP.js → desktop-pet-settings-BRDS3EGc.js} +1 -1
  38. package/dist/gateway/static/root/assets/device-pairing-wizard-Du4Ciuyw.js +1 -0
  39. package/dist/gateway/static/root/assets/{directory-picker-path-field-BFlDmsS5.js → directory-picker-path-field-CjstlxFl.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-debug-page-7Z1Tp7-w.js → extension-debug-page-BfAtjhoK.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-page-uGqvb8QX.js → extension-page-BJmudejr.js} +1 -1
  42. package/dist/gateway/static/root/assets/{extension-provider-xlSyz4Z6.js → extension-provider-Br6LXyIj.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-settings-page-CKHgrjOs.js → extension-settings-page-UvmHniyz.js} +1 -1
  44. package/dist/gateway/static/root/assets/{fallback-models-BwQg0G1D.js → fallback-models-euw9MGdt.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-realtime-F6D4A7N5.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-settings-BAQnSEMJ.js → gateway-settings-C7roPHh1.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-BGNCTtM3.js +2 -0
  48. package/dist/gateway/static/root/assets/{imports-page-re1_Nh64.js → imports-page-DxCoT0VV.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
  50. package/dist/gateway/static/root/assets/index-FCEE325-.js +106 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B_xja9LN.js → keyboard-shortcuts-settings-CnLln9Ds.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-CErdCrPX.js → local-app-workbench-page-yXRkSrEj.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-BPL2RXdK.js → local-apps-page-D46buzTk.js} +1 -1
  54. package/dist/gateway/static/root/assets/local-session-drafts-pox8evDV.js +1 -0
  55. package/dist/gateway/static/root/assets/logs-page-DmcCHnH0.js +2 -0
  56. package/dist/gateway/static/root/assets/management-settings-khN1ThNL.js +1 -0
  57. package/dist/gateway/static/root/assets/note-detail-panel-C_t58yha.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-BJ0QS6xx.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-tf77xIz3.js → page-context-capture-button-DfRODHv1.js} +1 -1
  60. package/dist/gateway/static/root/assets/personal-page-CiiXwwQE.js +1 -0
  61. package/dist/gateway/static/root/assets/{product-open-page-Dc3Y-Y7J.js → product-open-page-_Bp6HRmm.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-preview-content-MG_hmVA3.js → product-preview-content-BUdiO0Ct.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-Clb-fXYk.js +1 -0
  64. package/dist/gateway/static/root/assets/{projects-page-MllfNLGA.js → projects-page-D9JEEqhh.js} +1 -1
  65. package/dist/gateway/static/root/assets/{remote-access-hub-Bs-C70el.js → remote-access-hub-CmyTq3_l.js} +1 -1
  66. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DpJ5jNzR.js → runtime-tools-settings-panel-B1_inj8L.js} +1 -1
  67. package/dist/gateway/static/root/assets/{scenes-page-Dpxamkw6.js → scenes-page-CUNAZN2_.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-DUeyQ1zh.js → schema-form-CfT-9UVw.js} +1 -1
  69. package/dist/gateway/static/root/assets/{send-session-input-Dgn4BRk_.js → send-session-input-BW40VHiL.js} +1 -1
  70. package/dist/gateway/static/root/assets/session-manager-BqlvrjPE.js +16 -0
  71. package/dist/gateway/static/root/assets/sessions-page-CXZKScvu.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-B2vKXmzg.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-page-DouHuBXt.js → settings-page-1h3vyueg.js} +1 -1
  74. package/dist/gateway/static/root/assets/setup-status-panel-Cqc7UlZy.js +1 -0
  75. package/dist/gateway/static/root/assets/{share-link-dialog-DJTabLAM.js → share-link-dialog-HCHM8qnf.js} +1 -1
  76. package/dist/gateway/static/root/assets/{share-preview-page-jw7h4t_B.js → share-preview-page-Ce6FNWt1.js} +1 -1
  77. package/dist/gateway/static/root/assets/shares-settings-Dh5jisCK.js +1 -0
  78. package/dist/gateway/static/root/assets/{skill-api-CfyX_0zN.js → skill-api-deDZeQS8.js} +1 -1
  79. package/dist/gateway/static/root/assets/skills-page-DZozl9U_.js +2 -0
  80. package/dist/gateway/static/root/assets/{system-settings-panel-DWf256TE.js → system-settings-panel-CtzyMxqq.js} +1 -1
  81. package/dist/gateway/static/root/assets/{task-detail-page-DE6N1ZQe.js → task-detail-page-5f_V0h-p.js} +2 -2
  82. package/dist/gateway/static/root/assets/{tunnel-api-BBm9esrY.js → tunnel-api-vMtlbJ-m.js} +1 -1
  83. package/dist/gateway/static/root/assets/{usage-page-C93x89uW.js → usage-page-B1-BCW8U.js} +1 -1
  84. package/dist/gateway/static/root/assets/{use-composer-attachments-C7Gaaai1.js → use-composer-attachments-DJya1hIL.js} +1 -1
  85. package/dist/gateway/static/root/assets/use-file-preview-expanded-C5ONO7sF.js +2 -0
  86. package/dist/gateway/static/root/assets/user-model-page-D4BSq9HJ.js +2 -0
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-Bs2MKiTv.js → work-discovery-overlay-CjiNYJV5.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BR_U_snV.js → workflow-run-setup-panel-DJOetXvm.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-CcAPFh2R.js +6 -0
  90. package/dist/gateway/static/root/assets/{workspace-api-Si2o3inw.js → workspace-api-WhbMvdBE.js} +2 -2
  91. package/dist/gateway/static/root/index.html +18 -20
  92. package/dist/package.js +1 -1
  93. package/dist/packages/endpoint-tools-client/src/index.js +189 -0
  94. package/dist/packages/endpoint-tools-protocol/src/bridge.js +105 -0
  95. package/dist/packages/endpoint-tools-protocol/src/index.js +93 -2
  96. package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
  97. package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
  98. package/dist/src/agent/agent-manager.js +22 -26
  99. package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
  100. package/dist/src/agent/embedded/codemode-extension.js +232 -0
  101. package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
  102. package/dist/src/agent/embedded/codemode-output.js +34 -0
  103. package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
  104. package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
  105. package/dist/src/agent/embedded/model-runtime.js +5 -2
  106. package/dist/src/agent/embedded/run-for-session.js +10 -1
  107. package/dist/src/agent/embedded/run-turn.js +10 -3
  108. package/dist/src/agent/embedded/session-runner.d.ts +9 -1
  109. package/dist/src/agent/embedded/session-runner.js +111 -23
  110. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  111. package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
  112. package/dist/src/agent/embedded/subscribe-session.js +14 -4
  113. package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
  114. package/dist/src/agent/embedded/tool-metadata.js +38 -0
  115. package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
  116. package/dist/src/agent/embedded/tool-search-extension.js +31 -0
  117. package/dist/src/agent/embedded/types.d.ts +7 -0
  118. package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
  119. package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
  120. package/dist/src/agent/external-tools/endpoint-provider.js +148 -56
  121. package/dist/src/agent/external-tools/extension-provider.js +8 -1
  122. package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
  123. package/dist/src/agent/external-tools/gateway-tools.js +45 -22
  124. package/dist/src/agent/external-tools/index.js +46 -14
  125. package/dist/src/agent/external-tools/memory-provider.js +8 -1
  126. package/dist/src/agent/external-tools/read-policy.js +2 -1
  127. package/dist/src/agent/external-tools/service.d.ts +2 -0
  128. package/dist/src/agent/external-tools/service.js +25 -3
  129. package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
  130. package/dist/src/agent/external-tools/tool-registry.js +14 -0
  131. package/dist/src/agent/external-tools/types.d.ts +8 -1
  132. package/dist/src/agent/external-tools/types.js +0 -1
  133. package/dist/src/agent/mcp/config.d.ts +18 -0
  134. package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
  135. package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
  136. package/dist/src/agent/mcp/native-mcp.js +73 -0
  137. package/dist/src/agent/service.js +2 -5
  138. package/dist/src/agent/skills/installer.js +1 -1
  139. package/dist/src/agent/skills/skill-manager.js +1 -1
  140. package/dist/src/agent/skills/skill-sources.js +1 -1
  141. package/dist/src/agent/source-context/index.d.ts +0 -1
  142. package/dist/src/agent/source-context/index.js +1 -2
  143. package/dist/src/agent/source-context/injector.js +1 -0
  144. package/dist/src/agent/source-context/types.d.ts +2 -2
  145. package/dist/src/agent/source-context/types.js +1 -1
  146. package/dist/src/agent/tools/cli-clarify.js +1 -1
  147. package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
  148. package/dist/src/agent/tools/codemode-permissions.js +23 -0
  149. package/dist/src/agent/tools/dataBatch.js +3 -1
  150. package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
  151. package/dist/src/agent/tools/factory.js +4 -3
  152. package/dist/src/agent/transcript/provider-capabilities.js +0 -1
  153. package/dist/src/agent/transcript/transcript-policy.js +1 -2
  154. package/dist/src/agent-config/schema.d.ts +28 -0
  155. package/dist/src/agent-config/schema.js +7 -0
  156. package/dist/src/auth/credentials.js +7 -20
  157. package/dist/src/auth/model-credential-store.js +11 -4
  158. package/dist/src/auth/oauth/index.d.ts +1 -1
  159. package/dist/src/auth/oauth/index.js +3 -3
  160. package/dist/src/auth/oauth/openai.d.ts +2 -0
  161. package/dist/src/auth/oauth/openai.js +90 -0
  162. package/dist/src/auth/oauth/registry.js +3 -3
  163. package/dist/src/auth/oauth/types.d.ts +1 -0
  164. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  165. package/dist/src/auth/sync-provider-auth.js +5 -0
  166. package/dist/src/chat-commands/builtins/model.js +2 -2
  167. package/dist/src/cli/command-manifest.js +1 -1
  168. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  169. package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
  170. package/dist/src/cli/commands/mcp.js +36 -2
  171. package/dist/src/cli/commands/models.js +1 -1
  172. package/dist/src/cli/utils/oauth-login.js +2 -2
  173. package/dist/src/config/index.js +3 -3
  174. package/dist/src/config/mcp-config-normalize.d.ts +0 -3
  175. package/dist/src/config/mcp-config-normalize.js +2 -22
  176. package/dist/src/config/models-json.d.ts +0 -5
  177. package/dist/src/config/models-json.js +13 -4
  178. package/dist/src/config/paths.d.ts +0 -1
  179. package/dist/src/config/paths.js +1 -4
  180. package/dist/src/config/schema.d.ts +130 -36
  181. package/dist/src/config/schema.js +52 -35
  182. package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
  183. package/dist/src/connectors/auth-provider-registry.js +1 -21
  184. package/dist/src/connectors/china-catalog.js +5 -5
  185. package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
  186. package/dist/src/connectors/connection-recovery-service.js +3 -105
  187. package/dist/src/connectors/health.d.ts +1 -2
  188. package/dist/src/connectors/health.js +2 -101
  189. package/dist/src/connectors/types.d.ts +1 -1
  190. package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
  191. package/dist/src/endpoint-tools/binding-service.js +14 -2
  192. package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
  193. package/dist/src/endpoint-tools/bridge-host.js +166 -0
  194. package/dist/src/endpoint-tools/bridge.d.ts +27 -0
  195. package/dist/src/endpoint-tools/bridge.js +88 -0
  196. package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
  197. package/dist/src/endpoint-tools/capability-catalog.js +8 -0
  198. package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
  199. package/dist/src/endpoint-tools/grant-service.js +113 -0
  200. package/dist/src/endpoint-tools/index.js +1 -1
  201. package/dist/src/endpoint-tools/invocation-service.js +6 -2
  202. package/dist/src/endpoint-tools/location-task.d.ts +22 -0
  203. package/dist/src/endpoint-tools/location-task.js +114 -0
  204. package/dist/src/endpoint-tools/policy.js +16 -1
  205. package/dist/src/endpoint-tools/registry.d.ts +2 -0
  206. package/dist/src/endpoint-tools/registry.js +9 -0
  207. package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
  208. package/dist/src/endpoint-tools/result-projector.js +31 -0
  209. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  210. package/dist/src/endpoint-tools/runtime.js +15 -2
  211. package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
  212. package/dist/src/endpoint-tools/target-resolver.js +27 -0
  213. package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
  214. package/dist/src/endpoint-tools/turn-context.js +29 -0
  215. package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
  216. package/dist/src/extensions/agent-plugins/auth.js +2 -19
  217. package/dist/src/extensions/agent-plugins/credentials.js +3 -19
  218. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
  219. package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
  220. package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
  221. package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
  222. package/dist/src/extensions/agent-plugins/sources.js +2 -2
  223. package/dist/src/extensions/agent-plugins/store.js +1 -3
  224. package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
  225. package/dist/src/extensions/agent-plugins/validation.js +13 -20
  226. package/dist/src/gateway/agents-admin.d.ts +5 -0
  227. package/dist/src/gateway/agents-admin.js +56 -1
  228. package/dist/src/gateway/chat-stream/mapper.js +9 -0
  229. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
  231. package/dist/src/gateway/hono/lib/config-payload.js +2 -5
  232. package/dist/src/gateway/hono/oauth-async.js +9 -2
  233. package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
  234. package/dist/src/gateway/hono/routes/agents.js +4 -3
  235. package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
  236. package/dist/src/gateway/hono/routes/connectors.js +5 -60
  237. package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
  238. package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
  239. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +7 -0
  240. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
  241. package/dist/src/gateway/hono/routes/endpoint-tools.js +53 -3
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  243. package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
  244. package/dist/src/gateway/hono/routes/mcp.js +11 -237
  245. package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
  246. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
  247. package/dist/src/gateway/hono/routes/session-input-handler.js +25 -1
  248. package/dist/src/gateway/service/config-coordinator.js +2 -5
  249. package/dist/src/gateway/service/marketplace-service.js +2 -2
  250. package/dist/src/gateway/service/run-gateway-agent.js +13 -5
  251. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  252. package/dist/src/gateway/service/session-input-coordinator.js +29 -9
  253. package/dist/src/gateway/service/sessions-api.js +0 -6
  254. package/dist/src/gateway/service.js +3 -12
  255. package/dist/src/gateway/session-reset-service.js +0 -6
  256. package/dist/src/imports/compatibility.js +12 -10
  257. package/dist/src/mcp/channel-bridge.js +1 -1
  258. package/dist/src/providers/env-keys.js +1 -1
  259. package/dist/src/providers/index.js +26 -24
  260. package/dist/src/providers/model-call.d.ts +0 -2
  261. package/dist/src/providers/model-call.js +2 -6
  262. package/dist/src/providers/model-registry.js +4 -2
  263. package/dist/src/providers/model-supplements.d.ts +3 -3
  264. package/dist/src/providers/model-supplements.js +6 -27
  265. package/dist/src/providers/presentation.js +3 -8
  266. package/dist/src/providers/prompt-cache-plan.js +1 -1
  267. package/dist/src/providers/provider-auth-service.d.ts +1 -1
  268. package/dist/src/providers/provider-auth-service.js +7 -2
  269. package/dist/src/providers/provider-policy.d.ts +3 -0
  270. package/dist/src/providers/provider-policy.js +14 -0
  271. package/dist/src/providers/register-runtime-providers.js +6 -1
  272. package/dist/src/realtime/runtime.js +1 -1
  273. package/dist/src/session/store.js +7 -1
  274. package/dist/src/session/transcript-events.d.ts +5 -0
  275. package/dist/src/session/transcript-events.js +1 -0
  276. package/dist/src/session/types.d.ts +2 -0
  277. package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
  278. package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
  279. package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
  280. package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
  281. package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
  282. package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/schema.js +1 -1
  286. package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
  287. package/dist/src/storage/sqlite/session-input-repository.js +5 -1
  288. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  289. package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
  290. package/package.json +19 -8
  291. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +0 -1
  292. package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +0 -1
  293. package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +0 -66
  294. package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +0 -6
  295. package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +0 -3
  296. package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +0 -2
  297. package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +0 -2
  298. package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
  299. package/dist/gateway/static/root/assets/dependency-picker-BTERkA9X.js +0 -1
  300. package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +0 -1
  301. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  302. package/dist/gateway/static/root/assets/gateway-realtime-DDWymi-o.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +0 -2
  304. package/dist/gateway/static/root/assets/index-BB1z8QxA.js +0 -106
  305. package/dist/gateway/static/root/assets/index-D9R6tU7r.css +0 -1
  306. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  307. package/dist/gateway/static/root/assets/local-session-drafts-DRPsDCj1.js +0 -1
  308. package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +0 -2
  309. package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +0 -1
  310. package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +0 -5
  311. package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +0 -8
  312. package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +0 -1
  313. package/dist/gateway/static/root/assets/project-detail-page-3uAzbW4T.js +0 -1
  314. package/dist/gateway/static/root/assets/session-manager-LInoZ_Yi.js +0 -16
  315. package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +0 -1
  316. package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +0 -1
  317. package/dist/gateway/static/root/assets/setup-status-panel-B5BoZ-1y.js +0 -1
  318. package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +0 -1
  319. package/dist/gateway/static/root/assets/skills-page-DjdTeYzm.js +0 -2
  320. package/dist/gateway/static/root/assets/use-file-preview-expanded-Db2VYg1b.js +0 -2
  321. package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +0 -2
  322. package/dist/gateway/static/root/assets/workflows-page-Crk4SxtC.js +0 -6
  323. package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
  324. package/dist/src/agent/embedded/system-prompt-override.js +0 -21
  325. package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
  326. package/dist/src/agent/external-tools/mcp-provider.js +0 -208
  327. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
  328. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
  329. package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
  330. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
  331. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
  332. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
  333. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
  334. package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
  335. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
  336. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
  337. package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
  338. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
  339. package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
  340. package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
  341. package/dist/src/agent/mcp/embedded-mcp.js +0 -14
  342. package/dist/src/agent/mcp/index.d.ts +0 -5
  343. package/dist/src/agent/mcp/index.js +0 -12
  344. package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
  345. package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
  346. package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
  347. package/dist/src/agent/mcp/mcp-http.js +0 -67
  348. package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
  349. package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
  350. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
  351. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
  352. package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
  353. package/dist/src/agent/mcp/mcp-stdio.js +0 -35
  354. package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
  355. package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
  356. package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
  357. package/dist/src/agent/mcp/mcp-transport.js +0 -141
  358. package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
  359. package/dist/src/agent/mcp/oauth/index.js +0 -6
  360. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
  361. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
  362. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
  363. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
  364. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
  365. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
  366. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
  367. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
  368. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
  369. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
  370. package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
  371. package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
  372. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
  373. package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
  374. package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
  375. package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
  376. package/dist/src/auth/oauth/openai-codex.js +0 -414
  377. package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
  378. package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
  379. package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
  380. package/dist/src/extensions/agent-plugins/connection.js +0 -41
  381. package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
  382. package/dist/src/extensions/agent-plugins/health.js +0 -48
  383. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
  384. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +0 -8
@@ -3,6 +3,7 @@ import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
5
5
  import { resolveModelsJsonPath } from "../config/paths.js";
6
+ import { init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
6
7
  import { init_resolve_config_value, resolveConfigValue, resolveHeaders } from "../config/resolve-config-value.js";
7
8
  import { getDefaultModelValues, init_models_json, validateModelsConfig } from "../config/models-json.js";
8
9
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
@@ -100,6 +101,7 @@ var init_model_registry = __esmMin((() => {
100
101
  init_env_keys();
101
102
  init_model_catalog_store();
102
103
  init_model_ref();
104
+ init_provider_policy();
103
105
  log = createLogger("ModelRegistry");
104
106
  ModelRegistry = class {
105
107
  models = [];
@@ -238,7 +240,7 @@ var init_model_registry = __esmMin((() => {
238
240
  log.warn({ err }, "Failed to load remote model catalog");
239
241
  return [];
240
242
  }
241
- return Object.values(sources).flatMap((source) => source.models.filter((model) => model.availability === "available" && model.kind === "language").map((model) => ({
243
+ return Object.values(sources).filter((source) => !isRetiredModelProvider(source.providerId)).flatMap((source) => source.models.filter((model) => model.availability === "available" && model.kind === "language").map((model) => ({
242
244
  id: model.id,
243
245
  computerUse: model.computerUse,
244
246
  name: model.name,
@@ -261,7 +263,7 @@ var init_model_registry = __esmMin((() => {
261
263
  * Load built-in models and apply provider/model overrides
262
264
  */
263
265
  loadBuiltInModels(overrides, modelOverrides) {
264
- return getProviders().flatMap((provider) => {
266
+ return getProviders().filter((provider) => !isRetiredModelProvider(provider)).flatMap((provider) => {
265
267
  try {
266
268
  const models = getModels(provider);
267
269
  const providerOverride = overrides.get(provider);
@@ -1,8 +1,8 @@
1
- import { type Api, type Model } from '@earendil-works/pi-ai/compat';
2
- /** Correct narrowly scoped upstream catalog metadata while older pi-ai data is still installed. */
1
+ import type { Api, Model } from '@earendil-works/pi-ai';
2
+ /** Attach xopc's Computer Use contract to supported OpenAI Responses models. */
3
3
  export declare function applyOfficialModelMetadataCorrections(model: Model<Api>): Model<Api>;
4
4
  /**
5
- * Small local supplement for official model aliases that may lag in pi-ai.
5
+ * Local catalog entries required by xopc's Computer Use providers.
6
6
  * Keep this list narrow: full provider catalogs should come from pi-ai.
7
7
  */
8
8
  export declare function getSupplementalModels(): Model<Api>[];
@@ -1,30 +1,19 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getModel } from "@earendil-works/pi-ai/compat";
3
2
  //#region src/providers/model-supplements.ts
4
- /** Correct narrowly scoped upstream catalog metadata while older pi-ai data is still installed. */
3
+ /** Attach xopc's Computer Use contract to supported OpenAI Responses models. */
5
4
  function applyOfficialModelMetadataCorrections(model) {
6
- const correctedContextWindow = OPENAI_CONTEXT_WINDOW_CORRECTIONS.get(model.id);
7
- const corrected = (model.provider === "openai" || model.provider === "openai-codex") && correctedContextWindow !== void 0 && model.contextWindow === STALE_OPENAI_CONTEXT_WINDOW ? {
8
- ...model,
9
- contextWindow: correctedContextWindow
10
- } : model;
11
- if (corrected.provider !== "openai" || corrected.api !== "openai-responses" || !OPENAI_COMPUTER_MODELS.has(corrected.id)) return corrected;
5
+ if (model.provider !== "openai" || model.api !== "openai-responses" || !OPENAI_COMPUTER_MODELS.has(model.id)) return model;
12
6
  return {
13
- ...corrected,
7
+ ...model,
14
8
  computerUse: { profile: "openai-responses-computer-v1" }
15
9
  };
16
10
  }
17
11
  /**
18
- * Small local supplement for official model aliases that may lag in pi-ai.
12
+ * Local catalog entries required by xopc's Computer Use providers.
19
13
  * Keep this list narrow: full provider catalogs should come from pi-ai.
20
14
  */
21
15
  function getSupplementalModels() {
22
- const gpt56Sol = getModel("openai", "gpt-5.6-sol");
23
- return [...gpt56Sol ? [{
24
- ...gpt56Sol,
25
- id: "gpt-5.6",
26
- name: "GPT-5.6"
27
- }] : [], {
16
+ return [{
28
17
  id: "gui-plus-2026-02-26",
29
18
  name: "GUI-Plus (2026-02-26)",
30
19
  provider: "dashscope-cn",
@@ -43,18 +32,8 @@ function getSupplementalModels() {
43
32
  computerUse: { profile: "gui-plus-2026-02-26" }
44
33
  }];
45
34
  }
46
- var STALE_OPENAI_CONTEXT_WINDOW, OPENAI_CONTEXT_WINDOW_CORRECTIONS, OPENAI_COMPUTER_MODELS;
35
+ var OPENAI_COMPUTER_MODELS;
47
36
  var init_model_supplements = __esmMin((() => {
48
- STALE_OPENAI_CONTEXT_WINDOW = 272e3;
49
- OPENAI_CONTEXT_WINDOW_CORRECTIONS = new Map([
50
- ["gpt-5.4", 105e4],
51
- ["gpt-5.4-mini", 4e5],
52
- ["gpt-5.5", 105e4],
53
- ["gpt-5.6", 105e4],
54
- ["gpt-5.6-luna", 105e4],
55
- ["gpt-5.6-sol", 105e4],
56
- ["gpt-5.6-terra", 105e4]
57
- ]);
58
37
  OPENAI_COMPUTER_MODELS = new Set([
59
38
  "gpt-6-astra",
60
39
  "gpt-5.6-sol",
@@ -71,26 +71,21 @@ const PROVIDER_HINTS = {
71
71
  "zhipu-coding-cn": "Zhipu GLM coding-plan China endpoint.",
72
72
  minimax: "MiniMax text models; Anthropic-compatible endpoint is preferred for agent workflows.",
73
73
  "minimax-cn": "MiniMax China endpoint for domestic access.",
74
- "openai-codex": "OpenAI Codex models through OAuth.",
75
74
  "google-gemini-cli": "Gemini through Google Cloud Code Assist OAuth.",
76
75
  "google-antigravity": "Gemini/Antigravity OAuth model access."
77
76
  };
78
77
  const RECOMMENDED_MODEL_PATTERNS = {
79
78
  "xopc-cloud": [/^auto$/],
80
79
  openai: [
81
- /^gpt-5\.6$/i,
80
+ /^gpt-6-sol$/i,
81
+ /^gpt-6-luna$/i,
82
+ /^gpt-6-astra$/i,
82
83
  /^gpt-5\.6-sol$/i,
83
84
  /^gpt-5\.6-terra$/i,
84
85
  /^gpt-5\.6-luna$/i,
85
86
  /^gpt-5\.5$/i,
86
87
  /^gpt-5\.5-pro$/i
87
88
  ],
88
- "openai-codex": [
89
- /^gpt-5\.6-sol$/i,
90
- /^gpt-5\.6-terra$/i,
91
- /^gpt-5\.6-luna$/i,
92
- /^gpt-5\.5$/i
93
- ],
94
89
  anthropic: [
95
90
  /^claude-sonnet-5$/i,
96
91
  /^claude-opus-4-8$/i,
@@ -10,7 +10,7 @@ function resolvePromptCachePolicy(policy) {
10
10
  };
11
11
  }
12
12
  function isOfficialOpenAIModel(model) {
13
- if (model.api === "openai-codex-responses" || model.api === "azure-openai-responses") return true;
13
+ if (model.api === "azure-openai-responses") return true;
14
14
  if (model.api !== "openai-completions" && model.api !== "openai-responses") return false;
15
15
  return model.provider === "openai" || model.baseUrl?.includes("api.openai.com") === true;
16
16
  }
@@ -1,7 +1,7 @@
1
1
  import { ModelRuntime } from '@earendil-works/pi-coding-agent';
2
2
  import { CredentialResolver, type CredentialResolverOptions } from '../auth/credentials.js';
3
3
  import { XopcModelCredentialStore } from '../auth/model-credential-store.js';
4
- type ApiKeyResolver = Pick<CredentialResolver, 'resolveApiKey'>;
4
+ type ApiKeyResolver = Pick<CredentialResolver, 'resolveApiKey'> & Partial<Pick<CredentialResolver, 'resolveApiKeySource'>>;
5
5
  export interface ProviderAuthServiceOptions {
6
6
  credentials?: XopcModelCredentialStore;
7
7
  resolver?: ApiKeyResolver;
@@ -1,8 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths, resolveModelsJsonPath } from "../config/paths.js";
3
+ import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "./register-bundled-oauth-flows.js";
4
+ import { assertCurrentModelProvider, init_provider_policy } from "./provider-policy.js";
3
5
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
4
6
  import { XopcModelCredentialStore, init_model_credential_store } from "../auth/model-credential-store.js";
5
- import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "./register-bundled-oauth-flows.js";
6
7
  import { init_register_runtime_providers, registerRuntimeProviders } from "./register-runtime-providers.js";
7
8
  import { InMemoryModelsStore } from "@earendil-works/pi-ai";
8
9
  import { ModelRuntime } from "@earendil-works/pi-coding-agent";
@@ -36,6 +37,7 @@ var init_provider_auth_service = __esmMin((() => {
36
37
  init_paths();
37
38
  init_register_bundled_oauth_flows();
38
39
  init_register_runtime_providers();
40
+ init_provider_policy();
39
41
  ProviderAuthService = class {
40
42
  credentials;
41
43
  resolver;
@@ -48,10 +50,13 @@ var init_provider_auth_service = __esmMin((() => {
48
50
  this.runtimeFactory = options.runtimeFactory ?? createAuthRuntime;
49
51
  }
50
52
  async resolveApiKey(providerId, signal) {
53
+ assertCurrentModelProvider(providerId);
54
+ const source = await this.resolver.resolveApiKeySource?.(providerId);
55
+ if (source === "agent" || source === "global" || source === "env") return await this.resolver.resolveApiKey(providerId);
51
56
  if ((await this.credentials.read(providerId, { signal }))?.type === "oauth") {
52
57
  const runtime = await this.getRuntime();
53
58
  const provider = runtime.getProvider(providerId);
54
- if (provider?.auth.oauth && !provider.auth.apiKey) return (await runtime.getAuth(providerId, { signal }))?.auth.apiKey ?? null;
59
+ if (provider?.auth.oauth && (source === "oauth" || providerId === "openai" || !provider.auth.apiKey)) return (await runtime.getAuth(providerId, { signal }))?.auth.apiKey ?? null;
55
60
  }
56
61
  return await this.resolver.resolveApiKey(providerId);
57
62
  }
@@ -0,0 +1,3 @@
1
+ /** Provider identities removed from xopc's current model contract. */
2
+ export declare function isRetiredModelProvider(provider: string): boolean;
3
+ export declare function assertCurrentModelProvider(provider: string): void;
@@ -0,0 +1,14 @@
1
+ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
+ //#region src/providers/provider-policy.ts
3
+ /** Provider identities removed from xopc's current model contract. */
4
+ function isRetiredModelProvider(provider) {
5
+ return provider === "openai-codex" || provider === "azure-openai-responses";
6
+ }
7
+ function assertCurrentModelProvider(provider) {
8
+ if (provider === "openai-codex") throw new Error("Provider openai-codex is no longer supported. Select openai/<model-id> and sign in with ChatGPT again under openai.");
9
+ if (provider === "azure-openai-responses") throw new Error("Provider azure-openai-responses is no longer supported. Update the provider ID and model references to azure; the azure-openai-responses API type remains supported.");
10
+ }
11
+ var init_provider_policy = __esmMin((() => {}));
12
+ //#endregion
13
+ init_provider_policy();
14
+ export { assertCurrentModelProvider, init_provider_policy, isRetiredModelProvider };
@@ -1,5 +1,6 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { getOAuthProviderDefinition, init_registry } from "../auth/oauth/registry.js";
3
+ import { init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
3
4
  import { getModelCatalogStore, init_model_catalog_store } from "./model-catalog-store.js";
4
5
  import { XOPC_CLOUD_PROVIDER_ID, init_xopc_cloud_config, resolveXopcModelRouterUrl } from "./xopc-cloud-config.js";
5
6
  //#region src/providers/register-runtime-providers.ts
@@ -34,7 +35,10 @@ function registerRuntimeProvider(modelRuntime, source) {
34
35
  }
35
36
  /** Register dynamically discovered model providers, including their OAuth contract. */
36
37
  function registerRuntimeProviders(modelRuntime, catalog = getModelCatalogStore().load()) {
37
- for (const source of Object.values(catalog.sources)) registerRuntimeProvider(modelRuntime, source);
38
+ for (const source of Object.values(catalog.sources)) {
39
+ if (isRetiredModelProvider(source.providerId)) continue;
40
+ registerRuntimeProvider(modelRuntime, source);
41
+ }
38
42
  if (!catalog.sources["xopc-cloud"]) registerRuntimeProvider(modelRuntime, {
39
43
  providerId: XOPC_CLOUD_PROVIDER_ID,
40
44
  baseUrl: resolveXopcModelRouterUrl(),
@@ -47,6 +51,7 @@ function registerRuntimeProviders(modelRuntime, catalog = getModelCatalogStore()
47
51
  }
48
52
  var init_register_runtime_providers = __esmMin((() => {
49
53
  init_registry();
54
+ init_provider_policy();
50
55
  init_model_catalog_store();
51
56
  init_xopc_cloud_config();
52
57
  }));
@@ -2,8 +2,8 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { hasGatewayScope, init_gateway_scopes } from "../gateway/security/gateway-scopes.js";
4
4
  import { EndpointToolPolicyError } from "../endpoint-tools/policy.js";
5
- import { compactRunEvent } from "./compact-run-event.js";
6
5
  import { REALTIME_CAPABILITIES, REALTIME_HEARTBEAT_INTERVAL_MS, REALTIME_HEARTBEAT_TIMEOUT_MS, REALTIME_HELLO_TIMEOUT_MS, REALTIME_MAX_CLIENT_FRAME_BYTES, parseClientRealtimeJsonFrame, parseClientRealtimeMessage } from "../../packages/realtime-protocol/src/index.js";
6
+ import { compactRunEvent } from "./compact-run-event.js";
7
7
  import { createPreauthConnectionBudget } from "../gateway/security/preauth-connection-budget.js";
8
8
  import { RealtimeBroker } from "./broker.js";
9
9
  import { RealtimeTicketStore } from "./tickets.js";
@@ -404,6 +404,10 @@ var SessionStore = class {
404
404
  requireXopcDatabase();
405
405
  ensureSessionRecord(conversationId, this.resolveWorkspaceCwd(conversationId));
406
406
  if (update.message && isAppendOnlyLlmTranscriptMessage(update.message)) appendTranscriptEntry(conversationId, update.message);
407
+ if (update.customEntry) appendTranscriptEntry(conversationId, {
408
+ type: "custom",
409
+ ...update.customEntry
410
+ });
407
411
  });
408
412
  }
409
413
  async appendTranscriptContextEntry(key, entry) {
@@ -949,7 +953,9 @@ var SessionStore = class {
949
953
  timestamp: m.timestamp ? new Date(m.timestamp).toISOString() : void 0,
950
954
  tool_call_id: m.tool_call_id || m.toolCallId,
951
955
  tool_calls: m.tool_calls,
952
- name: m.name
956
+ name: m.name,
957
+ ...m.role === "toolResult" && m.nestedCalls ? { nestedCalls: m.nestedCalls } : {},
958
+ ...m.role === "toolResult" && typeof m.durationMs === "number" ? { durationMs: m.durationMs } : {}
953
959
  };
954
960
  if (Array.isArray(m.media) && m.media.length > 0) row.media = m.media;
955
961
  if (m.metadata && typeof m.metadata === "object") row.metadata = m.metadata;
@@ -2,6 +2,11 @@ export type SessionTranscriptUpdate = {
2
2
  conversationId?: string;
3
3
  message?: unknown;
4
4
  messageId?: string;
5
+ customEntry?: {
6
+ customType: string;
7
+ data?: unknown;
8
+ timestamp: string;
9
+ };
5
10
  };
6
11
  type SessionTranscriptListener = (update: SessionTranscriptUpdate) => void;
7
12
  export declare function onSessionTranscriptUpdate(listener: SessionTranscriptListener): () => void;
@@ -14,6 +14,7 @@ function emitSessionTranscriptUpdate(update) {
14
14
  const nextUpdate = {
15
15
  ...conversationId ? { conversationId } : {},
16
16
  ...update.message !== void 0 ? { message: update.message } : {},
17
+ ...update.customEntry ? { customEntry: update.customEntry } : {},
17
18
  ...normalizeOptionalString(update.messageId) ? { messageId: normalizeOptionalString(update.messageId) } : {}
18
19
  };
19
20
  for (const listener of SESSION_TRANSCRIPT_LISTENERS) try {
@@ -21,6 +21,8 @@ export interface Message {
21
21
  toolName?: string;
22
22
  isError?: boolean;
23
23
  details?: unknown;
24
+ nestedCalls?: import('@earendil-works/pi-ai').ToolResultMessage['nestedCalls'];
25
+ durationMs?: number;
24
26
  name?: string;
25
27
  /** Token usage from the LLM response (assistant messages only). */
26
28
  usage?: {
@@ -0,0 +1,11 @@
1
+ export interface DeviceGrantAuditEvent {
2
+ id: string;
3
+ conversationId: string;
4
+ requestorPrincipalId: string;
5
+ targetPrincipalId: string;
6
+ targetEndpointId: string;
7
+ toolName: string;
8
+ argumentsDigest: string;
9
+ event: 'issued' | 'reserved' | 'consumed' | 'revoked' | 'expired';
10
+ }
11
+ export declare function recordDeviceGrantEvent(value: DeviceGrantAuditEvent): void;
@@ -0,0 +1,10 @@
1
+ import { getSqliteDatabase, init_transaction } from "./transaction.js";
2
+ import { randomUUID } from "node:crypto";
3
+ //#region src/storage/sqlite/device-grant-audit-repository.ts
4
+ init_transaction();
5
+ function recordDeviceGrantEvent(value) {
6
+ getSqliteDatabase().prepare(`INSERT INTO device_grant_events(id, grant_id, conversation_id, requestor_principal_id,
7
+ target_principal_id, target_endpoint_id, tool_name, arguments_sha256, event, created_at_ms) VALUES (?,?,?,?,?,?,?,?,?,?)`).run(randomUUID(), value.id, value.conversationId, value.requestorPrincipalId, value.targetPrincipalId, value.targetEndpointId, value.toolName, value.argumentsDigest, value.event, Date.now());
8
+ }
9
+ //#endregion
10
+ export { recordDeviceGrantEvent };
@@ -0,0 +1,7 @@
1
+ export interface EndpointDeviceSettings {
2
+ nickname: string;
3
+ revision: number;
4
+ }
5
+ export declare function getEndpointDeviceSettings(principalId: string): EndpointDeviceSettings | undefined;
6
+ /** Compare and swap; revision zero means settings have not been created yet. */
7
+ export declare function renameEndpointDevice(principalId: string, nickname: string, expectedRevision: number): EndpointDeviceSettings | undefined;
@@ -0,0 +1,17 @@
1
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "./transaction.js";
2
+ //#region src/storage/sqlite/endpoint-device-settings-repository.ts
3
+ init_transaction();
4
+ function getEndpointDeviceSettings(principalId) {
5
+ return getSqliteDatabase().prepare("SELECT nickname, revision FROM endpoint_device_settings WHERE principal_id = ?").get(principalId);
6
+ }
7
+ /** Compare and swap; revision zero means settings have not been created yet. */
8
+ function renameEndpointDevice(principalId, nickname, expectedRevision) {
9
+ return runSqliteWriteTransaction((db) => {
10
+ if (expectedRevision === 0) {
11
+ if (!db.prepare("INSERT OR IGNORE INTO endpoint_device_settings (principal_id, nickname) VALUES (?, ?)").run(principalId, nickname).changes) return void 0;
12
+ } else if (!db.prepare("UPDATE endpoint_device_settings SET nickname = ?, revision = revision + 1 WHERE principal_id = ? AND revision = ?").run(nickname, principalId, expectedRevision).changes) return void 0;
13
+ return getEndpointDeviceSettings(principalId);
14
+ });
15
+ }
16
+ //#endregion
17
+ export { getEndpointDeviceSettings, renameEndpointDevice };
@@ -0,0 +1,5 @@
1
+ CREATE TABLE endpoint_device_settings (
2
+ principal_id TEXT PRIMARY KEY REFERENCES endpoint_principals(id) ON DELETE CASCADE,
3
+ nickname TEXT NOT NULL CHECK(length(nickname) BETWEEN 1 AND 80),
4
+ revision INTEGER NOT NULL DEFAULT 1 CHECK(revision > 0)
5
+ );
@@ -0,0 +1,13 @@
1
+ CREATE TABLE device_grant_events (
2
+ id TEXT PRIMARY KEY,
3
+ grant_id TEXT NOT NULL,
4
+ conversation_id TEXT NOT NULL,
5
+ requestor_principal_id TEXT NOT NULL,
6
+ target_principal_id TEXT NOT NULL,
7
+ target_endpoint_id TEXT NOT NULL,
8
+ tool_name TEXT NOT NULL,
9
+ arguments_sha256 TEXT NOT NULL,
10
+ event TEXT NOT NULL CHECK(event IN ('issued','reserved','consumed','revoked','expired')),
11
+ created_at_ms INTEGER NOT NULL
12
+ );
13
+ CREATE INDEX device_grant_events_conversation ON device_grant_events(conversation_id, created_at_ms);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 239;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 241;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
57
57
  */
58
58
  function applyPendingMigrations(db, options = {}) {
59
59
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
60
- const targetVersion = options.targetVersion ?? 239;
60
+ const targetVersion = options.targetVersion ?? 241;
61
61
  let currentVersion = readSchemaVersion(db);
62
62
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
63
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -95,7 +95,7 @@ function applyPendingMigrations(db, options = {}) {
95
95
  }
96
96
  /** Inspect schema version without mutating the database. */
97
97
  function inspectSchemaMigrationStatus(db, options = {}) {
98
- const appVersion = options.targetVersion ?? 239;
98
+ const appVersion = options.targetVersion ?? 241;
99
99
  const dbVersion = readSchemaVersion(db);
100
100
  if (dbVersion > appVersion) return {
101
101
  dbVersion,
@@ -137,7 +137,7 @@ var init_runner = __esmMin((() => {
137
137
  init_errors();
138
138
  log = createLogger("Sqlite:Migrations");
139
139
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
140
- XOPC_DB_SCHEMA_VERSION = 239;
140
+ XOPC_DB_SCHEMA_VERSION = 241;
141
141
  }));
142
142
  //#endregion
143
143
  init_runner();
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 239,
31
+ targetVersion: 241,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -71,6 +71,7 @@ export declare function listActiveSessionInputExecutions(): Array<{
71
71
  taskRunId?: string;
72
72
  startedAt: number;
73
73
  }>;
74
+ export declare function findSessionInputByRunId(conversationId: string, runId: string): SessionInput | undefined;
74
75
  export declare function findSessionInput(conversationId: string, clientMessageId: string): SessionInput | undefined;
75
76
  export declare function getSessionInputById(conversationId: string, id: string): SessionInput | undefined;
76
77
  export declare class SessionInstanceChangedError extends Error {
@@ -112,6 +112,10 @@ function listActiveSessionInputExecutions() {
112
112
  startedAt: row.updated_at_ms ?? Date.now()
113
113
  }));
114
114
  }
115
+ function findSessionInputByRunId(conversationId, runId) {
116
+ const row = getSqliteDatabase().prepare(`${SELECT_INPUTS} WHERE conversation_id = ? AND run_id = ? ORDER BY created_at_ms LIMIT 1`).get(conversationId, runId);
117
+ return row ? mapInput(row) : void 0;
118
+ }
115
119
  function findSessionInput(conversationId, clientMessageId) {
116
120
  const row = getSqliteDatabase().prepare(`${SELECT_INPUTS} WHERE conversation_id = ? AND client_message_id = ?`).get(conversationId, clientMessageId);
117
121
  return row ? mapInput(row) : void 0;
@@ -251,4 +255,4 @@ var init_session_input_repository = __esmMin((() => {
251
255
  }));
252
256
  //#endregion
253
257
  init_session_input_repository();
254
- export { SessionInstanceChangedError, bumpSessionInputRevision, cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, finishSessionInputRun, getSessionInputById, getSessionInputState, init_session_input_repository, insertSessionInput, listActiveSessionInputExecutions, listActiveSessionInputRuns, listTaskUpdateRunIds, listTaskUpdateTriggers, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus };
258
+ export { SessionInstanceChangedError, bumpSessionInputRevision, cancelQueuedSessionInput, claimNextSessionInput, findSessionInput, findSessionInputByRunId, finishSessionInputRun, getSessionInputById, getSessionInputState, init_session_input_repository, insertSessionInput, listActiveSessionInputExecutions, listActiveSessionInputRuns, listTaskUpdateRunIds, listTaskUpdateTriggers, mutateQueuedSessionInput, recoverSessionInputState, setSessionInputStatus };
@@ -7,8 +7,8 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
7
7
  import { init_paths } from "../../config/paths.js";
8
8
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
9
9
  import { parseModelRef } from "../../agent/models/selection.js";
10
- import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
11
10
  import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
11
+ import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
12
12
  import { buildTuiTranscriptTree, transcriptTreeEntryIdToRowNumber } from "../tui-transcript-tree.js";
13
13
  import { computeTuiSessionStats } from "../tui-session-stats.js";
14
14
  import { createRequire } from "node:module";
@@ -253,11 +253,11 @@ export declare const XOPC_TUI_KEYBINDINGS: {
253
253
  readonly description: "Move cursor word right";
254
254
  };
255
255
  readonly "tui.editor.cursorLineStart": {
256
- readonly defaultKeys: ["home", "ctrl+home", "ctrl+a"];
256
+ readonly defaultKeys: ["home", "ctrl+a"];
257
257
  readonly description: "Move to line start";
258
258
  };
259
259
  readonly "tui.editor.cursorLineEnd": {
260
- readonly defaultKeys: ["end", "ctrl+end", "ctrl+e"];
260
+ readonly defaultKeys: ["end", "ctrl+e"];
261
261
  readonly description: "Move to line end";
262
262
  };
263
263
  readonly "tui.editor.jumpForward": {
@@ -401,11 +401,11 @@ export declare const XOPC_TUI_KEYBINDINGS: {
401
401
  readonly description: "Close transcript search";
402
402
  };
403
403
  readonly "tui.altScreen.top": {
404
- readonly defaultKeys: "home";
404
+ readonly defaultKeys: "ctrl+home";
405
405
  readonly description: "Scroll viewport to top";
406
406
  };
407
407
  readonly "tui.altScreen.bottom": {
408
- readonly defaultKeys: "end";
408
+ readonly defaultKeys: "ctrl+end";
409
409
  readonly description: "Scroll viewport to bottom";
410
410
  };
411
411
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.369",
4
- "description": "Local-first personal AI for the one-person company, with durable context, tasks, workflows, automations, and local or cloud models.",
3
+ "version": "0.0.370",
4
+ "description": "Local-first personal AI with Ada, task delegation, files, projects, workflows, and automations. Use cloud or local models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
@@ -36,6 +36,7 @@
36
36
  "ai-memory",
37
37
  "automation",
38
38
  "byok",
39
+ "browser-automation",
39
40
  "cli",
40
41
  "desktop-app",
41
42
  "electron",
@@ -66,10 +67,12 @@
66
67
  },
67
68
  "dependencies": {
68
69
  "@composio/core": "0.21.0",
69
- "@earendil-works/pi-agent-core": "0.87.0",
70
- "@earendil-works/pi-ai": "0.87.0",
71
- "@earendil-works/pi-coding-agent": "0.87.0",
72
- "@earendil-works/pi-tui": "0.87.0",
70
+ "@dicebear/collection": "9.4.2",
71
+ "@dicebear/core": "9.4.2",
72
+ "@earendil-works/pi-agent-core": "1.1.0",
73
+ "@earendil-works/pi-ai": "1.1.0",
74
+ "@earendil-works/pi-coding-agent": "1.1.0",
75
+ "@earendil-works/pi-tui": "1.1.0",
73
76
  "@grammyjs/runner": "^2.0.3",
74
77
  "@hono/node-server": "^2.0.4",
75
78
  "@inquirer/prompts": "^8.5.0",
@@ -103,6 +106,7 @@
103
106
  "pino": "^10.3.1",
104
107
  "pino-pretty": "^13.1.3",
105
108
  "proper-lockfile": "^4.1.2",
109
+ "quickjs-wasi": "3.6.2",
106
110
  "semver": "^7.8.1",
107
111
  "sharp": "0.35.5",
108
112
  "silk-wasm": "^3.7.1",
@@ -165,12 +169,14 @@
165
169
  "@xopcai/computer-control-contract": "0.1.0",
166
170
  "@xopcai/endpoint-tools-client": "0.0.0",
167
171
  "@xopcai/endpoint-tools-protocol": "0.0.0",
172
+ "@xopcai/image-providers": "0.1.0",
168
173
  "@xopcai/gateway-contract": "0.0.0",
169
174
  "@xopcai/realtime-client": "0.0.0",
170
- "@xopcai/realtime-protocol": "0.0.0",
171
- "@xopcai/image-providers": "0.1.0"
175
+ "@xopcai/realtime-protocol": "0.0.0"
172
176
  },
173
177
  "scripts": {
178
+ "generate:device-tools": "tsx scripts/devices/generate-mobile-tools.mts",
179
+ "check:device-tools": "tsx scripts/devices/generate-mobile-tools.mts --check",
174
180
  "assets:brand": "node scripts/generate-brand-assets.mjs",
175
181
  "assets:brand:check": "node scripts/generate-brand-assets.mjs --check",
176
182
  "build:node": "node scripts/tsdown-build.mjs",
@@ -182,6 +188,11 @@
182
188
  "docker:compose:up": "sh -c 'if docker compose version >/dev/null 2>&1; then DOCKER_BUILDKIT=1 docker compose up --build xopc-gateway; else COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose up --build xopc-gateway; fi'",
183
189
  "docker:compose:down": "sh -c 'if docker compose version >/dev/null 2>&1; then docker compose down; else docker-compose down; fi'",
184
190
  "typecheck": "tsc --noEmit -p tsconfig.json",
191
+ "test:codemode:gateway": "node --import tsx/esm scripts/verify-codemode-gateway.mjs",
192
+ "test:tool-discovery:gateway": "cross-env XOPC_TOOL_DISCOVERY_SMOKE=1 node --import tsx/esm scripts/verify-codemode-gateway.mjs",
193
+ "test:native-tools:gateway": "cross-env XOPC_NATIVE_TOOLS_SMOKE=1 node --import tsx/esm scripts/verify-codemode-gateway.mjs",
194
+ "eval:codemode": "tsx scripts/evaluate-codemode.mts",
195
+ "eval:codemode:check": "tsc -p scripts/codemode-evaluation/tsconfig.json",
185
196
  "build:web": "pnpm -C web run build",
186
197
  "dev:web": "pnpm -C web run dev",
187
198
  "android:mobile": "pnpm run mobile:android:build",