@xopcai/xopc 0.0.116 → 0.0.118
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 +44 -28
- package/README.zh-CN.md +63 -45
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/demo-memory/src/index.d.ts +6 -0
- package/dist/extensions/demo-memory/src/index.js +132 -0
- package/dist/extensions/demo-memory/src/index.js.map +1 -0
- package/dist/extensions/demo-memory/xopc.extension.json +15 -0
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/command-handler.js +1 -2
- package/dist/extensions/telegram/src/command-handler.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/update-offset-store.js +1 -1
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CWM1UU5P.js → agent-avatar-dicebear-dzUrQoeZ.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-yXSXY_bu.js → app-management-settings-panel-bxYJVJpx.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DjY1P_ug.js → appearance-settings-BCIykXlI.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page--wMEL00f.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CytE5j-e.js → archive-plugin-Cki4SfU2.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BvvrN6rF.js → attachment-load-D-KnS2Do.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-IBWSitnj.js → binary-plugins-D2sgvJja.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C-wDpsf-.js → block-editor-DIq-4Gvb.js} +27 -27
- package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-BAIyjDlq.js → extension-debug-page-DYu1KaFQ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DEhv2GpC.js → extension-page-B3W6QwlZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DOuAxTDW.js → extension-settings-page-D7VQ-cxE.js} +1 -1
- package/dist/gateway/static/root/assets/{fetch-CTsREQIe.js → fetch-B7xDPu-R.js} +1 -1
- package/dist/gateway/static/root/assets/{format-interval-label-D35Bfhtx.js → format-interval-label-BzxafKxR.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-config-api-BTBLSeUu.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-C1KAHrd2.js → gateway-startup-retry-CYj9FWCp.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-KnLGpu6h.js → goals-config-api-CQQgzPr3.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-BHitvJAv.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-DtPtqZi8.js → goals-settings-CYVY4NGp.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-uKw1f0IG.js → heartbeat-config-api-DriO_CN9.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +1 -0
- package/dist/gateway/static/root/assets/index-C17Tsd_b.css +1 -0
- package/dist/gateway/static/root/assets/index-Cc41r16l.js +191 -0
- package/dist/gateway/static/root/assets/{interval-presets-Dq0FXJ65.js → interval-presets-DFPCKW_W.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C9_t4m7t.js → keyboard-shortcuts-settings-CcVcqstx.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-SNkWzidV.js → logs-page-C2Uqvae9.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-Ca87W8-h.js → markdown-split-BwOFrJ2E.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BAcUjPRJ.js → media-plugins-Cnz6Q5G6.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-hnSX5SSn.js → note-image-lightbox-B-Svpmza.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +1 -0
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CNgM20H5.js → preview-open-alternatives-Bss4TiwP.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-CcdjGcfT.js → save-bar-controls-BRNjdgKq.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CYr39z76.js → schedule-field-CUCKODde.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BRAJgZQ2.js → schema-form-Dub9sy8r.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BhzjeGWi.js → settings-collapsible-section-BeFLavGi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cz3Pcr9b.js → settings-form-section-dmyaPOTG.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DL4y9K5e.js → share-preview-page-C8glrdqe.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-FD2jxRZ3.js → system-settings-panel-DI-LN_8G.js} +1 -1
- package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-BInPrfR5.js → use-channel-catalog-DqlWTsDb.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +1 -0
- package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-C73IVZeC.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-1U3vFppm.js → voice-player-store-C_ArLJPM.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +18 -0
- package/dist/gateway/static/root/index.html +5 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -1
- package/dist/src/agent/agent-manager.js +14 -14
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +5 -9
- package/dist/src/agent/agent-scope.js.map +1 -1
- package/dist/src/agent/background-review/coordinator.js +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +2 -2
- package/dist/src/agent/background-review/prompts.js +2 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
- package/dist/src/agent/background-review/run-background-review.js +2 -4
- package/dist/src/agent/background-review/run-background-review.js.map +1 -1
- package/dist/src/agent/background-review/settings.d.ts +1 -1
- package/dist/src/agent/background-review/settings.js +8 -8
- package/dist/src/agent/background-review/settings.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
- package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
- package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +18 -17
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
- package/dist/src/agent/bootstrap/project-agents-context.js +1 -1
- package/dist/src/agent/bootstrap/types.d.ts +1 -1
- package/dist/src/agent/context/workspace-seed.js +3 -3
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
- package/dist/src/agent/context/workspace.d.ts +4 -2
- package/dist/src/agent/context/workspace.js +6 -5
- package/dist/src/agent/context/workspace.js.map +1 -1
- package/dist/src/agent/embedded/run-for-session.js +4 -1
- package/dist/src/agent/embedded/run-for-session.js.map +1 -1
- package/dist/src/agent/fallback/candidates.js +11 -9
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.js +2 -2
- package/dist/src/agent/goals/post-turn.js +3 -3
- package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
- package/dist/src/agent/image/generation/runtime.js +1 -1
- package/dist/src/agent/image/generation/runtime.js.map +1 -1
- package/dist/src/agent/image/image-helpers.d.ts +1 -1
- package/dist/src/agent/image/image-helpers.js +4 -17
- package/dist/src/agent/image/image-helpers.js.map +1 -1
- package/dist/src/agent/image/image-model-fallback.js +1 -1
- package/dist/src/agent/image/image-model-fallback.js.map +1 -1
- package/dist/src/agent/image/inbound-image-handling.js +1 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/image/tool-model-config.d.ts +1 -1
- package/dist/src/agent/image/tool-model-config.js +2 -2
- package/dist/src/agent/image/tool-model-config.js.map +1 -1
- package/dist/src/agent/ipc/inbox.js +3 -3
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
- package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
- package/dist/src/agent/media-generation/runtime-shared.js +1 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
- package/dist/src/agent/memory/builtin-memory-store.d.ts +6 -2
- package/dist/src/agent/memory/builtin-memory-store.js +15 -6
- package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
- package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
- package/dist/src/agent/memory/builtin-provider.js +290 -11
- package/dist/src/agent/memory/builtin-provider.js.map +1 -1
- package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
- package/dist/src/agent/memory/candidate-extractor.js +60 -0
- package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
- package/dist/src/agent/memory/context-assembler.d.ts +10 -0
- package/dist/src/agent/memory/context-assembler.js +26 -0
- package/dist/src/agent/memory/context-assembler.js.map +1 -0
- package/dist/src/agent/memory/create-memory-manager.js +25 -7
- package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
- package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
- package/dist/src/agent/memory/dreaming/config.js +8 -8
- package/dist/src/agent/memory/dreaming/config.js.map +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
- package/dist/src/agent/memory/dreaming/deep-promotion.js +25 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/index.d.ts +1 -0
- package/dist/src/agent/memory/index.js +4 -3
- package/dist/src/agent/memory/inject-prefetch.js +6 -2
- package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
- package/dist/src/agent/memory/manager.d.ts +39 -2
- package/dist/src/agent/memory/manager.js +355 -39
- package/dist/src/agent/memory/manager.js.map +1 -1
- package/dist/src/agent/memory/memory-config.js +15 -15
- package/dist/src/agent/memory/memory-config.js.map +1 -1
- package/dist/src/agent/memory/memory-flush.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
- package/dist/src/agent/memory/plugin-discovery.js +97 -31
- package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
- package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
- package/dist/src/agent/memory/provider.d.ts +20 -15
- package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
- package/dist/src/agent/memory/stub-memory-provider.js +20 -3
- package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
- package/dist/src/agent/memory/types.d.ts +162 -3
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +2 -2
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
- package/dist/src/agent/prompt/memory/index.d.ts +4 -2
- package/dist/src/agent/prompt/memory/index.js +19 -13
- package/dist/src/agent/prompt/memory/index.js.map +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +5 -20
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/reply/post-compaction-context.js +10 -7
- package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
- package/dist/src/agent/reply/startup-context.js +7 -12
- package/dist/src/agent/reply/startup-context.js.map +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +1 -4
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/session-context-report.js +1 -1
- package/dist/src/agent/service/session-context-report.js.map +1 -1
- package/dist/src/agent/service.d.ts +3 -3
- package/dist/src/agent/service.js +30 -35
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +1 -2
- package/dist/src/agent/session/session-hydrator.js +1 -2
- package/dist/src/agent/session/session-hydrator.js.map +1 -1
- package/dist/src/agent/session/session-inspector.d.ts +1 -1
- package/dist/src/agent/session/session-inspector.js +10 -15
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/config.js +2 -2
- package/dist/src/agent/skills/filesystem-watcher.js +1 -1
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +3 -3
- package/dist/src/agent/skills/index.js +2 -2
- package/dist/src/agent/skills/installer.js +2 -2
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.js +1 -1
- package/dist/src/agent/skills/skill-view-path.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/agent/starter-agents.d.ts +1 -3
- package/dist/src/agent/starter-agents.js +14 -22
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
- package/dist/src/agent/tools/curated-memory-tool.js +77 -18
- package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.d.ts +0 -4
- package/dist/src/agent/tools/factory.js +19 -58
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/find.js +1 -1
- package/dist/src/agent/tools/grep.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +20 -15
- package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
- package/dist/src/agent/tools/image-tool.js +1 -3
- package/dist/src/agent/tools/image-tool.js.map +1 -1
- package/dist/src/agent/tools/memory-tool.d.ts +2 -2
- package/dist/src/agent/tools/memory-tool.js +39 -14
- package/dist/src/agent/tools/memory-tool.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -3
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/web-extract.js +8 -9
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -3
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent-manifest/index.d.ts +4 -0
- package/dist/src/agent-manifest/index.js +10 -0
- package/dist/src/agent-manifest/index.js.map +1 -0
- package/dist/src/agent-manifest/prompt.d.ts +2 -0
- package/dist/src/agent-manifest/prompt.js +57 -0
- package/dist/src/agent-manifest/prompt.js.map +1 -0
- package/dist/src/agent-manifest/resolver.d.ts +12 -0
- package/dist/src/agent-manifest/resolver.js +95 -0
- package/dist/src/agent-manifest/resolver.js.map +1 -0
- package/dist/src/agent-manifest/schema.d.ts +1010 -0
- package/dist/src/agent-manifest/schema.js +269 -0
- package/dist/src/agent-manifest/schema.js.map +1 -0
- package/dist/src/agent-manifest/validator.d.ts +25 -0
- package/dist/src/agent-manifest/validator.js +88 -0
- package/dist/src/agent-manifest/validator.js.map +1 -0
- package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
- package/dist/src/agent-runtime/boundary-guard.js +23 -0
- package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
- package/dist/src/agent-runtime/index.d.ts +7 -0
- package/dist/src/agent-runtime/index.js +8 -0
- package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
- package/dist/src/agent-runtime/memory-runtime.js +50 -0
- package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
- package/dist/src/agent-runtime/model-router.d.ts +11 -0
- package/dist/src/agent-runtime/model-router.js +16 -0
- package/dist/src/agent-runtime/model-router.js.map +1 -0
- package/dist/src/agent-runtime/run-trace.d.ts +27 -0
- package/dist/src/agent-runtime/run-trace.js +53 -0
- package/dist/src/agent-runtime/run-trace.js.map +1 -0
- package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
- package/dist/src/agent-runtime/runtime-profile.js +44 -0
- package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
- package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
- package/dist/src/agent-runtime/tool-registry.js +52 -0
- package/dist/src/agent-runtime/tool-registry.js.map +1 -0
- package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
- package/dist/src/agent-runtime/workflow-runtime.js +34 -0
- package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
- 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 +2 -2
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
- package/dist/src/browser/actions/registry.js +5 -8
- package/dist/src/browser/actions/registry.js.map +1 -1
- package/dist/src/browser/backend-from-config.d.ts +1 -1
- package/dist/src/browser/backend-from-config.js +50 -71
- package/dist/src/browser/backend-from-config.js.map +1 -1
- package/dist/src/browser/browser-command-timeout.d.ts +0 -1
- package/dist/src/browser/browser-command-timeout.js +3 -7
- package/dist/src/browser/browser-command-timeout.js.map +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/pipeline/source.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
- package/dist/src/browser/providers/browser-ext-install.js +7 -12
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +5 -5
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/readiness.js +16 -16
- package/dist/src/browser/readiness.js.map +1 -1
- package/dist/src/browser/schemas.js +1 -1
- package/dist/src/browser/schemas.js.map +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/catalog/channel-catalog-service.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/pipeline.d.ts +1 -1
- package/dist/src/channels/pipeline.js.map +1 -1
- package/dist/src/chat-commands/agent-edit.js +2 -3
- package/dist/src/chat-commands/agent-edit.js.map +1 -1
- package/dist/src/chat-commands/builtins/config.js +6 -6
- package/dist/src/chat-commands/builtins/config.js.map +1 -1
- package/dist/src/chat-commands/builtins/model.js +2 -2
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/thinking.js +16 -42
- package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
- package/dist/src/chat-commands/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +3 -4
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/command-manifest.d.ts +1 -1
- package/dist/src/cli/command-manifest.js +2 -2
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/agent.js +3 -1
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +3 -6
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
- package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
- package/dist/src/cli/commands/config.js +6 -6
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.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 +3 -18
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
- package/dist/src/cli/commands/extension-create.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-pack.js +2 -2
- package/dist/src/cli/commands/extension.js +3 -3
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/goal.js +1 -1
- package/dist/src/cli/commands/image.js +13 -372
- package/dist/src/cli/commands/image.js.map +1 -1
- package/dist/src/cli/commands/init.js +7 -6
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/models.js +14 -16
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.js +28 -23
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +3 -3
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/commands/tui.js +2 -2
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +10 -5
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/registry.js +1 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/cli/templates.d.ts +1 -1
- package/dist/src/cli/templates.js +2 -12
- package/dist/src/cli/templates.js.map +1 -1
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
- package/dist/src/cli/utils/init-workspace-core.js +9 -8
- package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +0 -1
- package/dist/src/commands/agents.config.js +59 -13
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +5 -17
- package/dist/src/config/agent-profile.js +32 -64
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +1 -1
- package/dist/src/config/agent-typed-models.js +3 -6
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +9 -9
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/loader.js +4 -4
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/paths.d.ts +8 -1
- package/dist/src/config/paths.js +17 -4
- package/dist/src/config/paths.js.map +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/reload.js +2 -2
- package/dist/src/config/reload.js.map +1 -1
- package/dist/src/config/rules.js +6 -56
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +916 -779
- package/dist/src/config/schema.js +174 -423
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/connectors/composio-triggers.js +1 -1
- package/dist/src/cron/executor.js +1 -1
- package/dist/src/cron/index.js +1 -1
- package/dist/src/cron/service.js +2 -2
- package/dist/src/cron/validation.d.ts +3 -3
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/activation-context.js +13 -7
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +2 -2
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/install.js +2 -2
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/lockfile.js +3 -3
- package/dist/src/extensions/security.js +1 -1
- package/dist/src/extensions/update.js +2 -2
- package/dist/src/gateway/agents-admin.d.ts +24 -18
- package/dist/src/gateway/agents-admin.js +158 -92
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
- package/dist/src/gateway/capability-presets-admin.js +214 -0
- package/dist/src/gateway/capability-presets-admin.js.map +1 -0
- package/dist/src/gateway/chat-stream/mapper.js +9 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
- package/dist/src/gateway/global-defaults-admin.js +146 -0
- package/dist/src/gateway/global-defaults-admin.js.map +1 -0
- package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js +1 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
- package/dist/src/gateway/hono/lib/config-payload.js +14 -38
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/routes/agents.js +88 -33
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/browser.js +8 -15
- package/dist/src/gateway/hono/routes/browser.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
- package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
- package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +1 -1
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +8 -1
- package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
- package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
- package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
- package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/index.js +2 -0
- package/dist/src/gateway/hono/routes/index.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
- package/dist/src/gateway/hono/routes/memory.js +361 -0
- package/dist/src/gateway/hono/routes/memory.js.map +1 -0
- package/dist/src/gateway/hono/routes/models.js +2 -2
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
- package/dist/src/gateway/service/marketplace-service.js +13 -9
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +1 -1
- package/dist/src/gateway/service.js +15 -16
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/goals/goal-workflow-judge.js +2 -2
- package/dist/src/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.js +1 -1
- package/dist/src/i18n/share-tool-bundle.js +2 -2
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +1 -1
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/media/store.js +1 -1
- package/dist/src/notes/agent-context.js +3 -3
- package/dist/src/notes/service.js +4 -2
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/notes/store.js +2 -2
- package/dist/src/project-trust/trust-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.d.ts +5 -6
- package/dist/src/providers/index.js +26 -30
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/model-registry.js +4 -4
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/init-session-turn.js +1 -1
- package/dist/src/session/resolve-session.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/session/thinking-resolve.d.ts +1 -1
- package/dist/src/session/thinking-resolve.js +1 -1
- package/dist/src/session/thinking-resolve.js.map +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/storage/sqlite/connection.js +2 -2
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/memory-index-repository.js +17 -16
- package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +144 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +453 -0
- package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
- package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
- package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
- package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
- package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
- package/dist/src/storage/sqlite/migrations/discover.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +2 -2
- package/dist/src/storage/sqlite/schema.sql +86 -0
- package/dist/src/tui/backends/embedded-backend.d.ts +3 -0
- package/dist/src/tui/backends/embedded-backend.js +43 -24
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +1 -0
- package/dist/src/tui/backends/gateway-sse-backend.js +16 -3
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/components/tui-header.d.ts +0 -1
- package/dist/src/tui/components/tui-header.js +3 -8
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +4 -4
- package/dist/src/tui/tui-commands.js +2 -2
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +2 -1
- package/dist/src/tui/tui-startup-resources.js.map +1 -1
- package/dist/src/tui/tui-startup-text.js +12 -12
- package/dist/src/tui/tui-startup-text.js.map +1 -1
- package/dist/src/tui/tui.js +10 -7
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.js +4 -4
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +4 -5
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +3 -2
- package/dist/gateway/static/root/assets/agent-browser-settings-page-D1SyFYeh.js +0 -6
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-C9YxgvuI.js +0 -1
- package/dist/gateway/static/root/assets/agents-CteVs3UO.js +0 -71
- package/dist/gateway/static/root/assets/apps-page-CVQ1M8Ax.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-Cd3JbeQ1.js +0 -1
- package/dist/gateway/static/root/assets/config-api-C4RAtTKW.js +0 -3
- package/dist/gateway/static/root/assets/connectors-page-MsMa5qBr.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-sJNMqB6P.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-D30CSwkn.js +0 -3
- package/dist/gateway/static/root/assets/dreaming-settings-6fCUWRQf.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-C6989a-W.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BpF26t91.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DOjhmRyf.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-Xl9_wrFc.js +0 -2
- package/dist/gateway/static/root/assets/heartbeat-settings-DN9vEj9P.js +0 -1
- package/dist/gateway/static/root/assets/index-C8ytlAF2.js +0 -122
- package/dist/gateway/static/root/assets/index-CVpJW2NS.css +0 -1
- package/dist/gateway/static/root/assets/messages-BqzIDrlr.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BO4o-GmO.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-DLV_XDmT.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-ycsDlkFA.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DQpnE8K9.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BZui7iAY.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DEfzZ1ax.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CLuSsu1-.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cq4qpXLi.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-B9F3HyYQ.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Bp9UPPwm.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BIoBsfSV.js +0 -2
- package/dist/gateway/static/root/assets/use-agent-defaults-form-Cz2_pPzu.js +0 -1
- package/dist/gateway/static/root/assets/use-settings-tab-guard-nuHMmZQv.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BUIrKb8s.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-qE3SexnO.js +0 -18
- package/dist/src/agent/context/workspace-templates/USER.md +0 -24
package/README.md
CHANGED
|
@@ -46,12 +46,22 @@
|
|
|
46
46
|
|
|
47
47
|
## Get started
|
|
48
48
|
|
|
49
|
-
###
|
|
49
|
+
### Easiest start: PC desktop app
|
|
50
|
+
|
|
51
|
+
For most users, the **PC desktop app** is the easiest way to start: install the app, finish model setup in the UI, then chat in the built-in console. It starts the local gateway for you.
|
|
52
|
+
|
|
53
|
+
1. Download from **[GitHub Releases](https://github.com/xopcai/xopc/releases)** — macOS `.dmg`, Windows `.exe`, Linux `.AppImage` / `.deb`.
|
|
54
|
+
2. Open xopc and complete model setup.
|
|
55
|
+
3. Start chatting.
|
|
56
|
+
|
|
57
|
+
See **[PC Desktop app](https://xopcai.github.io/xopc/desktop-app)** for install notes, build-from-source commands, and reserved screenshot/GIF/video file locations.
|
|
58
|
+
|
|
59
|
+
### Fastest terminal path
|
|
50
60
|
|
|
51
61
|
```bash
|
|
52
62
|
curl -fsSL https://xopc.ai/install.sh | bash
|
|
53
63
|
xopc onboard --quick
|
|
54
|
-
xopc
|
|
64
|
+
xopc
|
|
55
65
|
```
|
|
56
66
|
|
|
57
67
|
This path starts the embedded terminal UI: no gateway, desktop app, or messenger setup required.
|
|
@@ -82,12 +92,10 @@ The installer detects your OS, installs **Node.js ≥ 22** when needed, and inst
|
|
|
82
92
|
|
|
83
93
|
```bash
|
|
84
94
|
xopc onboard # faster: xopc onboard --quick
|
|
85
|
-
xopc tui
|
|
95
|
+
xopc # same as xopc tui; opens the local TUI
|
|
86
96
|
```
|
|
87
97
|
|
|
88
|
-
> **New here?**
|
|
89
|
-
|
|
90
|
-
If the first run works for you, please **[star the repo](https://github.com/xopcai/xopc)** so others can discover it.
|
|
98
|
+
> **New here?** Use the **PC desktop app** for the easiest setup, or run **`xopc`** for the fastest terminal path. Run **`xopc gateway`** when you want the browser console or messengers without the desktop shell.
|
|
91
99
|
|
|
92
100
|
### npm (already have Node.js 22+)
|
|
93
101
|
|
|
@@ -143,10 +151,10 @@ Windows git install: `& ([scriptblock]::Create((irm https://xopc.ai/install.ps1)
|
|
|
143
151
|
|
|
144
152
|
| Surface | How | Best for |
|
|
145
153
|
| --- | --- | --- |
|
|
146
|
-
| **
|
|
154
|
+
| **PC Desktop** | [GitHub Releases](#desktop-app) | Easiest start: native app + embedded gateway console |
|
|
155
|
+
| **TUI** | `xopc` or `xopc tui` (remote: `xopc tui --url …`) | Full keyboard, streaming, fastest terminal path |
|
|
147
156
|
| **CLI** | `xopc agent -i` / `xopc agent -m "…"` | Scripts and minimal TTY |
|
|
148
157
|
| **Web** | `xopc gateway` → open console URL | Chat, settings, logs in the browser |
|
|
149
|
-
| **Desktop** | [GitHub Releases](#desktop-app) or `pnpm run electron:build` | Native app (macOS, Windows, Linux) |
|
|
150
158
|
| **Mobile** | [xopc-app](https://github.com/xopcai/xopc-app) + gateway pairing ([mobile app](https://xopcai.github.io/xopc/mobile-app), [remote access](https://xopcai.github.io/xopc/remote-access)) | Continue your loop on iOS/Android |
|
|
151
159
|
| **Messengers** | `channels.*` + gateway | Telegram, WeChat, Feishu/Lark |
|
|
152
160
|
|
|
@@ -185,14 +193,29 @@ Default: **`~/.xopc/xopc.json`**.
|
|
|
185
193
|
```json
|
|
186
194
|
{
|
|
187
195
|
"agents": {
|
|
188
|
-
"
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
"default": "main",
|
|
197
|
+
"list": [
|
|
198
|
+
{
|
|
199
|
+
"id": "main",
|
|
200
|
+
"identity": { "name": "Main", "role": "General assistant" },
|
|
201
|
+
"responsibilities": { "primary": ["Help the user complete tasks"] },
|
|
202
|
+
"workspace": { "root": "~/.xopc/workspace/main" },
|
|
203
|
+
"models": {
|
|
204
|
+
"defaultRole": "deep",
|
|
205
|
+
"roles": {
|
|
206
|
+
"deep": { "model": "deepseek/deepseek-v4-flash" }
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"tools": { "builtin": {} },
|
|
210
|
+
"skills": { "mode": "all" },
|
|
211
|
+
"memory": { "mode": "confirmWrite", "sources": ["session"] },
|
|
212
|
+
"workflows": {},
|
|
213
|
+
"boundaries": { "requiresConfirmation": [], "forbidden": [], "escalation": [] }
|
|
214
|
+
}
|
|
215
|
+
]
|
|
192
216
|
},
|
|
193
217
|
"providers": {
|
|
194
|
-
"deepseek": "${DEEPSEEK_API_KEY}"
|
|
195
|
-
"openai": "${OPENAI_API_KEY}"
|
|
218
|
+
"deepseek": "${DEEPSEEK_API_KEY}"
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
```
|
|
@@ -227,7 +250,7 @@ No. xopc runs on your machine. Config, workspace files, credentials, and local s
|
|
|
227
250
|
No. Bring your own keys for cloud providers, or use local/model-server options such as Ollama, LM Studio, and vLLM.
|
|
228
251
|
|
|
229
252
|
**What is the fastest way to try it?**
|
|
230
|
-
|
|
253
|
+
For most users, install the **PC desktop app** from GitHub Releases and complete model setup in the UI. For terminal users, use **`xopc onboard --quick`** and then run **`xopc`**.
|
|
231
254
|
|
|
232
255
|
**How is this different from another chat UI?**
|
|
233
256
|
xopc is organized around goal loops: direction, next action, feedback, and recalibration across multiple surfaces.
|
|
@@ -235,20 +258,21 @@ xopc is organized around goal loops: direction, next action, feedback, and recal
|
|
|
235
258
|
**Can I use it from my phone or messengers?**
|
|
236
259
|
Yes. Start with local TUI first; when ready, run the gateway and use [xopc-app](https://github.com/xopcai/xopc-app) on iOS/Android, or configure Telegram, WeChat, or Feishu/Lark.
|
|
237
260
|
|
|
238
|
-
If this answers your concerns, please **[star xopc](https://github.com/xopcai/xopc)** so more developers can find it.
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
261
|
<a id="desktop-app"></a>
|
|
243
262
|
<a id="electron-desktop"></a>
|
|
244
263
|
|
|
245
264
|
## Desktop app
|
|
246
265
|
|
|
266
|
+
The PC desktop app is the easiest way to start for most users: it launches an embedded local gateway and opens the gateway console in a native window.
|
|
267
|
+
|
|
247
268
|
1. Download from **[GitHub Releases](https://github.com/xopcai/xopc/releases)** — macOS `.dmg`, Windows `xopc-<version>-x64.exe` or `xopc-<version>-arm64.exe`, Linux `.AppImage` / `.deb`.
|
|
248
|
-
2.
|
|
269
|
+
2. Open the app, complete model setup, and start chatting.
|
|
270
|
+
3. Or use **`xopc gateway`** + the npm CLI until a build exists for your OS.
|
|
249
271
|
|
|
250
272
|
**Build from source:** `pnpm install && pnpm run electron:build` → `dist/release/`
|
|
251
273
|
|
|
274
|
+
Docs and media placeholders: **[PC Desktop app](https://xopcai.github.io/xopc/desktop-app)**.
|
|
275
|
+
|
|
252
276
|
---
|
|
253
277
|
|
|
254
278
|
## Security
|
|
@@ -268,14 +292,6 @@ pnpm run build && pnpm test && pnpm run lint
|
|
|
268
292
|
|
|
269
293
|
**Issues:** [bug](https://github.com/xopcai/xopc/issues/new?template=bug_report.yml) · [feature](https://github.com/xopcai/xopc/issues/new?template=feature_request.yml) · [Q&A Discussions](https://github.com/xopcai/xopc/discussions/categories/q-a) · [security advisory](https://github.com/xopcai/xopc/security/advisories/new) (not public issues)
|
|
270
294
|
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Star history
|
|
274
|
-
|
|
275
|
-
[](https://star-history.com/#xopcai/xopc&Date)
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
295
|
## Credits
|
|
280
296
|
|
|
281
297
|
- LLM layer: [@earendil-works/pi-ai](https://github.com/earendil-works/pi-mono) · Agent runtime: [@earendil-works/pi-agent-core](https://github.com/earendil-works/pi-mono)
|
package/README.zh-CN.md
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
9
|
<strong>把目标变成循环。</strong><br />
|
|
10
|
-
|
|
11
|
-
XOPC
|
|
10
|
+
让真正重要的事情持续向前。<br />
|
|
11
|
+
XOPC 是一个本地优先的 AI 助手系统:记住上下文,协调 AI 推进下一步,让长期目标持续向前。
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
|
|
36
36
|
## 适合谁
|
|
37
37
|
|
|
38
|
-
- **长期项目** ——
|
|
39
|
-
- **独立开发者 /
|
|
40
|
-
- **本地优先 AI 工作流** ——
|
|
38
|
+
- **长期项目** —— 把目标拆成可持续推进的循环:上下文、下一步行动、反馈和校准始终连在一起。
|
|
39
|
+
- **独立开发者 / 一人公司** —— 同一个助手覆盖 CLI、TUI、网页、桌面、Telegram、微信和飞书/Lark。
|
|
40
|
+
- **本地优先 AI 工作流** —— 使用你自己的 API Key,云端/本地模型混用,支持技能和扩展,数据默认保存在 **`~/.xopc/`**。
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
@@ -46,15 +46,25 @@
|
|
|
46
46
|
|
|
47
47
|
## 快速开始
|
|
48
48
|
|
|
49
|
-
###
|
|
49
|
+
### 最省心的开始方式:PC 桌面端
|
|
50
|
+
|
|
51
|
+
对大多数用户来说,**PC 桌面端**是最容易上手的方式:安装应用,在界面里完成模型设置,然后直接在内置控制台聊天。它会自动启动本地 gateway。
|
|
52
|
+
|
|
53
|
+
1. 从 **[GitHub Releases](https://github.com/xopcai/xopc/releases)** 下载 — macOS `.dmg`,Windows `.exe`,Linux `.AppImage` / `.deb`。
|
|
54
|
+
2. 打开 xopc,完成模型设置。
|
|
55
|
+
3. 开始聊天。
|
|
56
|
+
|
|
57
|
+
详见 **[PC 桌面端](https://xopcai.github.io/xopc/zh/desktop-app)**:安装说明、源码打包命令,以及后续截图/GIF/视频素材的预留文件位置。
|
|
58
|
+
|
|
59
|
+
### 最快终端路径
|
|
50
60
|
|
|
51
61
|
```bash
|
|
52
62
|
curl -fsSL https://xopc.ai/install.sh | bash
|
|
53
63
|
xopc onboard --quick
|
|
54
|
-
xopc
|
|
64
|
+
xopc
|
|
55
65
|
```
|
|
56
66
|
|
|
57
|
-
这条路径会启动本地嵌入式 TUI
|
|
67
|
+
这条路径会启动本地嵌入式 TUI,不需要先配置网关、桌面端或即时通讯。
|
|
58
68
|
|
|
59
69
|
### 一键安装(推荐)
|
|
60
70
|
|
|
@@ -82,12 +92,10 @@ iex (irm https://xopc.ai/install.ps1)
|
|
|
82
92
|
|
|
83
93
|
```bash
|
|
84
94
|
xopc onboard # 更快:xopc onboard --quick
|
|
85
|
-
xopc tui
|
|
95
|
+
xopc # 等同于 xopc tui,打开本地 TUI
|
|
86
96
|
```
|
|
87
97
|
|
|
88
|
-
> **第一次用?**
|
|
89
|
-
|
|
90
|
-
如果首次运行顺利,欢迎 **[给仓库点个 Star](https://github.com/xopcai/xopc)**,帮助更多人发现这个项目。
|
|
98
|
+
> **第一次用?** 想少碰终端,优先用 **PC 桌面端**;习惯终端则直接运行 **`xopc`**。需要浏览器控制台或即时通讯时,再启动 **`xopc gateway`**。
|
|
91
99
|
|
|
92
100
|
### npm(已具备 Node.js 22+)
|
|
93
101
|
|
|
@@ -123,19 +131,19 @@ pnpm exec xopc onboard
|
|
|
123
131
|
|
|
124
132
|
Windows 源码安装:`& ([scriptblock]::Create((irm https://xopc.ai/install.ps1))) -InstallMethod git`
|
|
125
133
|
|
|
126
|
-
**环境:** Node.js **≥ 22
|
|
134
|
+
**环境:** Node.js **≥ 22**(一键脚本会自动处理)。从源码开发本仓库时请使用 **pnpm**。更多安装方式见 **[xopc.ai](https://xopc.ai)** 与 **[快速开始](https://xopcai.github.io/xopc/zh/getting-started)**。
|
|
127
135
|
|
|
128
136
|
---
|
|
129
137
|
|
|
130
138
|
## 为什么选 xopc
|
|
131
139
|
|
|
132
|
-
- 🔁
|
|
140
|
+
- 🔁 **循环驱动,而不是一次性对话** — XOPC 持续记住上下文,协调 AI 推进下一步,让真正重要的事情不断向前。
|
|
133
141
|
|
|
134
142
|
- 🏠 **你的机器** — 配置与数据在 **`~/.xopc/`**,无强制云端、无意外账单。
|
|
135
|
-
- 🔑
|
|
136
|
-
- 📱
|
|
137
|
-
- 🧩
|
|
138
|
-
- ⏰
|
|
143
|
+
- 🔑 **使用自己的密钥** — OpenAI、Anthropic、Google、DeepSeek、Ollama、LM Studio、vLLM 等 **20+** 厂商;云端和本地模型可混用,一行配置即可切换模型。详见 **[模型](https://xopcai.github.io/xopc/zh/models)**。
|
|
144
|
+
- 📱 **多个入口,同一个助手** — 终端、浏览器、桌面、[移动端 App](https://github.com/xopcai/xopc-app)、即时通讯共用同一套上下文,无需额外同步。
|
|
145
|
+
- 🧩 **可按需扩展** — 通过 **`xopc skills install`** 和 **`xopc extensions install`** 扩展工具、频道与 UI;多 Agent 可按场景隔离。
|
|
146
|
+
- ⏰ **支持主动任务** — 用 **Cron** 做定时摘要与提醒;用 **工作流**扇出多子 Agent 任务;用 **多 Agent** 管理不同工作区、工具与系统提示词。
|
|
139
147
|
|
|
140
148
|
---
|
|
141
149
|
|
|
@@ -143,18 +151,18 @@ Windows 源码安装:`& ([scriptblock]::Create((irm https://xopc.ai/install.ps
|
|
|
143
151
|
|
|
144
152
|
| 方式 | 怎么用 | 适合 |
|
|
145
153
|
| --- | --- | --- |
|
|
146
|
-
| **
|
|
154
|
+
| **PC 桌面端** | [GitHub Releases](#desktop-app) | 最省心的开始方式:原生应用 + 内嵌 gateway 控制台 |
|
|
155
|
+
| **TUI** | `xopc` 或 `xopc tui`(远程:`xopc tui --url …`) | 全键盘、流式输出,最快终端路径 |
|
|
147
156
|
| **CLI** | `xopc agent -i` / `xopc agent -m "…"` | 脚本、最小终端环境 |
|
|
148
157
|
| **网页** | `xopc gateway` → 打开控制台地址 | 聊天、设置、日志 |
|
|
149
|
-
|
|
|
150
|
-
| **手机** | [xopc-app](https://github.com/xopcai/xopc-app) + 网关配对([移动端 app](https://xopcai.github.io/xopc/zh/mobile-app)、[远程访问](https://xopcai.github.io/xopc/zh/remote-access)) | 在 iOS/Android 上继续推进循环 |
|
|
158
|
+
| **手机** | [xopc-app](https://github.com/xopcai/xopc-app) + 网关配对([移动端 App](https://xopcai.github.io/xopc/zh/mobile-app)、[远程访问](https://xopcai.github.io/xopc/zh/remote-access)) | 在 iOS/Android 上继续推进循环 |
|
|
151
159
|
| **即时通讯** | 配置 `channels.*` 并启动网关 | Telegram、微信、飞书/Lark |
|
|
152
160
|
|
|
153
161
|
---
|
|
154
162
|
|
|
155
163
|
## 内置频道
|
|
156
164
|
|
|
157
|
-
在 **`~/.xopc/xopc.json`** 里配置 **`channels
|
|
165
|
+
在 **`~/.xopc/xopc.json`** 里配置 **`channels.*`**。即时通讯需要网关常驻;微信需要在**运行网关的机器**上扫码登录。
|
|
158
166
|
|
|
159
167
|
| 频道 | 配置项 | 说明 |
|
|
160
168
|
| --- | --- | --- |
|
|
@@ -185,19 +193,34 @@ xopc extensions dev ./my-extension
|
|
|
185
193
|
```json
|
|
186
194
|
{
|
|
187
195
|
"agents": {
|
|
188
|
-
"
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
"default": "main",
|
|
197
|
+
"list": [
|
|
198
|
+
{
|
|
199
|
+
"id": "main",
|
|
200
|
+
"identity": { "name": "Main", "role": "General assistant" },
|
|
201
|
+
"responsibilities": { "primary": ["Help the user complete tasks"] },
|
|
202
|
+
"workspace": { "root": "~/.xopc/workspace/main" },
|
|
203
|
+
"models": {
|
|
204
|
+
"defaultRole": "deep",
|
|
205
|
+
"roles": {
|
|
206
|
+
"deep": { "model": "deepseek/deepseek-v4-flash" }
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"tools": { "builtin": {} },
|
|
210
|
+
"skills": { "mode": "all" },
|
|
211
|
+
"memory": { "mode": "confirmWrite", "sources": ["session"] },
|
|
212
|
+
"workflows": {},
|
|
213
|
+
"boundaries": { "requiresConfirmation": [], "forbidden": [], "escalation": [] }
|
|
214
|
+
}
|
|
215
|
+
]
|
|
192
216
|
},
|
|
193
217
|
"providers": {
|
|
194
|
-
"deepseek": "${DEEPSEEK_API_KEY}"
|
|
195
|
-
"openai": "${OPENAI_API_KEY}"
|
|
218
|
+
"deepseek": "${DEEPSEEK_API_KEY}"
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
```
|
|
199
222
|
|
|
200
|
-
|
|
223
|
+
需要即时通讯时再补 **`channels.telegram`**、**`channels.weixin`**、**`channels.feishu`** —— 见 **[配置](https://xopcai.github.io/xopc/zh/configuration)**。
|
|
201
224
|
|
|
202
225
|
可选工具(如浏览器)默认**关闭**,启用后按需安装 Playwright Chromium。
|
|
203
226
|
|
|
@@ -214,7 +237,7 @@ xopc extensions dev ./my-extension
|
|
|
214
237
|
| [架构](https://xopcai.github.io/xopc/zh/architecture) | 整体结构 |
|
|
215
238
|
| [工作流](https://xopcai.github.io/xopc/zh/workflows) | 扇出子 Agent、看板、脚本 |
|
|
216
239
|
|
|
217
|
-
更多:[工具](https://xopcai.github.io/xopc/zh/tools) · [移动端
|
|
240
|
+
更多:[工具](https://xopcai.github.io/xopc/zh/tools) · [移动端 App](https://xopcai.github.io/xopc/zh/mobile-app) · [语音](https://xopcai.github.io/xopc/zh/voice) · [远程访问](https://xopcai.github.io/xopc/zh/remote-access)
|
|
218
241
|
|
|
219
242
|
---
|
|
220
243
|
|
|
@@ -227,16 +250,14 @@ xopc extensions dev ./my-extension
|
|
|
227
250
|
不必须。你可以自带云厂商 API Key,也可以使用 Ollama、LM Studio、vLLM 等本地/自部署模型服务。
|
|
228
251
|
|
|
229
252
|
**最快怎么试用?**
|
|
230
|
-
|
|
253
|
+
对大多数用户,优先从 GitHub Releases 安装 **PC 桌面端**,在界面中完成模型设置。习惯终端的用户可以执行 **`xopc onboard --quick`**,然后运行 **`xopc`**。
|
|
231
254
|
|
|
232
255
|
**它和普通聊天 UI 有什么区别?**
|
|
233
256
|
xopc 围绕目标循环组织:方向、下一步、反馈、重新校准,并且同一个助手可以跨多个入口继续工作。
|
|
234
257
|
|
|
235
|
-
|
|
258
|
+
**能在手机或即时通讯里用吗?**
|
|
236
259
|
可以。建议先用本地 TUI 试用;确认方向后,再启动 gateway,用 [xopc-app](https://github.com/xopcai/xopc-app) 连接 iOS/Android,或配置 Telegram、微信、飞书/Lark。
|
|
237
260
|
|
|
238
|
-
如果这些回答解决了你的顾虑,欢迎 **[给 xopc 点个 Star](https://github.com/xopcai/xopc)**,帮助更多开发者看到它。
|
|
239
|
-
|
|
240
261
|
---
|
|
241
262
|
|
|
242
263
|
<a id="desktop-app"></a>
|
|
@@ -244,16 +265,21 @@ xopc 围绕目标循环组织:方向、下一步、反馈、重新校准,并
|
|
|
244
265
|
|
|
245
266
|
## 桌面版
|
|
246
267
|
|
|
268
|
+
PC 桌面端是大多数用户最省心的开始方式:它会启动内置本地 gateway,并在原生窗口里打开 gateway 控制台。
|
|
269
|
+
|
|
247
270
|
1. 从 **[GitHub Releases](https://github.com/xopcai/xopc/releases)** 下载 — macOS `.dmg`,Windows `xopc-<版本>-x64.exe` 或 `xopc-<版本>-arm64.exe`,Linux `.AppImage` / `.deb`。
|
|
248
|
-
2.
|
|
271
|
+
2. 打开应用,完成模型设置,然后开始聊天。
|
|
272
|
+
3. 暂无对应平台安装包时,先用 **`xopc gateway`** + npm 命令行版。
|
|
249
273
|
|
|
250
274
|
**从源码打包:** `pnpm install && pnpm run electron:build` → `dist/release/`
|
|
251
275
|
|
|
276
|
+
文档与素材预留:**[PC 桌面端](https://xopcai.github.io/xopc/zh/desktop-app)**。
|
|
277
|
+
|
|
252
278
|
---
|
|
253
279
|
|
|
254
280
|
## 安全
|
|
255
281
|
|
|
256
|
-
|
|
282
|
+
来自即时通讯的消息视为**不可信输入**。私聊建议 **pairing(配对)** 或 **allowlist(白名单)**。请勿泄露网关监听地址与 token —— **[频道](https://xopcai.github.io/xopc/zh/channels)**。
|
|
257
283
|
|
|
258
284
|
---
|
|
259
285
|
|
|
@@ -266,15 +292,7 @@ pnpm run build && pnpm test && pnpm run lint
|
|
|
266
292
|
|
|
267
293
|
**[AGENTS.md](./AGENTS.md)** · **[CONTRIBUTING.md](./CONTRIBUTING.md)**(英文)
|
|
268
294
|
|
|
269
|
-
**反馈:** [Bug](https://github.com/xopcai/xopc/issues/new?template=bug_report.yml) · [功能建议](https://github.com/xopcai/xopc/issues/new?template=feature_request.yml) · [
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Star 历史
|
|
274
|
-
|
|
275
|
-
[](https://star-history.com/#xopcai/xopc&Date)
|
|
276
|
-
|
|
277
|
-
---
|
|
295
|
+
**反馈:** [Bug 反馈](https://github.com/xopcai/xopc/issues/new?template=bug_report.yml) · [功能建议](https://github.com/xopcai/xopc/issues/new?template=feature_request.yml) · [Q&A 讨论](https://github.com/xopcai/xopc/discussions/categories/q-a) · [安全漏洞反馈](https://github.com/xopcai/xopc/security/advisories/new)(请勿公开发布漏洞细节)
|
|
278
296
|
|
|
279
297
|
## 致谢
|
|
280
298
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MemoryProvider } from '../../../src/agent/memory/provider.js';
|
|
2
|
+
import type { MemoryProviderManifest } from '../../../src/agent/memory/types.js';
|
|
3
|
+
export declare const manifest: MemoryProviderManifest;
|
|
4
|
+
export declare const description = "In-memory provider used to verify extension-backed memory providers.";
|
|
5
|
+
export declare function isAvailable(): boolean;
|
|
6
|
+
export declare function createMemoryProvider(): MemoryProvider;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
//#region extensions/demo-memory/src/index.ts
|
|
2
|
+
const manifest = {
|
|
3
|
+
type: "memory-provider",
|
|
4
|
+
id: "demo-memory",
|
|
5
|
+
displayName: "Demo Memory Provider",
|
|
6
|
+
entry: "./src/index.js",
|
|
7
|
+
capabilities: {
|
|
8
|
+
search: true,
|
|
9
|
+
read: true,
|
|
10
|
+
write: true,
|
|
11
|
+
update: false,
|
|
12
|
+
delete: false,
|
|
13
|
+
keywordSearch: true,
|
|
14
|
+
citations: true,
|
|
15
|
+
sync: true
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const description = "In-memory provider used to verify extension-backed memory providers.";
|
|
19
|
+
function isAvailable() {
|
|
20
|
+
return process.env.XOPC_DEMO_MEMORY_DISABLED !== "1";
|
|
21
|
+
}
|
|
22
|
+
function createMemoryProvider() {
|
|
23
|
+
return new DemoMemoryProvider();
|
|
24
|
+
}
|
|
25
|
+
var DemoMemoryProvider = class {
|
|
26
|
+
id = manifest.id;
|
|
27
|
+
displayName = manifest.displayName;
|
|
28
|
+
manifest = manifest;
|
|
29
|
+
capabilities = {
|
|
30
|
+
search: true,
|
|
31
|
+
read: true,
|
|
32
|
+
write: true,
|
|
33
|
+
update: false,
|
|
34
|
+
delete: false,
|
|
35
|
+
keywordSearch: true,
|
|
36
|
+
semanticSearch: false,
|
|
37
|
+
hybridSearch: false,
|
|
38
|
+
citations: true,
|
|
39
|
+
sync: true
|
|
40
|
+
};
|
|
41
|
+
records = /* @__PURE__ */ new Map();
|
|
42
|
+
sequence = 0;
|
|
43
|
+
scope = { agentId: "main" };
|
|
44
|
+
isAvailable() {
|
|
45
|
+
return isAvailable();
|
|
46
|
+
}
|
|
47
|
+
initialize(_sessionId, options) {
|
|
48
|
+
const agentId = typeof options?.config?.agentId === "string" ? options.config.agentId : "main";
|
|
49
|
+
const workspaceId = typeof options?.workspace === "string" ? options.workspace : void 0;
|
|
50
|
+
this.scope = workspaceId ? {
|
|
51
|
+
agentId,
|
|
52
|
+
workspaceId
|
|
53
|
+
} : { agentId };
|
|
54
|
+
}
|
|
55
|
+
async write(request) {
|
|
56
|
+
const record = this.createRecord(request);
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
record,
|
|
60
|
+
message: `Demo memory stored ${record.id}`
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async search(request) {
|
|
64
|
+
const query = request.query.trim().toLocaleLowerCase();
|
|
65
|
+
const kinds = request.kinds ? new Set(request.kinds) : null;
|
|
66
|
+
const maxResults = request.maxResults ?? 5;
|
|
67
|
+
return [...this.records.values()].filter((record) => !kinds || kinds.has(record.kind)).filter((record) => !query || record.content.toLocaleLowerCase().includes(query)).map((record) => ({
|
|
68
|
+
record,
|
|
69
|
+
score: scoreRecord(record, query),
|
|
70
|
+
snippet: record.content,
|
|
71
|
+
citation: {
|
|
72
|
+
providerId: this.id,
|
|
73
|
+
recordId: record.id,
|
|
74
|
+
title: this.displayName,
|
|
75
|
+
createdAt: record.createdAt
|
|
76
|
+
}
|
|
77
|
+
})).sort((a, b) => b.score - a.score).slice(0, maxResults);
|
|
78
|
+
}
|
|
79
|
+
async read(request) {
|
|
80
|
+
if (!request.id) return null;
|
|
81
|
+
const record = this.records.get(request.id);
|
|
82
|
+
return record ? { record } : null;
|
|
83
|
+
}
|
|
84
|
+
async get(id) {
|
|
85
|
+
return this.records.get(id) ?? null;
|
|
86
|
+
}
|
|
87
|
+
async list(request) {
|
|
88
|
+
return [...this.records.values()].filter((record) => !request.kind || record.kind === request.kind);
|
|
89
|
+
}
|
|
90
|
+
sync(event) {
|
|
91
|
+
if (event.type !== "signal" || !event.signal.content) return;
|
|
92
|
+
this.createRecord({
|
|
93
|
+
kind: "derived_insight",
|
|
94
|
+
content: event.signal.content,
|
|
95
|
+
source: { provider: event.signal.source },
|
|
96
|
+
tags: ["signal", event.signal.source]
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
shutdown() {
|
|
100
|
+
this.records.clear();
|
|
101
|
+
}
|
|
102
|
+
createRecord(request) {
|
|
103
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
104
|
+
const id = `demo-memory-${++this.sequence}`;
|
|
105
|
+
const record = {
|
|
106
|
+
id,
|
|
107
|
+
kind: request.kind,
|
|
108
|
+
scope: {
|
|
109
|
+
...this.scope,
|
|
110
|
+
...request.scope
|
|
111
|
+
},
|
|
112
|
+
content: request.content,
|
|
113
|
+
source: request.source ?? { provider: this.id },
|
|
114
|
+
createdAt: now,
|
|
115
|
+
updatedAt: now,
|
|
116
|
+
...request.tags ? { tags: request.tags } : {}
|
|
117
|
+
};
|
|
118
|
+
this.records.set(id, record);
|
|
119
|
+
return record;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
function scoreRecord(record, query) {
|
|
123
|
+
if (!query) return .5;
|
|
124
|
+
const text = record.content.toLocaleLowerCase();
|
|
125
|
+
if (text === query) return 1;
|
|
126
|
+
if (text.includes(query)) return .8;
|
|
127
|
+
return .1;
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { createMemoryProvider, description, isAvailable, manifest };
|
|
131
|
+
|
|
132
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../extensions/demo-memory/src/index.ts"],"sourcesContent":["import type { MemoryProvider, MemoryProviderInitOptions } from '../../../src/agent/memory/provider.js';\nimport type {\n MemoryCapabilities,\n MemoryListRequest,\n MemoryProviderManifest,\n MemoryReadRequest,\n MemoryReadResult,\n MemoryRecord,\n MemoryScope,\n MemorySearchRequest,\n MemorySearchResult,\n MemorySyncEvent,\n MemoryWriteRequest,\n MemoryWriteResult,\n} from '../../../src/agent/memory/types.js';\n\nexport const manifest: MemoryProviderManifest = {\n type: 'memory-provider',\n id: 'demo-memory',\n displayName: 'Demo Memory Provider',\n entry: './src/index.js',\n capabilities: {\n search: true,\n read: true,\n write: true,\n update: false,\n delete: false,\n keywordSearch: true,\n citations: true,\n sync: true,\n },\n};\n\nexport const description = 'In-memory provider used to verify extension-backed memory providers.';\n\nexport function isAvailable(): boolean {\n return process.env.XOPC_DEMO_MEMORY_DISABLED !== '1';\n}\n\nexport function createMemoryProvider(): MemoryProvider {\n return new DemoMemoryProvider();\n}\n\nclass DemoMemoryProvider implements MemoryProvider {\n readonly id = manifest.id;\n readonly displayName = manifest.displayName;\n readonly manifest = manifest;\n readonly capabilities: MemoryCapabilities = {\n search: true,\n read: true,\n write: true,\n update: false,\n delete: false,\n keywordSearch: true,\n semanticSearch: false,\n hybridSearch: false,\n citations: true,\n sync: true,\n };\n\n private records = new Map<string, MemoryRecord>();\n private sequence = 0;\n private scope: MemoryScope = { agentId: 'main' };\n\n isAvailable(): boolean {\n return isAvailable();\n }\n\n initialize(_sessionId: string, options?: MemoryProviderInitOptions): void {\n const agentId = typeof options?.config?.agentId === 'string' ? options.config.agentId : 'main';\n const workspaceId = typeof options?.workspace === 'string' ? options.workspace : undefined;\n this.scope = workspaceId ? { agentId, workspaceId } : { agentId };\n }\n\n async write(request: MemoryWriteRequest): Promise<MemoryWriteResult> {\n const record = this.createRecord(request);\n return { success: true, record, message: `Demo memory stored ${record.id}` };\n }\n\n async search(request: MemorySearchRequest): Promise<MemorySearchResult[]> {\n const query = request.query.trim().toLocaleLowerCase();\n const kinds = request.kinds ? new Set(request.kinds) : null;\n const maxResults = request.maxResults ?? 5;\n return [...this.records.values()]\n .filter((record) => !kinds || kinds.has(record.kind))\n .filter((record) => !query || record.content.toLocaleLowerCase().includes(query))\n .map((record) => ({\n record,\n score: scoreRecord(record, query),\n snippet: record.content,\n citation: {\n providerId: this.id,\n recordId: record.id,\n title: this.displayName,\n createdAt: record.createdAt,\n },\n }))\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n }\n\n async read(request: MemoryReadRequest): Promise<MemoryReadResult | null> {\n if (!request.id) return null;\n const record = this.records.get(request.id);\n return record ? { record } : null;\n }\n\n async get(id: string): Promise<MemoryRecord | null> {\n return this.records.get(id) ?? null;\n }\n\n async list(request: MemoryListRequest): Promise<MemoryRecord[]> {\n return [...this.records.values()].filter((record) => !request.kind || record.kind === request.kind);\n }\n\n sync(event: MemorySyncEvent): void {\n if (event.type !== 'signal' || !event.signal.content) return;\n this.createRecord({\n kind: 'derived_insight',\n content: event.signal.content,\n source: { provider: event.signal.source },\n tags: ['signal', event.signal.source],\n });\n }\n\n shutdown(): void {\n this.records.clear();\n }\n\n private createRecord(request: MemoryWriteRequest): MemoryRecord {\n const now = new Date().toISOString();\n const id = `demo-memory-${++this.sequence}`;\n const record: MemoryRecord = {\n id,\n kind: request.kind,\n scope: { ...this.scope, ...request.scope },\n content: request.content,\n source: request.source ?? { provider: this.id },\n createdAt: now,\n updatedAt: now,\n ...(request.tags ? { tags: request.tags } : {}),\n };\n this.records.set(id, record);\n return record;\n }\n}\n\nfunction scoreRecord(record: MemoryRecord, query: string): number {\n if (!query) return 0.5;\n const text = record.content.toLocaleLowerCase();\n if (text === query) return 1;\n if (text.includes(query)) return 0.8;\n return 0.1;\n}\n"],"mappings":";AAgBA,MAAa,WAAmC;CAC9C,MAAM;CACN,IAAI;CACJ,aAAa;CACb,OAAO;CACP,cAAc;EACZ,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAa,cAAc;AAE3B,SAAgB,cAAuB;AACrC,QAAO,QAAQ,IAAI,8BAA8B;;AAGnD,SAAgB,uBAAuC;AACrD,QAAO,IAAI,oBAAoB;;AAGjC,IAAM,qBAAN,MAAmD;CACjD,KAAc,SAAS;CACvB,cAAuB,SAAS;CAChC,WAAoB;CACpB,eAA4C;EAC1C,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,WAAW;EACX,MAAM;EACP;CAED,0BAAkB,IAAI,KAA2B;CACjD,WAAmB;CACnB,QAA6B,EAAE,SAAS,QAAQ;CAEhD,cAAuB;AACrB,SAAO,aAAa;;CAGtB,WAAW,YAAoB,SAA2C;EACxE,MAAM,UAAU,OAAO,SAAS,QAAQ,YAAY,WAAW,QAAQ,OAAO,UAAU;EACxF,MAAM,cAAc,OAAO,SAAS,cAAc,WAAW,QAAQ,YAAY,KAAA;AACjF,OAAK,QAAQ,cAAc;GAAE;GAAS;GAAa,GAAG,EAAE,SAAS;;CAGnE,MAAM,MAAM,SAAyD;EACnE,MAAM,SAAS,KAAK,aAAa,QAAQ;AACzC,SAAO;GAAE,SAAS;GAAM;GAAQ,SAAS,sBAAsB,OAAO;GAAM;;CAG9E,MAAM,OAAO,SAA6D;EACxE,MAAM,QAAQ,QAAQ,MAAM,MAAM,CAAC,mBAAmB;EACtD,MAAM,QAAQ,QAAQ,QAAQ,IAAI,IAAI,QAAQ,MAAM,GAAG;EACvD,MAAM,aAAa,QAAQ,cAAc;AACzC,SAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CAAC,CAC9B,QAAQ,WAAW,CAAC,SAAS,MAAM,IAAI,OAAO,KAAK,CAAC,CACpD,QAAQ,WAAW,CAAC,SAAS,OAAO,QAAQ,mBAAmB,CAAC,SAAS,MAAM,CAAC,CAChF,KAAK,YAAY;GAChB;GACA,OAAO,YAAY,QAAQ,MAAM;GACjC,SAAS,OAAO;GAChB,UAAU;IACR,YAAY,KAAK;IACjB,UAAU,OAAO;IACjB,OAAO,KAAK;IACZ,WAAW,OAAO;IACnB;GACF,EAAE,CACF,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,MAAM,GAAG,WAAW;;CAGzB,MAAM,KAAK,SAA8D;AACvE,MAAI,CAAC,QAAQ,GAAI,QAAO;EACxB,MAAM,SAAS,KAAK,QAAQ,IAAI,QAAQ,GAAG;AAC3C,SAAO,SAAS,EAAE,QAAQ,GAAG;;CAG/B,MAAM,IAAI,IAA0C;AAClD,SAAO,KAAK,QAAQ,IAAI,GAAG,IAAI;;CAGjC,MAAM,KAAK,SAAqD;AAC9D,SAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CAAC,CAAC,QAAQ,WAAW,CAAC,QAAQ,QAAQ,OAAO,SAAS,QAAQ,KAAK;;CAGrG,KAAK,OAA8B;AACjC,MAAI,MAAM,SAAS,YAAY,CAAC,MAAM,OAAO,QAAS;AACtD,OAAK,aAAa;GAChB,MAAM;GACN,SAAS,MAAM,OAAO;GACtB,QAAQ,EAAE,UAAU,MAAM,OAAO,QAAQ;GACzC,MAAM,CAAC,UAAU,MAAM,OAAO,OAAO;GACtC,CAAC;;CAGJ,WAAiB;AACf,OAAK,QAAQ,OAAO;;CAGtB,aAAqB,SAA2C;EAC9D,MAAM,uBAAM,IAAI,MAAM,EAAC,aAAa;EACpC,MAAM,KAAK,eAAe,EAAE,KAAK;EACjC,MAAM,SAAuB;GAC3B;GACA,MAAM,QAAQ;GACd,OAAO;IAAE,GAAG,KAAK;IAAO,GAAG,QAAQ;IAAO;GAC1C,SAAS,QAAQ;GACjB,QAAQ,QAAQ,UAAU,EAAE,UAAU,KAAK,IAAI;GAC/C,WAAW;GACX,WAAW;GACX,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,GAAG,EAAE;GAC/C;AACD,OAAK,QAAQ,IAAI,IAAI,OAAO;AAC5B,SAAO;;;AAIX,SAAS,YAAY,QAAsB,OAAuB;AAChE,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,OAAO,OAAO,QAAQ,mBAAmB;AAC/C,KAAI,SAAS,MAAO,QAAO;AAC3B,KAAI,KAAK,SAAS,MAAM,CAAE,QAAO;AACjC,QAAO"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "demo-memory",
|
|
3
|
+
"name": "Demo Memory Provider",
|
|
4
|
+
"description": "In-memory memory provider used to validate the extension memory provider pipeline.",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"kind": "memory",
|
|
7
|
+
"main": "src/index.js",
|
|
8
|
+
"enabledByDefault": true,
|
|
9
|
+
"contracts": {
|
|
10
|
+
"memoryProviders": ["demo-memory"]
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"xopc": ">=0.0.116 <1.0.0"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { checkFileSafety } from "../../../../src/agent/prompt/safety.js";
|
|
2
2
|
import { getMimeType } from "../../../../src/channels/media.js";
|
|
3
3
|
import { getWorkspacePath } from "../../../../src/config/workspace-path-helpers.js";
|
|
4
|
-
import { promises } from "node:fs";
|
|
5
4
|
import path from "node:path";
|
|
5
|
+
import { promises } from "node:fs";
|
|
6
6
|
import { Readable } from "node:stream";
|
|
7
7
|
//#region extensions/feishu/src/outbound/media-load.ts
|
|
8
8
|
function isPathUnderRoots(resolved, roots) {
|
|
@@ -18,8 +18,8 @@ export declare const FeishuAccountConfigSchema: z.ZodObject<{
|
|
|
18
18
|
verificationToken: z.ZodOptional<z.ZodString>;
|
|
19
19
|
encryptKey: z.ZodOptional<z.ZodString>;
|
|
20
20
|
dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
21
|
-
pairing: "pairing";
|
|
22
21
|
allowlist: "allowlist";
|
|
22
|
+
pairing: "pairing";
|
|
23
23
|
open: "open";
|
|
24
24
|
disabled: "disabled";
|
|
25
25
|
}>>>;
|
|
@@ -93,8 +93,8 @@ export declare const FeishuConfigSchema: z.ZodObject<{
|
|
|
93
93
|
verificationToken: z.ZodOptional<z.ZodString>;
|
|
94
94
|
encryptKey: z.ZodOptional<z.ZodString>;
|
|
95
95
|
dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
96
|
-
pairing: "pairing";
|
|
97
96
|
allowlist: "allowlist";
|
|
97
|
+
pairing: "pairing";
|
|
98
98
|
open: "open";
|
|
99
99
|
disabled: "disabled";
|
|
100
100
|
}>>>;
|
|
@@ -157,8 +157,8 @@ export declare const FeishuConfigSchema: z.ZodObject<{
|
|
|
157
157
|
verificationToken: z.ZodOptional<z.ZodString>;
|
|
158
158
|
encryptKey: z.ZodOptional<z.ZodString>;
|
|
159
159
|
dmPolicy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
160
|
-
pairing: "pairing";
|
|
161
160
|
allowlist: "allowlist";
|
|
161
|
+
pairing: "pairing";
|
|
162
162
|
open: "open";
|
|
163
163
|
disabled: "disabled";
|
|
164
164
|
}>>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_session_key, parseSessionKey } from "../../../src/routing/session-key.js";
|
|
1
2
|
import { createLogger } from "../../../src/utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../../src/utils/logger.js";
|
|
3
|
-
import { init_session_key, parseSessionKey } from "../../../src/routing/session-key.js";
|
|
4
4
|
import { resolveFeishuAccount } from "./state/accounts.js";
|
|
5
5
|
//#region extensions/feishu/src/workflow-progress.ts
|
|
6
6
|
init_session_key();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { init_config_schema, resolveTelegramStreamingMode } from "../config-schema.js";
|
|
1
2
|
import { createLogger } from "../../../../src/utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../../../src/utils/logger.js";
|
|
3
|
-
import { init_config_schema, resolveTelegramStreamingMode } from "../config-schema.js";
|
|
4
4
|
import { renderTelegramHtmlText } from "../format.js";
|
|
5
5
|
import { telegramReplyTracker } from "../reply-params.js";
|
|
6
6
|
import { createTelegramDraftStream } from "../draft-stream.js";
|
|
@@ -97,9 +97,8 @@ function createTelegramCommandHandler(deps) {
|
|
|
97
97
|
const handleProviderSelect = async (ctx, providerId) => {
|
|
98
98
|
try {
|
|
99
99
|
const sessionKey = getSessionKeyFromCtx(ctx);
|
|
100
|
-
const modelConfig = config.agents?.defaults?.models?.chat;
|
|
101
100
|
const { getDefaultModelSync, getProviderDisplayName } = await import("../../../src/providers/index.js");
|
|
102
|
-
const defaultModel =
|
|
101
|
+
const defaultModel = getDefaultModelSync(config);
|
|
103
102
|
const currentModel = getSessionModel(sessionKey) || defaultModel;
|
|
104
103
|
const models = await getModelsForProvider(providerId);
|
|
105
104
|
if (models.length === 0) {
|