@xopcai/xopc 0.0.368 → 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 (516) 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/_locales/en/messages.json +30 -1
  9. package/dist/browser-ext/_locales/zh_CN/messages.json +30 -1
  10. package/dist/browser-ext/dist/assets/{auth-beGtbLPS.js → page-context-BeworyNB.js} +1331 -1355
  11. package/dist/browser-ext/dist/assets/{sidepanel-BT0ojEzG.css → sidepanel-Ccl0eSa1.css} +43 -0
  12. package/dist/browser-ext/dist/background.js +680 -182
  13. package/dist/browser-ext/dist/sidepanel.html +2 -2
  14. package/dist/browser-ext/dist/sidepanel.js +393 -194
  15. package/dist/browser-ext/manifest.json +2 -8
  16. package/dist/extensions/telegram/xopc.extension.json +1 -1
  17. package/dist/gateway/static/root/assets/{activity-store-D9ZMh5ZR.js → activity-store-BQ3PMp2q.js} +1 -1
  18. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bj3rvcTm.js → agent-avatar-dicebear-C61i1QbX.js} +1 -1
  19. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-0fCR1DHx.js +1 -0
  20. package/dist/gateway/static/root/assets/agent-plugin-dialog-Di99mUTT.js +1 -0
  21. package/dist/gateway/static/root/assets/agents-BRZZmYH_.js +66 -0
  22. package/dist/gateway/static/root/assets/{agents-admin-api-B5QDepbW.js → agents-admin-api-HBZvVyzF.js} +1 -1
  23. package/dist/gateway/static/root/assets/{app-management-settings-panel-2rTEtB_X.js → app-management-settings-panel-noqqxkds.js} +1 -1
  24. package/dist/gateway/static/root/assets/{appearance-settings-BPVBS80k.js → appearance-settings-DG8QN0gR.js} +1 -1
  25. package/dist/gateway/static/root/assets/{apps-page-1FuKlZYP.js → apps-page-CgiyzFYo.js} +1 -1
  26. package/dist/gateway/static/root/assets/{archive-plugin-BbT1O7oK.js → archive-plugin-BO3I9zRP.js} +1 -1
  27. package/dist/gateway/static/root/assets/{automations-page-DjwP_h8h.js → automations-page-CgAcRFDS.js} +1 -1
  28. package/dist/gateway/static/root/assets/automations-workspace-BIkxIpab.js +6 -0
  29. package/dist/gateway/static/root/assets/{binary-plugins-gS7Wg68v.js → binary-plugins-gFD7vH9R.js} +1 -1
  30. package/dist/gateway/static/root/assets/{block-editor-DbwMaivP.js → block-editor-B1VE-jAe.js} +2 -2
  31. package/dist/gateway/static/root/assets/browser-automation-inputs-DxRoKFun.js +1 -0
  32. package/dist/gateway/static/root/assets/browser-automations-page-CIjyMS6f.js +3 -0
  33. package/dist/gateway/static/root/assets/browser-settings-page-BMAivBfp.js +3 -0
  34. package/dist/gateway/static/root/assets/{capabilities-Lswa0hv8.js → capabilities-CY4SiHcP.js} +1 -1
  35. package/dist/gateway/static/root/assets/{capabilities-Dd1PZRQw.js → capabilities-gjQtMhKu.js} +1 -1
  36. package/dist/gateway/static/root/assets/capabilities-page-DRdcfo68.js +2 -0
  37. package/dist/gateway/static/root/assets/{capabilities-settings-panel-DTHR1DrJ.js → capabilities-settings-panel-ZuL6pWjM.js} +4 -4
  38. package/dist/gateway/static/root/assets/{capability-header-actions-494dnJsj.js → capability-header-actions-D0GC1FEv.js} +1 -1
  39. package/dist/gateway/static/root/assets/channels-CgE22Pzd.js +1 -0
  40. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bl7-Zk-x.js → chat-terminal-dock-CEjh1utz.js} +2 -2
  41. package/dist/gateway/static/root/assets/{computer-settings-page-ByExKr_6.js → computer-settings-page-vFHJAmQr.js} +1 -1
  42. package/dist/gateway/static/root/assets/{connector-service-page-BK_5aFxO.js → connector-service-page-DTrwZ4kV.js} +1 -1
  43. package/dist/gateway/static/root/assets/connectors-page-DRcMiTWu.js +1 -0
  44. package/dist/gateway/static/root/assets/copy-text-row-C1gaJwlZ.js +1 -0
  45. package/dist/gateway/static/root/assets/{date-picker-BXJv6472.js → date-picker-NfGIPSYY.js} +1 -1
  46. package/dist/gateway/static/root/assets/dependency-picker-CqguveUi.js +1 -0
  47. package/dist/gateway/static/root/assets/{desktop-pet-DWNEC3mk.js → desktop-pet-CTx1zkJm.js} +1 -1
  48. package/dist/gateway/static/root/assets/{desktop-pet-settings-BYwlxGiN.js → desktop-pet-settings-BRDS3EGc.js} +1 -1
  49. package/dist/gateway/static/root/assets/{device-pairing-wizard-BAc4F35b.js → device-pairing-wizard-Du4Ciuyw.js} +1 -1
  50. package/dist/gateway/static/root/assets/{directory-picker-path-field-D26tSY8Z.js → directory-picker-path-field-CjstlxFl.js} +1 -1
  51. package/dist/gateway/static/root/assets/{extension-debug-page-xYIGNegB.js → extension-debug-page-BfAtjhoK.js} +1 -1
  52. package/dist/gateway/static/root/assets/{extension-page-BoQ1-3AW.js → extension-page-BJmudejr.js} +1 -1
  53. package/dist/gateway/static/root/assets/{extension-provider-Cw_JU6RR.js → extension-provider-Br6LXyIj.js} +1 -1
  54. package/dist/gateway/static/root/assets/{extension-settings-page-BH5TFGPe.js → extension-settings-page-UvmHniyz.js} +1 -1
  55. package/dist/gateway/static/root/assets/{fallback-models-04Wqmw14.js → fallback-models-euw9MGdt.js} +1 -1
  56. package/dist/gateway/static/root/assets/{gateway-config-swr-CNf0ZeRw.js → gateway-config-swr-7RKqgU_U.js} +1 -1
  57. package/dist/gateway/static/root/assets/gateway-realtime-F6D4A7N5.js +1 -0
  58. package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +1 -0
  59. package/dist/gateway/static/root/assets/{gateway-settings-BqvCJVUC.js → gateway-settings-C7roPHh1.js} +1 -1
  60. package/dist/gateway/static/root/assets/{gateway-startup-retry-DIxHacUw.js → gateway-startup-retry-jiV5sbEX.js} +1 -1
  61. package/dist/gateway/static/root/assets/home-page-BGNCTtM3.js +2 -0
  62. package/dist/gateway/static/root/assets/{image-generation-api-CS0q0Kto.js → image-generation-api-DO4mXb6I.js} +1 -1
  63. package/dist/gateway/static/root/assets/{imports-page-n_rSLo6b.js → imports-page-DxCoT0VV.js} +1 -1
  64. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
  65. package/dist/gateway/static/root/assets/index-FCEE325-.js +106 -0
  66. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-tVkrHbYF.js → keyboard-shortcuts-settings-CnLln9Ds.js} +1 -1
  67. package/dist/gateway/static/root/assets/{local-app-workbench-page-L8tYuas0.js → local-app-workbench-page-yXRkSrEj.js} +1 -1
  68. package/dist/gateway/static/root/assets/{local-apps-page-SSJ9B1bH.js → local-apps-page-D46buzTk.js} +1 -1
  69. package/dist/gateway/static/root/assets/local-session-drafts-pox8evDV.js +1 -0
  70. package/dist/gateway/static/root/assets/{locale-store-D6_rF-qT.js → locale-store-COVscAqC.js} +1 -1
  71. package/dist/gateway/static/root/assets/logs-page-DmcCHnH0.js +2 -0
  72. package/dist/gateway/static/root/assets/management-settings-khN1ThNL.js +1 -0
  73. package/dist/gateway/static/root/assets/{markdown-view-_xwUuKce.js → markdown-view-B_qnAcW2.js} +1 -1
  74. package/dist/gateway/static/root/assets/{media-plugins-C631CDu4.js → media-plugins-C0Pc-wSY.js} +1 -1
  75. package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +3 -0
  76. package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +1 -0
  77. package/dist/gateway/static/root/assets/note-detail-panel-C_t58yha.js +5 -0
  78. package/dist/gateway/static/root/assets/{notes-api-vIZWQ9Yt.js → notes-api-sBgBcyLW.js} +1 -1
  79. package/dist/gateway/static/root/assets/notes-page-BJ0QS6xx.js +8 -0
  80. package/dist/gateway/static/root/assets/{page-context-capture-button-BlPDM7GM.js → page-context-capture-button-DfRODHv1.js} +1 -1
  81. package/dist/gateway/static/root/assets/personal-page-CiiXwwQE.js +1 -0
  82. package/dist/gateway/static/root/assets/{product-open-page-BJjWvoER.js → product-open-page-_Bp6HRmm.js} +1 -1
  83. package/dist/gateway/static/root/assets/{product-preview-content-CEd4E7Gf.js → product-preview-content-BUdiO0Ct.js} +1 -1
  84. package/dist/gateway/static/root/assets/project-detail-page-Clb-fXYk.js +1 -0
  85. package/dist/gateway/static/root/assets/{projects-page-lszV8HuS.js → projects-page-D9JEEqhh.js} +1 -1
  86. package/dist/gateway/static/root/assets/{registry-api-uJnjqTcn.js → registry-api-Bh9UBb-f.js} +1 -1
  87. package/dist/gateway/static/root/assets/remote-access-hub-CmyTq3_l.js +1 -0
  88. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CjnNQYW8.js → runtime-tools-settings-panel-B1_inj8L.js} +1 -1
  89. package/dist/gateway/static/root/assets/{scenes-page-B3T3dDOR.js → scenes-page-CUNAZN2_.js} +2 -2
  90. package/dist/gateway/static/root/assets/{schema-form-DT3c4Vd_.js → schema-form-CfT-9UVw.js} +1 -1
  91. package/dist/gateway/static/root/assets/{send-session-input-CICkGwn-.js → send-session-input-BW40VHiL.js} +1 -1
  92. package/dist/gateway/static/root/assets/{session-api-BcQodoAu.js → session-api-yjpEz4pP.js} +1 -1
  93. package/dist/gateway/static/root/assets/session-manager-BqlvrjPE.js +16 -0
  94. package/dist/gateway/static/root/assets/sessions-page-CXZKScvu.js +1 -0
  95. package/dist/gateway/static/root/assets/settings-advanced-gate-B2vKXmzg.js +1 -0
  96. package/dist/gateway/static/root/assets/{settings-page-D-PZjcss.js → settings-page-1h3vyueg.js} +1 -1
  97. package/dist/gateway/static/root/assets/setup-status-panel-Cqc7UlZy.js +1 -0
  98. package/dist/gateway/static/root/assets/{share-link-dialog-CWS8EkJS.js → share-link-dialog-HCHM8qnf.js} +1 -1
  99. package/dist/gateway/static/root/assets/{share-preview-page-23NJAKiq.js → share-preview-page-Ce6FNWt1.js} +1 -1
  100. package/dist/gateway/static/root/assets/{shares-api-iKhHbvBD.js → shares-api-c0dfWz6h.js} +1 -1
  101. package/dist/gateway/static/root/assets/shares-settings-Dh5jisCK.js +1 -0
  102. package/dist/gateway/static/root/assets/{skill-api-C-MWdQwl.js → skill-api-deDZeQS8.js} +1 -1
  103. package/dist/gateway/static/root/assets/{skill-reload-api-iy02aB13.js → skill-reload-api-Ge5XymHa.js} +1 -1
  104. package/dist/gateway/static/root/assets/skills-page-DZozl9U_.js +2 -0
  105. package/dist/gateway/static/root/assets/system-settings-panel-CtzyMxqq.js +1 -0
  106. package/dist/gateway/static/root/assets/{task-detail-page-B2SIEyhZ.js → task-detail-page-5f_V0h-p.js} +2 -2
  107. package/dist/gateway/static/root/assets/{task-expandable-content-D2LRR4BC.js → task-expandable-content-hYcgCEE3.js} +1 -1
  108. package/dist/gateway/static/root/assets/{theme-store-BJfhz-Zq.js → theme-store-BOfCKgl6.js} +1 -1
  109. package/dist/gateway/static/root/assets/{tracing-settings-page-aHD56iaS.js → tracing-settings-page-DDWFXcST.js} +1 -1
  110. package/dist/gateway/static/root/assets/{tunnel-api-BCf8CfTC.js → tunnel-api-vMtlbJ-m.js} +1 -1
  111. package/dist/gateway/static/root/assets/{usage-page-B4XUkuJd.js → usage-page-B1-BCW8U.js} +1 -1
  112. package/dist/gateway/static/root/assets/{use-autosave-BnnTw9RE.js → use-autosave-CSckcjFx.js} +1 -1
  113. package/dist/gateway/static/root/assets/{use-composer-attachments-Itczg0y1.js → use-composer-attachments-DJya1hIL.js} +1 -1
  114. package/dist/gateway/static/root/assets/use-file-preview-expanded-C5ONO7sF.js +2 -0
  115. package/dist/gateway/static/root/assets/user-model-page-D4BSq9HJ.js +2 -0
  116. package/dist/gateway/static/root/assets/{voice-api-key-field-BphJku8x.js → voice-api-key-field-GEw5x2fU.js} +1 -1
  117. package/dist/gateway/static/root/assets/{voice-config-api-B4u4coFj.js → voice-config-api-3yyVwXln.js} +1 -1
  118. package/dist/gateway/static/root/assets/{work-discovery-overlay-jgOEP1xw.js → work-discovery-overlay-CjiNYJV5.js} +1 -1
  119. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-N69crzRu.js → workflow-run-setup-panel-DJOetXvm.js} +2 -2
  120. package/dist/gateway/static/root/assets/workflows-page-CcAPFh2R.js +6 -0
  121. package/dist/gateway/static/root/assets/{workspace-api-Lzv6GDO8.js → workspace-api-WhbMvdBE.js} +2 -2
  122. package/dist/gateway/static/root/index.html +32 -34
  123. package/dist/package.js +1 -1
  124. package/dist/packages/browser-control-contract/src/automation.js +213 -0
  125. package/dist/packages/browser-control-contract/src/index.js +43 -12
  126. package/dist/packages/endpoint-tools-client/src/index.js +189 -0
  127. package/dist/packages/endpoint-tools-protocol/src/bridge.js +105 -0
  128. package/dist/packages/endpoint-tools-protocol/src/index.js +93 -2
  129. package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
  130. package/dist/packages/gateway-contract/src/gateway-scopes.js +3 -1
  131. package/dist/packages/gateway-contract/src/notifications.js +1 -0
  132. package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
  133. package/dist/packages/realtime-protocol/src/voice.js +9 -3
  134. package/dist/src/agent/agent-manager.js +22 -26
  135. package/dist/src/agent/coding/repository-instructions.js +8 -1
  136. package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
  137. package/dist/src/agent/embedded/codemode-extension.js +232 -0
  138. package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
  139. package/dist/src/agent/embedded/codemode-output.js +34 -0
  140. package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
  141. package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
  142. package/dist/src/agent/embedded/model-runtime.js +5 -2
  143. package/dist/src/agent/embedded/run-for-session.js +10 -1
  144. package/dist/src/agent/embedded/run-turn.js +10 -3
  145. package/dist/src/agent/embedded/session-runner.d.ts +9 -1
  146. package/dist/src/agent/embedded/session-runner.js +111 -23
  147. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  148. package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
  149. package/dist/src/agent/embedded/subscribe-session.js +14 -4
  150. package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
  151. package/dist/src/agent/embedded/tool-metadata.js +38 -0
  152. package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
  153. package/dist/src/agent/embedded/tool-search-extension.js +31 -0
  154. package/dist/src/agent/embedded/types.d.ts +7 -0
  155. package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
  156. package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
  157. package/dist/src/agent/external-tools/endpoint-provider.js +148 -56
  158. package/dist/src/agent/external-tools/extension-provider.js +8 -1
  159. package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
  160. package/dist/src/agent/external-tools/gateway-tools.js +45 -22
  161. package/dist/src/agent/external-tools/index.js +46 -14
  162. package/dist/src/agent/external-tools/memory-provider.js +8 -1
  163. package/dist/src/agent/external-tools/read-policy.js +2 -1
  164. package/dist/src/agent/external-tools/service.d.ts +2 -0
  165. package/dist/src/agent/external-tools/service.js +25 -3
  166. package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
  167. package/dist/src/agent/external-tools/tool-registry.js +14 -0
  168. package/dist/src/agent/external-tools/types.d.ts +8 -1
  169. package/dist/src/agent/external-tools/types.js +0 -1
  170. package/dist/src/agent/mcp/config.d.ts +18 -0
  171. package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
  172. package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
  173. package/dist/src/agent/mcp/native-mcp.js +73 -0
  174. package/dist/src/agent/service.js +2 -5
  175. package/dist/src/agent/skills/installer.js +1 -1
  176. package/dist/src/agent/skills/skill-manager.js +1 -1
  177. package/dist/src/agent/skills/skill-sources.js +1 -1
  178. package/dist/src/agent/source-context/index.d.ts +0 -1
  179. package/dist/src/agent/source-context/index.js +1 -2
  180. package/dist/src/agent/source-context/injector.js +1 -0
  181. package/dist/src/agent/source-context/types.d.ts +2 -2
  182. package/dist/src/agent/source-context/types.js +1 -1
  183. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  184. package/dist/src/agent/tool-manuals/browser.js +3 -3
  185. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  186. package/dist/src/agent/tools/browser/tool/schemas.d.ts +0 -13
  187. package/dist/src/agent/tools/browser/tool/schemas.js +0 -4
  188. package/dist/src/agent/tools/browser-automation-tool.d.ts +74 -1
  189. package/dist/src/agent/tools/browser-automation-tool.js +52 -6
  190. package/dist/src/agent/tools/cli-clarify.js +1 -1
  191. package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
  192. package/dist/src/agent/tools/codemode-permissions.js +23 -0
  193. package/dist/src/agent/tools/dataBatch.js +3 -1
  194. package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
  195. package/dist/src/agent/tools/factory.js +4 -3
  196. package/dist/src/agent/transcript/provider-capabilities.js +0 -1
  197. package/dist/src/agent/transcript/transcript-policy.js +1 -2
  198. package/dist/src/agent-config/schema.d.ts +28 -0
  199. package/dist/src/agent-config/schema.js +7 -0
  200. package/dist/src/auth/credentials.js +7 -20
  201. package/dist/src/auth/model-credential-store.js +11 -4
  202. package/dist/src/auth/oauth/index.d.ts +1 -1
  203. package/dist/src/auth/oauth/index.js +3 -3
  204. package/dist/src/auth/oauth/openai.d.ts +2 -0
  205. package/dist/src/auth/oauth/openai.js +90 -0
  206. package/dist/src/auth/oauth/registry.js +3 -3
  207. package/dist/src/auth/oauth/types.d.ts +1 -0
  208. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  209. package/dist/src/auth/sync-provider-auth.js +5 -0
  210. package/dist/src/automations/capabilities/write.d.ts +2 -0
  211. package/dist/src/automations/domain/types.d.ts +11 -0
  212. package/dist/src/automations/domain/validation.d.ts +4 -0
  213. package/dist/src/automations/domain/validation.js +1 -0
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
  215. package/dist/src/automations/service/action-executor.js +11 -3
  216. package/dist/src/automations/service/automation-service.d.ts +1 -0
  217. package/dist/src/automations/service/automation-service.js +13 -1
  218. package/dist/src/bootstrap/application-state.js +1 -1
  219. package/dist/src/browser/automations/repository.d.ts +4 -0
  220. package/dist/src/browser/automations/repository.js +27 -6
  221. package/dist/src/browser/automations/runner.js +101 -9
  222. package/dist/src/browser/automations/runtime-service.js +4 -3
  223. package/dist/src/browser/automations/schema.d.ts +84 -1
  224. package/dist/src/browser/automations/schema.js +68 -2
  225. package/dist/src/browser/automations/service.d.ts +78 -1
  226. package/dist/src/browser/automations/service.js +36 -4
  227. package/dist/src/browser/automations/types.d.ts +19 -4
  228. package/dist/src/browser/drivers/extension-driver.d.ts +5 -5
  229. package/dist/src/browser/drivers/extension-driver.js +10 -10
  230. package/dist/src/browser/drivers/playwright-driver.js +46 -0
  231. package/dist/src/browser/index.d.ts +1 -2
  232. package/dist/src/browser/index.js +2 -3
  233. package/dist/src/browser/policy/browser-policy.d.ts +0 -1
  234. package/dist/src/browser/policy/browser-policy.js +1 -4
  235. package/dist/src/browser/providers/index.d.ts +1 -1
  236. package/dist/src/browser/providers/index.js +2 -2
  237. package/dist/src/browser/providers/realtime-extension.d.ts +1 -1
  238. package/dist/src/browser/providers/realtime-extension.js +5 -1
  239. package/dist/src/browser/recordings/service.d.ts +22 -0
  240. package/dist/src/browser/recordings/service.js +160 -0
  241. package/dist/src/browser/runtime/browser-runtime.d.ts +1 -1
  242. package/dist/src/browser/runtime/browser-runtime.js +19 -56
  243. package/dist/src/chat-commands/builtins/model.js +2 -2
  244. package/dist/src/cli/command-manifest.js +1 -1
  245. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  246. package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
  247. package/dist/src/cli/commands/mcp.js +36 -2
  248. package/dist/src/cli/commands/models.js +1 -1
  249. package/dist/src/cli/utils/oauth-login.js +2 -2
  250. package/dist/src/computer/runtime.js +2 -2
  251. package/dist/src/config/index.js +3 -3
  252. package/dist/src/config/mcp-config-normalize.d.ts +0 -3
  253. package/dist/src/config/mcp-config-normalize.js +2 -22
  254. package/dist/src/config/models-json.d.ts +0 -5
  255. package/dist/src/config/models-json.js +13 -4
  256. package/dist/src/config/paths.d.ts +0 -1
  257. package/dist/src/config/paths.js +1 -4
  258. package/dist/src/config/schema.d.ts +142 -48
  259. package/dist/src/config/schema.js +64 -47
  260. package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
  261. package/dist/src/connectors/auth-provider-registry.js +1 -21
  262. package/dist/src/connectors/china-catalog.js +5 -5
  263. package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
  264. package/dist/src/connectors/connection-recovery-service.js +3 -105
  265. package/dist/src/connectors/health.d.ts +1 -2
  266. package/dist/src/connectors/health.js +2 -101
  267. package/dist/src/connectors/types.d.ts +1 -1
  268. package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
  269. package/dist/src/endpoint-tools/binding-service.js +14 -2
  270. package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
  271. package/dist/src/endpoint-tools/bridge-host.js +166 -0
  272. package/dist/src/endpoint-tools/bridge.d.ts +27 -0
  273. package/dist/src/endpoint-tools/bridge.js +88 -0
  274. package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
  275. package/dist/src/endpoint-tools/capability-catalog.js +8 -0
  276. package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
  277. package/dist/src/endpoint-tools/grant-service.js +113 -0
  278. package/dist/src/endpoint-tools/index.js +1 -1
  279. package/dist/src/endpoint-tools/invocation-service.js +6 -2
  280. package/dist/src/endpoint-tools/location-task.d.ts +22 -0
  281. package/dist/src/endpoint-tools/location-task.js +114 -0
  282. package/dist/src/endpoint-tools/policy.js +20 -4
  283. package/dist/src/endpoint-tools/registry.d.ts +2 -0
  284. package/dist/src/endpoint-tools/registry.js +9 -0
  285. package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
  286. package/dist/src/endpoint-tools/result-projector.js +31 -0
  287. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  288. package/dist/src/endpoint-tools/runtime.js +15 -2
  289. package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
  290. package/dist/src/endpoint-tools/target-resolver.js +27 -0
  291. package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
  292. package/dist/src/endpoint-tools/turn-context.js +29 -0
  293. package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
  294. package/dist/src/extensions/agent-plugins/auth.js +2 -19
  295. package/dist/src/extensions/agent-plugins/credentials.js +3 -19
  296. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
  297. package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
  298. package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
  299. package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
  300. package/dist/src/extensions/agent-plugins/sources.js +2 -2
  301. package/dist/src/extensions/agent-plugins/store.js +1 -3
  302. package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
  303. package/dist/src/extensions/agent-plugins/validation.js +13 -20
  304. package/dist/src/gateway/agents-admin.d.ts +5 -0
  305. package/dist/src/gateway/agents-admin.js +56 -1
  306. package/dist/src/gateway/chat-stream/mapper.js +9 -0
  307. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
  308. package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
  309. package/dist/src/gateway/hono/lib/config-payload.js +2 -5
  310. package/dist/src/gateway/hono/oauth-async.js +9 -2
  311. package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
  312. package/dist/src/gateway/hono/routes/agents.js +4 -3
  313. package/dist/src/gateway/hono/routes/browser-automations.js +23 -7
  314. package/dist/src/gateway/hono/routes/browser-recordings.d.ts +3 -0
  315. package/dist/src/gateway/hono/routes/browser-recordings.js +78 -0
  316. package/dist/src/gateway/hono/routes/browser.js +1 -34
  317. package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
  318. package/dist/src/gateway/hono/routes/connectors.js +5 -60
  319. package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
  320. package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
  321. package/dist/src/gateway/hono/routes/device-push.js +1 -0
  322. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +7 -0
  323. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
  324. package/dist/src/gateway/hono/routes/endpoint-tools.js +53 -3
  325. package/dist/src/gateway/hono/routes/home.js +1 -1
  326. package/dist/src/gateway/hono/routes/lazy-bundles.js +25 -1
  327. package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
  328. package/dist/src/gateway/hono/routes/mcp.js +11 -237
  329. package/dist/src/gateway/hono/routes/personal-agent.js +35 -0
  330. package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
  331. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
  332. package/dist/src/gateway/hono/routes/session-input-handler.js +25 -1
  333. package/dist/src/gateway/hono/routes/voice.js +5 -2
  334. package/dist/src/gateway/security/gateway-scopes.js +3 -1
  335. package/dist/src/gateway/service/agent-runner.js +1 -0
  336. package/dist/src/gateway/service/config-coordinator.js +2 -5
  337. package/dist/src/gateway/service/marketplace-service.js +2 -2
  338. package/dist/src/gateway/service/run-gateway-agent.js +13 -5
  339. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  340. package/dist/src/gateway/service/session-input-coordinator.js +29 -9
  341. package/dist/src/gateway/service/sessions-api.js +0 -6
  342. package/dist/src/gateway/service.js +3 -12
  343. package/dist/src/gateway/session-reset-service.js +0 -6
  344. package/dist/src/home-intelligence/generator.d.ts +2 -0
  345. package/dist/src/home-intelligence/generator.js +53 -4
  346. package/dist/src/home-intelligence/host.d.ts +2 -1
  347. package/dist/src/home-intelligence/host.js +23 -3
  348. package/dist/src/imports/compatibility.js +12 -10
  349. package/dist/src/mcp/channel-bridge.js +1 -1
  350. package/dist/src/migrations/cloud-public-models.js +1 -0
  351. package/dist/src/notifications/clarification.d.ts +5 -0
  352. package/dist/src/notifications/clarification.js +66 -0
  353. package/dist/src/notifications/device-store.js +1 -0
  354. package/dist/src/notifications/harmony-push.d.ts +1 -0
  355. package/dist/src/notifications/harmony-push.js +3 -1
  356. package/dist/src/notifications/planner.d.ts +1 -0
  357. package/dist/src/notifications/service.d.ts +2 -2
  358. package/dist/src/notifications/service.js +20 -4
  359. package/dist/src/notifications/store.d.ts +2 -0
  360. package/dist/src/notifications/store.js +7 -1
  361. package/dist/src/notifications/types.d.ts +1 -0
  362. package/dist/src/notifications/types.js +1 -0
  363. package/dist/src/providers/env-keys.js +1 -1
  364. package/dist/src/providers/index.js +26 -24
  365. package/dist/src/providers/model-call.d.ts +0 -2
  366. package/dist/src/providers/model-call.js +2 -6
  367. package/dist/src/providers/model-registry.js +4 -2
  368. package/dist/src/providers/model-supplements.d.ts +3 -3
  369. package/dist/src/providers/model-supplements.js +6 -27
  370. package/dist/src/providers/presentation.js +3 -8
  371. package/dist/src/providers/prompt-cache-plan.js +1 -1
  372. package/dist/src/providers/provider-auth-service.d.ts +1 -1
  373. package/dist/src/providers/provider-auth-service.js +7 -2
  374. package/dist/src/providers/provider-policy.d.ts +3 -0
  375. package/dist/src/providers/provider-policy.js +14 -0
  376. package/dist/src/providers/register-runtime-providers.js +6 -1
  377. package/dist/src/realtime/runtime.js +1 -1
  378. package/dist/src/session/store.js +7 -1
  379. package/dist/src/session/transcript-events.d.ts +5 -0
  380. package/dist/src/session/transcript-events.js +1 -0
  381. package/dist/src/session/types.d.ts +2 -0
  382. package/dist/src/storage/sqlite/clarification-wait-repository.js +1 -0
  383. package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
  384. package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
  385. package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
  386. package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
  387. package/dist/src/storage/sqlite/migrations/238_browser_record_replay.sql +45 -0
  388. package/dist/src/storage/sqlite/migrations/239_clarification_notifications.sql +26 -0
  389. package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
  390. package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
  391. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  392. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  393. package/dist/src/storage/sqlite/schema.js +1 -1
  394. package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
  395. package/dist/src/storage/sqlite/session-input-repository.js +5 -1
  396. package/dist/src/tasks/home-query-service.d.ts +1 -1
  397. package/dist/src/tasks/home-query-service.js +6 -2
  398. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  399. package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
  400. package/dist/src/voice/dashscope/streaming-tts-stream.d.ts +2 -1
  401. package/dist/src/voice/dashscope/streaming-tts-stream.js +135 -79
  402. package/dist/src/voice/realtime/agentEngine.js +78 -1
  403. package/dist/src/voice/realtime/speakable-segmenter.d.ts +2 -0
  404. package/dist/src/voice/realtime/speakable-segmenter.js +30 -0
  405. package/dist/src/voice/tts/providers/alibaba-speech.js +17 -1
  406. package/dist/src/voice/tts/speak-core.d.ts +3 -0
  407. package/dist/src/voice/tts/speak-core.js +21 -1
  408. package/dist/src/voice/tts/speech-provider-types.d.ts +8 -0
  409. package/package.json +18 -7
  410. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D0tD3kCe.js +0 -1
  411. package/dist/gateway/static/root/assets/agent-plugin-dialog-BjdgKCnk.js +0 -1
  412. package/dist/gateway/static/root/assets/agents-CWXKzX5L.js +0 -66
  413. package/dist/gateway/static/root/assets/automations-workspace-C9ZT6TAU.js +0 -6
  414. package/dist/gateway/static/root/assets/browser-automation-inputs-CXG_JveC.js +0 -1
  415. package/dist/gateway/static/root/assets/browser-automations-page-CJc7OKR3.js +0 -3
  416. package/dist/gateway/static/root/assets/browser-settings-page-BjaTEUR8.js +0 -3
  417. package/dist/gateway/static/root/assets/capabilities-page-djBsC_tG.js +0 -2
  418. package/dist/gateway/static/root/assets/channels-BaYRJtz3.js +0 -1
  419. package/dist/gateway/static/root/assets/connectors-page-DyqRwSH2.js +0 -2
  420. package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
  421. package/dist/gateway/static/root/assets/dependency-picker-CWbbhKZa.js +0 -1
  422. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  423. package/dist/gateway/static/root/assets/gateway-realtime-C4KtwMY3.js +0 -1
  424. package/dist/gateway/static/root/assets/gateway-realtime-store-ChZUzVbe.js +0 -1
  425. package/dist/gateway/static/root/assets/home-page-DhPPLbdD.js +0 -2
  426. package/dist/gateway/static/root/assets/index-CK4O2xMa.css +0 -1
  427. package/dist/gateway/static/root/assets/index-DpLD-7Hc.js +0 -106
  428. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  429. package/dist/gateway/static/root/assets/local-session-drafts-B_McurIj.js +0 -1
  430. package/dist/gateway/static/root/assets/logs-page-BWD63eg1.js +0 -2
  431. package/dist/gateway/static/root/assets/management-settings-aKSibklM.js +0 -1
  432. package/dist/gateway/static/root/assets/messages-Bnx3GMDB.js +0 -3
  433. package/dist/gateway/static/root/assets/models-hub-cache-Di83uIPw.js +0 -1
  434. package/dist/gateway/static/root/assets/note-detail-panel-B_fve3_2.js +0 -5
  435. package/dist/gateway/static/root/assets/notes-page-DnChyp8S.js +0 -8
  436. package/dist/gateway/static/root/assets/personal-page-BM2qAgg_.js +0 -1
  437. package/dist/gateway/static/root/assets/project-detail-page-DM4_VLNX.js +0 -1
  438. package/dist/gateway/static/root/assets/remote-access-hub-O6j9CWX0.js +0 -1
  439. package/dist/gateway/static/root/assets/session-manager-B0tOE4qz.js +0 -16
  440. package/dist/gateway/static/root/assets/sessions-page-BIixHXlQ.js +0 -1
  441. package/dist/gateway/static/root/assets/settings-advanced-gate-49SUEWPh.js +0 -1
  442. package/dist/gateway/static/root/assets/setup-status-panel-Ce3gTbT3.js +0 -1
  443. package/dist/gateway/static/root/assets/shares-settings-CNEZjF66.js +0 -1
  444. package/dist/gateway/static/root/assets/skills-page-BndNdYsJ.js +0 -2
  445. package/dist/gateway/static/root/assets/system-settings-panel-EpZeMlvp.js +0 -1
  446. package/dist/gateway/static/root/assets/use-file-preview-expanded-DJ5vyrvM.js +0 -2
  447. package/dist/gateway/static/root/assets/user-model-page-Bz5lkFG9.js +0 -2
  448. package/dist/gateway/static/root/assets/workflows-page-CPCgOfHh.js +0 -6
  449. package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
  450. package/dist/src/agent/embedded/system-prompt-override.js +0 -21
  451. package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
  452. package/dist/src/agent/external-tools/mcp-provider.js +0 -208
  453. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
  454. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
  455. package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
  456. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
  457. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
  458. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
  459. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
  460. package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
  461. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
  462. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
  463. package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
  464. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
  465. package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
  466. package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
  467. package/dist/src/agent/mcp/embedded-mcp.js +0 -14
  468. package/dist/src/agent/mcp/index.d.ts +0 -5
  469. package/dist/src/agent/mcp/index.js +0 -12
  470. package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
  471. package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
  472. package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
  473. package/dist/src/agent/mcp/mcp-http.js +0 -67
  474. package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
  475. package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
  476. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
  477. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
  478. package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
  479. package/dist/src/agent/mcp/mcp-stdio.js +0 -35
  480. package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
  481. package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
  482. package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
  483. package/dist/src/agent/mcp/mcp-transport.js +0 -141
  484. package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
  485. package/dist/src/agent/mcp/oauth/index.js +0 -6
  486. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
  487. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
  488. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
  489. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
  490. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
  491. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
  492. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
  493. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
  494. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
  495. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
  496. package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
  497. package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
  498. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
  499. package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
  500. package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
  501. package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
  502. package/dist/src/auth/oauth/openai-codex.js +0 -414
  503. package/dist/src/browser/policy/approval-store.d.ts +0 -17
  504. package/dist/src/browser/policy/approval-store.js +0 -62
  505. package/dist/src/browser/providers/extension-ws-acquire.d.ts +0 -19
  506. package/dist/src/browser/providers/extension-ws-acquire.js +0 -78
  507. package/dist/src/browser/providers/extension.d.ts +0 -61
  508. package/dist/src/browser/providers/extension.js +0 -378
  509. package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
  510. package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
  511. package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
  512. package/dist/src/extensions/agent-plugins/connection.js +0 -41
  513. package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
  514. package/dist/src/extensions/agent-plugins/health.js +0 -48
  515. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
  516. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +0 -8
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { loadConfig } from "../config/loader.js";
4
- import { createGatewayHttpClientFromConfig, resolveGatewayHttpBaseUrl } from "./gateway-http-client.js";
5
4
  import { RealtimeClient } from "../../packages/realtime-client/src/index.js";
