@xopcai/xopc 0.0.235 → 0.0.239
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +8 -8
- package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/gateway/static/root/assets/{activity-store-BzswYHcj.js → activity-store-DLfkwJzZ.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-dvh9aEm6.js → agent-avatar-dicebear-C1rtpjd7.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-oW6wFuP9.js +1 -0
- package/dist/gateway/static/root/assets/agents-V-nDPOk2.js +1 -0
- package/dist/gateway/static/root/assets/{api-7zOtMbaE.js → api-IUm57Zse.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-CRDnRN4G.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-BCYZIKqQ.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-dcvQDCvy.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DawToDU8.js → archive-plugin-Bha1jUhj.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-DmBAKvsi.js → attachment-load-Bgfh7Ag2.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BGkF6XNH.js → automations-page-BdH131M0.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BtwzQZAR.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-B-6Ski7l.js → binary-plugins-BwXg9na-.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BgeKQN1F.js → block-editor-BngtUSNv.js} +56 -56
- package/dist/gateway/static/root/assets/browser-settings-page-kfNOKQ2x.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-4ooVX-Tx.js → browser-workflow-inputs-CHHw7Ula.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-D92g81lS.js → browser-workflows-page-Ael9sxrp.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DOymgkUM.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-YscUvFub.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-BDJvMnA_.js → channels-status-swr-CwUSKmeY.js} +1 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-DI0lYVKk.js +36 -0
- package/dist/gateway/static/root/assets/connectors-page-BtzCRQGz.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-BYmr5ZuN.js → cron-expression-CLuvPZ3b.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-FKL_b_S0.js → date-picker-D4QS8Zzn.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-DZn-RhEm.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DOXjRTqK.js → desktop-pet-C6KqTQas.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Bov3XuPO.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BeJ1-5ID.js → extension-debug-page-DpeeYAjX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CncDndLS.js → extension-page-Cescx_be.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BxxL0HqU.js → extension-settings-page-C_ubW61U.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-Dc6A6HyJ.js → gateway-config-api-BM79X1jC.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-R702lNJR.js → gateway-config-swr-DfMY-MLf.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-GV5KAj-l.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-2rVSUvyw.js → gateway-startup-retry-S6aB0hVI.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CZ1KeXXU.js +1 -0
- package/dist/gateway/static/root/assets/home-page-YdVal_8I.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-B28USRCK.js → image-generation-api-DOX5uq-R.js} +1 -1
- package/dist/gateway/static/root/assets/index-7GLgmvAm.css +2 -0
- package/dist/gateway/static/root/assets/index-DKP23eMn.js +70 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Cwinks_5.js → keyboard-shortcuts-settings-Tn7xSeVT.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-DCt7cbvK.js +2 -0
- package/dist/gateway/static/root/assets/local-apps-page-Co5_qKEQ.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-8k4mvYGL.js → locale-store-XDFAPNNu.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-ChfSQQSV.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-DE0o5c7Y.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-split-B6wQhwLV.js → markdown-split-CADkGbQi.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-Y68dCxuc.css +1 -0
- package/dist/gateway/static/root/assets/markdown-view-v-O3cOpk.js +201 -0
- package/dist/gateway/static/root/assets/{media-plugins-BSEPuO76.js → media-plugins-mHodPaFz.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B1HDp_j8.js +3 -0
- package/dist/gateway/static/root/assets/mobile-pairing-wizard-43FyMswX.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-cache-Bngs8o1m.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-p2Pncp2B.js → notes-api-BMhFpRmW.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-CPgbeO1u.js → notes-page-BMUyJStB.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-DjHIQneE.js +4 -0
- package/dist/gateway/static/root/assets/{oauth-api-DpLONwfK.js → oauth-api-B_pcOUfT.js} +1 -1
- package/dist/gateway/static/root/assets/popover-select-DBrVS3tZ.js +1 -0
- package/dist/gateway/static/root/assets/{product-delivery-tRr-7IxY.js → product-delivery-dUJgmBQZ.js} +1 -1
- package/dist/gateway/static/root/assets/product-open-page-B8cjLdm4.js +1 -0
- package/dist/gateway/static/root/assets/project-detail-page-CXD2pVgQ.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-cqKqkTwG.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-B7b0LJgI.js → registry-api-DeVvBsl4.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-UEinEd7d.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-D3TCJGy3.js → runtime-tools-settings-panel-ClCEmwPY.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DUAlwNoO.js → schema-form-0vcUqeqa.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Cc6ve-qc.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-_J5FSEYX.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-D7nQ3Lfu.js → settings-form-section-BkdLf_sS.js} +1 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-CAmWMaOT.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-CMAkMc3I.js → settings-page-QBTaBpBn.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-bQcSMkVr.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-D_OuXnah.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-DJfcpok3.js +1 -0
- package/dist/gateway/static/root/assets/skeleton-BwbyijEw.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-Bbqp5HaH.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-DJRr5HFw.js → skills-page-BNcnmaTg.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-DcrBe39q.js → skills-page.utils-BWWcFShl.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-BsH7b3B4.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-CcAhyw2Z.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-CpcBI73Q.js → theme-store-5-XHH7F0.js} +1 -1
- package/dist/gateway/static/root/assets/tunnel-api-D5-Hggt3.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-DDEypreQ.js → use-autosave-Dp1ycDa8.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-Dd_oMNie.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BLa_vdXE.js → voice-api-key-field-DhrQXH3c.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-ynE-vY6I.js → voice-config-api-Bk_bVeGX.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DS3w1Fyq.js → work-discovery-overlay-B7zKAPrb.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-jQl_wmYC.js → workflow-run-setup-panel-Cek9K48F.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-T2q2Mx6H.js +5 -0
- package/dist/gateway/static/root/index.html +18 -17
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/device-pairing.js +39 -0
- package/dist/packages/gateway-contract/src/model-selection.js +7 -0
- package/dist/packages/gateway-contract/src/new-session.js +9 -2
- package/dist/packages/gateway-contract/src/turn-outcome.js +27 -2
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +5 -0
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/ipc/inbox.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/models/manager.d.ts +3 -0
- package/dist/src/agent/models/manager.js +9 -0
- package/dist/src/agent/prompt/sections/tooling.js +1 -0
- package/dist/src/agent/service.js +2 -2
- package/dist/src/agent/session/session-config-service.d.ts +6 -2
- package/dist/src/agent/session/session-config-service.js +78 -17
- package/dist/src/agent/session/session-hydrator.d.ts +3 -4
- package/dist/src/agent/session/session-hydrator.js +19 -8
- package/dist/src/agent/session/session-inspector.d.ts +3 -1
- package/dist/src/agent/session/session-inspector.js +8 -4
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tools/exec-command.js +1 -0
- package/dist/src/agent/tools/publish-artifacts.d.ts +1 -0
- package/dist/src/agent/tools/publish-artifacts.js +15 -4
- package/dist/src/agent/tools/xopc-use-tool.js +4 -4
- package/dist/src/agent/transcript/thinking-types.d.ts +1 -1
- package/dist/src/agent/transcript/thinking-types.js +2 -0
- package/dist/src/agent-config/schema.d.ts +16 -16
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/automations/domain/validation.d.ts +62 -62
- package/dist/src/automations/draft/automation-draft-validator.d.ts +10 -10
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/chat-commands/builtins/thinking.js +1 -0
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/connectors.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/models.js +2 -2
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.d.ts +137 -11
- package/dist/src/config/models-json.js +29 -2
- package/dist/src/config/schema.d.ts +15 -15
- package/dist/src/execution-environments/git.d.ts +27 -0
- package/dist/src/execution-environments/git.js +125 -0
- package/dist/src/execution-environments/index.d.ts +7 -0
- package/dist/src/execution-environments/index.js +8 -0
- package/dist/src/execution-environments/local-worktree-manager.d.ts +37 -0
- package/dist/src/execution-environments/local-worktree-manager.js +322 -0
- package/dist/src/execution-environments/paths.d.ts +2 -0
- package/dist/src/execution-environments/paths.js +18 -0
- package/dist/src/execution-environments/session-environment-service.d.ts +22 -0
- package/dist/src/execution-environments/session-environment-service.js +73 -0
- package/dist/src/execution-environments/store.d.ts +13 -0
- package/dist/src/execution-environments/store.js +183 -0
- package/dist/src/execution-environments/subject.d.ts +2 -0
- package/dist/src/execution-environments/subject.js +12 -0
- package/dist/src/execution-environments/types.d.ts +74 -0
- package/dist/src/execution-environments/types.js +54 -0
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/extensions/update.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/custom-image-providers.d.ts +1 -1
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +4 -4
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/chat-model-config.d.ts +34 -0
- package/dist/src/gateway/hono/routes/chat-model-config.js +42 -0
- package/dist/src/gateway/hono/routes/device-pairing-approval.d.ts +3 -0
- package/dist/src/gateway/hono/routes/device-pairing-approval.js +100 -0
- package/dist/src/gateway/hono/routes/devices.js +15 -8
- package/dist/src/gateway/hono/routes/execution-environments.d.ts +3 -0
- package/dist/src/gateway/hono/routes/execution-environments.js +136 -0
- package/dist/src/gateway/hono/routes/index.js +4 -0
- package/dist/src/gateway/hono/routes/mobile-privacy.d.ts +3 -0
- package/dist/src/gateway/hono/routes/mobile-privacy.js +13 -0
- package/dist/src/gateway/hono/routes/models.js +10 -1
- package/dist/src/gateway/hono/routes/projects.js +43 -4
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +15 -1
- package/dist/src/gateway/hono/routes/session-input-handler.js +122 -52
- package/dist/src/gateway/hono/routes/sessions.js +105 -22
- package/dist/src/gateway/hono/routes/tasks.js +4 -12
- package/dist/src/gateway/mobile-privacy.d.ts +7 -0
- package/dist/src/gateway/mobile-privacy.js +102 -0
- package/dist/src/gateway/security/gateway-scopes.js +1 -0
- package/dist/src/gateway/service/agent-runner.d.ts +1 -1
- package/dist/src/gateway/service/config-coordinator.js +2 -2
- package/dist/src/gateway/service/session-input-coordinator.d.ts +2 -1
- package/dist/src/gateway/service/session-input-coordinator.js +14 -5
- package/dist/src/gateway/service/sessions-api.d.ts +4 -12
- package/dist/src/gateway/service/sessions-api.js +13 -0
- package/dist/src/gateway/service.d.ts +1 -1
- package/dist/src/gateway/service.js +8 -8
- package/dist/src/gateway/session-context-summary.d.ts +5 -0
- package/dist/src/gateway/session-context-summary.js +151 -0
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/i18n/response-language.d.ts +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/projects/index.js +3 -3
- package/dist/src/projects/project-kind.d.ts +7 -0
- package/dist/src/projects/project-kind.js +6 -1
- package/dist/src/projects/project-service.js +10 -2
- package/dist/src/projects/project-store.d.ts +1 -0
- package/dist/src/projects/project-store.js +10 -7
- package/dist/src/projects/types.d.ts +4 -0
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +3 -1
- package/dist/src/providers/model-thinking.d.ts +4 -0
- package/dist/src/providers/model-thinking.js +41 -0
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/session/config-types.d.ts +1 -0
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/model-config-lock.d.ts +2 -0
- package/dist/src/session/model-config-lock.js +14 -0
- package/dist/src/session/session-workspace.d.ts +2 -1
- package/dist/src/session/session-workspace.js +5 -1
- package/dist/src/session/store.js +1 -1
- package/dist/src/session/turn-outcome-projector.js +9 -9
- package/dist/src/share/hosted-session-share.js +1 -1
- package/dist/src/storage/sqlite/config-repository.js +6 -5
- package/dist/src/storage/sqlite/device-access-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/device-access-repository.js +12 -2
- package/dist/src/storage/sqlite/device-pairing-approval.d.ts +19 -0
- package/dist/src/storage/sqlite/device-pairing-approval.js +154 -0
- package/dist/src/storage/sqlite/device-pairing-repository.d.ts +1 -1
- package/dist/src/storage/sqlite/device-pairing-repository.js +11 -4
- package/dist/src/storage/sqlite/index.js +2 -2
- package/dist/src/storage/sqlite/migrations/141_device_pairing_approval.sql +17 -0
- package/dist/src/storage/sqlite/migrations/142_session_input_instance.sql +1 -0
- package/dist/src/storage/sqlite/migrations/143_fixed_session_model.sql +1 -0
- package/dist/src/storage/sqlite/migrations/144_execution_environments.sql +59 -0
- package/dist/src/storage/sqlite/migrations/145_project_execution_mode.sql +5 -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/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.d.ts +1 -0
- package/dist/src/storage/sqlite/row-mappers.js +3 -2
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-input-repository.d.ts +5 -0
- package/dist/src/storage/sqlite/session-input-repository.js +15 -4
- package/dist/src/storage/sqlite/session-repository.js +1 -1
- package/dist/src/tasks/execution-context.d.ts +3 -1
- package/dist/src/tasks/execution-context.js +7 -2
- package/dist/src/tasks/home-query-service.js +2 -2
- package/dist/src/tui/backends/embedded-backend.js +2 -2
- package/dist/src/tui/components/thinking-selector.js +1 -0
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/user-context/config.d.ts +9 -9
- package/dist/src/work-discovery/service.d.ts +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +2 -2
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-B9tkmkUj.js +0 -1
- package/dist/gateway/static/root/assets/agents-DTXYo-7z.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-DXFTk7x6.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-D-FD5SOq.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BT102W58.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-BRb45-_R.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BkRWxC7D.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DfT-vWTA.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-C9oGpLR0.js +0 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-C_9LUs7G.js +0 -36
- package/dist/gateway/static/root/assets/connectors-page-SJKV6SHT.js +0 -2
- package/dist/gateway/static/root/assets/dependency-picker-BP68vqBI.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CuG2qYoY.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-C2XcazGD.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-BjUEqkkC.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DTSjwfAQ.js +0 -1
- package/dist/gateway/static/root/assets/index-BTUuTnc9.css +0 -2
- package/dist/gateway/static/root/assets/index-DFfvY8IN.js +0 -70
- package/dist/gateway/static/root/assets/local-app-workbench-page-0wntj9mK.js +0 -2
- package/dist/gateway/static/root/assets/local-apps-page-WeKm5vZ0.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-DFgJr7Zx.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-8bEvKO0R.js +0 -1
- package/dist/gateway/static/root/assets/markdown-view-B1bGSQqt.css +0 -1
- package/dist/gateway/static/root/assets/markdown-view-D02mJdoU.js +0 -201
- package/dist/gateway/static/root/assets/messages-CoovNoMn.js +0 -3
- package/dist/gateway/static/root/assets/mobile-device-api-CvjVB_TB.js +0 -1
- package/dist/gateway/static/root/assets/models-hub-cache-CYr6LzvY.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-DIXCtwhs.js +0 -4
- package/dist/gateway/static/root/assets/popover-select-3E24E65N.js +0 -1
- package/dist/gateway/static/root/assets/product-open-page-DNHWn_26.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-6jgRJg4w.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-Bd4nXs4y.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-C_5-u9U-.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BqYAR86S.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-a146I0uZ.js +0 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-CwGM9zKH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-rhaERxAL.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-BzkXvuH6.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-BvsM3Im5.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-u7E0gqFo.js +0 -1
- package/dist/gateway/static/root/assets/system-settings-panel-BUsykmjx.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-C9QgWfYG.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-Ch0cfQfI.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-DyTwkdzs.js +0 -5
- /package/dist/gateway/static/root/assets/{dist-DqPZM2MH2.js → dist-DqPZM2MH.js} +0 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
|
|
12
12
|
<link rel="manifest" href="/site.webmanifest?v=20260713-1" />
|
|
13
13
|
<title>XOPC — Keep what matters moving.</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-DKP23eMn.js"></script>
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
|
|
@@ -25,19 +25,20 @@
|
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/messages-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-B1HDp_j8.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-XDFAPNNu.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/schemas-zIBW3wiV.js">
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/product-delivery-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/product-delivery-dUJgmBQZ.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-v-O3cOpk.js">
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-DqPZM2MH.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/skeleton-BwbyijEw.js">
|
|
38
39
|
<link rel="modulepreload" crossorigin href="/assets/settings-shell-dialog-layer-BU3UuiJr.js">
|
|
39
40
|
<link rel="modulepreload" crossorigin href="/assets/settings-shell-layer-context-DCp6ykjQ.js">
|
|
40
|
-
<link rel="modulepreload" crossorigin href="/assets/popover-select-
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/popover-select-DBrVS3tZ.js">
|
|
41
42
|
<link rel="modulepreload" crossorigin href="/assets/circle-check-C23XjkUj.js">
|
|
42
43
|
<link rel="modulepreload" crossorigin href="/assets/cloud-C4-yfnnk.js">
|
|
43
44
|
<link rel="modulepreload" crossorigin href="/assets/copy-Dv6d4Dvw.js">
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
<link rel="modulepreload" crossorigin href="/assets/eye-off-DEAzt3g1.js">
|
|
47
48
|
<link rel="modulepreload" crossorigin href="/assets/eye-CABVeTq0.js">
|
|
48
49
|
<link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
|
|
49
|
-
<link rel="modulepreload" crossorigin href="/assets/notes-api-
|
|
50
|
+
<link rel="modulepreload" crossorigin href="/assets/notes-api-BMhFpRmW.js">
|
|
50
51
|
<link rel="modulepreload" crossorigin href="/assets/loader-circle-CifKLtgG.js">
|
|
51
52
|
<link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
|
|
52
53
|
<link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
|
|
@@ -54,20 +55,20 @@
|
|
|
54
55
|
<link rel="modulepreload" crossorigin href="/assets/files-DQjhZjr2.js">
|
|
55
56
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-R8V9l6nk.js">
|
|
56
57
|
<link rel="modulepreload" crossorigin href="/assets/button-CSEbl4zT.js">
|
|
57
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
58
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-api-
|
|
58
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-S6aB0hVI.js">
|
|
59
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-api-DeVvBsl4.js">
|
|
59
60
|
<link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
|
|
60
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-
|
|
61
|
-
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-
|
|
61
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-DfMY-MLf.js">
|
|
62
|
+
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-Bngs8o1m.js">
|
|
62
63
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-DH5wF8X8.js">
|
|
63
|
-
<link rel="modulepreload" crossorigin href="/assets/oauth-api-
|
|
64
|
+
<link rel="modulepreload" crossorigin href="/assets/oauth-api-B_pcOUfT.js">
|
|
64
65
|
<link rel="modulepreload" crossorigin href="/assets/form-field-width-DJw_jULe.js">
|
|
65
66
|
<link rel="modulepreload" crossorigin href="/assets/interaction-BmQogeqz.js">
|
|
66
67
|
<link rel="modulepreload" crossorigin href="/assets/is-masked-secret-DOkL5b_X.js">
|
|
67
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
68
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
69
|
-
<link rel="stylesheet" crossorigin href="/assets/markdown-view-
|
|
70
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
68
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-DLfkwJzZ.js">
|
|
69
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-5-XHH7F0.js">
|
|
70
|
+
<link rel="stylesheet" crossorigin href="/assets/markdown-view-Y68dCxuc.css">
|
|
71
|
+
<link rel="stylesheet" crossorigin href="/assets/index-7GLgmvAm.css">
|
|
71
72
|
</head>
|
|
72
73
|
<body>
|
|
73
74
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region packages/gateway-contract/src/device-pairing.ts
|
|
3
|
+
const devicePairingKeySchema = z.strictObject({
|
|
4
|
+
kty: z.literal("EC"),
|
|
5
|
+
crv: z.literal("P-256"),
|
|
6
|
+
x: z.string().regex(/^[A-Za-z0-9_-]{43}$/),
|
|
7
|
+
y: z.string().regex(/^[A-Za-z0-9_-]{43}$/)
|
|
8
|
+
});
|
|
9
|
+
const devicePairingDeviceSchema = z.strictObject({
|
|
10
|
+
displayName: z.string().trim().min(1).max(80),
|
|
11
|
+
platform: z.enum(["ios", "android"]),
|
|
12
|
+
publicKeyJwk: devicePairingKeySchema
|
|
13
|
+
});
|
|
14
|
+
const initialDeviceRefreshTokenSchema = z.string().regex(/^xopc_rt_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}_[A-Za-z0-9_-]{43}$/i);
|
|
15
|
+
const devicePairingProofSchema = z.strictObject({
|
|
16
|
+
gatewayId: z.string().uuid(),
|
|
17
|
+
requestId: z.string().uuid(),
|
|
18
|
+
pairingToken: z.string().min(1).max(256),
|
|
19
|
+
timestamp: z.number().int().positive(),
|
|
20
|
+
nonce: z.string().regex(/^[A-Za-z0-9_-]{24,128}$/),
|
|
21
|
+
signature: z.string().regex(/^[A-Za-z0-9_-]{86}$/)
|
|
22
|
+
});
|
|
23
|
+
const devicePairingRequestSchema = devicePairingProofSchema.extend({ device: devicePairingDeviceSchema });
|
|
24
|
+
const devicePairingCompleteSchema = devicePairingProofSchema.extend({
|
|
25
|
+
idempotencyKey: z.string().uuid(),
|
|
26
|
+
initialRefreshToken: initialDeviceRefreshTokenSchema
|
|
27
|
+
});
|
|
28
|
+
function canonical(value) {
|
|
29
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
30
|
+
if (value !== null && typeof value === "object") return `{${Object.entries(value).filter(([, v]) => v !== void 0).sort(([a], [b]) => a.localeCompare(b, "en")).map(([k, v]) => `${JSON.stringify(k)}:${canonical(v)}`).join(",")}}`;
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
}
|
|
33
|
+
/** Identical domain-separated proof input on the phone and Gateway. */
|
|
34
|
+
function buildDevicePairingProof(action, body) {
|
|
35
|
+
const { signature: _signature, ...payload } = body;
|
|
36
|
+
return `xopc-device-pairing-v3\nPOST\n${action}\n${canonical(payload)}`;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { buildDevicePairingProof, devicePairingCompleteSchema, devicePairingDeviceSchema, devicePairingProofSchema, devicePairingRequestSchema, initialDeviceRefreshTokenSchema };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region packages/gateway-contract/src/model-selection.ts
|
|
2
|
+
function chooseModelThinking(capabilities, current, remembered) {
|
|
3
|
+
for (const value of [remembered, current]) if (capabilities.options.includes(value)) return value;
|
|
4
|
+
return capabilities.initialValue;
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { chooseModelThinking };
|
|
@@ -37,7 +37,8 @@ function parseModelPreferences(value) {
|
|
|
37
37
|
const thinkingLevel = typeof record.thinkingLevel === "string" ? normalized(record.thinkingLevel) : void 0;
|
|
38
38
|
result[agentId] = {
|
|
39
39
|
modelRef,
|
|
40
|
-
...thinkingLevel ? { thinkingLevel } : {}
|
|
40
|
+
...thinkingLevel ? { thinkingLevel } : {},
|
|
41
|
+
...record.thinkingByModel && typeof record.thinkingByModel === "object" ? { thinkingByModel: Object.fromEntries(Object.entries(record.thinkingByModel).filter((entry) => typeof entry[1] === "string")) } : {}
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
44
|
return result;
|
|
@@ -71,9 +72,15 @@ function withAgentModelPreference(preferences, agentId, preference) {
|
|
|
71
72
|
if (!preference || !modelRef) delete modelByAgent[normalizedId];
|
|
72
73
|
else {
|
|
73
74
|
const thinkingLevel = normalized(preference.thinkingLevel);
|
|
75
|
+
const thinkingByModel = {
|
|
76
|
+
...modelByAgent[normalizedId]?.thinkingByModel,
|
|
77
|
+
...modelByAgent[normalizedId]?.thinkingLevel ? { [modelByAgent[normalizedId].modelRef]: modelByAgent[normalizedId].thinkingLevel } : {},
|
|
78
|
+
...thinkingLevel ? { [modelRef]: thinkingLevel } : {}
|
|
79
|
+
};
|
|
74
80
|
modelByAgent[normalizedId] = {
|
|
75
81
|
modelRef,
|
|
76
|
-
...thinkingLevel ? { thinkingLevel } : {}
|
|
82
|
+
...thinkingLevel ? { thinkingLevel } : {},
|
|
83
|
+
...Object.keys(thinkingByModel).length ? { thinkingByModel } : {}
|
|
77
84
|
};
|
|
78
85
|
}
|
|
79
86
|
return {
|
|
@@ -35,6 +35,7 @@ const TurnOutcomeArtifactCapabilitySchema = z.enum([
|
|
|
35
35
|
]);
|
|
36
36
|
const TurnOutcomeDeliverableSchema = z.object({
|
|
37
37
|
artifactId: z.string().min(1),
|
|
38
|
+
sourceFileId: z.string().min(1).optional(),
|
|
38
39
|
title: z.string().min(1),
|
|
39
40
|
kind: TurnOutcomeDeliverableKindSchema,
|
|
40
41
|
mimeType: z.string().optional(),
|
|
@@ -110,6 +111,14 @@ const FILE_RESOURCE_ARTIFACT_URI_PREFIX = "xopc-file:";
|
|
|
110
111
|
function fileResourceArtifactUri(fileResourceId) {
|
|
111
112
|
return `${FILE_RESOURCE_ARTIFACT_URI_PREFIX}${encodeURIComponent(fileResourceId)}`;
|
|
112
113
|
}
|
|
114
|
+
function parseFileResourceArtifactUri(uri) {
|
|
115
|
+
if (!uri.startsWith(FILE_RESOURCE_ARTIFACT_URI_PREFIX)) return null;
|
|
116
|
+
try {
|
|
117
|
+
return decodeURIComponent(uri.slice(10)).trim() || null;
|
|
118
|
+
} catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
113
122
|
function turnOutcomeKindFromFileName(fileName) {
|
|
114
123
|
const extension = fileName.toLowerCase().split(".").pop() ?? "";
|
|
115
124
|
if (extension === "xlsx" || extension === "xls" || extension === "csv" || extension === "tsv") return "spreadsheet";
|
|
@@ -182,9 +191,25 @@ function turnOutcomeMimeTypeFromFileName(fileName) {
|
|
|
182
191
|
zip: "application/zip"
|
|
183
192
|
}[fileName.toLowerCase().split(".").pop() ?? ""];
|
|
184
193
|
}
|
|
194
|
+
/** Merge file representations within one turn, preferring the latest available snapshot. */
|
|
195
|
+
function mergeTurnOutcomeDeliverables(items) {
|
|
196
|
+
const byId = new Map(items.map((item) => [item.artifactId, item]));
|
|
197
|
+
const bySource = /* @__PURE__ */ new Map();
|
|
198
|
+
const priority = (item) => item.availability === "available" ? item.location === "artifact_store" ? 2 : 1 : 0;
|
|
199
|
+
for (const item of byId.values()) {
|
|
200
|
+
const sourceFileId = item.sourceFileId ?? parseFileResourceArtifactUri(item.uri ?? "");
|
|
201
|
+
const key = sourceFileId ? `source:${sourceFileId}` : `artifact:${item.artifactId}`;
|
|
202
|
+
const previous = bySource.get(key);
|
|
203
|
+
if (!previous || priority(item) >= priority(previous)) bySource.set(key, item);
|
|
204
|
+
}
|
|
205
|
+
return [...bySource.values()];
|
|
206
|
+
}
|
|
185
207
|
function parseTurnOutcome(value) {
|
|
186
208
|
const parsed = TurnOutcomeSchema.safeParse(value);
|
|
187
|
-
return parsed.success ?
|
|
209
|
+
return parsed.success ? {
|
|
210
|
+
...parsed.data,
|
|
211
|
+
deliverables: mergeTurnOutcomeDeliverables(parsed.data.deliverables)
|
|
212
|
+
} : null;
|
|
188
213
|
}
|
|
189
214
|
//#endregion
|
|
190
|
-
export { TurnOutcomeDeliverableSchema, fileResourceArtifactUri, parseTurnOutcome, turnOutcomeKindFromFileName, turnOutcomeMimeTypeFromFileName };
|
|
215
|
+
export { TurnOutcomeDeliverableSchema, fileResourceArtifactUri, mergeTurnOutcomeDeliverables, parseTurnOutcome, turnOutcomeKindFromFileName, turnOutcomeMimeTypeFromFileName };
|
|
@@ -5,16 +5,16 @@ import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
|
5
5
|
import { getSessionConfig } from "../storage/sqlite/config-repository.js";
|
|
6
6
|
import "../storage/sqlite/index.js";
|
|
7
7
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
8
|
+
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
8
9
|
import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
|
|
9
10
|
import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
|
|
10
|
-
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
11
|
-
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
12
11
|
import { init_session_key, parseSessionKey } from "../routing/session-key.js";
|
|
12
|
+
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
13
|
+
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
13
14
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
|
|
15
|
+
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
14
16
|
import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
15
17
|
import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
|
|
16
|
-
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
17
|
-
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
18
18
|
import { extractTextContent } from "./context/workspace.js";
|
|
19
19
|
import { buildExecutionScopeContextForPrompt } from "./context/execution-scope.js";
|
|
20
20
|
import { clearBootstrapSnapshot } from "./bootstrap/bootstrap-cache.js";
|
|
@@ -4,10 +4,10 @@ import { finishContextExtractionRun } from "../../storage/sqlite/context-extract
|
|
|
4
4
|
import { getTurnPersonalization } from "../../storage/sqlite/user-context-repository.js";
|
|
5
5
|
import { loadCompactionSourceSnapshot } from "../../storage/sqlite/transcript-repository.js";
|
|
6
6
|
import "../../storage/sqlite/index.js";
|
|
7
|
+
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
7
8
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
8
9
|
import { getApiKeySync, init_providers, resolveModel } from "../../providers/index.js";
|
|
9
10
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
10
|
-
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
11
11
|
import { extractTextContent } from "../context/workspace.js";
|
|
12
12
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
13
13
|
import { resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_paths, resolveModelsJsonPath } from "../../config/paths.js";
|
|
2
|
-
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
3
2
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
3
|
+
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
4
4
|
import { XopcModelCredentialStore, init_model_credential_store } from "../../auth/model-credential-store.js";
|
|
5
5
|
import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "../../providers/register-bundled-oauth-flows.js";
|
|
6
6
|
import { init_register_runtime_providers, registerRuntimeProviders } from "../../providers/register-runtime-providers.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
4
3
|
import { parseTurnOutcome } from "../../../packages/gateway-contract/src/turn-outcome.js";
|
|
5
4
|
import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
|
|
5
|
+
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
6
6
|
import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
|
|
7
7
|
import { resolvePromptCachePolicy } from "../../providers/prompt-cache-plan.js";
|
|
8
8
|
import { evaluateContextBudget } from "../memory/context-budget.js";
|
|
@@ -267,6 +267,11 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
267
267
|
errorMessage: getAssistantTurnErrorMessage(session.agent) ?? "Assistant turn failed",
|
|
268
268
|
lastAssistantText: lastAssistantPlainText(session)
|
|
269
269
|
};
|
|
270
|
+
runner.piSm.appendCustomEntry("xopc.model-selection", {
|
|
271
|
+
runId,
|
|
272
|
+
model: `${session.agent.state.model?.provider ?? resolvedModel.provider}/${session.agent.state.model?.id ?? resolvedModel.id}`,
|
|
273
|
+
thinkingLevel: session.agent.state.thinkingLevel
|
|
274
|
+
});
|
|
270
275
|
return {
|
|
271
276
|
ok: true,
|
|
272
277
|
lastAssistantText: lastAssistantPlainText(session)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
|
|
2
2
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
3
|
-
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
4
3
|
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
4
|
+
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
|
|
6
6
|
import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
|
|
7
7
|
import "../../capabilities/readiness/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
4
3
|
import { init_paths, resolveAgentDir } from "../../config/paths.js";
|
|
4
|
+
import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
|
|
5
5
|
import { join } from "path";
|
|
6
6
|
import { existsSync, watch } from "fs";
|
|
7
7
|
import { mkdir, readFile, readdir, rename } from "fs/promises";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_write_file_atomic, writeTextAtomic } from "../../../infra/write-file-atomic.js";
|
|
2
1
|
import { init_paths, resolveMcpOAuthPath } from "../../../config/paths.js";
|
|
2
|
+
import { init_write_file_atomic, writeTextAtomic } from "../../../infra/write-file-atomic.js";
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { readFile, rm } from "node:fs/promises";
|
|
5
5
|
//#region src/agent/mcp/oauth/mcp-oauth-store.ts
|
|
@@ -18,6 +18,7 @@ export declare class ModelManager {
|
|
|
18
18
|
private currentModelName;
|
|
19
19
|
private currentProvider;
|
|
20
20
|
private sessionModels;
|
|
21
|
+
private fixedSessionModels;
|
|
21
22
|
/** Baseline model from `agents.list` / defaults merge when the session agent is created. */
|
|
22
23
|
private sessionProfileDefaults;
|
|
23
24
|
private sessionProfileFallbacks;
|
|
@@ -49,6 +50,8 @@ export declare class ModelManager {
|
|
|
49
50
|
* Switch model for a specific session
|
|
50
51
|
*/
|
|
51
52
|
switchModelForSession(sessionKey: string, modelId: string): Promise<boolean>;
|
|
53
|
+
/** Restore persisted identity even if its provider is temporarily unavailable. */
|
|
54
|
+
restoreSessionModel(sessionKey: string, modelRef: string, fixed: boolean): void;
|
|
52
55
|
/** Drop in-memory session override so the global default is used again. */
|
|
53
56
|
clearSessionModelOverride(sessionKey: string): void;
|
|
54
57
|
/**
|
|
@@ -15,6 +15,7 @@ var ModelManager = class {
|
|
|
15
15
|
currentModelName;
|
|
16
16
|
currentProvider;
|
|
17
17
|
sessionModels = /* @__PURE__ */ new Map();
|
|
18
|
+
fixedSessionModels = /* @__PURE__ */ new Set();
|
|
18
19
|
/** Baseline model from `agents.list` / defaults merge when the session agent is created. */
|
|
19
20
|
sessionProfileDefaults = /* @__PURE__ */ new Map();
|
|
20
21
|
sessionProfileFallbacks = /* @__PURE__ */ new Map();
|
|
@@ -89,9 +90,16 @@ var ModelManager = class {
|
|
|
89
90
|
return false;
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
/** Restore persisted identity even if its provider is temporarily unavailable. */
|
|
94
|
+
restoreSessionModel(sessionKey, modelRef, fixed) {
|
|
95
|
+
this.sessionModels.set(sessionKey, modelRef);
|
|
96
|
+
if (fixed) this.fixedSessionModels.add(sessionKey);
|
|
97
|
+
else this.fixedSessionModels.delete(sessionKey);
|
|
98
|
+
}
|
|
92
99
|
/** Drop in-memory session override so the global default is used again. */
|
|
93
100
|
clearSessionModelOverride(sessionKey) {
|
|
94
101
|
this.sessionModels.delete(sessionKey);
|
|
102
|
+
this.fixedSessionModels.delete(sessionKey);
|
|
95
103
|
}
|
|
96
104
|
/**
|
|
97
105
|
* Resolved pi-ai model for session (for transcript policy, tools, etc.)
|
|
@@ -145,6 +153,7 @@ var ModelManager = class {
|
|
|
145
153
|
getFallbackCandidatesForSession(sessionKey) {
|
|
146
154
|
const parsed = parseModelRef(this.getModelForSession(sessionKey));
|
|
147
155
|
if (!parsed) return [];
|
|
156
|
+
if (this.fixedSessionModels.has(sessionKey)) return [parsed];
|
|
148
157
|
return resolveFallbackCandidates({
|
|
149
158
|
cfg: this.config,
|
|
150
159
|
provider: parsed.provider,
|
|
@@ -127,6 +127,7 @@ function buildToolingSection(params) {
|
|
|
127
127
|
"## Tooling",
|
|
128
128
|
"Tool availability (filtered by policy):",
|
|
129
129
|
"Tool names are case-sensitive. Call tools exactly as listed.",
|
|
130
|
+
"When a tool returns an xopc product link, reuse its exact URL in a Markdown link with a short descriptive label in the user's language (for example, [打开会话](url)). Do not invent link parameters, escape the link brackets/parentheses, or wrap a navigation link in a code span. Avoid repeating raw URLs or internal object metadata unless requested.",
|
|
130
131
|
toolLines.length > 0 ? toolLines.join("\n") : "- No tools are registered for this session.",
|
|
131
132
|
`For long waits, avoid rapid poll loops: use \`${execToolName}\` with a sufficient timeout or poll in reasonable intervals.`,
|
|
132
133
|
hasRead ? `Use \`${readToolName}\` for targeted file inspection before editing; do not rely on filenames alone.` : "",
|
|
@@ -3,10 +3,10 @@ import { init_logger } from "../utils/logger.js";
|
|
|
3
3
|
import { getUserProfile } from "../storage/sqlite/user-context-repository.js";
|
|
4
4
|
import { parseNoteAttachmentTarget } from "../notes/attachment-ref.js";
|
|
5
5
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
6
|
-
import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
|
|
7
|
-
import { init_providers, resolveModel } from "../providers/index.js";
|
|
8
6
|
import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
7
|
+
import { init_agent_scope, resolveAgentHomeDir, resolveDefaultAgentId } from "./agent-scope.js";
|
|
9
8
|
import { extractProfileAgentId } from "../config/agent-profile.js";
|
|
9
|
+
import { init_providers, resolveModel } from "../providers/index.js";
|
|
10
10
|
import { extractTextContent } from "./context/workspace.js";
|
|
11
11
|
import { effectiveWorkspacePathForSession } from "../session/session-workspace.js";
|
|
12
12
|
import { getProjectForSession } from "../projects/workspace.js";
|
|
@@ -27,6 +27,8 @@ export interface SessionConfigServiceOptions {
|
|
|
27
27
|
}
|
|
28
28
|
export interface PatchSessionAgentConfigInput {
|
|
29
29
|
thinkingLevel?: string;
|
|
30
|
+
fixedModel?: boolean;
|
|
31
|
+
configVersion?: number;
|
|
30
32
|
model?: string | null;
|
|
31
33
|
/** Preferred activity-detail field. `null` clears the session override. */
|
|
32
34
|
activityDetailLevel?: string | null;
|
|
@@ -40,6 +42,7 @@ export interface PatchSessionAgentConfigInput {
|
|
|
40
42
|
export interface PatchSessionAgentConfigResult {
|
|
41
43
|
ok: boolean;
|
|
42
44
|
error?: string;
|
|
45
|
+
code?: 'CONFIG_CHANGED' | 'INVALID_MODEL' | 'INVALID_THINKING';
|
|
43
46
|
}
|
|
44
47
|
export declare class SessionConfigService {
|
|
45
48
|
private readonly opts;
|
|
@@ -47,10 +50,11 @@ export declare class SessionConfigService {
|
|
|
47
50
|
/**
|
|
48
51
|
* Apply a partial patch (model / thinking / reasoning / working directory) to
|
|
49
52
|
* a session's persisted config. Returns `{ ok: false, error }` on the first
|
|
50
|
-
* invalid field
|
|
51
|
-
* the previous behaviour.
|
|
53
|
+
* invalid field. Model and thinking are validated together and committed in one write.
|
|
52
54
|
*/
|
|
53
55
|
patch(sessionKey: string, partial: PatchSessionAgentConfigInput): Promise<PatchSessionAgentConfigResult>;
|
|
56
|
+
/** Materialize a restored/new chat choice; unavailable identities stay visible for repair. */
|
|
57
|
+
initializeModelSelection(sessionKey: string, modelRef: string, thinkingLevel?: string, configVersion?: number): Promise<PatchSessionAgentConfigResult>;
|
|
54
58
|
/**
|
|
55
59
|
* Sync persisted session working directory for an automation run. Runs may
|
|
56
60
|
* change when the automation is edited; an empty/missing input clears the
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { chooseModelThinking } from "../../../packages/gateway-contract/src/model-selection.js";
|
|
3
4
|
import { ResponseLanguageSchema, init_response_language } from "../../i18n/response-language.js";
|
|
4
5
|
import { normalizeWorkingDirectoryInput } from "../../session/session-workspace.js";
|
|
5
6
|
import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
|
|
6
7
|
import { normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel } from "../transcript/thinking-types.js";
|
|
7
8
|
import "../../session/index.js";
|
|
9
|
+
import { getModelThinking } from "../../providers/model-thinking.js";
|
|
8
10
|
import { mkdir } from "node:fs/promises";
|
|
9
11
|
//#region src/agent/session/session-config-service.ts
|
|
10
12
|
/**
|
|
@@ -33,27 +35,58 @@ var SessionConfigService = class {
|
|
|
33
35
|
/**
|
|
34
36
|
* Apply a partial patch (model / thinking / reasoning / working directory) to
|
|
35
37
|
* a session's persisted config. Returns `{ ok: false, error }` on the first
|
|
36
|
-
* invalid field
|
|
37
|
-
* the previous behaviour.
|
|
38
|
+
* invalid field. Model and thinking are validated together and committed in one write.
|
|
38
39
|
*/
|
|
39
40
|
async patch(sessionKey, partial) {
|
|
40
|
-
if (partial.model !== void 0
|
|
41
|
-
|
|
42
|
-
if (
|
|
43
|
-
ok: false,
|
|
44
|
-
error: "Invalid model"
|
|
45
|
-
};
|
|
46
|
-
await this.opts.sessionConfigStore.update(sessionKey, { modelOverride: partial.model });
|
|
47
|
-
this.opts.agentManager.setModelForSession(sessionKey, partial.model);
|
|
48
|
-
}
|
|
49
|
-
if (partial.thinkingLevel !== void 0) {
|
|
50
|
-
const normalized = normalizeThinkLevel(partial.thinkingLevel);
|
|
51
|
-
if (!normalized) return {
|
|
41
|
+
if (partial.model !== void 0 || partial.thinkingLevel !== void 0 || partial.fixedModel) {
|
|
42
|
+
const existing = await this.opts.sessionConfigStore.get(sessionKey);
|
|
43
|
+
if (partial.configVersion !== void 0 && partial.configVersion !== (existing?.updatedAt ?? 0)) return {
|
|
52
44
|
ok: false,
|
|
53
|
-
|
|
45
|
+
code: "CONFIG_CHANGED",
|
|
46
|
+
error: "Model configuration changed. Refresh and try again."
|
|
54
47
|
};
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
if (partial.model === null || partial.model === "") {
|
|
49
|
+
if (partial.fixedModel || existing?.fixedModel) return {
|
|
50
|
+
ok: false,
|
|
51
|
+
code: "INVALID_MODEL",
|
|
52
|
+
error: "Select a specific model"
|
|
53
|
+
};
|
|
54
|
+
await this.clearModelOverride(sessionKey);
|
|
55
|
+
} else {
|
|
56
|
+
const ref = partial.model ?? existing?.modelOverride ?? this.opts.modelManager.getModelForSession(sessionKey);
|
|
57
|
+
const model = this.opts.modelManager.findByRef(ref);
|
|
58
|
+
if (!model) return {
|
|
59
|
+
ok: false,
|
|
60
|
+
code: "INVALID_MODEL",
|
|
61
|
+
error: `Model unavailable: ${ref}`
|
|
62
|
+
};
|
|
63
|
+
const capabilities = getModelThinking(model);
|
|
64
|
+
const requested = partial.thinkingLevel === void 0 ? void 0 : normalizeThinkLevel(partial.thinkingLevel);
|
|
65
|
+
if (partial.thinkingLevel !== void 0 && (!requested || !capabilities.options.includes(requested))) return {
|
|
66
|
+
ok: false,
|
|
67
|
+
code: "INVALID_THINKING",
|
|
68
|
+
error: "This thinking level is not supported by the selected model"
|
|
69
|
+
};
|
|
70
|
+
const thinkingLevel = requested ?? chooseModelThinking(capabilities, existing?.thinkingLevel);
|
|
71
|
+
const modelRef = `${model.provider}/${model.id}`;
|
|
72
|
+
const updated = await this.opts.sessionConfigStore.update(sessionKey, {
|
|
73
|
+
modelOverride: modelRef,
|
|
74
|
+
thinkingLevel,
|
|
75
|
+
fixedModel: partial.fixedModel ?? existing?.fixedModel ?? false
|
|
76
|
+
});
|
|
77
|
+
this.opts.modelManager.restoreSessionModel(sessionKey, modelRef, updated.fixedModel === true);
|
|
78
|
+
try {
|
|
79
|
+
this.opts.agentManager.setModelForSession(sessionKey, modelRef);
|
|
80
|
+
this.opts.agentManager.setThinkingLevel(sessionKey, thinkingLevel);
|
|
81
|
+
} catch (err) {
|
|
82
|
+
this.opts.agentManager.removeAgent(sessionKey);
|
|
83
|
+
log.warn({
|
|
84
|
+
err,
|
|
85
|
+
sessionKey,
|
|
86
|
+
modelRef
|
|
87
|
+
}, "Saved model configuration; runtime will reload before the next turn");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
57
90
|
}
|
|
58
91
|
const activityDetailLevel = partial.activityDetailLevel !== void 0 ? partial.activityDetailLevel : partial.reasoningLevel;
|
|
59
92
|
if (activityDetailLevel !== void 0) if (activityDetailLevel === null) await this.opts.sessionConfigStore.update(sessionKey, { reasoningLevel: void 0 });
|
|
@@ -110,6 +143,34 @@ var SessionConfigService = class {
|
|
|
110
143
|
}
|
|
111
144
|
return { ok: true };
|
|
112
145
|
}
|
|
146
|
+
/** Materialize a restored/new chat choice; unavailable identities stay visible for repair. */
|
|
147
|
+
async initializeModelSelection(sessionKey, modelRef, thinkingLevel, configVersion) {
|
|
148
|
+
const existing = await this.opts.sessionConfigStore.get(sessionKey);
|
|
149
|
+
if (configVersion !== void 0 && configVersion !== (existing?.updatedAt ?? 0)) return {
|
|
150
|
+
ok: false,
|
|
151
|
+
code: "CONFIG_CHANGED",
|
|
152
|
+
error: "Model configuration changed. Refresh and try again."
|
|
153
|
+
};
|
|
154
|
+
const model = this.opts.modelManager.findByRef(modelRef);
|
|
155
|
+
if (model) return this.patch(sessionKey, {
|
|
156
|
+
model: `${model.provider}/${model.id}`,
|
|
157
|
+
thinkingLevel: chooseModelThinking(getModelThinking(model), thinkingLevel ?? existing?.thinkingLevel),
|
|
158
|
+
fixedModel: true,
|
|
159
|
+
configVersion
|
|
160
|
+
});
|
|
161
|
+
if (!modelRef.trim() || !modelRef.includes("/")) return {
|
|
162
|
+
ok: false,
|
|
163
|
+
code: "INVALID_MODEL",
|
|
164
|
+
error: "Select a specific model"
|
|
165
|
+
};
|
|
166
|
+
await this.opts.sessionConfigStore.update(sessionKey, {
|
|
167
|
+
modelOverride: modelRef,
|
|
168
|
+
fixedModel: true,
|
|
169
|
+
thinkingLevel: normalizeThinkLevel(thinkingLevel) ?? existing?.thinkingLevel ?? "off"
|
|
170
|
+
});
|
|
171
|
+
this.opts.modelManager.restoreSessionModel(sessionKey, modelRef, true);
|
|
172
|
+
return { ok: true };
|
|
173
|
+
}
|
|
113
174
|
/**
|
|
114
175
|
* Sync persisted session working directory for an automation run. Runs may
|
|
115
176
|
* change when the automation is edited; an empty/missing input clears the
|
|
@@ -7,8 +7,7 @@
|
|
|
7
7
|
* {@link SessionConfigService} — the latter writes user choices into the
|
|
8
8
|
* config store, this hydrator reads them back out before a turn runs.
|
|
9
9
|
*
|
|
10
|
-
* - `workspace()` — apply
|
|
11
|
-
* and ensure the directory exists on disk
|
|
10
|
+
* - `workspace()` — resolve the execution workspace and apply it to AgentManager
|
|
12
11
|
* - `model()` — apply persisted `modelOverride` via ModelManager
|
|
13
12
|
* - `thinking()` — resolve effective thinking level (request override >
|
|
14
13
|
* per-session override > agent default) and apply
|
|
@@ -28,8 +27,8 @@ export declare class SessionHydrator {
|
|
|
28
27
|
private readonly opts;
|
|
29
28
|
constructor(opts: SessionHydratorOptions);
|
|
30
29
|
/**
|
|
31
|
-
* Load
|
|
32
|
-
*
|
|
30
|
+
* Load the effective workspace into AgentManager. Managed environment roots
|
|
31
|
+
* must already exist; ordinary project and agent workspaces may be created.
|
|
33
32
|
*/
|
|
34
33
|
workspace(sessionKey: string): Promise<void>;
|
|
35
34
|
/** Apply persisted `modelOverride` to ModelManager (no-op when none stored). */
|