@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.
- package/README.md +59 -174
- package/README.zh-CN.md +59 -174
- package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_md.js +131 -0
- package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js +30 -0
- package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha2.js +252 -0
- package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha256.js +16 -0
- package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js +66 -0
- package/dist/browser-ext/_locales/en/messages.json +30 -1
- package/dist/browser-ext/_locales/zh_CN/messages.json +30 -1
- package/dist/browser-ext/dist/assets/{auth-beGtbLPS.js → page-context-BeworyNB.js} +1331 -1355
- package/dist/browser-ext/dist/assets/{sidepanel-BT0ojEzG.css → sidepanel-Ccl0eSa1.css} +43 -0
- package/dist/browser-ext/dist/background.js +680 -182
- package/dist/browser-ext/dist/sidepanel.html +2 -2
- package/dist/browser-ext/dist/sidepanel.js +393 -194
- package/dist/browser-ext/manifest.json +2 -8
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-D9ZMh5ZR.js → activity-store-BQ3PMp2q.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bj3rvcTm.js → agent-avatar-dicebear-C61i1QbX.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-0fCR1DHx.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-Di99mUTT.js +1 -0
- package/dist/gateway/static/root/assets/agents-BRZZmYH_.js +66 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-B5QDepbW.js → agents-admin-api-HBZvVyzF.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-2rTEtB_X.js → app-management-settings-panel-noqqxkds.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BPVBS80k.js → appearance-settings-DG8QN0gR.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-1FuKlZYP.js → apps-page-CgiyzFYo.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BbT1O7oK.js → archive-plugin-BO3I9zRP.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DjwP_h8h.js → automations-page-CgAcRFDS.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BIkxIpab.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-gS7Wg68v.js → binary-plugins-gFD7vH9R.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DbwMaivP.js → block-editor-B1VE-jAe.js} +2 -2
- package/dist/gateway/static/root/assets/browser-automation-inputs-DxRoKFun.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-CIjyMS6f.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BMAivBfp.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-Lswa0hv8.js → capabilities-CY4SiHcP.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-Dd1PZRQw.js → capabilities-gjQtMhKu.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-DRdcfo68.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-DTHR1DrJ.js → capabilities-settings-panel-ZuL6pWjM.js} +4 -4
- package/dist/gateway/static/root/assets/{capability-header-actions-494dnJsj.js → capability-header-actions-D0GC1FEv.js} +1 -1
- package/dist/gateway/static/root/assets/channels-CgE22Pzd.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-Bl7-Zk-x.js → chat-terminal-dock-CEjh1utz.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-ByExKr_6.js → computer-settings-page-vFHJAmQr.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-BK_5aFxO.js → connector-service-page-DTrwZ4kV.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DRcMiTWu.js +1 -0
- package/dist/gateway/static/root/assets/copy-text-row-C1gaJwlZ.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-BXJv6472.js → date-picker-NfGIPSYY.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-CqguveUi.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DWNEC3mk.js → desktop-pet-CTx1zkJm.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BYwlxGiN.js → desktop-pet-settings-BRDS3EGc.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-BAc4F35b.js → device-pairing-wizard-Du4Ciuyw.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-D26tSY8Z.js → directory-picker-path-field-CjstlxFl.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-xYIGNegB.js → extension-debug-page-BfAtjhoK.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BoQ1-3AW.js → extension-page-BJmudejr.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-Cw_JU6RR.js → extension-provider-Br6LXyIj.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BH5TFGPe.js → extension-settings-page-UvmHniyz.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-04Wqmw14.js → fallback-models-euw9MGdt.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CNf0ZeRw.js → gateway-config-swr-7RKqgU_U.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-F6D4A7N5.js +1 -0
- package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-BqvCJVUC.js → gateway-settings-C7roPHh1.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DIxHacUw.js → gateway-startup-retry-jiV5sbEX.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BGNCTtM3.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-CS0q0Kto.js → image-generation-api-DO4mXb6I.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-n_rSLo6b.js → imports-page-DxCoT0VV.js} +1 -1
- package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
- package/dist/gateway/static/root/assets/index-FCEE325-.js +106 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-tVkrHbYF.js → keyboard-shortcuts-settings-CnLln9Ds.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-L8tYuas0.js → local-app-workbench-page-yXRkSrEj.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-SSJ9B1bH.js → local-apps-page-D46buzTk.js} +1 -1
- package/dist/gateway/static/root/assets/local-session-drafts-pox8evDV.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-D6_rF-qT.js → locale-store-COVscAqC.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DmcCHnH0.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-khN1ThNL.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-_xwUuKce.js → markdown-view-B_qnAcW2.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-C631CDu4.js → media-plugins-C0Pc-wSY.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-C_t58yha.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-vIZWQ9Yt.js → notes-api-sBgBcyLW.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-BJ0QS6xx.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-BlPDM7GM.js → page-context-capture-button-DfRODHv1.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-CiiXwwQE.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BJjWvoER.js → product-open-page-_Bp6HRmm.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-CEd4E7Gf.js → product-preview-content-BUdiO0Ct.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-Clb-fXYk.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-lszV8HuS.js → projects-page-D9JEEqhh.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-uJnjqTcn.js → registry-api-Bh9UBb-f.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CmyTq3_l.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CjnNQYW8.js → runtime-tools-settings-panel-B1_inj8L.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-B3T3dDOR.js → scenes-page-CUNAZN2_.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-DT3c4Vd_.js → schema-form-CfT-9UVw.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-CICkGwn-.js → send-session-input-BW40VHiL.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-BcQodoAu.js → session-api-yjpEz4pP.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-BqlvrjPE.js +16 -0
- package/dist/gateway/static/root/assets/sessions-page-CXZKScvu.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-B2vKXmzg.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-D-PZjcss.js → settings-page-1h3vyueg.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cqc7UlZy.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-CWS8EkJS.js → share-link-dialog-HCHM8qnf.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-23NJAKiq.js → share-preview-page-Ce6FNWt1.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-iKhHbvBD.js → shares-api-c0dfWz6h.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Dh5jisCK.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-C-MWdQwl.js → skill-api-deDZeQS8.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-iy02aB13.js → skill-reload-api-Ge5XymHa.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-DZozl9U_.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-CtzyMxqq.js +1 -0
- package/dist/gateway/static/root/assets/{task-detail-page-B2SIEyhZ.js → task-detail-page-5f_V0h-p.js} +2 -2
- package/dist/gateway/static/root/assets/{task-expandable-content-D2LRR4BC.js → task-expandable-content-hYcgCEE3.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BJfhz-Zq.js → theme-store-BOfCKgl6.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-aHD56iaS.js → tracing-settings-page-DDWFXcST.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-BCf8CfTC.js → tunnel-api-vMtlbJ-m.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-B4XUkuJd.js → usage-page-B1-BCW8U.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BnnTw9RE.js → use-autosave-CSckcjFx.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-Itczg0y1.js → use-composer-attachments-DJya1hIL.js} +1 -1
- package/dist/gateway/static/root/assets/use-file-preview-expanded-C5ONO7sF.js +2 -0
- package/dist/gateway/static/root/assets/user-model-page-D4BSq9HJ.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BphJku8x.js → voice-api-key-field-GEw5x2fU.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-B4u4coFj.js → voice-config-api-3yyVwXln.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-jgOEP1xw.js → work-discovery-overlay-CjiNYJV5.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-N69crzRu.js → workflow-run-setup-panel-DJOetXvm.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CcAPFh2R.js +6 -0
- package/dist/gateway/static/root/assets/{workspace-api-Lzv6GDO8.js → workspace-api-WhbMvdBE.js} +2 -2
- package/dist/gateway/static/root/index.html +32 -34
- package/dist/package.js +1 -1
- package/dist/packages/browser-control-contract/src/automation.js +213 -0
- package/dist/packages/browser-control-contract/src/index.js +43 -12
- package/dist/packages/endpoint-tools-client/src/index.js +189 -0
- package/dist/packages/endpoint-tools-protocol/src/bridge.js +105 -0
- package/dist/packages/endpoint-tools-protocol/src/index.js +93 -2
- package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
- package/dist/packages/gateway-contract/src/gateway-scopes.js +3 -1
- package/dist/packages/gateway-contract/src/notifications.js +1 -0
- package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
- package/dist/packages/realtime-protocol/src/voice.js +9 -3
- package/dist/src/agent/agent-manager.js +22 -26
- package/dist/src/agent/coding/repository-instructions.js +8 -1
- package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
- package/dist/src/agent/embedded/codemode-extension.js +232 -0
- package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
- package/dist/src/agent/embedded/codemode-output.js +34 -0
- package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
- package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
- package/dist/src/agent/embedded/model-runtime.js +5 -2
- package/dist/src/agent/embedded/run-for-session.js +10 -1
- package/dist/src/agent/embedded/run-turn.js +10 -3
- package/dist/src/agent/embedded/session-runner.d.ts +9 -1
- package/dist/src/agent/embedded/session-runner.js +111 -23
- package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
- package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
- package/dist/src/agent/embedded/subscribe-session.js +14 -4
- package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
- package/dist/src/agent/embedded/tool-metadata.js +38 -0
- package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
- package/dist/src/agent/embedded/tool-search-extension.js +31 -0
- package/dist/src/agent/embedded/types.d.ts +7 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
- package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
- package/dist/src/agent/external-tools/endpoint-provider.js +148 -56
- package/dist/src/agent/external-tools/extension-provider.js +8 -1
- package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
- package/dist/src/agent/external-tools/gateway-tools.js +45 -22
- package/dist/src/agent/external-tools/index.js +46 -14
- package/dist/src/agent/external-tools/memory-provider.js +8 -1
- package/dist/src/agent/external-tools/read-policy.js +2 -1
- package/dist/src/agent/external-tools/service.d.ts +2 -0
- package/dist/src/agent/external-tools/service.js +25 -3
- package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
- package/dist/src/agent/external-tools/tool-registry.js +14 -0
- package/dist/src/agent/external-tools/types.d.ts +8 -1
- package/dist/src/agent/external-tools/types.js +0 -1
- package/dist/src/agent/mcp/config.d.ts +18 -0
- package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
- package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
- package/dist/src/agent/mcp/native-mcp.js +73 -0
- package/dist/src/agent/service.js +2 -5
- package/dist/src/agent/skills/installer.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/skills/skill-sources.js +1 -1
- package/dist/src/agent/source-context/index.d.ts +0 -1
- package/dist/src/agent/source-context/index.js +1 -2
- package/dist/src/agent/source-context/injector.js +1 -0
- package/dist/src/agent/source-context/types.d.ts +2 -2
- package/dist/src/agent/source-context/types.js +1 -1
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
- package/dist/src/agent/tool-manuals/browser.js +3 -3
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +0 -13
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -4
- package/dist/src/agent/tools/browser-automation-tool.d.ts +74 -1
- package/dist/src/agent/tools/browser-automation-tool.js +52 -6
- package/dist/src/agent/tools/cli-clarify.js +1 -1
- package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
- package/dist/src/agent/tools/codemode-permissions.js +23 -0
- package/dist/src/agent/tools/dataBatch.js +3 -1
- package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
- package/dist/src/agent/tools/factory.js +4 -3
- package/dist/src/agent/transcript/provider-capabilities.js +0 -1
- package/dist/src/agent/transcript/transcript-policy.js +1 -2
- package/dist/src/agent-config/schema.d.ts +28 -0
- package/dist/src/agent-config/schema.js +7 -0
- package/dist/src/auth/credentials.js +7 -20
- package/dist/src/auth/model-credential-store.js +11 -4
- package/dist/src/auth/oauth/index.d.ts +1 -1
- package/dist/src/auth/oauth/index.js +3 -3
- package/dist/src/auth/oauth/openai.d.ts +2 -0
- package/dist/src/auth/oauth/openai.js +90 -0
- package/dist/src/auth/oauth/registry.js +3 -3
- package/dist/src/auth/oauth/types.d.ts +1 -0
- package/dist/src/auth/oauth/xopc-cloud.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +5 -0
- package/dist/src/automations/capabilities/write.d.ts +2 -0
- package/dist/src/automations/domain/types.d.ts +11 -0
- package/dist/src/automations/domain/validation.d.ts +4 -0
- package/dist/src/automations/domain/validation.js +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
- package/dist/src/automations/service/action-executor.js +11 -3
- package/dist/src/automations/service/automation-service.d.ts +1 -0
- package/dist/src/automations/service/automation-service.js +13 -1
- package/dist/src/bootstrap/application-state.js +1 -1
- package/dist/src/browser/automations/repository.d.ts +4 -0
- package/dist/src/browser/automations/repository.js +27 -6
- package/dist/src/browser/automations/runner.js +101 -9
- package/dist/src/browser/automations/runtime-service.js +4 -3
- package/dist/src/browser/automations/schema.d.ts +84 -1
- package/dist/src/browser/automations/schema.js +68 -2
- package/dist/src/browser/automations/service.d.ts +78 -1
- package/dist/src/browser/automations/service.js +36 -4
- package/dist/src/browser/automations/types.d.ts +19 -4
- package/dist/src/browser/drivers/extension-driver.d.ts +5 -5
- package/dist/src/browser/drivers/extension-driver.js +10 -10
- package/dist/src/browser/drivers/playwright-driver.js +46 -0
- package/dist/src/browser/index.d.ts +1 -2
- package/dist/src/browser/index.js +2 -3
- package/dist/src/browser/policy/browser-policy.d.ts +0 -1
- package/dist/src/browser/policy/browser-policy.js +1 -4
- package/dist/src/browser/providers/index.d.ts +1 -1
- package/dist/src/browser/providers/index.js +2 -2
- package/dist/src/browser/providers/realtime-extension.d.ts +1 -1
- package/dist/src/browser/providers/realtime-extension.js +5 -1
- package/dist/src/browser/recordings/service.d.ts +22 -0
- package/dist/src/browser/recordings/service.js +160 -0
- package/dist/src/browser/runtime/browser-runtime.d.ts +1 -1
- package/dist/src/browser/runtime/browser-runtime.js +19 -56
- package/dist/src/chat-commands/builtins/model.js +2 -2
- package/dist/src/cli/command-manifest.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
- package/dist/src/cli/commands/mcp.js +36 -2
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/utils/oauth-login.js +2 -2
- package/dist/src/computer/runtime.js +2 -2
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/mcp-config-normalize.d.ts +0 -3
- package/dist/src/config/mcp-config-normalize.js +2 -22
- package/dist/src/config/models-json.d.ts +0 -5
- package/dist/src/config/models-json.js +13 -4
- package/dist/src/config/paths.d.ts +0 -1
- package/dist/src/config/paths.js +1 -4
- package/dist/src/config/schema.d.ts +142 -48
- package/dist/src/config/schema.js +64 -47
- package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
- package/dist/src/connectors/auth-provider-registry.js +1 -21
- package/dist/src/connectors/china-catalog.js +5 -5
- package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
- package/dist/src/connectors/connection-recovery-service.js +3 -105
- package/dist/src/connectors/health.d.ts +1 -2
- package/dist/src/connectors/health.js +2 -101
- package/dist/src/connectors/types.d.ts +1 -1
- package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
- package/dist/src/endpoint-tools/binding-service.js +14 -2
- package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
- package/dist/src/endpoint-tools/bridge-host.js +166 -0
- package/dist/src/endpoint-tools/bridge.d.ts +27 -0
- package/dist/src/endpoint-tools/bridge.js +88 -0
- package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
- package/dist/src/endpoint-tools/capability-catalog.js +8 -0
- package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
- package/dist/src/endpoint-tools/grant-service.js +113 -0
- package/dist/src/endpoint-tools/index.js +1 -1
- package/dist/src/endpoint-tools/invocation-service.js +6 -2
- package/dist/src/endpoint-tools/location-task.d.ts +22 -0
- package/dist/src/endpoint-tools/location-task.js +114 -0
- package/dist/src/endpoint-tools/policy.js +20 -4
- package/dist/src/endpoint-tools/registry.d.ts +2 -0
- package/dist/src/endpoint-tools/registry.js +9 -0
- package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
- package/dist/src/endpoint-tools/result-projector.js +31 -0
- package/dist/src/endpoint-tools/runtime.d.ts +2 -0
- package/dist/src/endpoint-tools/runtime.js +15 -2
- package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
- package/dist/src/endpoint-tools/target-resolver.js +27 -0
- package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
- package/dist/src/endpoint-tools/turn-context.js +29 -0
- package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
- package/dist/src/extensions/agent-plugins/auth.js +2 -19
- package/dist/src/extensions/agent-plugins/credentials.js +3 -19
- package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
- package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
- package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
- package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
- package/dist/src/extensions/agent-plugins/sources.js +2 -2
- package/dist/src/extensions/agent-plugins/store.js +1 -3
- package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
- package/dist/src/extensions/agent-plugins/validation.js +13 -20
- package/dist/src/gateway/agents-admin.d.ts +5 -0
- package/dist/src/gateway/agents-admin.js +56 -1
- package/dist/src/gateway/chat-stream/mapper.js +9 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
- package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
- package/dist/src/gateway/hono/lib/config-payload.js +2 -5
- package/dist/src/gateway/hono/oauth-async.js +9 -2
- package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
- package/dist/src/gateway/hono/routes/agents.js +4 -3
- package/dist/src/gateway/hono/routes/browser-automations.js +23 -7
- package/dist/src/gateway/hono/routes/browser-recordings.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-recordings.js +78 -0
- package/dist/src/gateway/hono/routes/browser.js +1 -34
- package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
- package/dist/src/gateway/hono/routes/connectors.js +5 -60
- package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
- package/dist/src/gateway/hono/routes/device-push.js +1 -0
- package/dist/src/gateway/hono/routes/endpoint-compatibility.js +7 -0
- package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
- package/dist/src/gateway/hono/routes/endpoint-tools.js +53 -3
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +25 -1
- package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +11 -237
- package/dist/src/gateway/hono/routes/personal-agent.js +35 -0
- package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +25 -1
- package/dist/src/gateway/hono/routes/voice.js +5 -2
- package/dist/src/gateway/security/gateway-scopes.js +3 -1
- package/dist/src/gateway/service/agent-runner.js +1 -0
- package/dist/src/gateway/service/config-coordinator.js +2 -5
- package/dist/src/gateway/service/marketplace-service.js +2 -2
- package/dist/src/gateway/service/run-gateway-agent.js +13 -5
- package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
- package/dist/src/gateway/service/session-input-coordinator.js +29 -9
- package/dist/src/gateway/service/sessions-api.js +0 -6
- package/dist/src/gateway/service.js +3 -12
- package/dist/src/gateway/session-reset-service.js +0 -6
- package/dist/src/home-intelligence/generator.d.ts +2 -0
- package/dist/src/home-intelligence/generator.js +53 -4
- package/dist/src/home-intelligence/host.d.ts +2 -1
- package/dist/src/home-intelligence/host.js +23 -3
- package/dist/src/imports/compatibility.js +12 -10
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/migrations/cloud-public-models.js +1 -0
- package/dist/src/notifications/clarification.d.ts +5 -0
- package/dist/src/notifications/clarification.js +66 -0
- package/dist/src/notifications/device-store.js +1 -0
- package/dist/src/notifications/harmony-push.d.ts +1 -0
- package/dist/src/notifications/harmony-push.js +3 -1
- package/dist/src/notifications/planner.d.ts +1 -0
- package/dist/src/notifications/service.d.ts +2 -2
- package/dist/src/notifications/service.js +20 -4
- package/dist/src/notifications/store.d.ts +2 -0
- package/dist/src/notifications/store.js +7 -1
- package/dist/src/notifications/types.d.ts +1 -0
- package/dist/src/notifications/types.js +1 -0
- package/dist/src/providers/env-keys.js +1 -1
- package/dist/src/providers/index.js +26 -24
- package/dist/src/providers/model-call.d.ts +0 -2
- package/dist/src/providers/model-call.js +2 -6
- package/dist/src/providers/model-registry.js +4 -2
- package/dist/src/providers/model-supplements.d.ts +3 -3
- package/dist/src/providers/model-supplements.js +6 -27
- package/dist/src/providers/presentation.js +3 -8
- package/dist/src/providers/prompt-cache-plan.js +1 -1
- package/dist/src/providers/provider-auth-service.d.ts +1 -1
- package/dist/src/providers/provider-auth-service.js +7 -2
- package/dist/src/providers/provider-policy.d.ts +3 -0
- package/dist/src/providers/provider-policy.js +14 -0
- package/dist/src/providers/register-runtime-providers.js +6 -1
- package/dist/src/realtime/runtime.js +1 -1
- package/dist/src/session/store.js +7 -1
- package/dist/src/session/transcript-events.d.ts +5 -0
- package/dist/src/session/transcript-events.js +1 -0
- package/dist/src/session/types.d.ts +2 -0
- package/dist/src/storage/sqlite/clarification-wait-repository.js +1 -0
- package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
- package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
- package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
- package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
- package/dist/src/storage/sqlite/migrations/238_browser_record_replay.sql +45 -0
- package/dist/src/storage/sqlite/migrations/239_clarification_notifications.sql +26 -0
- package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
- package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/session-input-repository.js +5 -1
- package/dist/src/tasks/home-query-service.d.ts +1 -1
- package/dist/src/tasks/home-query-service.js +6 -2
- package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
- package/dist/src/voice/dashscope/streaming-tts-stream.d.ts +2 -1
- package/dist/src/voice/dashscope/streaming-tts-stream.js +135 -79
- package/dist/src/voice/realtime/agentEngine.js +78 -1
- package/dist/src/voice/realtime/speakable-segmenter.d.ts +2 -0
- package/dist/src/voice/realtime/speakable-segmenter.js +30 -0
- package/dist/src/voice/tts/providers/alibaba-speech.js +17 -1
- package/dist/src/voice/tts/speak-core.d.ts +3 -0
- package/dist/src/voice/tts/speak-core.js +21 -1
- package/dist/src/voice/tts/speech-provider-types.d.ts +8 -0
- package/package.json +18 -7
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D0tD3kCe.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-BjdgKCnk.js +0 -1
- package/dist/gateway/static/root/assets/agents-CWXKzX5L.js +0 -66
- package/dist/gateway/static/root/assets/automations-workspace-C9ZT6TAU.js +0 -6
- package/dist/gateway/static/root/assets/browser-automation-inputs-CXG_JveC.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CJc7OKR3.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-BjaTEUR8.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-djBsC_tG.js +0 -2
- package/dist/gateway/static/root/assets/channels-BaYRJtz3.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DyqRwSH2.js +0 -2
- package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
- package/dist/gateway/static/root/assets/dependency-picker-CWbbhKZa.js +0 -1
- package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-C4KtwMY3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-ChZUzVbe.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DhPPLbdD.js +0 -2
- package/dist/gateway/static/root/assets/index-CK4O2xMa.css +0 -1
- package/dist/gateway/static/root/assets/index-DpLD-7Hc.js +0 -106
- package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
- package/dist/gateway/static/root/assets/local-session-drafts-B_McurIj.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-BWD63eg1.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-aKSibklM.js +0 -1
- package/dist/gateway/static/root/assets/messages-Bnx3GMDB.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-Di83uIPw.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-B_fve3_2.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-DnChyp8S.js +0 -8
- package/dist/gateway/static/root/assets/personal-page-BM2qAgg_.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-DM4_VLNX.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-O6j9CWX0.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-B0tOE4qz.js +0 -16
- package/dist/gateway/static/root/assets/sessions-page-BIixHXlQ.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-49SUEWPh.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Ce3gTbT3.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CNEZjF66.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BndNdYsJ.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-EpZeMlvp.js +0 -1
- package/dist/gateway/static/root/assets/use-file-preview-expanded-DJ5vyrvM.js +0 -2
- package/dist/gateway/static/root/assets/user-model-page-Bz5lkFG9.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-CPCgOfHh.js +0 -6
- package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
- package/dist/src/agent/embedded/system-prompt-override.js +0 -21
- package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
- package/dist/src/agent/external-tools/mcp-provider.js +0 -208
- package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
- package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
- package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
- package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
- package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
- package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
- package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
- package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
- package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
- package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
- package/dist/src/agent/mcp/embedded-mcp.js +0 -14
- package/dist/src/agent/mcp/index.d.ts +0 -5
- package/dist/src/agent/mcp/index.js +0 -12
- package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
- package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
- package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
- package/dist/src/agent/mcp/mcp-http.js +0 -67
- package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
- package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
- package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
- package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
- package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
- package/dist/src/agent/mcp/mcp-stdio.js +0 -35
- package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
- package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
- package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
- package/dist/src/agent/mcp/mcp-transport.js +0 -141
- package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
- package/dist/src/agent/mcp/oauth/index.js +0 -6
- package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
- package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
- package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
- package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
- package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
- package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
- package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
- package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
- package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
- package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
- package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
- package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
- package/dist/src/auth/oauth/openai-codex.js +0 -414
- package/dist/src/browser/policy/approval-store.d.ts +0 -17
- package/dist/src/browser/policy/approval-store.js +0 -62
- package/dist/src/browser/providers/extension-ws-acquire.d.ts +0 -19
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -78
- package/dist/src/browser/providers/extension.d.ts +0 -61
- package/dist/src/browser/providers/extension.js +0 -378
- package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
- package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
- package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
- package/dist/src/extensions/agent-plugins/connection.js +0 -41
- package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
- package/dist/src/extensions/agent-plugins/health.js +0 -48
- package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
- 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
|
|
83
|
+
ttl
|
|
82
84
|
}
|
|
83
85
|
})
|
|
84
86
|
});
|
|
@@ -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;
|
|
@@ -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
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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())
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
|
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
|
|
560
|
-
name: "Azure
|
|
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
|
|
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
|
|
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 {
|
|
2
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
/**
|
|
3
|
+
/** Attach xopc's Computer Use contract to supported OpenAI Responses models. */
|
|
5
4
|
function applyOfficialModelMetadataCorrections(model) {
|
|
6
|
-
|
|
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
|
-
...
|
|
7
|
+
...model,
|
|
14
8
|
computerUse: { profile: "openai-responses-computer-v1" }
|
|
15
9
|
};
|
|
16
10
|
}
|
|
17
11
|
/**
|
|
18
|
-
*
|
|
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
|
-
|
|
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
|
|
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-
|
|
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 === "
|
|
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;
|