5
+ import { createGatewayHttpClientFromConfig, resolveGatewayHttpBaseUrl } from "./gateway-http-client.js";
6
6
  import { toConversation } from "./channel-shared.js";
7
7
  import { createRequire } from "node:module";
8
8
  import crypto from "node:crypto";
@@ -36,6 +36,7 @@ function migrateCloudModelRef(ref, kind = "language") {
36
36
  if (!ref.startsWith("xopc-cloud/")) return ref;
37
37
  const id = ref.slice(11);
38
38
  if (PUBLIC_IDS.has(id) || id.startsWith("openai-codex/")) return ref;
39
+ if (id === "computer-gui-plus-preview" || id === "gui-plus-2026-02-26") return "xopc-cloud/computer";
39
40
  return `xopc-cloud/${kind === "omni" ? "realtime" : kind === "language" ? "auto" : kind}`;
40
41
  }
41
42
  /** Only model fields are rewritten; prompts and historical transcripts are untouched. */
@@ -0,0 +1,5 @@
1
+ import type { ProductNotification } from '@xopcai/gateway-contract';
2
+ import type { NotificationPlan } from './planner.js';
3
+ export declare function isClarificationNotificationActionable(notification: Pick<ProductNotification, 'type' | 'payload' | 'target'>): boolean;
4
+ /** Wait creation and intent insertion commit together; publication and settlement do too. */
5
+ export declare function flushClarificationNotifications(persist: (plan: NotificationPlan) => ProductNotification | null): ProductNotification[];
@@ -0,0 +1,66 @@
1
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { init_session_instance_repository, readCurrentTranscriptId } from "../storage/sqlite/session-instance-repository.js";
3
+ import { getClarification, init_clarification_wait_repository } from "../storage/sqlite/clarification-wait-repository.js";
4
+ //#region src/notifications/clarification.ts
5
+ init_clarification_wait_repository();
6
+ init_session_instance_repository();
7
+ init_transaction();
8
+ function isClarificationNotificationActionable(notification) {
9
+ if (notification.type !== "chat.needs_input") return true;
10
+ const wait = typeof notification.payload.waitId === "string" ? getClarification(notification.payload.waitId) : void 0;
11
+ return Boolean(wait && wait.status === "open" && notification.target.kind === "chat" && notification.target.conversationId === wait.conversationId && readCurrentTranscriptId(getSqliteDatabase(), wait.conversationId) === wait.transcriptId && (wait.expiresAt === void 0 || wait.expiresAt > Date.now()));
12
+ }
13
+ /** Wait creation and intent insertion commit together; publication and settlement do too. */
14
+ function flushClarificationNotifications(persist) {
15
+ return runSqliteWriteTransaction((db) => {
16
+ const rows = db.prepare(`SELECT wait_id FROM clarification_notification_outbox
17
+ WHERE status = 'pending' ORDER BY created_at, wait_id LIMIT 100`).all();
18
+ const published = [];
19
+ for (const row of rows) {
20
+ const wait = getClarification(String(row.wait_id));
21
+ if (wait && !wait.taskRunId) {
22
+ const personal = db.prepare("SELECT json_extract(custom_data_json, '$.personalAgent') AS personal FROM sessions WHERE conversation_id = ?").get(wait.conversationId)?.personal === 1;
23
+ const notification = {
24
+ type: "chat.needs_input",
25
+ target: {
26
+ kind: "chat",
27
+ conversationId: wait.conversationId,
28
+ ...personal ? { personal: true } : {}
29
+ },
30
+ priority: "high",
31
+ title: wait.kind === "approval" ? {
32
+ en: "Your authorization is needed",
33
+ zh: "需要你的授权"
34
+ } : {
35
+ en: "Your decision is needed",
36
+ zh: "需要你判断后继续"
37
+ },
38
+ body: {
39
+ en: "A question is waiting for your answer. Open the conversation to continue.",
40
+ zh: "有一个问题等待你回答,点击继续。"
41
+ },
42
+ payload: {
43
+ waitId: wait.id,
44
+ transcriptId: wait.transcriptId,
45
+ originRunId: wait.originRunId,
46
+ objectiveRevision: wait.objectiveRevision,
47
+ kind: wait.kind,
48
+ expiresAt: wait.expiresAt
49
+ }
50
+ };
51
+ if (isClarificationNotificationActionable(notification)) {
52
+ const event = persist({
53
+ dedupeKey: `clarification.needs_input:${wait.id}`,
54
+ createdAt: wait.createdAt,
55
+ notification
56
+ });
57
+ if (event) published.push(event);
58
+ }
59
+ }
60
+ db.prepare("UPDATE clarification_notification_outbox SET status = 'settled' WHERE wait_id = ?").run(row.wait_id);
61
+ }
62
+ return published;
63
+ });
64
+ }
65
+ //#endregion
66
+ export { flushClarificationNotifications, isClarificationNotificationActionable };
@@ -13,6 +13,7 @@ function parsePreferences(raw) {
13
13
  }
