@xopcai/xopc 0.0.102 → 0.0.104
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 +8 -5
- package/README.zh-CN.md +8 -5
- package/dist/_virtual/_rolldown/runtime.js +2 -3
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.d.ts +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
- package/dist/extensions/feishu/src/adapters/gateway-setup.d.ts +2 -0
- package/dist/extensions/feishu/src/adapters/gateway-setup.js +225 -0
- package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +1 -0
- package/dist/extensions/feishu/src/index.d.ts +8 -1
- package/dist/extensions/feishu/src/index.js +14 -1
- package/dist/extensions/feishu/src/index.js.map +1 -0
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js +1 -1
- package/dist/extensions/feishu/src/plugin.d.ts +2 -1
- package/dist/extensions/feishu/src/plugin.js +2 -0
- package/dist/extensions/feishu/src/plugin.js.map +1 -1
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js +1 -1
- package/dist/extensions/feishu/src/transport/webhook/monitor.js +2 -2
- package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +1 -1
- package/dist/extensions/feishu/xopc.extension.json +66 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.d.ts +2 -0
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +146 -0
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +1 -0
- package/dist/extensions/telegram/src/adapters/security-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.js +2 -2
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/doctor.d.ts +1 -0
- package/dist/extensions/telegram/src/doctor.js +68 -0
- package/dist/extensions/telegram/src/doctor.js.map +1 -1
- package/dist/extensions/telegram/src/index.d.ts +8 -1
- package/dist/extensions/telegram/src/index.js +15 -2
- package/dist/extensions/telegram/src/index.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +13 -5
- package/dist/extensions/telegram/src/plugin.js +32 -12
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/proxy-fetch.js +22 -5
- package/dist/extensions/telegram/src/proxy-fetch.js.map +1 -1
- package/dist/extensions/telegram/src/send-options.js +8 -5
- package/dist/extensions/telegram/src/send-options.js.map +1 -1
- package/dist/extensions/telegram/xopc.extension.json +412 -5
- package/dist/extensions/weixin/src/adapters/onboard-cli.js +2 -2
- package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/index.d.ts +8 -0
- package/dist/extensions/weixin/src/index.js +12 -1
- package/dist/extensions/weixin/src/index.js.map +1 -0
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.d.ts +2 -1
- package/dist/extensions/weixin/src/plugin.js +77 -2
- package/dist/extensions/weixin/src/plugin.js.map +1 -1
- package/dist/extensions/weixin/xopc.extension.json +52 -0
- package/dist/gateway/static/root/assets/agents-CvsBrBfi.js +396 -0
- package/dist/gateway/static/root/assets/{apps-page-Uv4kOmDE.js → apps-page-L-IwQTe0.js} +1 -1
- package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-D95KuPeP.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-CfkWXDAI.js +1 -0
- package/dist/gateway/static/root/assets/{dist-DH4IuRV0.js → dist-C6vclgEL.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BNkhvRQW.js → extension-debug-page-D4JYAbsX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CcIGQah2.js → extension-page-_T62gi6e.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CkJbjyM-.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-drJUxxKP.js → fetch-B5aiIguv.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-DqmLXhs6.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-HwJV1K_Y.js +1 -0
- package/dist/gateway/static/root/assets/index-BPYKW7FB.css +1 -0
- package/dist/gateway/static/root/assets/index-DvTb6wNR.js +4845 -0
- package/dist/gateway/static/root/assets/{logs-page-CiG0m81R.js → logs-page-DsjtTjBy.js} +2 -2
- package/dist/gateway/static/root/assets/{note-detail-page-DG3DVFTf.js → note-detail-page-B2V7RhgD.js} +43 -43
- package/dist/gateway/static/root/assets/{note-time-DjlllCF3.js → note-time-BG8GCTr4.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-xrcVBQ6Z.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-S-QUvhul.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-CrQer6Au.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DujQl9c7.js +2 -0
- package/dist/gateway/static/root/assets/{settings-form-section-C3_sEFfD.js → settings-form-section-r1V7dRV6.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C9nrONQ2.js +3 -0
- package/dist/gateway/static/root/assets/share-preview-page-DOFy0FNt.js +2 -0
- package/dist/gateway/static/root/assets/skills-page-DmTsrs_a.js +2 -0
- package/dist/gateway/static/root/assets/{theme-store-B6KXPHgK.js → theme-store-Bo3j5Ovv.js} +1 -1
- package/dist/gateway/static/root/assets/url-WgQIjFZu.js +3 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-AjmUAlEQ.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-g57BRfEd.js → workflow-page.utils-DLEJ92gK.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-BnjjKrM1.js +27 -0
- package/dist/gateway/static/root/index.html +6 -5
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +18 -6
- package/dist/src/agent/agent-manager.js +60 -35
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/builtin-agent-ids.d.ts +2 -0
- package/dist/src/agent/builtin-agent-ids.js +17 -0
- package/dist/src/agent/builtin-agent-ids.js.map +1 -0
- package/dist/src/agent/child-agent-factory.d.ts +4 -0
- package/dist/src/agent/child-agent-factory.js +28 -8
- package/dist/src/agent/child-agent-factory.js.map +1 -1
- package/dist/src/agent/context/workspace-seed.js +1 -1
- package/dist/src/agent/context/workspace-templates/AGENTS.md +23 -184
- package/dist/src/agent/embedded/run-turn.js +8 -2
- package/dist/src/agent/embedded/run-turn.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/subscribe-session.js +33 -51
- package/dist/src/agent/embedded/subscribe-session.js.map +1 -1
- package/dist/src/agent/embedded/types.d.ts +36 -35
- package/dist/src/agent/fallback/candidates.js +1 -1
- package/dist/src/agent/fallback/candidates.js.map +1 -1
- package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
- package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -1
- package/dist/src/agent/inbound/inbound-loop.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
- package/dist/src/agent/inbound/turn-dispatcher.js +24 -5
- package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
- package/dist/src/agent/models/manager.d.ts +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/models/manager.js.map +1 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +1 -1
- 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/prompt/sections/tooling.js +4 -0
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -0
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
- package/dist/src/agent/service/process-direct-streaming.js +35 -18
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service-inbound-utils.d.ts +0 -1
- package/dist/src/agent/service-inbound-utils.js +1 -17
- package/dist/src/agent/service-inbound-utils.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -4
- package/dist/src/agent/service.js +27 -15
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/session-config-service.d.ts +1 -0
- package/dist/src/agent/session/session-config-service.js +9 -1
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.d.ts +2 -1
- package/dist/src/agent/session/session-inspector.js +4 -0
- package/dist/src/agent/session/session-inspector.js.map +1 -1
- package/dist/src/agent/skills/config.js +1 -3
- package/dist/src/agent/skills/config.js.map +1 -1
- package/dist/src/agent/skills/format-skills-prompt.d.ts +1 -0
- package/dist/src/agent/skills/format-skills-prompt.js +3 -2
- package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/skills/index.js +20 -5
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/installer.js +14 -27
- package/dist/src/agent/skills/installer.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +11 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +18 -4
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +11 -2
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -2
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +4 -1
- package/dist/src/agent/skills/skill-manager.js +3 -3
- package/dist/src/agent/skills/skill-manager.js.map +1 -1
- package/dist/src/agent/skills/skill-view-path.d.ts +1 -17
- package/dist/src/agent/skills/skill-view-path.js +3 -66
- package/dist/src/agent/skills/skill-view-path.js.map +1 -1
- package/dist/src/agent/skills/test-framework.js +2 -3
- package/dist/src/agent/skills/test-framework.js.map +1 -1
- package/dist/src/agent/streaming/reasoning-visibility-sse.js +1 -0
- package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +1 -1
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -0
- package/{skills/browser/SKILL.md → dist/src/agent/tool-manuals/browser.js} +51 -54
- package/dist/src/agent/tool-manuals/browser.js.map +1 -0
- package/dist/src/agent/tool-manuals/index.d.ts +10 -0
- package/dist/src/agent/tool-manuals/index.js +28 -0
- package/dist/src/agent/tool-manuals/index.js.map +1 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -5
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +5 -4
- package/dist/src/agent/tools/send-media.js +1 -2
- package/dist/src/agent/tools/send-media.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/agent/tools/shell.js +1 -1
- package/dist/src/agent/tools/skills-tools.js +37 -8
- package/dist/src/agent/tools/skills-tools.js.map +1 -1
- package/dist/src/agent/tools/tool-manual-tool.d.ts +6 -0
- package/dist/src/agent/tools/tool-manual-tool.js +34 -0
- package/dist/src/agent/tools/tool-manual-tool.js.map +1 -0
- package/dist/src/agent/tools/web-extract.js +2 -2
- package/dist/src/agent/tools/web.js +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +7 -2
- package/dist/src/agent/workflow/catalog.js +66 -25
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.d.ts +3 -0
- package/dist/src/agent/workflow/subagent-runner.js +50 -4
- package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
- package/dist/src/agent/workflow/types.d.ts +10 -0
- package/dist/src/auth/credentials.d.ts +7 -0
- package/dist/src/auth/credentials.js +45 -7
- package/dist/src/auth/credentials.js.map +1 -1
- package/dist/src/auth/index.d.ts +1 -1
- package/dist/src/auth/index.js.map +1 -1
- package/dist/src/auth/oauth/github-copilot.d.ts +1 -1
- package/dist/src/auth/oauth/google-antigravity.d.ts +1 -3
- package/dist/src/auth/oauth/google-antigravity.js +1 -1
- package/dist/src/auth/oauth/google-gemini-cli.d.ts +1 -3
- package/dist/src/auth/oauth/google-gemini-cli.js +1 -1
- package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.js +3 -5
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +1 -0
- package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.js +4 -5
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +1 -0
- package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.js +12 -4
- package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +1 -0
- package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.d.ts +1 -1
- package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.js +2 -2
- package/dist/src/auth/oauth/google-oauth/pkce.js.map +1 -0
- package/dist/src/auth/oauth/index.js +2 -2
- package/dist/src/auth/oauth/kimi-coding.d.ts +1 -1
- package/dist/src/auth/oauth/kimi-coding.js +1 -1
- package/dist/src/auth/oauth/kimi-coding.js.map +1 -1
- package/dist/src/auth/oauth/minimax-cn.js +1 -1
- package/dist/src/auth/oauth/minimax-cn.js.map +1 -1
- package/dist/src/auth/oauth/minimax.js +1 -1
- package/dist/src/auth/oauth/minimax.js.map +1 -1
- package/dist/src/auth/oauth/openai-codex.d.ts +7 -2
- package/dist/src/auth/oauth/openai-codex.js +318 -1
- package/dist/src/auth/oauth/openai-codex.js.map +1 -0
- package/dist/src/auth/profiles/store.js +3 -2
- package/dist/src/auth/profiles/store.js.map +1 -1
- package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
- package/dist/src/browser/actions/registry.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/index.js +3 -3
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +1 -1
- package/dist/src/channels/attachments/attachment-classifiers.d.ts +1 -0
- package/dist/src/channels/attachments/attachment-classifiers.js +13 -2
- package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -1
- package/dist/src/channels/catalog/channel-catalog-service.d.ts +11 -0
- package/dist/src/channels/catalog/channel-catalog-service.js +168 -0
- package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -0
- package/dist/src/channels/catalog/channel-catalog-types.d.ts +22 -0
- package/dist/src/channels/catalog/channel-catalog-types.js +1 -0
- package/dist/src/channels/dock.d.ts +0 -7
- package/dist/src/channels/dock.js +1 -21
- package/dist/src/channels/index.d.ts +1 -3
- package/dist/src/channels/index.js +1 -5
- package/dist/src/channels/lifecycle-supervisor.d.ts +1 -0
- package/dist/src/channels/lifecycle-supervisor.js +11 -0
- package/dist/src/channels/lifecycle-supervisor.js.map +1 -1
- package/dist/src/channels/manager.d.ts +1 -0
- package/dist/src/channels/manager.js +3 -0
- package/dist/src/channels/manager.js.map +1 -1
- package/dist/src/channels/pairing/pairing-channel.d.ts +2 -3
- package/dist/src/channels/pairing/pairing-messages.js +1 -1
- package/dist/src/channels/pairing/pairing-messages.js.map +1 -1
- package/dist/src/channels/pairing/pairing-service.d.ts +1 -1
- package/dist/src/channels/pairing/pairing-service.js +8 -27
- package/dist/src/channels/pairing/pairing-service.js.map +1 -1
- package/dist/src/channels/plugin-types.d.ts +3 -1
- package/dist/src/channels/plugins/types.adapters.d.ts +55 -2
- package/dist/src/channels/telegram/index.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +4 -4
- 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/config-paths.js +1 -1
- package/dist/src/chat-commands/config-paths.js.map +1 -1
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/cli/bin.js +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 +2 -2
- package/dist/src/cli/commands/agent.js.map +1 -1
- package/dist/src/cli/commands/agents.js +2 -4
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/auth.js +40 -52
- package/dist/src/cli/commands/auth.js.map +1 -1
- package/dist/src/cli/commands/browser-cli-helpers.js +1 -1
- package/dist/src/cli/commands/channels.d.ts +1 -5
- package/dist/src/cli/commands/channels.js +115 -281
- package/dist/src/cli/commands/channels.js.map +1 -1
- package/dist/src/cli/commands/config.js +2 -2
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js +16 -69
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +6 -4
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +2 -2
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +13 -9
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -1
- package/dist/src/cli/commands/extension-dev.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +2 -1
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.js +2 -1
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/cli/commands/models.js +192 -54
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/index.js +1 -1
- package/dist/src/cli/commands/onboard/channels/index.js.map +1 -1
- package/dist/src/cli/commands/onboard/channels/registry.d.ts +2 -1
- package/dist/src/cli/commands/onboard/channels/registry.js +32 -8
- package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
- package/dist/src/cli/commands/onboard/model.d.ts +1 -4
- package/dist/src/cli/commands/onboard/model.js +257 -184
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +4 -6
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/setup-shared/runner.d.ts +1 -1
- package/dist/src/cli/commands/setup-shared/runner.js.map +1 -1
- package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
- package/dist/src/cli/commands/setup-shared/types.js.map +1 -1
- package/dist/src/cli/commands/tui.js +13 -5
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/cli/extension-cli-register.js +1 -1
- package/dist/src/cli/utils/oauth-login.d.ts +17 -0
- package/dist/src/cli/utils/oauth-login.js +93 -0
- package/dist/src/cli/utils/oauth-login.js.map +1 -0
- package/dist/src/cli/utils/oauth-providers.js +2 -2
- package/dist/src/commands/agents.config.d.ts +3 -3
- package/dist/src/commands/agents.config.js +7 -7
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/agent-profile.d.ts +1 -1
- package/dist/src/config/agent-profile.js +6 -2
- package/dist/src/config/agent-profile.js.map +1 -1
- package/dist/src/config/agent-typed-models.d.ts +2 -2
- package/dist/src/config/agent-typed-models.js +13 -2
- package/dist/src/config/agent-typed-models.js.map +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/integration.d.ts +1 -1
- package/dist/src/config/loader.d.ts +0 -1
- package/dist/src/config/loader.js +4 -9
- package/dist/src/config/loader.js.map +1 -1
- package/dist/src/config/models-json.d.ts +6 -6
- package/dist/src/config/rules.js +2 -12
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +74 -47
- package/dist/src/config/schema.js +28 -66
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/validate-channel-configs.d.ts +0 -3
- package/dist/src/config/validate-channel-configs.js +29 -10
- package/dist/src/config/validate-channel-configs.js.map +1 -1
- package/dist/src/cron/executor.js +1 -4
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/extensions/activation-context.js +3 -1
- package/dist/src/extensions/activation-context.js.map +1 -1
- package/dist/src/extensions/activation-planner.js +12 -0
- package/dist/src/extensions/activation-planner.js.map +1 -1
- package/dist/src/extensions/api.d.ts +5 -1
- package/dist/src/extensions/api.js +12 -0
- package/dist/src/extensions/api.js.map +1 -1
- package/dist/src/extensions/discover-extensions.js +17 -13
- package/dist/src/extensions/discover-extensions.js.map +1 -1
- package/dist/src/extensions/extension-metadata-snapshot.js +11 -5
- package/dist/src/extensions/extension-metadata-snapshot.js.map +1 -1
- package/dist/src/extensions/index.js +12 -4
- package/dist/src/extensions/index.js.map +1 -0
- package/dist/src/extensions/loader.d.ts +5 -1
- package/dist/src/extensions/loader.js +12 -11
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/extensions/manifest-registry.js +98 -93
- package/dist/src/extensions/manifest-registry.js.map +1 -1
- package/dist/src/extensions/normalize-manifest.js +91 -15
- package/dist/src/extensions/normalize-manifest.js.map +1 -1
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/extensions/sdk/testing.js +4 -0
- package/dist/src/extensions/sdk/testing.js.map +1 -1
- package/dist/src/extensions/types/core.d.ts +32 -1
- package/dist/src/extensions/types/manifest.d.ts +60 -0
- package/dist/src/extensions/types/tui.d.ts +414 -5
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +16 -0
- package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
- package/dist/src/gateway/agent-run-relay.d.ts +2 -3
- package/dist/src/gateway/agent-run-relay.js +10 -3
- package/dist/src/gateway/agent-run-relay.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +32 -19
- package/dist/src/gateway/agents-admin.js +113 -93
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.d.ts +34 -0
- package/dist/src/gateway/chat-stream/mapper.js +244 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +100 -0
- package/dist/src/gateway/chat-stream/protocol.js +1 -0
- package/dist/src/gateway/hono/lib/agent-model.d.ts +4 -4
- package/dist/src/gateway/hono/lib/agent-model.js +13 -11
- package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +19 -7
- package/dist/src/gateway/hono/lib/config-payload.js +16 -15
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/oauth-async.js +2 -2
- package/dist/src/gateway/hono/oauth.js +2 -2
- package/dist/src/gateway/hono/routes/agents.js +83 -48
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/channels.js +134 -214
- package/dist/src/gateway/hono/routes/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +10 -4
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js +26 -13
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.d.ts +1 -11
- package/dist/src/gateway/hono/routes/config-patch/channels.js +18 -165
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
- package/dist/src/gateway/hono/routes/config.js +5 -2
- package/dist/src/gateway/hono/routes/config.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +13 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +25 -5
- package/dist/src/gateway/hono/routes/models.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -4
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +179 -0
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/routes/tui.d.ts +3 -0
- package/dist/src/gateway/hono/routes/tui.js +16 -0
- package/dist/src/gateway/hono/routes/tui.js.map +1 -0
- package/dist/src/gateway/hono/routes/workflows.js +25 -1
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/sse.d.ts +5 -7
- package/dist/src/gateway/hono/sse.js +21 -38
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/protocol.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -4
- package/dist/src/gateway/service/agent-runner.js +1 -1
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +4 -3
- package/dist/src/gateway/service/marketplace-service.js +7 -4
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -6
- package/dist/src/gateway/service/run-gateway-agent.js +63 -36
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service/sessions-api.d.ts +19 -0
- package/dist/src/gateway/service/sessions-api.js +12 -0
- package/dist/src/gateway/service/sessions-api.js.map +1 -1
- package/dist/src/gateway/service.d.ts +6 -0
- package/dist/src/gateway/service.js +73 -57
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/media/store.js +3 -0
- package/dist/src/media/store.js.map +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/project-trust/trust-store.d.ts +30 -0
- package/dist/src/project-trust/trust-store.js +194 -0
- package/dist/src/project-trust/trust-store.js.map +1 -0
- package/dist/src/providers/index.d.ts +4 -4
- package/dist/src/providers/index.js +41 -22
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/presentation.d.ts +34 -0
- package/dist/src/providers/presentation.js +162 -0
- package/dist/src/providers/presentation.js.map +1 -0
- package/dist/src/routing/resolve-route.d.ts +0 -3
- package/dist/src/routing/resolve-route.js.map +1 -1
- package/dist/src/routing/resolve-tui-session-key.d.ts +2 -0
- package/dist/src/routing/resolve-tui-session-key.js +8 -3
- package/dist/src/routing/resolve-tui-session-key.js.map +1 -1
- package/dist/src/session/client-history.d.ts +32 -0
- package/dist/src/session/client-history.js +232 -1
- package/dist/src/session/client-history.js.map +1 -1
- package/dist/src/session/manager.d.ts +37 -4
- package/dist/src/session/manager.js +39 -15
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/session-context-for-llm.d.ts +93 -1
- package/dist/src/session/session-context-for-llm.js +105 -2
- package/dist/src/session/session-context-for-llm.js.map +1 -1
- package/dist/src/session/store.d.ts +37 -0
- package/dist/src/session/store.js +127 -2
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/stored-rows-to-file-entries.js +37 -1
- package/dist/src/session/stored-rows-to-file-entries.js.map +1 -1
- package/dist/src/session/types.d.ts +14 -1
- package/dist/src/session/types.js.map +1 -1
- package/dist/src/share/share-thumbnail.js +1 -1
- package/dist/src/storage/sqlite/migrations/004_add_session_type_metadata.sql +15 -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.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.d.ts +14 -1
- package/dist/src/storage/sqlite/row-mappers.js +14 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/session-metadata.js +1 -0
- package/dist/src/storage/sqlite/session-metadata.js.map +1 -1
- package/dist/src/storage/sqlite/session-repository.js +52 -25
- package/dist/src/storage/sqlite/session-repository.js.map +1 -1
- package/dist/src/tui/backends/embedded-backend.d.ts +53 -4
- package/dist/src/tui/backends/embedded-backend.js +227 -39
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.d.ts +59 -3
- package/dist/src/tui/backends/gateway-sse-backend.js +416 -26
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/chat-history.d.ts +5 -1
- package/dist/src/tui/chat-history.js +78 -8
- package/dist/src/tui/chat-history.js.map +1 -1
- package/dist/src/tui/clipboard-text.d.ts +5 -0
- package/dist/src/tui/clipboard-text.js +46 -0
- package/dist/src/tui/clipboard-text.js.map +1 -0
- package/dist/src/tui/components/assistant-message.d.ts +19 -3
- package/dist/src/tui/components/assistant-message.js +115 -9
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/components/bash-execution.d.ts +3 -2
- package/dist/src/tui/components/bash-execution.js +31 -3
- package/dist/src/tui/components/bash-execution.js.map +1 -1
- package/dist/src/tui/components/bash-summary.d.ts +23 -0
- package/dist/src/tui/components/bash-summary.js +87 -0
- package/dist/src/tui/components/bash-summary.js.map +1 -0
- package/dist/src/tui/components/branch-message-summary.d.ts +17 -0
- package/dist/src/tui/components/branch-message-summary.js +43 -0
- package/dist/src/tui/components/branch-message-summary.js.map +1 -0
- package/dist/src/tui/components/branch-summary.d.ts +13 -0
- package/dist/src/tui/components/branch-summary.js +51 -0
- package/dist/src/tui/components/branch-summary.js.map +1 -0
- package/dist/src/tui/components/chat-log.d.ts +46 -6
- package/dist/src/tui/components/chat-log.js +183 -21
- package/dist/src/tui/components/chat-log.js.map +1 -1
- package/dist/src/tui/components/compaction-summary.d.ts +13 -0
- package/dist/src/tui/components/compaction-summary.js +46 -0
- package/dist/src/tui/components/compaction-summary.js.map +1 -0
- package/dist/src/tui/components/custom-editor.d.ts +1 -0
- package/dist/src/tui/components/custom-editor.js +2 -0
- package/dist/src/tui/components/custom-editor.js.map +1 -1
- package/dist/src/tui/components/custom-message.d.ts +23 -0
- package/dist/src/tui/components/custom-message.js +65 -0
- package/dist/src/tui/components/custom-message.js.map +1 -0
- package/dist/src/tui/components/extension-dialog.d.ts +42 -0
- package/dist/src/tui/components/extension-dialog.js +127 -0
- package/dist/src/tui/components/extension-dialog.js.map +1 -0
- package/dist/src/tui/components/scoped-models-selector.d.ts +7 -2
- package/dist/src/tui/components/scoped-models-selector.js +89 -16
- package/dist/src/tui/components/scoped-models-selector.js.map +1 -1
- package/dist/src/tui/components/searchable-select-list.d.ts +30 -3
- package/dist/src/tui/components/searchable-select-list.js +82 -10
- package/dist/src/tui/components/searchable-select-list.js.map +1 -1
- package/dist/src/tui/components/session-selector.d.ts +18 -4
- package/dist/src/tui/components/session-selector.js +207 -40
- package/dist/src/tui/components/session-selector.js.map +1 -1
- package/dist/src/tui/components/settings-selector.d.ts +6 -2
- package/dist/src/tui/components/settings-selector.js +126 -7
- package/dist/src/tui/components/settings-selector.js.map +1 -1
- package/dist/src/tui/components/thinking-selector.d.ts +12 -0
- package/dist/src/tui/components/thinking-selector.js +48 -0
- package/dist/src/tui/components/thinking-selector.js.map +1 -0
- package/dist/src/tui/components/tool-execution.d.ts +57 -3
- package/dist/src/tui/components/tool-execution.js +378 -28
- package/dist/src/tui/components/tool-execution.js.map +1 -1
- package/dist/src/tui/components/tui-bottom-bar.d.ts +9 -1
- package/dist/src/tui/components/tui-bottom-bar.js +56 -11
- package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
- package/dist/src/tui/components/tui-header.d.ts +9 -2
- package/dist/src/tui/components/tui-header.js +25 -5
- package/dist/src/tui/components/tui-header.js.map +1 -1
- package/dist/src/tui/components/user-message.d.ts +4 -2
- package/dist/src/tui/components/user-message.js +42 -9
- package/dist/src/tui/components/user-message.js.map +1 -1
- package/dist/src/tui/components/visual-truncate.d.ts +11 -0
- package/dist/src/tui/components/visual-truncate.js +27 -0
- package/dist/src/tui/components/visual-truncate.js.map +1 -0
- package/dist/src/tui/extension-host/autocomplete.d.ts +43 -0
- package/dist/src/tui/extension-host/autocomplete.js +116 -0
- package/dist/src/tui/extension-host/autocomplete.js.map +1 -0
- package/dist/src/tui/extension-host/host.d.ts +31 -1
- package/dist/src/tui/extension-host/host.js +123 -6
- package/dist/src/tui/extension-host/host.js.map +1 -1
- package/dist/src/tui/extension-host/load-extensions.d.ts +6 -1
- package/dist/src/tui/extension-host/load-extensions.js +4 -3
- package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
- package/dist/src/tui/extension-host/runtime-context.d.ts +21 -0
- package/dist/src/tui/extension-host/runtime-context.js +152 -0
- package/dist/src/tui/extension-host/runtime-context.js.map +1 -0
- package/dist/src/tui/extension-host/runtime.d.ts +52 -4
- package/dist/src/tui/extension-host/runtime.js +547 -85
- package/dist/src/tui/extension-host/runtime.js.map +1 -1
- package/dist/src/tui/extension-host/surface.d.ts +20 -0
- package/dist/src/tui/extension-host/surface.js +30 -6
- package/dist/src/tui/extension-host/surface.js.map +1 -1
- package/dist/src/tui/extension-host/tool-renderers.d.ts +6 -3
- package/dist/src/tui/extension-host/tool-renderers.js +43 -5
- package/dist/src/tui/extension-host/tool-renderers.js.map +1 -1
- package/dist/src/tui/format-tui-hotkeys.d.ts +12 -2
- package/dist/src/tui/format-tui-hotkeys.js +22 -5
- package/dist/src/tui/format-tui-hotkeys.js.map +1 -1
- package/dist/src/tui/tui-agent-events.d.ts +8 -6
- package/dist/src/tui/tui-agent-events.js +200 -59
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-backend.d.ts +169 -3
- package/dist/src/tui/tui-command-formatters.d.ts +76 -0
- package/dist/src/tui/tui-command-formatters.js +594 -0
- package/dist/src/tui/tui-command-formatters.js.map +1 -0
- package/dist/src/tui/tui-commands.d.ts +57 -7
- package/dist/src/tui/tui-commands.js +639 -43
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui-context-usage.d.ts +1 -1
- package/dist/src/tui/tui-context-usage.js +9 -1
- package/dist/src/tui/tui-context-usage.js.map +1 -1
- package/dist/src/tui/tui-extension-user-message.d.ts +8 -0
- package/dist/src/tui/tui-extension-user-message.js +32 -0
- package/dist/src/tui/tui-extension-user-message.js.map +1 -0
- package/dist/src/tui/tui-follow-up-queue.d.ts +9 -0
- package/dist/src/tui/tui-follow-up-queue.js +18 -0
- package/dist/src/tui/tui-follow-up-queue.js.map +1 -0
- package/dist/src/tui/tui-local-shell.d.ts +11 -1
- package/dist/src/tui/tui-local-shell.js +50 -8
- package/dist/src/tui/tui-local-shell.js.map +1 -1
- package/dist/src/tui/tui-model-picker.d.ts +26 -0
- package/dist/src/tui/tui-model-picker.js +152 -0
- package/dist/src/tui/tui-model-picker.js.map +1 -0
- package/dist/src/tui/tui-oauth-login.d.ts +16 -0
- package/dist/src/tui/tui-oauth-login.js +189 -0
- package/dist/src/tui/tui-oauth-login.js.map +1 -0
- package/dist/src/tui/tui-overlays.d.ts +3 -3
- package/dist/src/tui/tui-overlays.js +6 -7
- package/dist/src/tui/tui-overlays.js.map +1 -1
- package/dist/src/tui/tui-picker-overlay.d.ts +27 -32
- package/dist/src/tui/tui-picker-overlay.js +340 -30
- package/dist/src/tui/tui-picker-overlay.js.map +1 -1
- package/dist/src/tui/tui-picker-services.d.ts +41 -0
- package/dist/src/tui/tui-picker-services.js +1 -0
- package/dist/src/tui/tui-run-state.d.ts +11 -0
- package/dist/src/tui/tui-run-state.js +114 -0
- package/dist/src/tui/tui-run-state.js.map +1 -0
- package/dist/src/tui/tui-runtime-hints.d.ts +4 -0
- package/dist/src/tui/tui-runtime-hints.js +18 -0
- package/dist/src/tui/tui-runtime-hints.js.map +1 -0
- package/dist/src/tui/tui-scoped-models.d.ts +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-scoped-models.js.map +1 -1
- package/dist/src/tui/tui-session-actions.d.ts +5 -3
- package/dist/src/tui/tui-session-actions.js +21 -9
- package/dist/src/tui/tui-session-actions.js.map +1 -1
- package/dist/src/tui/tui-session-format.d.ts +4 -1
- package/dist/src/tui/tui-session-format.js +17 -3
- package/dist/src/tui/tui-session-format.js.map +1 -1
- package/dist/src/tui/tui-session-snapshot.d.ts +82 -0
- package/dist/src/tui/tui-session-snapshot.js +184 -0
- package/dist/src/tui/tui-session-snapshot.js.map +1 -0
- package/dist/src/tui/tui-session-stats.d.ts +3 -0
- package/dist/src/tui/tui-session-stats.js +59 -0
- package/dist/src/tui/tui-session-stats.js.map +1 -0
- package/dist/src/tui/tui-settings.d.ts +21 -0
- package/dist/src/tui/tui-settings.js +28 -1
- package/dist/src/tui/tui-settings.js.map +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js.map +1 -1
- package/dist/src/tui/tui-startup-resources.d.ts +3 -0
- package/dist/src/tui/tui-startup-resources.js +39 -0
- package/dist/src/tui/tui-startup-resources.js.map +1 -0
- package/dist/src/tui/tui-startup-text.d.ts +10 -0
- package/dist/src/tui/tui-startup-text.js +58 -0
- package/dist/src/tui/tui-startup-text.js.map +1 -0
- package/dist/src/tui/tui-stdio-filter.d.ts +1 -0
- package/dist/src/tui/tui-stdio-filter.js +11 -7
- package/dist/src/tui/tui-stdio-filter.js.map +1 -1
- package/dist/src/tui/tui-submit.d.ts +2 -0
- package/dist/src/tui/tui-submit.js +2 -1
- package/dist/src/tui/tui-submit.js.map +1 -1
- package/dist/src/tui/tui-tool-diff.js +61 -7
- package/dist/src/tui/tui-tool-diff.js.map +1 -1
- package/dist/src/tui/tui-tool-result.d.ts +17 -0
- package/dist/src/tui/tui-tool-result.js +74 -0
- package/dist/src/tui/tui-tool-result.js.map +1 -0
- package/dist/src/tui/tui-transcript-tree-picker.d.ts +57 -0
- package/dist/src/tui/tui-transcript-tree-picker.js +604 -0
- package/dist/src/tui/tui-transcript-tree-picker.js.map +1 -0
- package/dist/src/tui/tui-transcript-tree.d.ts +7 -0
- package/dist/src/tui/tui-transcript-tree.js +316 -0
- package/dist/src/tui/tui-transcript-tree.js.map +1 -0
- package/dist/src/tui/tui-types.d.ts +25 -34
- package/dist/src/tui/tui-types.js +12 -0
- package/dist/src/tui/tui-types.js.map +1 -1
- package/dist/src/tui/tui.js +1288 -112
- package/dist/src/tui/tui.js.map +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +127 -2
- package/dist/src/tui/xopc-tui-keybindings.js +127 -2
- package/dist/src/tui/xopc-tui-keybindings.js.map +1 -1
- package/dist/src/workflows/domain/definition-utils.d.ts +2 -1
- package/dist/src/workflows/domain/definition-utils.js +18 -8
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +25 -0
- package/dist/src/workflows/domain/event.d.ts +1 -0
- package/dist/src/workflows/domain/result.d.ts +15 -0
- package/dist/src/workflows/domain/run.d.ts +2 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/engine/projector.js +4 -0
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +37 -1
- package/dist/src/workflows/engine/workflow-engine.js +75 -11
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.d.ts +1 -0
- package/dist/src/workflows/index.js +4 -1
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.d.ts +9 -0
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +40 -0
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -0
- package/dist/src/workflows/registry/index.d.ts +2 -0
- package/dist/src/workflows/registry/index.js +2 -0
- package/dist/src/workflows/registry/workflow-definition-registry.d.ts +15 -0
- package/dist/src/workflows/registry/workflow-definition-registry.js +1 -0
- package/dist/src/workflows/runtime/index.d.ts +2 -0
- package/dist/src/workflows/runtime/index.js +2 -1
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +5 -0
- package/dist/src/workflows/runtime/script-workflow-runtime.js +15 -0
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +16 -0
- package/dist/src/workflows/runtime/workflow-runtime-port.js +1 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js +3 -0
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +3 -0
- package/dist/src/workflows/service/workflow-run-service.js +10 -15
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.d.ts +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +4 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/package.json +21 -15
- package/skills/creative/frontend-design/SKILL.md +1 -1
- package/skills/creative/theme-factory/SKILL.md +1 -1
- package/skills/documents/xlsx/SKILL.md +1 -1
- package/skills/engineering/diagnose/SKILL.md +2 -2
- package/skills/engineering/tdd/SKILL.md +1 -1
- package/skills/tools/github/SKILL.md +6 -1
- package/skills/tools/webapp-testing/SKILL.md +4 -1
- package/dist/extensions/telegram/src/adapters/config-surface.d.ts +0 -2
- package/dist/extensions/telegram/src/adapters/config-surface.js +0 -26
- package/dist/extensions/telegram/src/adapters/config-surface.js.map +0 -1
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +0 -158
- package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +0 -1
- package/dist/gateway/static/root/assets/agents-DQ0mQxIA.js +0 -222
- package/dist/gateway/static/root/assets/channels-settings-BEtP53V6.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CxTtS1hI.js +0 -8
- package/dist/gateway/static/root/assets/cron-api-CznlPIZT.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-Dx6dE3eD.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-DuDCSb3J.js +0 -1
- package/dist/gateway/static/root/assets/field-primitives-BUwUiDf5.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-BjFW1cl-.js +0 -1
- package/dist/gateway/static/root/assets/index-DKgHC1Ta.js +0 -4840
- package/dist/gateway/static/root/assets/index-DjNDHzwG.css +0 -1
- package/dist/gateway/static/root/assets/notes-page-D40ZpS0Y.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BvtdbmW8.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BQamRjkV.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-D972_jaS.js +0 -3
- package/dist/gateway/static/root/assets/share-preview-page-CKCTMo0_.js +0 -2
- package/dist/gateway/static/root/assets/skills-page-QwFCB4yV.js +0 -2
- package/dist/gateway/static/root/assets/url-q28QhI7l.js +0 -3
- package/dist/gateway/static/root/assets/utils-DCm11_KW.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-CywiB7Dw.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-Be7l_SWw.js +0 -27
- package/dist/src/agent/embedded/map-stream-events.d.ts +0 -9
- package/dist/src/agent/embedded/map-stream-events.js +0 -63
- package/dist/src/agent/embedded/map-stream-events.js.map +0 -1
- package/dist/src/auth/oauth/vendor-pi-google/google-antigravity.js.map +0 -1
- package/dist/src/auth/oauth/vendor-pi-google/google-gemini-cli.js.map +0 -1
- package/dist/src/auth/oauth/vendor-pi-google/oauth-page.js.map +0 -1
- package/dist/src/auth/oauth/vendor-pi-google/pkce.js.map +0 -1
- package/dist/src/channels/dock.js.map +0 -1
- package/dist/src/channels/plugins/bundled.d.ts +0 -11
- package/dist/src/channels/plugins/bundled.js +0 -10
- package/dist/src/channels/plugins/bundled.js.map +0 -1
- package/dist/src/channels/registry.d.ts +0 -25
- package/dist/src/channels/registry.js +0 -82
- package/dist/src/channels/registry.js.map +0 -1
- package/dist/src/config/localized-text.d.ts +0 -6
- package/dist/src/config/localized-text.js +0 -42
- package/dist/src/config/localized-text.js.map +0 -1
- package/dist/src/generated/bundled-channel-plugins.d.ts +0 -10
- package/dist/src/generated/bundled-channel-plugins.js +0 -16
- package/dist/src/generated/bundled-channel-plugins.js.map +0 -1
- package/dist/src/tui/stream-assembler.d.ts +0 -22
- package/dist/src/tui/stream-assembler.js +0 -63
- package/dist/src/tui/stream-assembler.js.map +0 -1
- package/skills/browser/SKILL-zh.md +0 -188
- package/skills/business/company-values/SKILL-zh.md +0 -80
- package/skills/business/company-values/SKILL.md +0 -80
- package/skills/business/find-community/SKILL-zh.md +0 -50
- package/skills/business/find-community/SKILL.md +0 -50
- package/skills/business/first-customers/SKILL-zh.md +0 -76
- package/skills/business/first-customers/SKILL.md +0 -76
- package/skills/business/grow-sustainably/SKILL-zh.md +0 -92
- package/skills/business/grow-sustainably/SKILL.md +0 -92
- package/skills/business/marketing-plan/SKILL-zh.md +0 -100
- package/skills/business/marketing-plan/SKILL.md +0 -100
- package/skills/business/minimalist-review/SKILL-zh.md +0 -82
- package/skills/business/minimalist-review/SKILL.md +0 -82
- package/skills/business/mvp/SKILL-zh.md +0 -81
- package/skills/business/mvp/SKILL.md +0 -81
- package/skills/business/pricing/SKILL-zh.md +0 -64
- package/skills/business/pricing/SKILL.md +0 -64
- package/skills/business/processize/SKILL-zh.md +0 -91
- package/skills/business/processize/SKILL.md +0 -91
- package/skills/business/validate-idea/SKILL-zh.md +0 -68
- package/skills/business/validate-idea/SKILL.md +0 -68
- package/skills/creative/algorithmic-art/LICENSE.txt +0 -202
- package/skills/creative/algorithmic-art/SKILL-zh.md +0 -405
- package/skills/creative/algorithmic-art/SKILL.md +0 -405
- package/skills/creative/algorithmic-art/templates/generator_template.js +0 -223
- package/skills/creative/algorithmic-art/templates/viewer.html +0 -599
- package/skills/creative/frontend-design/SKILL-zh.md +0 -42
- package/skills/creative/theme-factory/SKILL-zh.md +0 -59
- package/skills/creative/web-artifacts-builder/LICENSE.txt +0 -202
- package/skills/creative/web-artifacts-builder/SKILL-zh.md +0 -74
- package/skills/creative/web-artifacts-builder/SKILL.md +0 -74
- package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
- package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +0 -322
- package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/documents/doc-coauthoring/SKILL-zh.md +0 -375
- package/skills/documents/doc-coauthoring/SKILL.md +0 -375
- package/skills/documents/docx/LICENSE.txt +0 -30
- package/skills/documents/docx/SKILL-zh.md +0 -590
- package/skills/documents/docx/SKILL.md +0 -590
- package/skills/documents/docx/scripts/__init__.py +0 -1
- package/skills/documents/docx/scripts/accept_changes.py +0 -135
- package/skills/documents/docx/scripts/comment.py +0 -318
- package/skills/documents/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/documents/docx/scripts/office/helpers/merge_runs.py +0 -199
- package/skills/documents/docx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/skills/documents/docx/scripts/office/pack.py +0 -159
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/documents/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/documents/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/documents/docx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/documents/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/documents/docx/scripts/office/soffice.py +0 -183
- package/skills/documents/docx/scripts/office/unpack.py +0 -132
- package/skills/documents/docx/scripts/office/validate.py +0 -111
- package/skills/documents/docx/scripts/office/validators/__init__.py +0 -15
- package/skills/documents/docx/scripts/office/validators/base.py +0 -847
- package/skills/documents/docx/scripts/office/validators/docx.py +0 -446
- package/skills/documents/docx/scripts/office/validators/pptx.py +0 -275
- package/skills/documents/docx/scripts/office/validators/redlining.py +0 -247
- package/skills/documents/docx/scripts/templates/comments.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsExtended.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/skills/documents/docx/scripts/templates/commentsIds.xml +0 -3
- package/skills/documents/docx/scripts/templates/people.xml +0 -3
- package/skills/documents/pdf/LICENSE.txt +0 -30
- package/skills/documents/pdf/SKILL-zh.md +0 -314
- package/skills/documents/pdf/SKILL.md +0 -314
- package/skills/documents/pdf/forms.md +0 -294
- package/skills/documents/pdf/reference.md +0 -612
- package/skills/documents/pdf/scripts/check_bounding_boxes.py +0 -65
- package/skills/documents/pdf/scripts/check_fillable_fields.py +0 -11
- package/skills/documents/pdf/scripts/convert_pdf_to_images.py +0 -33
- package/skills/documents/pdf/scripts/create_validation_image.py +0 -37
- package/skills/documents/pdf/scripts/extract_form_field_info.py +0 -122
- package/skills/documents/pdf/scripts/extract_form_structure.py +0 -115
- package/skills/documents/pdf/scripts/fill_fillable_fields.py +0 -98
- package/skills/documents/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
- package/skills/documents/pptx/LICENSE.txt +0 -30
- package/skills/documents/pptx/SKILL-zh.md +0 -232
- package/skills/documents/pptx/SKILL.md +0 -232
- package/skills/documents/pptx/editing.md +0 -205
- package/skills/documents/pptx/pptxgenjs.md +0 -420
- package/skills/documents/pptx/scripts/__init__.py +0 -0
- package/skills/documents/pptx/scripts/add_slide.py +0 -195
- package/skills/documents/pptx/scripts/clean.py +0 -286
- package/skills/documents/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/documents/pptx/scripts/office/helpers/merge_runs.py +0 -199
- package/skills/documents/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
- package/skills/documents/pptx/scripts/office/pack.py +0 -159
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/skills/documents/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/skills/documents/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/skills/documents/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/skills/documents/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/skills/documents/pptx/scripts/office/soffice.py +0 -183
- package/skills/documents/pptx/scripts/office/unpack.py +0 -132
- package/skills/documents/pptx/scripts/office/validate.py +0 -111
- package/skills/documents/pptx/scripts/office/validators/__init__.py +0 -15
- package/skills/documents/pptx/scripts/office/validators/base.py +0 -847
- package/skills/documents/pptx/scripts/office/validators/docx.py +0 -446
- package/skills/documents/pptx/scripts/office/validators/pptx.py +0 -275
- package/skills/documents/pptx/scripts/office/validators/redlining.py +0 -247
- package/skills/documents/pptx/scripts/thumbnail.py +0 -289
- package/skills/documents/xlsx/SKILL-zh.md +0 -292
- package/skills/engineering/diagnose/SKILL-zh.md +0 -117
- package/skills/engineering/grill-with-docs/ADR-FORMAT.md +0 -47
- package/skills/engineering/grill-with-docs/CONTEXT-FORMAT.md +0 -77
- package/skills/engineering/grill-with-docs/SKILL-zh.md +0 -88
- package/skills/engineering/grill-with-docs/SKILL.md +0 -88
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +0 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +0 -53
- package/skills/engineering/improve-codebase-architecture/SKILL-zh.md +0 -71
- package/skills/engineering/improve-codebase-architecture/SKILL.md +0 -71
- package/skills/engineering/tdd/SKILL-zh.md +0 -109
- package/skills/engineering/to-issues/SKILL-zh.md +0 -81
- package/skills/engineering/to-issues/SKILL.md +0 -81
- package/skills/engineering/to-prd/SKILL-zh.md +0 -76
- package/skills/engineering/to-prd/SKILL.md +0 -74
- package/skills/engineering/zoom-out/SKILL-zh.md +0 -7
- package/skills/engineering/zoom-out/SKILL.md +0 -7
- package/skills/tools/find-skills/SKILL-zh.md +0 -440
- package/skills/tools/github/SKILL-zh.md +0 -48
- package/skills/tools/internal-comms/LICENSE.txt +0 -202
- package/skills/tools/internal-comms/SKILL-zh.md +0 -32
- package/skills/tools/internal-comms/SKILL.md +0 -32
- package/skills/tools/internal-comms/examples/3p-updates.md +0 -47
- package/skills/tools/internal-comms/examples/company-newsletter.md +0 -65
- package/skills/tools/internal-comms/examples/faq-answers.md +0 -30
- package/skills/tools/internal-comms/examples/general-comms.md +0 -16
- package/skills/tools/skill-creator/LICENSE.txt +0 -202
- package/skills/tools/skill-creator/SKILL-zh.md +0 -483
- package/skills/tools/skill-creator/SKILL.md +0 -485
- package/skills/tools/skill-creator/agents/analyzer.md +0 -274
- package/skills/tools/skill-creator/agents/comparator.md +0 -202
- package/skills/tools/skill-creator/agents/grader.md +0 -223
- package/skills/tools/skill-creator/assets/eval_review.html +0 -146
- package/skills/tools/skill-creator/eval-viewer/generate_review.py +0 -471
- package/skills/tools/skill-creator/eval-viewer/viewer.html +0 -1325
- package/skills/tools/skill-creator/references/schemas.md +0 -430
- package/skills/tools/skill-creator/scripts/__init__.py +0 -0
- package/skills/tools/skill-creator/scripts/aggregate_benchmark.py +0 -401
- package/skills/tools/skill-creator/scripts/generate_report.py +0 -326
- package/skills/tools/skill-creator/scripts/improve_description.py +0 -247
- package/skills/tools/skill-creator/scripts/package_skill.py +0 -136
- package/skills/tools/skill-creator/scripts/quick_validate.py +0 -103
- package/skills/tools/skill-creator/scripts/run_eval.py +0 -310
- package/skills/tools/skill-creator/scripts/run_loop.py +0 -328
- package/skills/tools/skill-creator/scripts/utils.py +0 -47
- package/skills/tools/summarize/SKILL-zh.md +0 -47
- package/skills/tools/weather/SKILL-zh.md +0 -46
- package/skills/tools/weather/SKILL.md +0 -46
- package/skills/tools/webapp-testing/SKILL-zh.md +0 -96
- /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.d.ts +0 -0
- /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.d.ts +0 -0
- /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.d.ts +0 -0
|
@@ -1,332 +1,166 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { init_loader, loadConfig } from "../../config/loader.js";
|
|
3
|
-
import {
|
|
1
|
+
import { buildChannelCatalogForConfig, init_channel_catalog_service } from "../../channels/catalog/channel-catalog-service.js";
|
|
2
|
+
import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
|
|
3
|
+
import { listChannelPairingState } from "../../channels/pairing/pairing-service.js";
|
|
4
4
|
import { approveChannelPairingFromCli } from "../../channels/pairing/approve-cli.js";
|
|
5
|
-
import { bundledChannelPlugins } from "../../generated/bundled-channel-plugins.js";
|
|
6
5
|
import { formatExamples, register } from "../registry.js";
|
|
7
6
|
import { colors } from "../utils/colors.js";
|
|
8
|
-
import { SETUP_EXIT } from "./setup-shared/types.js";
|
|
9
|
-
import { emitOutcome } from "./setup-shared/output.js";
|
|
10
|
-
import { isPromptCancelled, promptSecret } from "./setup-shared/prompts.js";
|
|
11
|
-
import { SetupValidationError, runSetup } from "./setup-shared/runner.js";
|
|
12
|
-
import "./setup-shared/index.js";
|
|
13
7
|
import { Command } from "commander";
|
|
14
8
|
//#region src/cli/commands/channels.ts
|
|
15
|
-
|
|
9
|
+
init_channel_catalog_service();
|
|
16
10
|
init_loader();
|
|
17
|
-
function
|
|
18
|
-
|
|
11
|
+
function normalizeChannelId(raw) {
|
|
12
|
+
return raw.trim().toLowerCase();
|
|
19
13
|
}
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
function loadCliConfig(ctx) {
|
|
15
|
+
return loadConfig(ctx.configPath);
|
|
16
|
+
}
|
|
17
|
+
async function writeCliConfig(ctx, cfg) {
|
|
18
|
+
await saveConfig(cfg, ctx.configPath);
|
|
19
|
+
}
|
|
20
|
+
function ensureChannelObject(cfg, channelId) {
|
|
21
|
+
if (!cfg.channels) cfg.channels = {};
|
|
22
|
+
const channels = cfg.channels;
|
|
23
|
+
const existing = channels[channelId];
|
|
24
|
+
if (existing && typeof existing === "object" && !Array.isArray(existing)) return existing;
|
|
25
|
+
const next = {};
|
|
26
|
+
channels[channelId] = next;
|
|
27
|
+
return next;
|
|
28
|
+
}
|
|
29
|
+
function assertCatalogChannel(cfg, channelId) {
|
|
30
|
+
if (!buildChannelCatalogForConfig(cfg).byId.has(channelId)) throw new Error(`Unknown channel "${channelId}". Install or declare a channel extension contribution first.`);
|
|
23
31
|
}
|
|
24
32
|
function createChannelsCommand(ctx) {
|
|
25
|
-
const cmd = new Command("channels").description("Messaging channel
|
|
26
|
-
"xopc channels
|
|
27
|
-
"xopc channels
|
|
28
|
-
"xopc channels
|
|
29
|
-
"xopc channels
|
|
30
|
-
"xopc channels pairing approve
|
|
33
|
+
const cmd = new Command("channels").description("Messaging channel configuration").addHelpText("after", formatExamples([
|
|
34
|
+
"xopc channels list",
|
|
35
|
+
"xopc channels show telegram",
|
|
36
|
+
"xopc channels enable telegram",
|
|
37
|
+
"xopc channels config set-json telegram '{\"enabled\":true}'",
|
|
38
|
+
"xopc channels pairing approve telegram ABC12XYZ"
|
|
31
39
|
]));
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (loginCapable.length === 1) {
|
|
45
|
-
channelId = loginCapable[0].id;
|
|
46
|
-
console.log(`Auto-detected channel: ${channelId}`);
|
|
47
|
-
} else if (loginCapable.length === 0) {
|
|
48
|
-
console.error("No channels with login support found.");
|
|
49
|
-
process.exitCode = 1;
|
|
50
|
-
return;
|
|
51
|
-
} else {
|
|
52
|
-
console.error(`Multiple channels support login: ${loginCapable.map((p) => p.id).join(", ")}. Use --channel <id> to specify.`);
|
|
53
|
-
process.exitCode = 1;
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const plugin = getChannelPlugin(channelId);
|
|
58
|
-
if (!plugin?.cliLogin) {
|
|
59
|
-
console.error(`Channel "${channelId}" does not support CLI login.`);
|
|
60
|
-
const capable = listChannelPlugins().filter((p) => p.cliLogin).map((p) => p.id);
|
|
61
|
-
if (capable.length > 0) console.error(`Channels with login support: ${capable.join(", ")}`);
|
|
62
|
-
process.exitCode = 1;
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const configPath = resolveConfigPathFromCommand(command);
|
|
66
|
-
const timeoutMs = Math.max(6e4, Number.parseInt(String(options.timeout), 10) || 48e4);
|
|
67
|
-
const verbose = ctx.isVerbose;
|
|
68
|
-
const result = await plugin.cliLogin.runLogin({
|
|
69
|
-
configPath,
|
|
70
|
-
verbose,
|
|
71
|
-
timeoutMs,
|
|
72
|
-
accountId: options.account?.trim() || void 0,
|
|
73
|
-
writeConfig: !options.credentialsOnly
|
|
74
|
-
});
|
|
75
|
-
if (!result.ok) {
|
|
76
|
-
if (result.cancelled) {
|
|
77
|
-
process.exitCode = 130;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
console.error(result.message || "Login failed");
|
|
81
|
-
process.exitCode = 1;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
cmd.command("list").description("List configured channels and their account status").option("--json", "Output as JSON for agents/UIs", false).action((opts) => {
|
|
85
|
-
ensureChannelRegistryForCli();
|
|
86
|
-
const channelsCfg = loadConfig(resolveConfigPathFromCommand(cmd)).channels ?? {};
|
|
87
|
-
const entries = listChannelPlugins().map((plugin) => {
|
|
88
|
-
const raw = channelsCfg[plugin.id] ?? {};
|
|
89
|
-
const enabled = raw.enabled === true;
|
|
90
|
-
const accounts = raw.accounts ?? {};
|
|
91
|
-
const accountSummaries = Object.entries(accounts).map(([id, acct]) => ({
|
|
92
|
-
accountId: id,
|
|
93
|
-
enabled: acct.enabled !== false,
|
|
94
|
-
configured: typeof acct.botToken === "string" ? Boolean(acct.botToken.trim()) : false
|
|
95
|
-
}));
|
|
96
|
-
return {
|
|
97
|
-
id: plugin.id,
|
|
98
|
-
name: plugin.meta?.label ?? plugin.id,
|
|
99
|
-
enabled,
|
|
100
|
-
hasLogin: Boolean(plugin.cliLogin),
|
|
101
|
-
accountCount: accountSummaries.length,
|
|
102
|
-
accounts: accountSummaries
|
|
103
|
-
};
|
|
104
|
-
});
|
|
40
|
+
cmd.command("list").description("List channel extension contributions").option("--json", "Output as JSON", false).action((opts) => {
|
|
41
|
+
const cfg = loadCliConfig(ctx);
|
|
42
|
+
const catalog = buildChannelCatalogForConfig(cfg);
|
|
43
|
+
const channels = cfg.channels;
|
|
44
|
+
const rows = catalog.entries.map((entry) => ({
|
|
45
|
+
id: entry.id,
|
|
46
|
+
label: entry.label,
|
|
47
|
+
extensionId: entry.extensionId,
|
|
48
|
+
source: entry.source,
|
|
49
|
+
enabled: channels?.[entry.id]?.enabled === true,
|
|
50
|
+
configured: Boolean(channels?.[entry.id])
|
|
51
|
+
}));
|
|
105
52
|
if (opts.json) {
|
|
106
|
-
process.stdout.write(JSON.stringify({
|
|
53
|
+
process.stdout.write(`${JSON.stringify({
|
|
107
54
|
ok: true,
|
|
108
|
-
channels:
|
|
109
|
-
})
|
|
55
|
+
channels: rows
|
|
56
|
+
})}\n`);
|
|
110
57
|
return;
|
|
111
58
|
}
|
|
112
59
|
console.log("");
|
|
113
60
|
console.log(colors.bold("CHANNELS"));
|
|
114
|
-
const idWidth = Math.max(...
|
|
115
|
-
for (const
|
|
116
|
-
const status =
|
|
117
|
-
|
|
118
|
-
console.log(` ${e.id.padEnd(idWidth)} ${status} ${colors.gray(e.name)}${accts}`);
|
|
61
|
+
const idWidth = Math.max(2, ...rows.map((r) => r.id.length));
|
|
62
|
+
for (const row of rows) {
|
|
63
|
+
const status = row.enabled ? colors.green("enabled") : colors.gray("disabled");
|
|
64
|
+
console.log(` ${row.id.padEnd(idWidth)} ${status} ${colors.gray(row.label)} ${colors.gray(row.extensionId)}`);
|
|
119
65
|
}
|
|
120
66
|
console.log("");
|
|
121
|
-
console.log(colors.gray("Use: xopc channels add <id> [--token <token>]"));
|
|
122
67
|
});
|
|
123
|
-
cmd.command("
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
ok: false,
|
|
131
|
-
action: "add",
|
|
132
|
-
domain: `channels.${channelId}`,
|
|
133
|
-
target: accountId,
|
|
134
|
-
changedPaths: [],
|
|
135
|
-
dryRun,
|
|
136
|
-
errors: [{ message: channelId === "weixin" ? "Weixin uses interactive QR login. Run: xopc channels login --channel weixin" : "Feishu add via CLI is not yet implemented. Edit `~/.xopc/xopc.json` (channels.feishu) or run: xopc onboard --channels" }]
|
|
137
|
-
}, json);
|
|
138
|
-
process.exitCode = SETUP_EXIT.ERROR;
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
if (channelId !== "telegram") {
|
|
142
|
-
emitOutcome({
|
|
143
|
-
ok: false,
|
|
144
|
-
action: "add",
|
|
145
|
-
domain: `channels.${channelId}`,
|
|
146
|
-
target: accountId,
|
|
147
|
-
changedPaths: [],
|
|
148
|
-
dryRun,
|
|
149
|
-
errors: [{ message: `Unknown channel "${channelId}". Try: xopc channels list` }]
|
|
150
|
-
}, json);
|
|
151
|
-
process.exitCode = SETUP_EXIT.ERROR;
|
|
68
|
+
cmd.command("show <channel>").description("Show one channel catalog entry and config").option("--json", "Output as JSON", false).action((channel, opts) => {
|
|
69
|
+
const cfg = loadCliConfig(ctx);
|
|
70
|
+
const channelId = normalizeChannelId(channel);
|
|
71
|
+
const entry = buildChannelCatalogForConfig(cfg).byId.get(channelId);
|
|
72
|
+
if (!entry) {
|
|
73
|
+
console.error(`Unknown channel "${channelId}".`);
|
|
74
|
+
process.exitCode = 1;
|
|
152
75
|
return;
|
|
153
76
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
domain: "channels.telegram",
|
|
164
|
-
target: accountId,
|
|
165
|
-
changedPaths: [],
|
|
166
|
-
dryRun,
|
|
167
|
-
errors: [{ message: "Cancelled by user" }]
|
|
168
|
-
}, json);
|
|
169
|
-
process.exitCode = SETUP_EXIT.CANCELLED;
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
throw error;
|
|
173
|
-
}
|
|
174
|
-
if (!validateTelegramToken(token)) {
|
|
175
|
-
emitOutcome({
|
|
176
|
-
ok: false,
|
|
177
|
-
action: "add",
|
|
178
|
-
domain: "channels.telegram",
|
|
179
|
-
target: accountId,
|
|
180
|
-
changedPaths: [],
|
|
181
|
-
dryRun,
|
|
182
|
-
errors: [{
|
|
183
|
-
path: "token",
|
|
184
|
-
message: "Token does not look like a Telegram bot token (expected `<digits>:<35+ chars>`)."
|
|
185
|
-
}]
|
|
186
|
-
}, json);
|
|
187
|
-
process.exitCode = SETUP_EXIT.ERROR;
|
|
77
|
+
const payload = {
|
|
78
|
+
entry,
|
|
79
|
+
config: cfg.channels?.[channelId] ?? {}
|
|
80
|
+
};
|
|
81
|
+
if (opts.json) {
|
|
82
|
+
process.stdout.write(`${JSON.stringify({
|
|
83
|
+
ok: true,
|
|
84
|
+
...payload
|
|
85
|
+
})}\n`);
|
|
188
86
|
return;
|
|
189
87
|
}
|
|
190
|
-
|
|
191
|
-
configPath: resolveConfigPathFromCommand(cmd),
|
|
192
|
-
options: {
|
|
193
|
-
dryRun,
|
|
194
|
-
json
|
|
195
|
-
},
|
|
196
|
-
mutator: {
|
|
197
|
-
domain: "channels.telegram",
|
|
198
|
-
target: accountId,
|
|
199
|
-
action: "add",
|
|
200
|
-
mutate(config) {
|
|
201
|
-
return applyTelegramAccount(config, accountId, token, opts.enable !== false);
|
|
202
|
-
},
|
|
203
|
-
resultValue: () => ({
|
|
204
|
-
channel: "telegram",
|
|
205
|
-
accountId,
|
|
206
|
-
tokenMask: maskToken(token)
|
|
207
|
-
}),
|
|
208
|
-
notes: () => [opts.enable !== false ? "Telegram channel enabled. Restart the gateway for the new bot to come online." : "Telegram credentials saved (channel disabled). Use `--enable` to start it."]
|
|
209
|
-
}
|
|
210
|
-
});
|
|
88
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
211
89
|
});
|
|
212
|
-
cmd.command("
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
await
|
|
218
|
-
|
|
219
|
-
options: {
|
|
220
|
-
dryRun,
|
|
221
|
-
json
|
|
222
|
-
},
|
|
223
|
-
mutator: {
|
|
224
|
-
domain: `channels.${channelId}`,
|
|
225
|
-
target: accountId,
|
|
226
|
-
action: "remove",
|
|
227
|
-
mutate(config) {
|
|
228
|
-
return removeChannelAccount(config, channelId, accountId);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
});
|
|
90
|
+
cmd.command("enable <channel>").description("Enable a channel config block").action(async (channel) => {
|
|
91
|
+
const cfg = loadCliConfig(ctx);
|
|
92
|
+
const channelId = normalizeChannelId(channel);
|
|
93
|
+
assertCatalogChannel(cfg, channelId);
|
|
94
|
+
ensureChannelObject(cfg, channelId).enabled = true;
|
|
95
|
+
await writeCliConfig(ctx, cfg);
|
|
96
|
+
console.log(`Enabled channel ${channelId}`);
|
|
232
97
|
});
|
|
233
|
-
cmd.command("
|
|
234
|
-
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}));
|
|
241
|
-
const payload = {
|
|
242
|
-
ok: true,
|
|
243
|
-
channels: channel ? all.filter((c) => c.id === channel) : all
|
|
244
|
-
};
|
|
245
|
-
if (opts.json) process.stdout.write(JSON.stringify(payload) + "\n");
|
|
246
|
-
else console.log(JSON.stringify(payload, null, 2));
|
|
98
|
+
cmd.command("disable <channel>").description("Disable a channel config block").action(async (channel) => {
|
|
99
|
+
const cfg = loadCliConfig(ctx);
|
|
100
|
+
const channelId = normalizeChannelId(channel);
|
|
101
|
+
assertCatalogChannel(cfg, channelId);
|
|
102
|
+
ensureChannelObject(cfg, channelId).enabled = false;
|
|
103
|
+
await writeCliConfig(ctx, cfg);
|
|
104
|
+
console.log(`Disabled channel ${channelId}`);
|
|
247
105
|
});
|
|
248
|
-
cmd.command("
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
106
|
+
cmd.command("config").description("Edit channel config").command("set-json <channel> <json>").description("Merge a JSON object into channels.<id>").action(async (channel, json) => {
|
|
107
|
+
const cfg = loadCliConfig(ctx);
|
|
108
|
+
const channelId = normalizeChannelId(channel);
|
|
109
|
+
assertCatalogChannel(cfg, channelId);
|
|
110
|
+
const patch = JSON.parse(json);
|
|
111
|
+
if (!patch || typeof patch !== "object" || Array.isArray(patch)) throw new Error("JSON value must be an object");
|
|
112
|
+
Object.assign(ensureChannelObject(cfg, channelId), patch);
|
|
113
|
+
await writeCliConfig(ctx, cfg);
|
|
114
|
+
console.log(`Updated channels.${channelId}`);
|
|
115
|
+
});
|
|
116
|
+
const pairing = cmd.command("pairing").description("Manage channel pairing state");
|
|
117
|
+
pairing.command("list <channel>").option("--account <id>", "Account id", "default").option("--json", "Output as JSON", false).action((channel, opts) => {
|
|
118
|
+
const cfg = loadCliConfig(ctx);
|
|
119
|
+
const state = listChannelPairingState({
|
|
120
|
+
channel: normalizeChannelId(channel),
|
|
121
|
+
accountId: opts.account,
|
|
122
|
+
config: cfg
|
|
123
|
+
});
|
|
124
|
+
if (opts.json) {
|
|
125
|
+
process.stdout.write(`${JSON.stringify({
|
|
126
|
+
ok: true,
|
|
127
|
+
state
|
|
128
|
+
})}\n`);
|
|
253
129
|
return;
|
|
254
130
|
}
|
|
131
|
+
console.log(JSON.stringify(state, null, 2));
|
|
132
|
+
});
|
|
133
|
+
pairing.command("approve <channel> <code>").option("--account <id>", "Account id", "default").action((channel, code, opts) => {
|
|
255
134
|
const result = approveChannelPairingFromCli({
|
|
256
|
-
channel:
|
|
257
|
-
accountId:
|
|
258
|
-
code
|
|
135
|
+
channel: normalizeChannelId(channel),
|
|
136
|
+
accountId: opts.account ?? "default",
|
|
137
|
+
code
|
|
259
138
|
});
|
|
260
139
|
if (result.ok === false) {
|
|
261
140
|
console.error(result.error);
|
|
262
141
|
process.exitCode = 1;
|
|
263
142
|
return;
|
|
264
143
|
}
|
|
265
|
-
console.log(`Approved
|
|
266
|
-
})
|
|
144
|
+
console.log(`Approved sender ${result.senderId}`);
|
|
145
|
+
});
|
|
267
146
|
return cmd;
|
|
268
147
|
}
|
|
269
|
-
const TELEGRAM_TOKEN_PATTERN = /^\d{5,}:[A-Za-z0-9_-]{30,}$/;
|
|
270
|
-
function validateTelegramToken(token) {
|
|
271
|
-
return TELEGRAM_TOKEN_PATTERN.test(token.trim());
|
|
272
|
-
}
|
|
273
|
-
function maskToken(token) {
|
|
274
|
-
const t = token.trim();
|
|
275
|
-
if (t.length <= 8) return "*".repeat(t.length);
|
|
276
|
-
return `${t.slice(0, 4)}…${t.slice(-4)}`;
|
|
277
|
-
}
|
|
278
|
-
function applyTelegramAccount(cfg, accountId, botToken, enable) {
|
|
279
|
-
const channels = { ...cfg.channels ?? {} };
|
|
280
|
-
const tg = { ...channels.telegram ?? {} };
|
|
281
|
-
if (enable) tg.enabled = true;
|
|
282
|
-
const accounts = { ...tg.accounts ?? {} };
|
|
283
|
-
accounts[accountId] = {
|
|
284
|
-
...accounts[accountId] ?? {},
|
|
285
|
-
accountId,
|
|
286
|
-
enabled: true,
|
|
287
|
-
botToken
|
|
288
|
-
};
|
|
289
|
-
tg.accounts = accounts;
|
|
290
|
-
channels.telegram = tg;
|
|
291
|
-
return {
|
|
292
|
-
...cfg,
|
|
293
|
-
channels
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
function removeChannelAccount(cfg, channelId, accountId) {
|
|
297
|
-
if (channelId === "feishu" || channelId === "weixin" || channelId === "telegram") {
|
|
298
|
-
const channels = { ...cfg.channels ?? {} };
|
|
299
|
-
const ch = { ...channels[channelId] ?? {} };
|
|
300
|
-
const accounts = { ...ch.accounts ?? {} };
|
|
301
|
-
if (!(accountId in accounts)) throw new SetupValidationError([{ message: `No account "${accountId}" on channel "${channelId}".` }]);
|
|
302
|
-
delete accounts[accountId];
|
|
303
|
-
ch.accounts = accounts;
|
|
304
|
-
if (Object.keys(accounts).length === 0) ch.enabled = false;
|
|
305
|
-
channels[channelId] = ch;
|
|
306
|
-
return {
|
|
307
|
-
...cfg,
|
|
308
|
-
channels
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
throw new SetupValidationError([{ message: `Unknown channel "${channelId}". Try: xopc channels list` }]);
|
|
312
|
-
}
|
|
313
148
|
register({
|
|
314
149
|
id: "channels",
|
|
315
150
|
name: "channels",
|
|
316
|
-
description: "Messaging channel
|
|
151
|
+
description: "Messaging channel configuration",
|
|
317
152
|
factory: createChannelsCommand,
|
|
318
153
|
metadata: {
|
|
319
154
|
category: "setup",
|
|
320
155
|
examples: [
|
|
321
156
|
"xopc channels list",
|
|
322
|
-
"xopc channels
|
|
323
|
-
"xopc channels
|
|
324
|
-
"xopc channels
|
|
325
|
-
"xopc channels pairing approve --channel feishu --account default ABC12XYZ"
|
|
157
|
+
"xopc channels show telegram",
|
|
158
|
+
"xopc channels enable telegram",
|
|
159
|
+
"xopc channels config set-json telegram '{\"enabled\":true}'"
|
|
326
160
|
]
|
|
327
161
|
}
|
|
328
162
|
});
|
|
329
163
|
//#endregion
|
|
330
|
-
export {
|
|
164
|
+
export {};
|
|
331
165
|
|
|
332
166
|
//# sourceMappingURL=channels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","names":[],"sources":["../../../../src/cli/commands/channels.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { approveChannelPairingFromCli, type PairingCliChannel } from '../../channels/pairing/index.js';\nimport { resolveConfigPath } from '../../config/paths.js';\nimport {\n getChannelPlugin,\n listChannelPlugins,\n syncChannelPluginsFromManager,\n} from '../../channels/plugins/registry.js';\nimport { bundledChannelPlugins } from '../../generated/bundled-channel-plugins.js';\nimport { loadConfig } from '../../config/loader.js';\nimport type { Config } from '../../config/schema.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\n\nimport {\n SETUP_EXIT,\n SetupValidationError,\n emitOutcome,\n isPromptCancelled,\n promptSecret,\n runSetup,\n type SetupOutcome,\n} from './setup-shared/index.js';\n\nfunction ensureChannelRegistryForCli(): void {\n if (listChannelPlugins().length === 0) {\n syncChannelPluginsFromManager(bundledChannelPlugins);\n }\n}\n\nfunction resolveConfigPathFromCommand(command: Command): string {\n const root =\n command.parent?.parent && command.parent.parent instanceof Command\n ? command.parent.parent\n : command.parent && command.parent instanceof Command\n ? command.parent\n : null;\n const globalOpts = (root && typeof root.opts === 'function'\n ? (root.opts() as { config?: string })\n : {}) as { config?: string };\n return (\n globalOpts.config?.trim() ||\n process.env.XOPC_CONFIG_PATH?.trim() ||\n process.env.XOPC_CONFIG?.trim() ||\n resolveConfigPath()\n );\n}\n\nfunction createChannelsCommand(ctx: CLIContext): Command {\n const cmd = new Command('channels')\n .description('Messaging channel login and credentials')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc channels login',\n 'xopc channels login --channel weixin',\n 'xopc channels login --channel feishu',\n 'xopc channels login --account my-bot-id',\n 'xopc channels pairing approve --channel telegram ABC12XYZ',\n ]),\n );\n\n const PAIRING_CHANNELS = new Set<PairingCliChannel>(['telegram', 'feishu', 'weixin']);\n\n cmd\n .command('login')\n .description('Log in with QR code or channel-specific credentials flow')\n .option(\n '--channel <id>',\n 'Channel id (auto-detected when only one login-capable channel is registered)',\n )\n .option('--account <id>', 'Optional account id when re-logging an existing bot')\n .option('--timeout <ms>', 'Max wait for scan (default 480000)', '480000')\n .option('--credentials-only', 'Only save token files; do not update xopc.json')\n .action(async (options, command) => {\n ensureChannelRegistryForCli();\n const explicitChannel = options.channel?.trim?.();\n let channelId: string;\n if (explicitChannel) {\n channelId = explicitChannel;\n } else {\n const loginCapable = listChannelPlugins().filter((p) => p.cliLogin);\n if (loginCapable.length === 1) {\n channelId = loginCapable[0].id;\n console.log(`Auto-detected channel: ${channelId}`);\n } else if (loginCapable.length === 0) {\n console.error('No channels with login support found.');\n process.exitCode = 1;\n return;\n } else {\n console.error(\n `Multiple channels support login: ${loginCapable.map((p) => p.id).join(', ')}. ` +\n 'Use --channel <id> to specify.',\n );\n process.exitCode = 1;\n return;\n }\n }\n const plugin = getChannelPlugin(channelId);\n if (!plugin?.cliLogin) {\n console.error(`Channel \"${channelId}\" does not support CLI login.`);\n const capable = listChannelPlugins()\n .filter((p) => p.cliLogin)\n .map((p) => p.id);\n if (capable.length > 0) {\n console.error(`Channels with login support: ${capable.join(', ')}`);\n }\n process.exitCode = 1;\n return;\n }\n\n const configPath = resolveConfigPathFromCommand(command);\n const timeoutMs = Math.max(60_000, Number.parseInt(String(options.timeout), 10) || 480_000);\n const verbose = ctx.isVerbose;\n\n const result = await plugin.cliLogin.runLogin({\n configPath,\n verbose,\n timeoutMs,\n accountId: options.account?.trim() || undefined,\n writeConfig: !options.credentialsOnly,\n });\n\n if (!result.ok) {\n if (result.cancelled) {\n process.exitCode = 130;\n return;\n }\n console.error(result.message || 'Login failed');\n process.exitCode = 1;\n }\n });\n\n cmd\n .command('list')\n .description('List configured channels and their account status')\n .option('--json', 'Output as JSON for agents/UIs', false)\n .action((opts: { json?: boolean }) => {\n ensureChannelRegistryForCli();\n const cfg = loadConfig(resolveConfigPathFromCommand(cmd));\n const channelsCfg = (cfg.channels ?? {}) as Record<string, Record<string, unknown>>;\n const entries = listChannelPlugins().map((plugin) => {\n const raw = channelsCfg[plugin.id] ?? {};\n const enabled = raw.enabled === true;\n const accounts = (raw.accounts ?? {}) as Record<string, Record<string, unknown>>;\n const accountSummaries = Object.entries(accounts).map(([id, acct]) => ({\n accountId: id,\n enabled: acct.enabled !== false,\n configured: typeof acct.botToken === 'string'\n ? Boolean((acct.botToken as string).trim())\n : false,\n }));\n return {\n id: plugin.id,\n name: plugin.meta?.label ?? plugin.id,\n enabled,\n hasLogin: Boolean(plugin.cliLogin),\n accountCount: accountSummaries.length,\n accounts: accountSummaries,\n };\n });\n if (opts.json) {\n process.stdout.write(JSON.stringify({ ok: true, channels: entries }) + '\\n');\n return;\n }\n console.log('');\n console.log(colors.bold('CHANNELS'));\n const idWidth = Math.max(...entries.map((e) => e.id.length));\n for (const e of entries) {\n const status = e.enabled\n ? colors.green('● enabled')\n : colors.gray('○ disabled');\n const accts = e.accountCount > 0 ? colors.gray(` (${e.accountCount} accounts)`) : '';\n console.log(` ${e.id.padEnd(idWidth)} ${status} ${colors.gray(e.name)}${accts}`);\n }\n console.log('');\n console.log(colors.gray('Use: xopc channels add <id> [--token <token>]'));\n });\n\n cmd\n .command('add <channel>')\n .description('Add or update a channel account (currently: telegram)')\n .option('--token <value>', 'Bot token (Telegram). Prompts securely if omitted.')\n .option('--account <id>', 'Account id (default: \"default\")')\n .option('--enable', 'Enable the channel after writing (default: true)', true)\n .option('--dry-run', 'Show the change without writing', false)\n .option('--json', 'Emit a single JSON outcome line', false)\n .action(\n async (\n channel: string,\n opts: {\n token?: string;\n account?: string;\n enable?: boolean;\n dryRun?: boolean;\n json?: boolean;\n },\n ) => {\n const channelId = channel.trim().toLowerCase();\n const accountId = opts.account?.trim() || 'default';\n const dryRun = Boolean(opts.dryRun);\n const json = Boolean(opts.json);\n\n if (channelId === 'feishu' || channelId === 'weixin') {\n const outcome: SetupOutcome = {\n ok: false,\n action: 'add',\n domain: `channels.${channelId}`,\n target: accountId,\n changedPaths: [],\n dryRun,\n errors: [\n {\n message:\n channelId === 'weixin'\n ? 'Weixin uses interactive QR login. Run: xopc channels login --channel weixin'\n : 'Feishu add via CLI is not yet implemented. Edit `~/.xopc/xopc.json` (channels.feishu) or run: xopc onboard --channels',\n },\n ],\n };\n emitOutcome(outcome, json);\n process.exitCode = SETUP_EXIT.ERROR;\n return;\n }\n\n if (channelId !== 'telegram') {\n const outcome: SetupOutcome = {\n ok: false,\n action: 'add',\n domain: `channels.${channelId}`,\n target: accountId,\n changedPaths: [],\n dryRun,\n errors: [{ message: `Unknown channel \"${channelId}\". Try: xopc channels list` }],\n };\n emitOutcome(outcome, json);\n process.exitCode = SETUP_EXIT.ERROR;\n return;\n }\n\n let token = opts.token?.trim();\n if (!token) {\n token = process.env.TELEGRAM_BOT_TOKEN?.trim();\n }\n if (!token) {\n try {\n token = await promptSecret('Telegram bot token (from @BotFather):');\n } catch (error) {\n if (isPromptCancelled(error)) {\n const outcome: SetupOutcome = {\n ok: false,\n action: 'add',\n domain: 'channels.telegram',\n target: accountId,\n changedPaths: [],\n dryRun,\n errors: [{ message: 'Cancelled by user' }],\n };\n emitOutcome(outcome, json);\n process.exitCode = SETUP_EXIT.CANCELLED;\n return;\n }\n throw error;\n }\n }\n\n if (!validateTelegramToken(token)) {\n const outcome: SetupOutcome = {\n ok: false,\n action: 'add',\n domain: 'channels.telegram',\n target: accountId,\n changedPaths: [],\n dryRun,\n errors: [{ path: 'token', message: 'Token does not look like a Telegram bot token (expected `<digits>:<35+ chars>`).' }],\n };\n emitOutcome(outcome, json);\n process.exitCode = SETUP_EXIT.ERROR;\n return;\n }\n\n await runSetup({\n configPath: resolveConfigPathFromCommand(cmd),\n options: { dryRun, json },\n mutator: {\n domain: 'channels.telegram',\n target: accountId,\n action: 'add',\n mutate(config) {\n return applyTelegramAccount(config, accountId, token!, opts.enable !== false);\n },\n resultValue: () => ({\n channel: 'telegram',\n accountId,\n tokenMask: maskToken(token!),\n }),\n notes: () => [\n opts.enable !== false\n ? 'Telegram channel enabled. Restart the gateway for the new bot to come online.'\n : 'Telegram credentials saved (channel disabled). Use `--enable` to start it.',\n ],\n },\n });\n },\n );\n\n cmd\n .command('remove <channel>')\n .description('Remove a channel account')\n .option('--account <id>', 'Account id (default: \"default\")')\n .option('--dry-run', 'Show the change without writing', false)\n .option('--json', 'Emit a single JSON outcome line', false)\n .action(\n async (\n channel: string,\n opts: { account?: string; dryRun?: boolean; json?: boolean },\n ) => {\n const channelId = channel.trim().toLowerCase();\n const accountId = opts.account?.trim() || 'default';\n const dryRun = Boolean(opts.dryRun);\n const json = Boolean(opts.json);\n\n await runSetup({\n configPath: resolveConfigPathFromCommand(cmd),\n options: { dryRun, json },\n mutator: {\n domain: `channels.${channelId}`,\n target: accountId,\n action: 'remove',\n mutate(config) {\n return removeChannelAccount(config, channelId, accountId);\n },\n },\n });\n },\n );\n\n cmd\n .command('schema [channel]')\n .description('Print credential schemas for channels (for agents / UIs)')\n .option('--json', 'JSON output (default human-readable JSON)', false)\n .action((channel: string | undefined, opts: { json?: boolean }) => {\n ensureChannelRegistryForCli();\n const all = listChannelPlugins().map((p) => ({\n id: p.id,\n name: p.meta?.label ?? p.id,\n hasLogin: Boolean(p.cliLogin),\n configSchema: p.configSchema?.schema,\n }));\n const payload = {\n ok: true,\n channels: channel ? all.filter((c) => c.id === channel) : all,\n };\n if (opts.json) {\n process.stdout.write(JSON.stringify(payload) + '\\n');\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n });\n\n cmd\n .command('pairing')\n .description('Approve DM pairing requests (updates channel allowFrom credential files)')\n .addCommand(\n new Command('approve')\n .description('Approve a pairing code shown to the user in Telegram / Feishu / Weixin DMs')\n .requiredOption('--channel <id>', 'telegram | feishu | weixin')\n .option('--account <id>', 'Bot account id from config', 'default')\n .argument('<code>', 'Pairing code from the user message')\n .action((code: string, options: { channel?: string; account?: string }) => {\n const ch = (options.channel ?? '').trim().toLowerCase() as PairingCliChannel;\n if (!PAIRING_CHANNELS.has(ch)) {\n console.error('Invalid --channel. Use: telegram, feishu, or weixin.');\n process.exitCode = 1;\n return;\n }\n const accountId = (options.account ?? 'default').trim() || 'default';\n const result = approveChannelPairingFromCli({\n channel: ch,\n accountId,\n code: String(code ?? '').trim(),\n });\n if (result.ok === false) {\n console.error(result.error);\n process.exitCode = 1;\n return;\n }\n console.log(`Approved. Sender id added to allowFrom store: ${result.senderId}`);\n }),\n );\n\n return cmd;\n}\n\n// ---------- helpers ----------\n\nconst TELEGRAM_TOKEN_PATTERN = /^\\d{5,}:[A-Za-z0-9_-]{30,}$/;\n\nexport function validateTelegramToken(token: string): boolean {\n return TELEGRAM_TOKEN_PATTERN.test(token.trim());\n}\n\nexport function maskToken(token: string): string {\n const t = token.trim();\n if (t.length <= 8) return '*'.repeat(t.length);\n return `${t.slice(0, 4)}…${t.slice(-4)}`;\n}\n\nexport function applyTelegramAccount(\n cfg: Config,\n accountId: string,\n botToken: string,\n enable: boolean,\n): Config {\n const channels = { ...((cfg.channels ?? {}) as Record<string, unknown>) };\n const tg = { ...((channels.telegram ?? {}) as Record<string, unknown>) };\n if (enable) tg.enabled = true;\n const accounts = { ...((tg.accounts ?? {}) as Record<string, Record<string, unknown>>) };\n accounts[accountId] = {\n ...(accounts[accountId] ?? {}),\n accountId,\n enabled: true,\n botToken,\n };\n tg.accounts = accounts;\n channels.telegram = tg;\n return { ...cfg, channels } as Config;\n}\n\nexport function removeChannelAccount(\n cfg: Config,\n channelId: string,\n accountId: string,\n): Config {\n if (channelId === 'feishu' || channelId === 'weixin' || channelId === 'telegram') {\n const channels = { ...((cfg.channels ?? {}) as Record<string, unknown>) };\n const ch = { ...((channels[channelId] ?? {}) as Record<string, unknown>) };\n const accounts = { ...((ch.accounts ?? {}) as Record<string, unknown>) };\n if (!(accountId in accounts)) {\n throw new SetupValidationError([\n { message: `No account \"${accountId}\" on channel \"${channelId}\".` },\n ]);\n }\n delete accounts[accountId];\n ch.accounts = accounts;\n if (Object.keys(accounts).length === 0) {\n ch.enabled = false;\n }\n channels[channelId] = ch;\n return { ...cfg, channels } as Config;\n }\n throw new SetupValidationError([\n { message: `Unknown channel \"${channelId}\". Try: xopc channels list` },\n ]);\n}\n\nregister({\n id: 'channels',\n name: 'channels',\n description: 'Messaging channel login',\n factory: createChannelsCommand,\n metadata: {\n category: 'setup',\n examples: [\n 'xopc channels list',\n 'xopc channels add telegram --token 123456:ABC...',\n 'xopc channels remove telegram',\n 'xopc channels login',\n 'xopc channels pairing approve --channel feishu --account default ABC12XYZ',\n ],\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channels.js","names":[],"sources":["../../../../src/cli/commands/channels.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport {\n approveChannelPairingFromCli,\n listChannelPairingState,\n} from '../../channels/pairing/index.js';\nimport { buildChannelCatalogForConfig } from '../../channels/catalog/channel-catalog-service.js';\nimport { loadConfig, saveConfig } from '../../config/loader.js';\nimport type { Config } from '../../config/schema.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\nimport { colors } from '../utils/colors.js';\n\nfunction normalizeChannelId(raw: string): string {\n return raw.trim().toLowerCase();\n}\n\nfunction loadCliConfig(ctx: CLIContext): Config {\n return loadConfig(ctx.configPath);\n}\n\nasync function writeCliConfig(ctx: CLIContext, cfg: Config): Promise<void> {\n await saveConfig(cfg, ctx.configPath);\n}\n\nfunction ensureChannelObject(cfg: Config, channelId: string): Record<string, unknown> {\n if (!cfg.channels) cfg.channels = {};\n const channels = cfg.channels as Record<string, unknown>;\n const existing = channels[channelId];\n if (existing && typeof existing === 'object' && !Array.isArray(existing)) {\n return existing as Record<string, unknown>;\n }\n const next: Record<string, unknown> = {};\n channels[channelId] = next;\n return next;\n}\n\nfunction assertCatalogChannel(cfg: Config, channelId: string): void {\n const catalog = buildChannelCatalogForConfig(cfg);\n if (!catalog.byId.has(channelId)) {\n throw new Error(`Unknown channel \"${channelId}\". Install or declare a channel extension contribution first.`);\n }\n}\n\nfunction createChannelsCommand(ctx: CLIContext): Command {\n const cmd = new Command('channels')\n .description('Messaging channel configuration')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc channels list',\n 'xopc channels show telegram',\n 'xopc channels enable telegram',\n 'xopc channels config set-json telegram \\'{\"enabled\":true}\\'',\n 'xopc channels pairing approve telegram ABC12XYZ',\n ]),\n );\n\n cmd\n .command('list')\n .description('List channel extension contributions')\n .option('--json', 'Output as JSON', false)\n .action((opts: { json?: boolean }) => {\n const cfg = loadCliConfig(ctx);\n const catalog = buildChannelCatalogForConfig(cfg);\n const channels = cfg.channels as Record<string, { enabled?: boolean } | undefined> | undefined;\n const rows = catalog.entries.map((entry) => ({\n id: entry.id,\n label: entry.label,\n extensionId: entry.extensionId,\n source: entry.source,\n enabled: channels?.[entry.id]?.enabled === true,\n configured: Boolean(channels?.[entry.id]),\n }));\n if (opts.json) {\n process.stdout.write(`${JSON.stringify({ ok: true, channels: rows })}\\n`);\n return;\n }\n console.log('');\n console.log(colors.bold('CHANNELS'));\n const idWidth = Math.max(2, ...rows.map((r) => r.id.length));\n for (const row of rows) {\n const status = row.enabled ? colors.green('enabled') : colors.gray('disabled');\n console.log(` ${row.id.padEnd(idWidth)} ${status} ${colors.gray(row.label)} ${colors.gray(row.extensionId)}`);\n }\n console.log('');\n });\n\n cmd\n .command('show <channel>')\n .description('Show one channel catalog entry and config')\n .option('--json', 'Output as JSON', false)\n .action((channel: string, opts: { json?: boolean }) => {\n const cfg = loadCliConfig(ctx);\n const channelId = normalizeChannelId(channel);\n const catalog = buildChannelCatalogForConfig(cfg);\n const entry = catalog.byId.get(channelId);\n if (!entry) {\n console.error(`Unknown channel \"${channelId}\".`);\n process.exitCode = 1;\n return;\n }\n const config = (cfg.channels as Record<string, unknown> | undefined)?.[channelId] ?? {};\n const payload = { entry, config };\n if (opts.json) {\n process.stdout.write(`${JSON.stringify({ ok: true, ...payload })}\\n`);\n return;\n }\n console.log(JSON.stringify(payload, null, 2));\n });\n\n cmd\n .command('enable <channel>')\n .description('Enable a channel config block')\n .action(async (channel: string) => {\n const cfg = loadCliConfig(ctx);\n const channelId = normalizeChannelId(channel);\n assertCatalogChannel(cfg, channelId);\n ensureChannelObject(cfg, channelId).enabled = true;\n await writeCliConfig(ctx, cfg);\n console.log(`Enabled channel ${channelId}`);\n });\n\n cmd\n .command('disable <channel>')\n .description('Disable a channel config block')\n .action(async (channel: string) => {\n const cfg = loadCliConfig(ctx);\n const channelId = normalizeChannelId(channel);\n assertCatalogChannel(cfg, channelId);\n ensureChannelObject(cfg, channelId).enabled = false;\n await writeCliConfig(ctx, cfg);\n console.log(`Disabled channel ${channelId}`);\n });\n\n const config = cmd.command('config').description('Edit channel config');\n config\n .command('set-json <channel> <json>')\n .description('Merge a JSON object into channels.<id>')\n .action(async (channel: string, json: string) => {\n const cfg = loadCliConfig(ctx);\n const channelId = normalizeChannelId(channel);\n assertCatalogChannel(cfg, channelId);\n const patch = JSON.parse(json) as unknown;\n if (!patch || typeof patch !== 'object' || Array.isArray(patch)) {\n throw new Error('JSON value must be an object');\n }\n Object.assign(ensureChannelObject(cfg, channelId), patch);\n await writeCliConfig(ctx, cfg);\n console.log(`Updated channels.${channelId}`);\n });\n\n const pairing = cmd.command('pairing').description('Manage channel pairing state');\n pairing\n .command('list <channel>')\n .option('--account <id>', 'Account id', 'default')\n .option('--json', 'Output as JSON', false)\n .action((channel: string, opts: { account?: string; json?: boolean }) => {\n const cfg = loadCliConfig(ctx);\n const state = listChannelPairingState({\n channel: normalizeChannelId(channel),\n accountId: opts.account,\n config: cfg,\n });\n if (opts.json) {\n process.stdout.write(`${JSON.stringify({ ok: true, state })}\\n`);\n return;\n }\n console.log(JSON.stringify(state, null, 2));\n });\n pairing\n .command('approve <channel> <code>')\n .option('--account <id>', 'Account id', 'default')\n .action((channel: string, code: string, opts: { account?: string }) => {\n const result = approveChannelPairingFromCli({\n channel: normalizeChannelId(channel),\n accountId: opts.account ?? 'default',\n code,\n });\n if (result.ok === false) {\n console.error(result.error);\n process.exitCode = 1;\n return;\n }\n console.log(`Approved sender ${result.senderId}`);\n });\n\n return cmd;\n}\n\nregister({\n id: 'channels',\n name: 'channels',\n description: 'Messaging channel configuration',\n factory: createChannelsCommand,\n metadata: {\n category: 'setup',\n examples: [\n 'xopc channels list',\n 'xopc channels show telegram',\n 'xopc channels enable telegram',\n 'xopc channels config set-json telegram \\'{\"enabled\":true}\\'',\n ],\n },\n});\n"],"mappings":"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"}
|
|
@@ -75,7 +75,7 @@ function setNestedValue(obj, path, value) {
|
|
|
75
75
|
}
|
|
76
76
|
function createConfigCommand(ctx) {
|
|
77
77
|
const cmd = new Command("config").description("View and edit configuration").option("--show", "Show full configuration (alias for `config show`)").option("--validate", "Validate configuration file (alias for `config validate`)").addHelpText("after", formatExamples([
|
|
78
|
-
"xopc config get agents.defaults.
|
|
78
|
+
"xopc config get agents.defaults.models.chat",
|
|
79
79
|
"xopc config set agents.defaults.temperature 0.8",
|
|
80
80
|
"xopc config unset agents.defaults.max_tokens",
|
|
81
81
|
"xopc config show",
|
|
@@ -205,7 +205,7 @@ register({
|
|
|
205
205
|
metadata: {
|
|
206
206
|
category: "utility",
|
|
207
207
|
examples: [
|
|
208
|
-
"xopc config get agents.defaults.
|
|
208
|
+
"xopc config get agents.defaults.models.chat",
|
|
209
209
|
"xopc config set agents.defaults.temperature 0.8",
|
|
210
210
|
"xopc config show",
|
|
211
211
|
"xopc config validate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/cli/commands/config.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { existsSync, readFileSync } from 'fs';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { writeTextAtomic } from '../../infra/write-file-atomic.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nconst MISSING_CONFIG_HINT = 'Run: xopc setup, xopc onboard, or xopc init';\n\nasync function loadConfigDeps() {\n const [{ loadConfig }, { createLogger }] = await Promise.all([\n import('../../config/index.js'),\n import('../../utils/logger.js'),\n ]);\n return { loadConfig, log: createLogger('ConfigCommand') };\n}\n\nasync function runConfigShow(configPath: string): Promise<void> {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(configPath)) {\n log.warn(`No config file found. ${MISSING_CONFIG_HINT}`);\n return;\n }\n\n const config = loadConfig(configPath);\n const maskedConfig = JSON.stringify(\n config,\n (key, value) => {\n if (key === 'api_key' || key === 'token') {\n return value ? '********' : value;\n }\n return value;\n },\n 2,\n );\n console.log(maskedConfig);\n}\n\nasync function runConfigValidate(configPath: string): Promise<boolean> {\n const { log } = await loadConfigDeps();\n if (!existsSync(configPath)) {\n log.error('Config file not found. Run: xopc onboard');\n return false;\n }\n\n let json: unknown;\n try {\n json = JSON.parse(readFileSync(configPath, 'utf-8'));\n } catch {\n log.error('Config file is not valid JSON.');\n return false;\n }\n\n const parsed = ConfigSchema.safeParse(json);\n if (!parsed.success) {\n log.error('Config does not match the expected schema.');\n for (const issue of parsed.error.issues) {\n console.error(` - ${issue.path.join('.') || '(root)'}: ${issue.message}`);\n }\n return false;\n }\n\n const { validateChannelPluginConfigs } = await import('../../config/validate-channel-configs.js');\n const channelErrors = validateChannelPluginConfigs(parsed.data);\n if (channelErrors.length > 0) {\n log.error('Channel configuration failed validation.');\n for (const err of channelErrors) {\n console.error(` - ${err}`);\n }\n return false;\n }\n\n log.info({ path: configPath }, 'Config is valid');\n console.log('✅ Configuration is valid');\n return true;\n}\n\nfunction getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current: any, key: string) => {\n if (current && typeof current === 'object' && key in current) {\n return current[key];\n }\n return undefined;\n }, obj);\n}\n\nfunction setNestedValue(obj: any, path: string, value: any): any {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n const target = keys.reduce((current: any, key: string) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n target[lastKey] = value;\n return obj;\n}\n\nfunction createConfigCommand(ctx: CLIContext): Command {\n const cmd = new Command('config')\n .description('View and edit configuration')\n .option('--show', 'Show full configuration (alias for `config show`)')\n .option('--validate', 'Validate configuration file (alias for `config validate`)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc config get agents.defaults.model',\n 'xopc config set agents.defaults.temperature 0.8',\n 'xopc config unset agents.defaults.max_tokens',\n 'xopc config show',\n 'xopc config validate',\n 'xopc config token # Show gateway token info',\n 'xopc config token --show # Show full token',\n 'xopc config token --generate # Generate new token',\n ]),\n )\n .action(async (options) => {\n if (options.show) {\n await runConfigShow(ctx.configPath);\n return;\n }\n if (options.validate) {\n const ok = await runConfigValidate(ctx.configPath);\n if (!ok) {\n process.exit(1);\n }\n return;\n }\n cmd.outputHelp();\n });\n\n cmd\n .command('get <path>')\n .description('Get a config value by dot path')\n .action(async (path: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n const value = getNestedValue(config, path);\n\n if (value === undefined) {\n log.error({ path }, `Config path not found`);\n process.exit(1);\n }\n\n console.log(typeof value === 'object' ? JSON.stringify(value, null, 2) : value);\n });\n\n cmd\n .command('set <path> <value>')\n .description('Set a config value by dot path')\n .action(async (path: string, value: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n let parsedValue: any;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n\n const config = loadConfig(ctx.configPath);\n setNestedValue(config, path, parsedValue);\n\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n\n log.info({ path }, `Config updated`);\n });\n\n cmd\n .command('unset <path>')\n .description('Remove a config value by dot path')\n .action(async (path: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n const target = keys.reduce((current: any, key: string) => {\n return current && current[key];\n }, config);\n\n if (target && typeof target === 'object' && lastKey in target) {\n delete target[lastKey];\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n log.info({ path }, `Config removed`);\n } else {\n log.error({ path }, `Config path not found`);\n process.exit(1);\n }\n });\n\n cmd\n .command('show')\n .description('Show full configuration (sensitive values masked)')\n .action(async () => {\n await runConfigShow(ctx.configPath);\n });\n\n cmd\n .command('validate')\n .description('Validate configuration file against schema and channel plugins')\n .action(async () => {\n const ok = await runConfigValidate(ctx.configPath);\n if (!ok) {\n process.exit(1);\n }\n });\n\n cmd\n .command('token')\n .description('Generate or view the gateway auth token')\n .option('--generate', 'Generate a new token')\n .option('--show', 'Show the current token (unmasked)')\n .action(async (options) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n\n if (options.show) {\n const token = config?.gateway?.auth?.token;\n if (token) {\n console.log(token);\n } else {\n console.log('No token configured. Gateway auth mode:', config?.gateway?.auth?.mode || 'not set');\n }\n return;\n }\n\n if (options.generate) {\n const crypto = await import('crypto');\n const newToken = crypto.randomBytes(24).toString('hex');\n\n config.gateway = config.gateway || {};\n config.gateway.auth = {\n mode: 'token',\n token: newToken,\n };\n\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n log.info('New gateway token generated');\n console.log(`Token: ${newToken.slice(0, 8)}...${newToken.slice(-8)}`);\n console.log('\\nUse \"xopc config token --show\" to view the full token');\n return;\n }\n\n // Default: show masked token info\n const token = config?.gateway?.auth?.token;\n const mode = config?.gateway?.auth?.mode;\n const bind = config?.gateway?.bind ?? 'loopback';\n const port = config?.gateway?.port || 18790;\n const clientHost = config ? resolveGatewayLocalClientHost(config) : '127.0.0.1';\n\n console.log('Gateway Configuration:');\n console.log(` Bind: ${bind}`);\n console.log(` Local URL: http://${clientHost}:${port}`);\n console.log(` Auth Mode: ${mode || 'not set'}`);\n if (token) {\n console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);\n console.log('\\nUse \"xopc config token --show\" to view the full token');\n console.log('Use \"xopc config token --generate\" to generate a new token');\n } else if (mode === 'token') {\n console.log(' Token: not set (will be auto-generated on first `xopc gateway` run)');\n }\n });\n\n cmd\n .command('path')\n .description('Show configuration file path')\n .action(() => {\n console.log(ctx.configPath);\n });\n\n return cmd;\n}\n\nregister({\n id: 'config',\n name: 'config',\n description: 'View and edit configuration',\n factory: createConfigCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc config get agents.defaults.model',\n 'xopc config set agents.defaults.temperature 0.8',\n 'xopc config show',\n 'xopc config validate',\n 'xopc config token',\n 'xopc config token --show',\n 'xopc config token --generate',\n ],\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/cli/commands/config.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { existsSync, readFileSync } from 'fs';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { writeTextAtomic } from '../../infra/write-file-atomic.js';\nimport { ConfigSchema } from '../../config/schema.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\nconst MISSING_CONFIG_HINT = 'Run: xopc setup, xopc onboard, or xopc init';\n\nasync function loadConfigDeps() {\n const [{ loadConfig }, { createLogger }] = await Promise.all([\n import('../../config/index.js'),\n import('../../utils/logger.js'),\n ]);\n return { loadConfig, log: createLogger('ConfigCommand') };\n}\n\nasync function runConfigShow(configPath: string): Promise<void> {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(configPath)) {\n log.warn(`No config file found. ${MISSING_CONFIG_HINT}`);\n return;\n }\n\n const config = loadConfig(configPath);\n const maskedConfig = JSON.stringify(\n config,\n (key, value) => {\n if (key === 'api_key' || key === 'token') {\n return value ? '********' : value;\n }\n return value;\n },\n 2,\n );\n console.log(maskedConfig);\n}\n\nasync function runConfigValidate(configPath: string): Promise<boolean> {\n const { log } = await loadConfigDeps();\n if (!existsSync(configPath)) {\n log.error('Config file not found. Run: xopc onboard');\n return false;\n }\n\n let json: unknown;\n try {\n json = JSON.parse(readFileSync(configPath, 'utf-8'));\n } catch {\n log.error('Config file is not valid JSON.');\n return false;\n }\n\n const parsed = ConfigSchema.safeParse(json);\n if (!parsed.success) {\n log.error('Config does not match the expected schema.');\n for (const issue of parsed.error.issues) {\n console.error(` - ${issue.path.join('.') || '(root)'}: ${issue.message}`);\n }\n return false;\n }\n\n const { validateChannelPluginConfigs } = await import('../../config/validate-channel-configs.js');\n const channelErrors = validateChannelPluginConfigs(parsed.data);\n if (channelErrors.length > 0) {\n log.error('Channel configuration failed validation.');\n for (const err of channelErrors) {\n console.error(` - ${err}`);\n }\n return false;\n }\n\n log.info({ path: configPath }, 'Config is valid');\n console.log('✅ Configuration is valid');\n return true;\n}\n\nfunction getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current: any, key: string) => {\n if (current && typeof current === 'object' && key in current) {\n return current[key];\n }\n return undefined;\n }, obj);\n}\n\nfunction setNestedValue(obj: any, path: string, value: any): any {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n const target = keys.reduce((current: any, key: string) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n target[lastKey] = value;\n return obj;\n}\n\nfunction createConfigCommand(ctx: CLIContext): Command {\n const cmd = new Command('config')\n .description('View and edit configuration')\n .option('--show', 'Show full configuration (alias for `config show`)')\n .option('--validate', 'Validate configuration file (alias for `config validate`)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc config get agents.defaults.models.chat',\n 'xopc config set agents.defaults.temperature 0.8',\n 'xopc config unset agents.defaults.max_tokens',\n 'xopc config show',\n 'xopc config validate',\n 'xopc config token # Show gateway token info',\n 'xopc config token --show # Show full token',\n 'xopc config token --generate # Generate new token',\n ]),\n )\n .action(async (options) => {\n if (options.show) {\n await runConfigShow(ctx.configPath);\n return;\n }\n if (options.validate) {\n const ok = await runConfigValidate(ctx.configPath);\n if (!ok) {\n process.exit(1);\n }\n return;\n }\n cmd.outputHelp();\n });\n\n cmd\n .command('get <path>')\n .description('Get a config value by dot path')\n .action(async (path: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n const value = getNestedValue(config, path);\n\n if (value === undefined) {\n log.error({ path }, `Config path not found`);\n process.exit(1);\n }\n\n console.log(typeof value === 'object' ? JSON.stringify(value, null, 2) : value);\n });\n\n cmd\n .command('set <path> <value>')\n .description('Set a config value by dot path')\n .action(async (path: string, value: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n let parsedValue: any;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n\n const config = loadConfig(ctx.configPath);\n setNestedValue(config, path, parsedValue);\n\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n\n log.info({ path }, `Config updated`);\n });\n\n cmd\n .command('unset <path>')\n .description('Remove a config value by dot path')\n .action(async (path: string) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n const target = keys.reduce((current: any, key: string) => {\n return current && current[key];\n }, config);\n\n if (target && typeof target === 'object' && lastKey in target) {\n delete target[lastKey];\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n log.info({ path }, `Config removed`);\n } else {\n log.error({ path }, `Config path not found`);\n process.exit(1);\n }\n });\n\n cmd\n .command('show')\n .description('Show full configuration (sensitive values masked)')\n .action(async () => {\n await runConfigShow(ctx.configPath);\n });\n\n cmd\n .command('validate')\n .description('Validate configuration file against schema and channel plugins')\n .action(async () => {\n const ok = await runConfigValidate(ctx.configPath);\n if (!ok) {\n process.exit(1);\n }\n });\n\n cmd\n .command('token')\n .description('Generate or view the gateway auth token')\n .option('--generate', 'Generate a new token')\n .option('--show', 'Show the current token (unmasked)')\n .action(async (options) => {\n const { loadConfig, log } = await loadConfigDeps();\n if (!existsSync(ctx.configPath)) {\n log.error(`Config file not found. ${MISSING_CONFIG_HINT}`);\n process.exit(1);\n }\n\n const config = loadConfig(ctx.configPath);\n\n if (options.show) {\n const token = config?.gateway?.auth?.token;\n if (token) {\n console.log(token);\n } else {\n console.log('No token configured. Gateway auth mode:', config?.gateway?.auth?.mode || 'not set');\n }\n return;\n }\n\n if (options.generate) {\n const crypto = await import('crypto');\n const newToken = crypto.randomBytes(24).toString('hex');\n\n config.gateway = config.gateway || {};\n config.gateway.auth = {\n mode: 'token',\n token: newToken,\n };\n\n await writeTextAtomic(ctx.configPath, JSON.stringify(config, null, 2));\n log.info('New gateway token generated');\n console.log(`Token: ${newToken.slice(0, 8)}...${newToken.slice(-8)}`);\n console.log('\\nUse \"xopc config token --show\" to view the full token');\n return;\n }\n\n // Default: show masked token info\n const token = config?.gateway?.auth?.token;\n const mode = config?.gateway?.auth?.mode;\n const bind = config?.gateway?.bind ?? 'loopback';\n const port = config?.gateway?.port || 18790;\n const clientHost = config ? resolveGatewayLocalClientHost(config) : '127.0.0.1';\n\n console.log('Gateway Configuration:');\n console.log(` Bind: ${bind}`);\n console.log(` Local URL: http://${clientHost}:${port}`);\n console.log(` Auth Mode: ${mode || 'not set'}`);\n if (token) {\n console.log(` Token: ${token.slice(0, 8)}...${token.slice(-8)}`);\n console.log('\\nUse \"xopc config token --show\" to view the full token');\n console.log('Use \"xopc config token --generate\" to generate a new token');\n } else if (mode === 'token') {\n console.log(' Token: not set (will be auto-generated on first `xopc gateway` run)');\n }\n });\n\n cmd\n .command('path')\n .description('Show configuration file path')\n .action(() => {\n console.log(ctx.configPath);\n });\n\n return cmd;\n}\n\nregister({\n id: 'config',\n name: 'config',\n description: 'View and edit configuration',\n factory: createConfigCommand,\n metadata: {\n category: 'utility',\n examples: [\n 'xopc config get agents.defaults.models.chat',\n 'xopc config set agents.defaults.temperature 0.8',\n 'xopc config show',\n 'xopc config validate',\n 'xopc config token',\n 'xopc config token --show',\n 'xopc config token --generate',\n ],\n },\n});\n"],"mappings":"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"}
|