14
14
  function normalizePreferences(input) {
15
15
  return {
16
+ chatNeedsInput: input?.chatNeedsInput ?? DEFAULT_NOTIFICATION_PREFERENCES.chatNeedsInput,
16
17
  chatCompleted: input?.chatCompleted ?? DEFAULT_NOTIFICATION_PREFERENCES.chatCompleted,
17
18
  chatFailed: input?.chatFailed ?? DEFAULT_NOTIFICATION_PREFERENCES.chatFailed,
18
19
  taskNeedsInput: input?.taskNeedsInput ?? DEFAULT_NOTIFICATION_PREFERENCES.taskNeedsInput,
@@ -18,6 +18,7 @@ export type HarmonyNotification = {
18
18
  body?: string;
19
19
  gatewayId?: string;
20
20
  target?: NotificationTarget;
21
+ expiresAt?: number;
21
22
  };
22
23
  export declare function harmonyPushConfig(env?: NodeJS.ProcessEnv): HarmonyPushConfig | undefined;
23
24
  export declare function createHarmonyPushJwt(account: ServiceAccount, now?: number): string;
@@ -54,6 +54,8 @@ async function sendHarmonyPush(notification, fetchImpl = fetch, config = harmony
54
54
  eventId: notification.eventId,
55
55
  target: notification.target
56
56
  })).toString("base64url") : void 0;
57
+ const ttl = notification.expiresAt === void 0 ? 86400 : Math.min(86400, Math.floor((notification.expiresAt - Date.now()) / 1e3));
58
+ if (ttl <= 0) throw new Error("Notification expired before delivery");
57
59
  const response = await fetchImpl(`https://push-api.cloud.huawei.com/v3/${account.project_id}/messages:send`, {
58
60
  method: "POST",
59
61
  redirect: "error",
@@ -78,7 +80,7 @@ async function sendHarmonyPush(notification, fetchImpl = fetch, config = harmony
78
80
  target: { token: [notification.pushToken] },
79
81
  pushOptions: {
80
82
  testMessage: config.testMessage,
81
- ttl: 86400
83
+ ttl
82
84
  }
83
85
  })
84
86
  });
@@ -1,5 +1,6 @@
1
1
  import { type ProductNotification } from '@xopcai/gateway-contract';
2
2
  export type NotificationPlan = {
3
+ createdAt?: number;
3
4
  dedupeKey: string;
4
5
  notification: Omit<ProductNotification, 'schemaVersion' | 'id' | 'createdAt'>;
5
6
  };
@@ -21,7 +21,7 @@ export declare class NotificationService {
21
21
  persistGatewayEvent(type: string, payload: unknown): {
22
22
  schemaVersion: 1;
23
23
  id: string;
24
- type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity";
24
+ type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.needs_input" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity";
25
25
  priority: "normal" | "high";
26
26
  title: {
27
27
  en: string;
@@ -62,7 +62,7 @@ export declare class NotificationService {
62
62
  persistPlan(plan: NotificationPlan): {
63
63
  schemaVersion: 1;
64
64
  id: string;
65
- type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity";
65
+ type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.needs_input" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity";
66
66
  priority: "normal" | "high";
67
67
  title: {
68
68
  en: string;
@@ -4,13 +4,14 @@ import { init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/t
4
4
  import { localizeNotification } from "../../packages/gateway-contract/src/notifications.js";
5
5
  import { init_src } from "../../packages/gateway-contract/src/index.js";
6
6
  import { getOrCreateGatewayIdentity, init_gateway_identity_repository } from "../storage/sqlite/gateway-identity-repository.js";
7
- import { listDeliverableNotificationDevices } from "./device-store.js";
7
+ import { getNotificationDevice, listDeliverableNotificationDevices } from "./device-store.js";
8
8
  import { notificationPlanFromGatewayEvent } from "./planner.js";
9
- import { createNotificationEvent, deferNotificationDelivery, expireUndeliverableNotificationDeliveries, listDueNotificationDeliveries, markNotificationDeliveryAccepted, markNotificationDeliveryDead, pruneNotificationEvents, rescheduleNotificationDelivery } from "./store.js";
9
+ import { cancelNotificationDelivery, createNotificationEvent, deferNotificationDelivery, expireUndeliverableNotificationDeliveries, listDueNotificationDeliveries, markNotificationDeliveryAccepted, markNotificationDeliveryDead, pruneNotificationEvents, rescheduleNotificationDelivery } from "./store.js";
10
10
  import { sendHarmonyPush } from "./harmony-push.js";
11
+ import { flushClarificationNotifications, isClarificationNotificationActionable } from "./clarification.js";
11
12
  //#region src/notifications/service.ts
12
- init_transaction();
13
13
  init_src();
14
+ init_transaction();
14
15
  init_logger();
15
16
  init_gateway_identity_repository();
16
17
  const log = createLogger("Notifications");
@@ -23,6 +24,7 @@ const RETRY_DELAYS_MS = [
23
24
  216e5
24
25
  ];
25
26
  const STANDARD_PREFERENCES = {
27
+ "chat.needs_input": "chatNeedsInput",
26
28
  "chat.completed": "chatCompleted",
27
29
  "chat.failed": "chatFailed",
28
30
  "task.needs_input": "taskNeedsInput",
@@ -62,6 +64,10 @@ var NotificationService = class {
62
64
  }
63
65
  handleGatewayEvent(type, payload) {
64
66
  try {
67
+ if (type === "clarification.created") {
68
+ this.drain();
69
+ return;
70
+ }
65
71
  const notification = this.persistGatewayEvent(type, payload);
66
72
  if (!notification) return;
67
73
  this.options.publish("notification.created", notification);
@@ -108,6 +114,7 @@ var NotificationService = class {
108
114
  pruneNotificationEvents(now - 720 * 60 * 60 * 1e3);
109
115
  this.lastMaintenanceAt = now;
110
116
  }
117
+ for (const notification of flushClarificationNotifications((plan) => this.persistPlan(plan))) this.options.publish("notification.created", notification);
111
118
  for (const notification of this.options.domainDelivery?.flush((plan) => this.persistPlan(plan)) ?? []) this.options.publish("notification.created", notification);
112
119
  await this.deliverPending();
113
120
  await this.options.domainDelivery?.drain();
@@ -126,10 +133,18 @@ var NotificationService = class {
126
133
  await Promise.all(deliveries.map((delivery) => this.send(delivery)));
127
134
  }
128
135
  async send(delivery) {
136
+ if (!isClarificationNotificationActionable(delivery.event)) {
137
+ cancelNotificationDelivery(delivery.event.id, delivery.deviceId);
138
+ return;
139
+ }
129
140
  if (this.options.allowsNotification?.(delivery.event) === false) {
130
141
  markNotificationDeliveryDead(delivery.event.id, delivery.deviceId, "Notification policy changed");
131
142
  return;
132
143
  }
144
+ if (delivery.event.type === "chat.needs_input" && !getNotificationDevice(delivery.deviceId)?.preferences.chatNeedsInput) {
145
+ cancelNotificationDelivery(delivery.event.id, delivery.deviceId);
146
+ return;
147
+ }
133
148
  const domain = this.options.domainDelivery?.owns(delivery.event.type) ? this.options.domainDelivery : void 0;
134
149
  if (!domain && !Object.hasOwn(STANDARD_PREFERENCES, delivery.event.type)) {
135
150
  markNotificationDeliveryDead(delivery.event.id, delivery.deviceId, "Notification domain delivery is not installed");
@@ -163,7 +178,8 @@ var NotificationService = class {
163
178
  gatewayId: getOrCreateGatewayIdentity().id,
164
179
  target: delivery.event.target,
165
180
  title: preview.title,
166
- body: preview.body
181
+ body: preview.body,
182
+ ...delivery.event.type === "chat.needs_input" && typeof delivery.event.payload.expiresAt === "number" ? { expiresAt: delivery.event.payload.expiresAt } : {}
167
183
  }, fetchImpl);
168
184
  markNotificationDeliveryAccepted(delivery.event.id, delivery.deviceId, ticket, Number.MAX_SAFE_INTEGER);
169
185
  } catch (err) {
@@ -38,6 +38,7 @@ export declare function notificationDeliveryMetrics(): {
38
38
  accepted: number;
39
39
  delivered: number;
40
40
  dead: number;
41
+ cancelled: number;
41
42
  due: number;
42
43
  devices: {
43
44
  deliverable: number;
@@ -56,3 +57,4 @@ export declare function expireUndeliverableNotificationDeliveries(now?: number):
56
57
  export declare function pruneNotificationEvents(before: number): number;
57
58
  export declare function deferNotificationDelivery(eventId: string, deviceId: string, nextAttemptAt: number): void;
58
59
  export declare function getNotificationEvent(id: string): ProductNotification | null;
60
+ export declare function cancelNotificationDelivery(eventId: string, deviceId: string): void;
@@ -149,6 +149,7 @@ function notificationDeliveryMetrics() {
149
149
  accepted: counts.accepted ?? 0,
150
150
  delivered: counts.delivered ?? 0,
151
151
  dead: counts.dead ?? 0,
152
+ cancelled: counts.cancelled ?? 0,
152
153
  due: due.count,
153
154
  devices: {
154
155
  deliverable: devices.deliverable ?? 0,
@@ -190,5 +191,10 @@ function getNotificationEvent(id) {
190
191
  const row = getSqliteDatabase().prepare("SELECT * FROM notification_events WHERE event_id = ?").get(id);
191
192
  return row ? eventFromRow(row) : null;
192
193
  }
194
+ function cancelNotificationDelivery(eventId, deviceId) {
195
+ getSqliteDatabase().prepare(`UPDATE notification_deliveries SET status = 'cancelled',
196
+ last_error = 'Clarification is no longer actionable', updated_at = ?
197
+ WHERE event_id = ? AND device_id = ? AND status = 'pending'`).run(Date.now(), eventId, deviceId);
198
+ }
193
199
  //#endregion
194
- export { acknowledgeNotification, createNotificationEvent, deferNotificationDelivery, expireUndeliverableNotificationDeliveries, getNotificationEvent, listDueNotificationDeliveries, listNotificationEvents, markNotificationDeliveryAccepted, markNotificationDeliveryDead, markNotificationDeliveryDelivered, notificationDeliveryMetrics, pruneNotificationEvents, rescheduleNotificationDelivery };
200
+ export { acknowledgeNotification, cancelNotificationDelivery, createNotificationEvent, deferNotificationDelivery, expireUndeliverableNotificationDeliveries, getNotificationEvent, listDueNotificationDeliveries, listNotificationEvents, markNotificationDeliveryAccepted, markNotificationDeliveryDead, markNotificationDeliveryDelivered, notificationDeliveryMetrics, pruneNotificationEvents, rescheduleNotificationDelivery };
@@ -2,6 +2,7 @@ export type NotificationDevicePlatform = 'ios' | 'android' | 'harmonyos';
2
2
  export type NotificationPermission = 'granted' | 'denied' | 'unknown';
3
3
  export type NotificationLanguage = 'en' | 'zh';
4
4
  export type NotificationPreferences = {
5
+ chatNeedsInput: boolean;
5
6
  chatCompleted: boolean;
6
7
  chatFailed: boolean;
7
8
  taskNeedsInput: boolean;
@@ -1,5 +1,6 @@
1
1
  //#region src/notifications/types.ts
2
2
  const DEFAULT_NOTIFICATION_PREFERENCES = {
3
+ chatNeedsInput: true,
3
4
  chatCompleted: true,
4
5
  chatFailed: true,
5
6
  taskNeedsInput: true,
@@ -27,7 +27,7 @@ var init_env_keys = __esmMin((() => {
27
27
  cerebras: ["CEREBRAS_API_KEY"],
28
28
  mistral: ["MISTRAL_API_KEY"],
29
29
  openrouter: ["OPENROUTER_API_KEY"],
30
- "azure-openai-responses": ["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_BASE_URL"],
30
+ azure: ["AZURE_OPENAI_API_KEY", "AZURE_OPENAI_BASE_URL"],
31
31
  "amazon-bedrock": [
32
32
  "AWS_ACCESS_KEY_ID",
33
33
  "AWS_SECRET_ACCESS_KEY",
@@ -1,6 +1,7 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { PROVIDER_ENV_MAP, getApiKeyFromEnv, init_env_keys } from "./env-keys.js";
3
3
  import { getModelOAuthProviderIds, init_registry } from "../auth/oauth/registry.js";
4
+ import { assertCurrentModelProvider, init_provider_policy, isRetiredModelProvider } from "./provider-policy.js";
4
5
  import { CredentialResolver, hasCredentials, init_credentials } from "../auth/credentials.js";
5
6
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
6
7
  import { hasProviderAuthOnDiskSync, init_sync_provider_auth } from "../auth/sync-provider-auth.js";
@@ -45,12 +46,8 @@ var providers_exports = /* @__PURE__ */ __exportAll({
45
46
  resolveModel: () => resolveModel
46
47
  });
47
48
  function normalizeProviderModel(model) {
48
- const correctedModel = applyOfficialModelMetadataCorrections(model);
49
- if (model.provider === "openai-codex" && model.api === "openai-codex-responses") return {
50
- ...correctedModel,
51
- baseUrl: OPENAI_CODEX_CANONICAL_BASE_URL
52
- };
53
- return correctedModel;
49
+ assertCurrentModelProvider(model.provider);
50
+ return applyOfficialModelMetadataCorrections(model);
54
51
  }
55
52
  /** Map a plugin registry model to the pi-ai {@link Model} shape. */
56
53
  function pluginModelToModel(providerId, definition) {
@@ -77,6 +74,7 @@ function pluginModelToModel(providerId, definition) {
77
74
  * Use this for Agent's getApiKey callback which must be synchronous.
78
75
  */
79
76
  function getApiKeySync(provider) {
77
+ assertCurrentModelProvider(provider);
80
78
  if (getProviderRegistry().has(provider)) return "extension-managed";
81
79
  const registryKey = getModelRegistry().getApiKey(provider);
82
80
  if (registryKey) return registryKey;
@@ -91,6 +89,8 @@ function getApiKeySync(provider) {
91
89
  function resolveModel(ref) {
92
90
  const trimmedRef = typeof ref === "string" ? ref.trim() : "";
93
91
  if (!trimmedRef) throw new Error("No default model configured. Choose a model in onboarding or update global Agent defaults.");
92
+ const requestedProvider = splitProviderModelRef(trimmedRef)?.provider;
93
+ if (requestedProvider) assertCurrentModelProvider(requestedProvider);
94
94
  const customModel = getModelRegistry().resolve(trimmedRef);
95
95
  if (customModel) return normalizeProviderModel(customModel);
96
96
  const qualifiedRef = splitProviderModelRef(trimmedRef);
@@ -107,11 +107,14 @@ function resolveModel(ref) {
107
107
  }
108
108
  throw new Error(`Model not found: ${trimmedRef}`);
109
109
  }
110
- for (const provider of getProviders()) try {
111
- const found = getModels(provider).find((m) => m.id === trimmedRef);
112
- if (found) return normalizeProviderModel(found);
113
- } catch {
114
- continue;
110
+ for (const provider of getProviders()) {
111
+ if (isRetiredModelProvider(provider)) continue;
112
+ try {
113
+ const found = getModels(provider).find((m) => m.id === trimmedRef);
114
+ if (found) return normalizeProviderModel(found);
115
+ } catch {
116
+ continue;
117
+ }
115
118
  }
116
119
  const supplementalModel = getSupplementalModels().find((m) => m.id === trimmedRef);
117
120
  if (supplementalModel) return normalizeProviderModel(supplementalModel);
@@ -123,6 +126,7 @@ function resolveModel(ref) {
123
126
  throw new Error(`Model not found: ${trimmedRef}. Use format: provider/model-id`);
124
127
  }
125
128
  function getModelsByProvider(provider) {
129
+ assertCurrentModelProvider(provider);
126
130
  const fromRegistry = getModelRegistry().getAll().filter((m) => m.provider === provider).map(normalizeProviderModel);
127
131
  const existingIds = new Set(fromRegistry.map((m) => m.id));
128
132
  const supplementalModels = getSupplementalModels().filter((m) => m.provider === provider && !existingIds.has(m.id)).map(normalizeProviderModel);
@@ -138,13 +142,14 @@ function getModelsByProvider(provider) {
138
142
  function getAllProviders() {
139
143
  const registry = getModelRegistry();
140
144
  const providers = /* @__PURE__ */ new Set();
141
- for (const p of getProviders()) providers.add(p);
142
- for (const m of registry.getAll()) providers.add(m.provider);
145
+ for (const p of getProviders()) if (!isRetiredModelProvider(p)) providers.add(p);
146
+ for (const m of registry.getAll()) if (!isRetiredModelProvider(m.provider)) providers.add(m.provider);
143
147
  for (const plugin of getProviderRegistry().listAll()) providers.add(plugin.id);
144
148
  for (const provider of getModelOAuthProviderIds()) providers.add(provider);
145
149
  return Array.from(providers);
146
150
  }
147
151
  async function getApiKey(provider, credentialOptions) {
152
+ assertCurrentModelProvider(provider);
148
153
  if (getProviderRegistry().has(provider)) return "extension-managed";
149
154
  const credentialKey = await resolveProviderApiKey(provider, credentialOptions);
150
155
  if (credentialKey) return credentialKey;
@@ -157,12 +162,14 @@ async function getApiKey(provider, credentialOptions) {
157
162
  * Only checks environment variables and registry, not credential system
158
163
  */
159
164
  function isProviderConfiguredSync(provider) {
165
+ assertCurrentModelProvider(provider);
160
166
  if (getProviderRegistry().has(provider)) return true;
161
167
  if (getModelRegistry().getApiKey(provider)) return true;
162
168
  if (getApiKeyFromEnv(provider)) return true;
163
169
  return hasProviderAuthOnDiskSync(provider);
164
170
  }
165
171
  async function isProviderConfigured(provider) {
172
+ assertCurrentModelProvider(provider);
166
173
  if (getProviderRegistry().has(provider)) return true;
167
174
  if (getModelRegistry().getApiKey(provider)) return true;
168
175
  return await hasCredentials(provider);
@@ -310,7 +317,7 @@ function getDefaultModelSync(config) {
310
317
  if (modelRef) return modelRef;
311
318
  return "";
312
319
  }
313
- var OPENAI_CODEX_CANONICAL_BASE_URL, PROVIDER_META;
320
+ var PROVIDER_META;
314
321
  var init_providers = __esmMin((() => {
315
322
  init_schema();
316
323
  init_model_registry();
@@ -322,8 +329,8 @@ var init_providers = __esmMin((() => {
322
329
  init_model_supplements();
323
330
  init_model_ref();
324
331
  init_plugin_registry();
332
+ init_provider_policy();
325
333
  init_provider_auth_service();
326
- OPENAI_CODEX_CANONICAL_BASE_URL = "https://chatgpt.com/backend-api/codex";
327
334
  PROVIDER_META = {
328
335
  "xopc-cloud": {
329
336
  name: "XOPC Model Service",
@@ -334,7 +341,8 @@ var init_providers = __esmMin((() => {
334
341
  "openai": {
335
342
  name: "OpenAI",
336
343
  category: "common",
337
- supportsApiKey: true
344
+ supportsApiKey: true,
345
+ supportsOAuth: true
338
346
  },
339
347
  "anthropic": {
340
348
  name: "Anthropic",
@@ -556,8 +564,8 @@ var init_providers = __esmMin((() => {
556
564
  category: "enterprise",
557
565
  supportsApiKey: true
558
566
  },
559
- "azure-openai-responses": {
560
- name: "Azure OpenAI",
567
+ "azure": {
568
+ name: "Azure",
561
569
  category: "enterprise",
562
570
  supportsApiKey: true
563
571
  },
@@ -577,12 +585,6 @@ var init_providers = __esmMin((() => {
577
585
  supportsOAuth: true,
578
586
  supportsApiKey: false
579
587
  },
580
- "openai-codex": {
581
- name: "OpenAI Codex (OAuth)",
582
- category: "oauth",
583
- supportsOAuth: true,
584
- supportsApiKey: false
585
- },
586
588
  "google-gemini-cli": {
587
589
  name: "Google Gemini CLI (OAuth)",
588
590
  category: "oauth",
@@ -2,8 +2,6 @@ import { type Api, type AssistantMessage, type Context, type Model, type SimpleS
2
2
  import type { CredentialResolverOptions } from '../auth/credentials.js';
3
3
  import type { AiUsageContext } from '../usage/types.js';
4
4
  export declare function isLocalModelBaseUrl(baseUrl: string | undefined): boolean;
5
- /** Codex Responses rejects the temperature request parameter. */
6
- export declare function supportsModelTemperature(model: Model<Api>): boolean;
7
5
  export declare function resolveModelCallApiKey(model: Model<Api>, credentialOptions?: CredentialResolverOptions): Promise<string | undefined>;
8
6
  export declare function resolveModelCallOptions(model: Model<Api>, options?: SimpleStreamOptions, credentialOptions?: CredentialResolverOptions): Promise<SimpleStreamOptions>;
9
7
  /**
@@ -15,10 +15,6 @@ function isLocalModelBaseUrl(baseUrl) {
15
15
  return false;
16
16
  }
17
17
  }
18
- /** Codex Responses rejects the temperature request parameter. */
19
- function supportsModelTemperature(model) {
20
- return model.api !== "openai-codex-responses";
21
- }
22
18
  async function resolveModelCallApiKey(model, credentialOptions) {
23
19
  try {
24
20
  const apiKey = credentialOptions ? await getApiKey(model.provider, credentialOptions) : await getApiKey(model.provider);
@@ -35,7 +31,7 @@ async function resolveModelCallOptions(model, options = {}, credentialOptions) {
35
31
  return {
36
32
  ...rest,
37
33
  apiKey,
38
- ...temperature !== void 0 && supportsModelTemperature(model) ? { temperature } : {}
34
+ ...temperature !== void 0 ? { temperature } : {}
39
35
  };
40
36
  }
41
37
  /**
@@ -94,4 +90,4 @@ async function createResolvedModelStream(model, context, options, credentialOpti
94
90
  }
95
91
  }
96
92
  //#endregion
97
- export { completeWithResolvedCredentials, createResolvedModelStream, isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions, supportsModelTemperature };
93
+ export { completeWithResolvedCredentials, createResolvedModelStream, isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions };
@@ -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;