@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,10 +1,10 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { checkWebsiteBlocklist } from "../../agent/tools/url-safety.js";
|
|
4
3
|
import { resolveBrowserCommandTimeoutMs } from "../browser-command-timeout.js";
|
|
4
|
+
import { humanizedClick, humanizedFill, humanizedScroll } from "../humanize.js";
|
|
5
5
|
import { assertBrowserUrlAllowed, checkPostRedirectUrl, containsApiKeyPattern } from "../url-policy.js";
|
|
6
6
|
import { truncateSnapshotAtBoundary } from "../snapshot-helpers.js";
|
|
7
|
-
import {
|
|
7
|
+
import { checkWebsiteBlocklist } from "../../agent/tools/url-safety.js";
|
|
8
8
|
//#region src/browser/actions/registry.ts
|
|
9
9
|
init_logger();
|
|
10
10
|
const log = createLogger("BrowserActionRegistry");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { loadPlaywrightCoreModule } from "./providers/playwright-doctor.js";
|
|
4
3
|
import { pickFreePort } from "./free-port.js";
|
|
4
|
+
import { loadPlaywrightCoreModule } from "./providers/playwright-doctor.js";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
6
6
|
import { mkdir, rm } from "node:fs/promises";
|
|
7
7
|
import { join } from "node:path";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { BrowserManager } from "./manager.js";
|
|
2
1
|
import { resolveBrowserBackendFromConfig } from "./backend-from-config.js";
|
|
3
2
|
import { resolveBrowserCommandTimeoutMs } from "./browser-command-timeout.js";
|
|
3
|
+
import { CdpSupervisor } from "./cdp-supervisor.js";
|
|
4
|
+
import { generateMousePath, generateScrollPlan, generateTypingPlan, humanizedClick, humanizedFill, humanizedPress, humanizedScroll, resolveHumanConfig } from "./humanize.js";
|
|
5
|
+
import { BrowserManager } from "./manager.js";
|
|
4
6
|
import { BrowserNotReadyError, buildBrowserSetupDeepLink, checkBrowserReadiness } from "./readiness.js";
|
|
5
7
|
import { assertBrowserUrlAllowed, checkPostRedirectUrl, containsApiKeyPattern, isAlwaysBlockedUrl } from "./url-policy.js";
|
|
6
|
-
import { CdpSupervisor } from "./cdp-supervisor.js";
|
|
7
8
|
import { snapshotSummaryHeader, truncateSnapshotAtBoundary } from "./snapshot-helpers.js";
|
|
8
9
|
import { checkBotDetection, cleanupOrphanProcesses, startTracing, stopTracing } from "./session-lifecycle.js";
|
|
9
10
|
import { BrowserBackSchema, BrowserCdpSchema, BrowserClickSchema, BrowserCloseSchema, BrowserConsoleSchema, BrowserDialogSchema, BrowserGetImagesSchema, BrowserNavigateSchema, BrowserPressSchema, BrowserScreenshotSchema, BrowserScrollSchema, BrowserSnapshotSchema, BrowserTypeSchema, BrowserVisionSchema } from "./schemas.js";
|
|
10
|
-
import { generateMousePath, generateScrollPlan, generateTypingPlan, humanizedClick, humanizedFill, humanizedPress, humanizedScroll, resolveHumanConfig } from "./humanize.js";
|
|
11
11
|
import { WEBDRIVER_OVERRIDE_SCRIPT, buildLocalStealthArgs, buildStealthArgs, generateFingerprintSeed, makeExecutable, removeQuarantineAttr } from "./stealth.js";
|
|
12
12
|
import { createBrowserActionRegistry } from "./actions/registry.js";
|
|
13
13
|
import { parseBrowserPipeline } from "./pipeline/schema.js";
|
|
@@ -8,8 +8,8 @@ import { resolvePackageRoot } from "../../infra/update-check.js";
|
|
|
8
8
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
9
9
|
import { readFile, readdir, rm } from "node:fs/promises";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
|
-
import { fileURLToPath } from "node:url";
|
|
12
11
|
import { spawn } from "node:child_process";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
13
|
//#region src/browser/providers/browser-ext-install.ts
|
|
14
14
|
/**
|
|
15
15
|
* Install bundled Chrome extension artifacts into {resolveBinDir()}/browser-ext/.
|
|
@@ -2,9 +2,9 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_paths, resolveBinDir } from "../../config/paths.js";
|
|
4
4
|
import { assertCacheDir, expandHome, init_cache_dir_policy } from "../cache-dir-policy.js";
|
|
5
|
+
import { pickFreePort } from "../free-port.js";
|
|
5
6
|
import { loadPlaywrightCoreModule } from "./playwright-doctor.js";
|
|
6
7
|
import { WEBDRIVER_OVERRIDE_SCRIPT, buildStealthArgs, filterCloakBrowserExtraArgs, generateFingerprintSeed, makeExecutable, removeQuarantineAttr } from "../stealth.js";
|
|
7
|
-
import { pickFreePort } from "../free-port.js";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
import { createReadStream, createWriteStream } from "node:fs";
|
|
10
10
|
import { mkdir, mkdtemp, rm, stat } from "node:fs/promises";
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
//#region src/channels/attachments/attachment-classifiers.ts
|
|
2
|
+
const VISION_IMAGE_MIME_TYPES = new Set([
|
|
3
|
+
"image/jpeg",
|
|
4
|
+
"image/png",
|
|
5
|
+
"image/gif",
|
|
6
|
+
"image/webp"
|
|
7
|
+
]);
|
|
8
|
+
function isSupportedVisionImageMimeType(mimeType) {
|
|
9
|
+
const normalized = mimeType?.split(";")[0]?.trim().toLowerCase();
|
|
10
|
+
return normalized ? VISION_IMAGE_MIME_TYPES.has(normalized) : false;
|
|
11
|
+
}
|
|
2
12
|
function isImageInboundAttachment(att) {
|
|
3
|
-
|
|
13
|
+
if (att.mimeType) return isSupportedVisionImageMimeType(att.mimeType);
|
|
14
|
+
return att.type === "image" || att.type === "photo";
|
|
4
15
|
}
|
|
5
16
|
function isVoiceInboundAttachment(att) {
|
|
6
17
|
return att.type === "voice" || att.type === "audio" || att.mimeType?.startsWith("audio/") === true;
|
|
7
18
|
}
|
|
8
19
|
//#endregion
|
|
9
|
-
export { isImageInboundAttachment, isVoiceInboundAttachment };
|
|
20
|
+
export { isImageInboundAttachment, isSupportedVisionImageMimeType, isVoiceInboundAttachment };
|
|
10
21
|
|
|
11
22
|
//# sourceMappingURL=attachment-classifiers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-classifiers.js","names":[],"sources":["../../../../src/channels/attachments/attachment-classifiers.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"attachment-classifiers.js","names":[],"sources":["../../../../src/channels/attachments/attachment-classifiers.ts"],"sourcesContent":["const VISION_IMAGE_MIME_TYPES = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n]);\n\nexport function isSupportedVisionImageMimeType(mimeType: string | undefined): boolean {\n const normalized = mimeType?.split(';')[0]?.trim().toLowerCase();\n return normalized ? VISION_IMAGE_MIME_TYPES.has(normalized) : false;\n}\n\nexport function isImageInboundAttachment(att: {\n type?: string;\n mimeType?: string;\n}): boolean {\n if (att.mimeType) {\n return isSupportedVisionImageMimeType(att.mimeType);\n }\n\n return (\n att.type === 'image' ||\n att.type === 'photo'\n );\n}\n\nexport function isVoiceInboundAttachment(att: { type?: string; mimeType?: string }): boolean {\n return (\n att.type === 'voice' ||\n att.type === 'audio' ||\n att.mimeType?.startsWith('audio/') === true\n );\n}\n"],"mappings":";AAAA,MAAM,0BAA0B,IAAI,IAAI;CACtC;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,+BAA+B,UAAuC;CACpF,MAAM,aAAa,UAAU,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa;AAChE,QAAO,aAAa,wBAAwB,IAAI,WAAW,GAAG;;AAGhE,SAAgB,yBAAyB,KAG7B;AACV,KAAI,IAAI,SACN,QAAO,+BAA+B,IAAI,SAAS;AAGrD,QACE,IAAI,SAAS,WACb,IAAI,SAAS;;AAIjB,SAAgB,yBAAyB,KAAoD;AAC3F,QACE,IAAI,SAAS,WACb,IAAI,SAAS,WACb,IAAI,UAAU,WAAW,SAAS,KAAK"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Config } from '../../config/schema.js';
|
|
2
|
+
import type { ExtensionMetadataSnapshot } from '../../extensions/extension-metadata-snapshot.js';
|
|
3
|
+
import type { ChannelCatalog } from './channel-catalog-types.js';
|
|
4
|
+
type BuildChannelCatalogOptions = {
|
|
5
|
+
locale?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildChannelCatalogFromSnapshot(snapshot: ExtensionMetadataSnapshot, options?: BuildChannelCatalogOptions): ChannelCatalog;
|
|
8
|
+
export declare function buildChannelCatalogForConfig(config: Config, options?: BuildChannelCatalogOptions): ChannelCatalog;
|
|
9
|
+
export declare function isChannelConfigured(config: Config, channelId: string): boolean;
|
|
10
|
+
export declare function getConfiguredChannelIds(config: Config): string[];
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { buildExtensionMetadataSnapshot, init_extension_metadata_snapshot, resolveExtensionLoaderOptionsFromConfig } from "../../extensions/extension-metadata-snapshot.js";
|
|
3
|
+
//#region src/channels/catalog/channel-catalog-service.ts
|
|
4
|
+
function normalizeChannelId(raw) {
|
|
5
|
+
return raw.trim().toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
function normalizeLocale(raw) {
|
|
8
|
+
return raw?.trim().toLowerCase().replace("_", "-") || void 0;
|
|
9
|
+
}
|
|
10
|
+
function localeCandidates(raw) {
|
|
11
|
+
const locale = normalizeLocale(raw);
|
|
12
|
+
if (!locale) return [];
|
|
13
|
+
const base = locale.split("-")[0];
|
|
14
|
+
return base && base !== locale ? [locale, base] : [locale];
|
|
15
|
+
}
|
|
16
|
+
function normalizeConfigPath(channelId, raw) {
|
|
17
|
+
const expected = `channels.${channelId}`;
|
|
18
|
+
if (!raw) return expected;
|
|
19
|
+
const trimmed = raw.trim();
|
|
20
|
+
if (!trimmed.startsWith("channels.")) return expected;
|
|
21
|
+
return trimmed;
|
|
22
|
+
}
|
|
23
|
+
function isRecord(value) {
|
|
24
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
25
|
+
}
|
|
26
|
+
function hasNonEmptyString(value) {
|
|
27
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
28
|
+
}
|
|
29
|
+
function hasConfiguredTelegramCredential(raw) {
|
|
30
|
+
if (!isRecord(raw)) return false;
|
|
31
|
+
const accounts = raw.accounts;
|
|
32
|
+
if (!isRecord(accounts)) return false;
|
|
33
|
+
return Object.values(accounts).some((account) => {
|
|
34
|
+
if (!isRecord(account) || account.enabled === false) return false;
|
|
35
|
+
return hasNonEmptyString(account.botToken) || hasNonEmptyString(account.tokenFile);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function hasConfiguredWeixinAccount(raw) {
|
|
39
|
+
if (!isRecord(raw)) return false;
|
|
40
|
+
if (raw.enabled === true) return true;
|
|
41
|
+
const accounts = raw.accounts;
|
|
42
|
+
if (!isRecord(accounts)) return false;
|
|
43
|
+
return Object.values(accounts).some((account) => isRecord(account) && account.enabled !== false);
|
|
44
|
+
}
|
|
45
|
+
function withoutUndefined(value) {
|
|
46
|
+
return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== void 0));
|
|
47
|
+
}
|
|
48
|
+
function mergeObjectMap(base, override) {
|
|
49
|
+
if (!base && !override) return void 0;
|
|
50
|
+
if (!base) return override ? withoutUndefined(override) : void 0;
|
|
51
|
+
if (!override) return base;
|
|
52
|
+
const out = { ...base };
|
|
53
|
+
for (const [key, value] of Object.entries(override)) {
|
|
54
|
+
if (value === void 0) continue;
|
|
55
|
+
out[key] = isRecord(out[key]) && isRecord(value) ? {
|
|
56
|
+
...out[key],
|
|
57
|
+
...withoutUndefined(value)
|
|
58
|
+
} : value;
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
function mergeRecordDeep(base, override) {
|
|
63
|
+
const out = { ...base };
|
|
64
|
+
for (const [key, value] of Object.entries(override)) {
|
|
65
|
+
if (value === void 0) continue;
|
|
66
|
+
out[key] = isRecord(out[key]) && isRecord(value) ? mergeRecordDeep(out[key], value) : value;
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function mergeJsonSchema(base, override) {
|
|
71
|
+
if (!base && !override) return void 0;
|
|
72
|
+
if (!base) return override ? withoutUndefined(override) : void 0;
|
|
73
|
+
if (!override) return base;
|
|
74
|
+
return mergeRecordDeep(base, override);
|
|
75
|
+
}
|
|
76
|
+
function mergeChannelUi(base, override) {
|
|
77
|
+
if (!base && !override) return void 0;
|
|
78
|
+
return {
|
|
79
|
+
...base ?? {},
|
|
80
|
+
...override ?? {},
|
|
81
|
+
card: mergeObjectMap(base?.card, override?.card),
|
|
82
|
+
modal: mergeObjectMap(base?.modal, override?.modal)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function localizeContribution(contribution, locale) {
|
|
86
|
+
const i18n = contribution.i18n;
|
|
87
|
+
if (!i18n) return contribution;
|
|
88
|
+
const override = localeCandidates(locale).map((key) => i18n[key]).find(Boolean);
|
|
89
|
+
if (!override) return contribution;
|
|
90
|
+
return {
|
|
91
|
+
...contribution,
|
|
92
|
+
label: override.label ?? contribution.label,
|
|
93
|
+
description: override.description ?? contribution.description,
|
|
94
|
+
configSchema: mergeJsonSchema(contribution.configSchema, override.configSchema),
|
|
95
|
+
uiHints: mergeObjectMap(contribution.uiHints, override.uiHints),
|
|
96
|
+
actions: mergeObjectMap(contribution.actions, override.actions),
|
|
97
|
+
ui: mergeChannelUi(contribution.ui, override.ui)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function toCatalogEntry(params) {
|
|
101
|
+
const contribution = localizeContribution(params.contribution, params.locale);
|
|
102
|
+
const id = normalizeChannelId(params.channelId);
|
|
103
|
+
return {
|
|
104
|
+
id,
|
|
105
|
+
extensionId: params.extension.id,
|
|
106
|
+
source: params.extension.source,
|
|
107
|
+
path: params.extension.path,
|
|
108
|
+
label: contribution.label,
|
|
109
|
+
description: contribution.description,
|
|
110
|
+
docsPath: contribution.docsPath,
|
|
111
|
+
order: contribution.order ?? 999,
|
|
112
|
+
configPath: normalizeConfigPath(id, contribution.configPath),
|
|
113
|
+
capabilities: contribution.capabilities ?? {},
|
|
114
|
+
configSchema: contribution.configSchema ?? DEFAULT_CONFIG_SCHEMA,
|
|
115
|
+
uiHints: contribution.uiHints ?? {},
|
|
116
|
+
actions: contribution.actions ?? {},
|
|
117
|
+
ui: contribution.ui
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function buildChannelCatalogFromSnapshot(snapshot, options = {}) {
|
|
121
|
+
const byId = /* @__PURE__ */ new Map();
|
|
122
|
+
for (const extension of snapshot.manifestRegistry.getAllEntries()) {
|
|
123
|
+
const contributions = extension.manifest.channelContributions ?? {};
|
|
124
|
+
for (const [channelId, contribution] of Object.entries(contributions)) {
|
|
125
|
+
const entry = toCatalogEntry({
|
|
126
|
+
extension,
|
|
127
|
+
channelId,
|
|
128
|
+
contribution,
|
|
129
|
+
locale: options.locale
|
|
130
|
+
});
|
|
131
|
+
byId.set(entry.id, entry);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
entries: Array.from(byId.values()).toSorted((a, b) => {
|
|
136
|
+
if (a.order !== b.order) return a.order - b.order;
|
|
137
|
+
return a.id.localeCompare(b.id);
|
|
138
|
+
}),
|
|
139
|
+
byId
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function buildChannelCatalogForConfig(config, options = {}) {
|
|
143
|
+
return buildChannelCatalogFromSnapshot(buildExtensionMetadataSnapshot(resolveExtensionLoaderOptionsFromConfig(config), config), options);
|
|
144
|
+
}
|
|
145
|
+
function isChannelConfigured(config, channelId) {
|
|
146
|
+
const id = normalizeChannelId(channelId);
|
|
147
|
+
const raw = config.channels?.[id];
|
|
148
|
+
if (!raw) return false;
|
|
149
|
+
if (id === "telegram") return hasConfiguredTelegramCredential(raw);
|
|
150
|
+
if (id === "weixin") return hasConfiguredWeixinAccount(raw);
|
|
151
|
+
return isRecord(raw) ? raw.enabled === true || Object.keys(raw).length > 0 : true;
|
|
152
|
+
}
|
|
153
|
+
function getConfiguredChannelIds(config) {
|
|
154
|
+
return Object.keys(config.channels ?? {}).map(normalizeChannelId).filter((id) => id && isChannelConfigured(config, id));
|
|
155
|
+
}
|
|
156
|
+
var DEFAULT_CONFIG_SCHEMA;
|
|
157
|
+
var init_channel_catalog_service = __esmMin((() => {
|
|
158
|
+
init_extension_metadata_snapshot();
|
|
159
|
+
DEFAULT_CONFIG_SCHEMA = {
|
|
160
|
+
type: "object",
|
|
161
|
+
additionalProperties: true
|
|
162
|
+
};
|
|
163
|
+
}));
|
|
164
|
+
//#endregion
|
|
165
|
+
init_channel_catalog_service();
|
|
166
|
+
export { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getConfiguredChannelIds, init_channel_catalog_service, isChannelConfigured };
|
|
167
|
+
|
|
168
|
+
//# sourceMappingURL=channel-catalog-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-catalog-service.js","names":[],"sources":["../../../../src/channels/catalog/channel-catalog-service.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport {\n buildExtensionMetadataSnapshot,\n resolveExtensionLoaderOptionsFromConfig,\n} from '../../extensions/extension-metadata-snapshot.js';\nimport type { ExtensionMetadataSnapshot } from '../../extensions/extension-metadata-snapshot.js';\nimport type { ManifestRegistryEntry } from '../../extensions/manifest-registry.js';\nimport type { ChannelContributionDeclaration } from '../../extensions/types/manifest.js';\n\nimport type { ChannelCatalog, ChannelCatalogEntry } from './channel-catalog-types.js';\n\ntype BuildChannelCatalogOptions = {\n locale?: string;\n};\n\nconst DEFAULT_CONFIG_SCHEMA: Record<string, unknown> = {\n type: 'object',\n additionalProperties: true,\n};\n\nfunction normalizeChannelId(raw: string): string {\n return raw.trim().toLowerCase();\n}\n\nfunction normalizeLocale(raw: string | undefined): string | undefined {\n const value = raw?.trim().toLowerCase().replace('_', '-');\n return value || undefined;\n}\n\nfunction localeCandidates(raw: string | undefined): string[] {\n const locale = normalizeLocale(raw);\n if (!locale) return [];\n const base = locale.split('-')[0];\n return base && base !== locale ? [locale, base] : [locale];\n}\n\nfunction normalizeConfigPath(channelId: string, raw: string | undefined): `channels.${string}` {\n const expected = `channels.${channelId}` as const;\n if (!raw) return expected;\n const trimmed = raw.trim();\n if (!trimmed.startsWith('channels.')) return expected;\n return trimmed as `channels.${string}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasNonEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction hasConfiguredTelegramCredential(raw: unknown): boolean {\n if (!isRecord(raw)) return false;\n const accounts = raw.accounts;\n if (!isRecord(accounts)) return false;\n return Object.values(accounts).some((account) => {\n if (!isRecord(account) || account.enabled === false) return false;\n return hasNonEmptyString(account.botToken) || hasNonEmptyString(account.tokenFile);\n });\n}\n\nfunction hasConfiguredWeixinAccount(raw: unknown): boolean {\n if (!isRecord(raw)) return false;\n if (raw.enabled === true) return true;\n const accounts = raw.accounts;\n if (!isRecord(accounts)) return false;\n return Object.values(accounts).some((account) => isRecord(account) && account.enabled !== false);\n}\n\nfunction withoutUndefined(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));\n}\n\nfunction mergeObjectMap<T extends Record<string, unknown>>(base: T | undefined, override: T | undefined): T | undefined {\n if (!base && !override) return undefined;\n if (!base) return override ? withoutUndefined(override) as T : undefined;\n if (!override) return base;\n const out: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(override)) {\n if (value === undefined) continue;\n out[key] = isRecord(out[key]) && isRecord(value)\n ? { ...out[key], ...withoutUndefined(value) }\n : value;\n }\n return out as T;\n}\n\nfunction mergeRecordDeep(base: Record<string, unknown>, override: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(override)) {\n if (value === undefined) continue;\n out[key] = isRecord(out[key]) && isRecord(value)\n ? mergeRecordDeep(out[key], value)\n : value;\n }\n return out;\n}\n\nfunction mergeJsonSchema(base: Record<string, unknown> | undefined, override: Record<string, unknown> | undefined) {\n if (!base && !override) return undefined;\n if (!base) return override ? withoutUndefined(override) : undefined;\n if (!override) return base;\n return mergeRecordDeep(base, override);\n}\n\nfunction mergeChannelUi(\n base: ChannelContributionDeclaration['ui'],\n override: ChannelContributionDeclaration['ui'],\n): ChannelContributionDeclaration['ui'] {\n if (!base && !override) return undefined;\n return {\n ...(base ?? {}),\n ...(override ?? {}),\n card: mergeObjectMap(base?.card, override?.card),\n modal: mergeObjectMap(base?.modal, override?.modal),\n };\n}\n\nfunction localizeContribution(\n contribution: ChannelContributionDeclaration,\n locale: string | undefined,\n): ChannelContributionDeclaration {\n const i18n = contribution.i18n;\n if (!i18n) return contribution;\n const override = localeCandidates(locale).map((key) => i18n[key]).find(Boolean);\n if (!override) return contribution;\n return {\n ...contribution,\n label: override.label ?? contribution.label,\n description: override.description ?? contribution.description,\n configSchema: mergeJsonSchema(contribution.configSchema, override.configSchema),\n uiHints: mergeObjectMap(contribution.uiHints, override.uiHints),\n actions: mergeObjectMap(contribution.actions, override.actions),\n ui: mergeChannelUi(contribution.ui, override.ui),\n };\n}\n\nfunction toCatalogEntry(params: {\n extension: ManifestRegistryEntry;\n channelId: string;\n contribution: ChannelContributionDeclaration;\n locale?: string;\n}): ChannelCatalogEntry {\n const contribution = localizeContribution(params.contribution, params.locale);\n const id = normalizeChannelId(params.channelId);\n return {\n id,\n extensionId: params.extension.id,\n source: params.extension.source,\n path: params.extension.path,\n label: contribution.label,\n description: contribution.description,\n docsPath: contribution.docsPath,\n order: contribution.order ?? 999,\n configPath: normalizeConfigPath(id, contribution.configPath),\n capabilities: contribution.capabilities ?? {},\n configSchema: contribution.configSchema ?? DEFAULT_CONFIG_SCHEMA,\n uiHints: contribution.uiHints ?? {},\n actions: contribution.actions ?? {},\n ui: contribution.ui,\n };\n}\n\nexport function buildChannelCatalogFromSnapshot(\n snapshot: ExtensionMetadataSnapshot,\n options: BuildChannelCatalogOptions = {},\n): ChannelCatalog {\n const byId = new Map<string, ChannelCatalogEntry>();\n for (const extension of snapshot.manifestRegistry.getAllEntries()) {\n const contributions = extension.manifest.channelContributions ?? {};\n for (const [channelId, contribution] of Object.entries(contributions)) {\n const entry = toCatalogEntry({ extension, channelId, contribution, locale: options.locale });\n byId.set(entry.id, entry);\n }\n }\n const entries = Array.from(byId.values()).toSorted((a, b) => {\n if (a.order !== b.order) return a.order - b.order;\n return a.id.localeCompare(b.id);\n });\n return { entries, byId };\n}\n\nexport function buildChannelCatalogForConfig(config: Config, options: BuildChannelCatalogOptions = {}): ChannelCatalog {\n const snapshot = buildExtensionMetadataSnapshot(resolveExtensionLoaderOptionsFromConfig(config), config);\n return buildChannelCatalogFromSnapshot(snapshot, options);\n}\n\nexport function isChannelConfigured(config: Config, channelId: string): boolean {\n const id = normalizeChannelId(channelId);\n const raw = (config.channels as Record<string, unknown> | undefined)?.[id];\n if (!raw) return false;\n if (id === 'telegram') return hasConfiguredTelegramCredential(raw);\n if (id === 'weixin') return hasConfiguredWeixinAccount(raw);\n return isRecord(raw) ? raw.enabled === true || Object.keys(raw).length > 0 : true;\n}\n\nexport function getConfiguredChannelIds(config: Config): string[] {\n return Object.keys(config.channels ?? {})\n .map(normalizeChannelId)\n .filter((id) => id && isChannelConfigured(config, id));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ChannelActionDescriptor, ChannelConfigUiHint, ChannelContributionCapabilities, ChannelContributionUiDeclaration } from '../../extensions/types/manifest.js';
|
|
2
|
+
export type ChannelCatalogSource = 'workspace' | 'global' | 'bundled' | 'config';
|
|
3
|
+
export interface ChannelCatalogEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
extensionId: string;
|
|
6
|
+
source: ChannelCatalogSource;
|
|
7
|
+
path: string;
|
|
8
|
+
label: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
docsPath?: string;
|
|
11
|
+
order: number;
|
|
12
|
+
configPath: `channels.${string}`;
|
|
13
|
+
capabilities: ChannelContributionCapabilities;
|
|
14
|
+
configSchema: Record<string, unknown>;
|
|
15
|
+
uiHints: Record<string, ChannelConfigUiHint>;
|
|
16
|
+
actions: Record<string, ChannelActionDescriptor>;
|
|
17
|
+
ui?: ChannelContributionUiDeclaration;
|
|
18
|
+
}
|
|
19
|
+
export interface ChannelCatalog {
|
|
20
|
+
entries: ChannelCatalogEntry[];
|
|
21
|
+
byId: Map<string, ChannelCatalogEntry>;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lightweight channel surface for gateway/UI/shared code without importing
|
|
3
|
-
* GrammY or full plugin implementations (channel dock pattern).
|
|
4
|
-
*/
|
|
5
1
|
import type { ChannelCapabilities } from './plugin-types.js';
|
|
6
|
-
import { type ChatChannelId } from './registry.js';
|
|
7
2
|
export interface ChannelDock {
|
|
8
3
|
id: string;
|
|
9
4
|
label: string;
|
|
@@ -16,5 +11,3 @@ export interface ChannelDock {
|
|
|
16
11
|
debounceMs?: number;
|
|
17
12
|
};
|
|
18
13
|
}
|
|
19
|
-
export declare function getChannelDock(channelId: string): ChannelDock | undefined;
|
|
20
|
-
export declare function getDockForBuiltinChannel(id: ChatChannelId): ChannelDock;
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/channels/dock.ts
|
|
3
|
-
function getChannelDock(channelId) {
|
|
4
|
-
if (!isChatChannelId(channelId)) return;
|
|
5
|
-
const meta = getChatChannelMeta(channelId);
|
|
6
|
-
return {
|
|
7
|
-
id: meta.id,
|
|
8
|
-
label: meta.label,
|
|
9
|
-
description: meta.description,
|
|
10
|
-
capabilities: meta.capabilities,
|
|
11
|
-
...meta.dock?.outbound && { outbound: meta.dock.outbound },
|
|
12
|
-
...meta.dock?.queue && { queue: meta.dock.queue }
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function getDockForBuiltinChannel(id) {
|
|
16
|
-
return getChannelDock(id);
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
export { getChannelDock, getDockForBuiltinChannel };
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=dock.js.map
|
|
1
|
+
export {};
|
|
@@ -4,13 +4,11 @@
|
|
|
4
4
|
* Exports shared channel infrastructure (plugins, pipeline, registry).
|
|
5
5
|
*/
|
|
6
6
|
export * from './channel-domain.js';
|
|
7
|
-
export {
|
|
8
|
-
export { getChannelDock, getDockForBuiltinChannel, type ChannelDock } from './dock.js';
|
|
7
|
+
export { type ChannelDock } from './dock.js';
|
|
9
8
|
export type { ChannelPlugin, ChannelPluginDefaults, ChannelPluginInitOptions, ChannelPluginSessionModelHooks, ChannelPluginReloadMeta, ChannelPluginStartOptions, ChannelOutboundContext, ChannelOutboundPayloadContext, OutboundDeliveryResult, ChannelStreamHandle, ChannelStatusAdapter, ChannelSecurityAdapter, ChannelConfigAdapter, ChannelStreamingAdapter, ChannelCapabilities, ChannelMeta, ChannelAccountSnapshot, StreamMode, ChannelOutboundMediaType, } from './plugin-types.js';
|
|
10
9
|
export { compileAllowlist, resolveAllowlistMatch, resolveAllowlistMatchSimple, evaluateAccess, resolveDmPolicy, resolveGroupPolicy, hasBotMention, removeBotMention, } from './security.js';
|
|
11
10
|
export { MessagePipeline, createPipeline, createEnvelopeTimestampHandler, createFilterSelfHandler, createFilterEmptyHandler, createFilterCommandsHandler, standardPreflightHandlers, standardProcessHandlers, type PipelineMessageContext, type PipelineMediaRef, type PreflightHandler, type ProcessHandler, type DeliveryHandler, type AgentResponse, } from './pipeline.js';
|
|
12
11
|
export { ChannelManager, createChannelManager, type OutboundChannelHooks } from './manager.js';
|
|
13
12
|
export { collectSetupWizardChannels } from './setup-wizard-discovery.js';
|
|
14
13
|
export { listChannelPlugins, getChannelPlugin, getChannelRegistryVersion, syncChannelPluginsFromManager, } from './plugins/registry.js';
|
|
15
|
-
export { bundledChannelPlugins } from './plugins/bundled.js';
|
|
16
14
|
export * from './format.js';
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { parseFrontmatterBlock } from "../markdown/frontmatter.js";
|
|
2
2
|
import { getChannelPlugin, getChannelRegistryVersion, listChannelPlugins, syncChannelPluginsFromManager } from "./plugins/registry.js";
|
|
3
3
|
import { compileAllowlist, evaluateAccess, hasBotMention, removeBotMention, resolveAllowlistMatch, resolveAllowlistMatchSimple, resolveDmPolicy, resolveGroupPolicy } from "./security.js";
|
|
4
|
-
import { CHAT_CHANNEL_ORDER, getChatChannelMeta, isChatChannelId, listChatChannelMeta } from "./registry.js";
|
|
5
4
|
import { findFenceSpanAt, isSafeFenceBreak, parseFenceSpans } from "../markdown/fences.js";
|
|
6
5
|
import { chunkText } from "../markdown/chunk.js";
|
|
7
6
|
import { chunkMarkdownIR, markdownToIR, markdownToIRWithMeta } from "../markdown/ir.js";
|
|
8
7
|
import { renderMarkdownWithMarkers } from "../markdown/render.js";
|
|
9
8
|
import { convertMarkdownTables } from "../markdown/tables.js";
|
|
10
9
|
import { buildCodeSpanIndex, createInlineCodeState } from "../markdown/code-spans.js";
|
|
11
|
-
import { bundledChannelPlugins } from "../generated/bundled-channel-plugins.js";
|
|
12
|
-
import "./plugins/bundled.js";
|
|
13
|
-
import { getChannelDock, getDockForBuiltinChannel } from "./dock.js";
|
|
14
10
|
import "./format.js";
|
|
15
11
|
import { MessagePipeline, createEnvelopeTimestampHandler, createFilterCommandsHandler, createFilterEmptyHandler, createFilterSelfHandler, createPipeline, standardPreflightHandlers, standardProcessHandlers } from "./pipeline.js";
|
|
16
12
|
import { ChannelManager, createChannelManager } from "./manager.js";
|
|
17
13
|
import { collectSetupWizardChannels } from "./setup-wizard-discovery.js";
|
|
18
|
-
export {
|
|
14
|
+
export { ChannelManager, MessagePipeline, buildCodeSpanIndex, chunkMarkdownIR, chunkText, collectSetupWizardChannels, compileAllowlist, convertMarkdownTables, createChannelManager, createEnvelopeTimestampHandler, createFilterCommandsHandler, createFilterEmptyHandler, createFilterSelfHandler, createInlineCodeState, createPipeline, evaluateAccess, findFenceSpanAt, getChannelPlugin, getChannelRegistryVersion, hasBotMention, isSafeFenceBreak, listChannelPlugins, markdownToIR, markdownToIRWithMeta, parseFenceSpans, parseFrontmatterBlock, removeBotMention, renderMarkdownWithMarkers, resolveAllowlistMatch, resolveAllowlistMatchSimple, resolveDmPolicy, resolveGroupPolicy, standardPreflightHandlers, standardProcessHandlers, syncChannelPluginsFromManager };
|
|
@@ -55,6 +55,7 @@ export declare class ChannelLifecycleSupervisor {
|
|
|
55
55
|
/** Channel ids that would run and declare `meta.deferConnectUntilAfterListen` (for logging / metrics). */
|
|
56
56
|
listDeferConnectChannelIds(cfg: Config): string[];
|
|
57
57
|
initialize(): Promise<void>;
|
|
58
|
+
initializeChannel(channelId: string): Promise<boolean>;
|
|
58
59
|
/** Phase 1: start every enabled channel except those in `deferConnectPluginIds`. */
|
|
59
60
|
start(options?: {
|
|
60
61
|
deferConnectPluginIds?: ReadonlySet<string>;
|
|
@@ -58,6 +58,17 @@ var ChannelLifecycleSupervisor = class {
|
|
|
58
58
|
this.initialized = true;
|
|
59
59
|
log.info("All channel plugins initialized");
|
|
60
60
|
}
|
|
61
|
+
async initializeChannel(channelId) {
|
|
62
|
+
const plugin = this.opts.registry.get(channelId);
|
|
63
|
+
if (!plugin) {
|
|
64
|
+
log.warn({ channel: channelId }, "Unknown channel");
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (this.initializedPluginIds.has(channelId)) return true;
|
|
68
|
+
const cfg = this.opts.getConfig();
|
|
69
|
+
await this.initializePlugin(plugin, asChannelConfig(cfg.channels?.[channelId]) ?? {});
|
|
70
|
+
return this.initializedPluginIds.has(channelId);
|
|
71
|
+
}
|
|
61
72
|
/** Phase 1: start every enabled channel except those in `deferConnectPluginIds`. */
|
|
62
73
|
async start(options) {
|
|
63
74
|
if (!this.initialized) throw new Error("Channels not initialized");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-supervisor.js","names":[],"sources":["../../../src/channels/lifecycle-supervisor.ts"],"sourcesContent":["/**\n * ChannelLifecycleSupervisor — owns the start/stop/restart state machine for\n * every channel plugin.\n *\n * Concerns:\n * - `initialize()` — call each plugin's `init(...)` once and remember success\n * - Two-phase `start()` + `startDeferredConnects()` for channels whose\n * `meta.deferConnectUntilAfterListen` is true (HTTP listener has to be up\n * before they dial out)\n * - Per-channel manual stop / start (UI-driven; suppresses auto-restart)\n * - Exponential restart backoff via {@link CHANNEL_RESTART_POLICY}\n * - Soft restart (called from heartbeat) — stop + startPlugin, manual-stop guarded\n *\n * Heartbeat probes themselves live in {@link ChannelHeartbeatScheduler}; this\n * supervisor schedules them via `onPluginStarted` / `onPluginStopped` callbacks\n * passed in by the caller.\n *\n * Extracted from `ChannelManager` so the manager can be a thin composition root.\n */\n\nimport type { Config } from '../config/schema.js';\nimport type { MessageBus } from '../infra/bus/index.js';\n\nimport type {\n ChannelPlugin,\n ChannelPluginInitOptions,\n ChannelPluginSessionModelHooks,\n ChannelPluginStartOptions,\n} from './plugin-types.js';\nimport type { ChannelPluginRegistry } from './plugin-registry.js';\nimport { CHANNEL_RESTART_POLICY, computeBackoff } from './restart-policy.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('ChannelLifecycleSupervisor');\n\nfunction asChannelConfig(raw: unknown): Record<string, unknown> | undefined {\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as Record<string, unknown>;\n }\n return undefined;\n}\n\nexport interface ChannelLifecycleSupervisorOptions {\n bus: MessageBus;\n registry: ChannelPluginRegistry;\n /** Effective config snapshot (per-channel `channels.<id>.*`). */\n getConfig: () => Config;\n /** Hooks for sub-classes / external observers: heartbeat scheduling, etc. */\n onPluginStarted?: (plugin: ChannelPlugin) => void;\n onPluginStopped?: (pluginId: string) => void;\n /** Optional session-model hooks forwarded into `plugin.init()`. */\n getSessionModelHooks?: () => ChannelPluginSessionModelHooks | undefined;\n}\n\nexport class ChannelLifecycleSupervisor {\n private readonly opts: ChannelLifecycleSupervisorOptions;\n /** Plugin ids whose `init()` completed (used by start/stop loops). */\n private readonly initializedPluginIds = new Set<string>();\n private readonly restartAttempts = new Map<string, number>();\n /** When set, failed-start auto-restart is suppressed for that channel id. */\n private readonly manuallyStopped = new Set<string>();\n /** Plugins that skipped `start()` until `startDeferredConnects()`. */\n private readonly deferredConnectPending = new Set<string>();\n private initialized = false;\n private running = false;\n\n constructor(opts: ChannelLifecycleSupervisorOptions) {\n this.opts = opts;\n }\n\n isInitialized(pluginId: string): boolean {\n return this.initializedPluginIds.has(pluginId);\n }\n\n snapshot(): {\n initialized: boolean;\n running: boolean;\n initializedPluginIds: string[];\n manuallyStopped: string[];\n restartAttempts: Record<string, number>;\n } {\n return {\n initialized: this.initialized,\n running: this.running,\n initializedPluginIds: [...this.initializedPluginIds],\n manuallyStopped: [...this.manuallyStopped],\n restartAttempts: Object.fromEntries(this.restartAttempts),\n };\n }\n\n /** Channel ids that would run and declare `meta.deferConnectUntilAfterListen` (for logging / metrics). */\n listDeferConnectChannelIds(cfg: Config): string[] {\n const out: string[] = [];\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n if (plugin.meta.deferConnectUntilAfterListen === true) {\n out.push(id);\n }\n }\n return out;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n log.warn(\n { pluginCount: this.opts.registry.ids().length },\n 'initialize() called again; channels already initialized — skipping',\n );\n return;\n }\n\n const cfg = this.opts.getConfig();\n const initPromises: Promise<void>[] = [];\n\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n // Always init so `onConfigUpdated` runs on hot reload (e.g. Weixin turned off after QR-login\n // started monitors while the plugin was previously skipped here and had no bus/`initialized` id).\n initPromises.push(this.initializePlugin(plugin, channelConfig ?? {}));\n }\n\n await Promise.allSettled(initPromises);\n this.initialized = true;\n log.info('All channel plugins initialized');\n }\n\n /** Phase 1: start every enabled channel except those in `deferConnectPluginIds`. */\n async start(options?: { deferConnectPluginIds?: ReadonlySet<string> }): Promise<void> {\n if (!this.initialized) {\n throw new Error('Channels not initialized');\n }\n if (this.running) {\n log.warn(\n { pluginCount: this.opts.registry.ids().length },\n 'start() called while channels already running — skipping',\n );\n return;\n }\n\n const deferIds = options?.deferConnectPluginIds ?? new Set<string>();\n this.deferredConnectPending.clear();\n\n const cfg = this.opts.getConfig();\n const startPromises: Promise<void>[] = [];\n\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n\n if (deferIds.has(id)) {\n this.deferredConnectPending.add(id);\n log.info({ channel: id }, 'Channel connect deferred until HTTP listen');\n continue;\n }\n\n startPromises.push(\n this.startPlugin(plugin, {}).catch((err) => {\n log.error({ channel: id, err }, 'Failed to start channel plugin');\n }),\n );\n }\n\n await Promise.allSettled(startPromises);\n this.running = true;\n log.info(\n { deferred: [...this.deferredConnectPending] },\n this.deferredConnectPending.size > 0\n ? 'Channel plugins started (deferred connects pending)'\n : 'All channel plugins started',\n );\n }\n\n /** Phase 2: `start()` for channels deferred at Phase 1. No-op if none pending. */\n async startDeferredConnects(): Promise<void> {\n if (this.deferredConnectPending.size === 0) return;\n if (!this.running) {\n log.warn('startDeferredConnects called before channel phase-1 start; skipping');\n return;\n }\n const ids = [...this.deferredConnectPending];\n this.deferredConnectPending.clear();\n const cfg = this.opts.getConfig();\n const startPromises: Promise<void>[] = [];\n for (const id of ids) {\n const plugin = this.opts.registry.get(id);\n if (!plugin) continue;\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n startPromises.push(\n this.startPlugin(plugin, {}).catch((err) => {\n log.error({ channel: id, err }, 'Failed to start deferred channel plugin');\n }),\n );\n }\n await Promise.allSettled(startPromises);\n log.info({ channels: ids }, 'Deferred channel connects completed');\n }\n\n async stop(): Promise<void> {\n if (!this.running) return;\n\n this.deferredConnectPending.clear();\n\n const stopPromises: Promise<void>[] = [];\n for (const id of this.initializedPluginIds) {\n const plugin = this.opts.registry.get(id);\n if (!plugin) continue;\n stopPromises.push(\n this.stopPlugin(plugin).catch((err) => {\n log.error({ channel: id, err }, 'Failed to stop channel plugin');\n }),\n );\n }\n\n await Promise.allSettled(stopPromises);\n this.running = false;\n log.info('All channel plugins stopped');\n }\n\n /** Stop one channel and suppress automatic restart until `startChannel` is called. */\n async stopChannel(channelId: string): Promise<void> {\n this.manuallyStopped.add(channelId);\n const plugin = this.opts.registry.get(channelId);\n if (!plugin || !this.initializedPluginIds.has(channelId)) {\n return;\n }\n await this.stopPlugin(plugin).catch((err) => {\n log.error({ channel: channelId, err }, 'Failed to stop channel plugin');\n });\n }\n\n /** Clear manual-stop and start one channel (requires prior `initialize()`). */\n async startChannel(channelId: string): Promise<void> {\n this.manuallyStopped.delete(channelId);\n const plugin = this.opts.registry.get(channelId);\n if (!plugin) {\n log.warn({ channel: channelId }, 'Unknown channel');\n return;\n }\n if (!this.initialized) {\n log.warn({ channel: channelId }, 'Channels not initialized');\n return;\n }\n const cfg = this.opts.getConfig();\n const channelConfig = asChannelConfig(cfg.channels?.[channelId]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) {\n log.debug({ channel: channelId }, 'Channel disabled in config, skipping start');\n return;\n }\n if (!this.initializedPluginIds.has(channelId)) {\n log.warn({ channel: channelId }, 'Channel was never initialized; call initialize() first');\n return;\n }\n await this.startPlugin(plugin, {});\n }\n\n /** Called by heartbeat: stop + start without clearing manualStop. No-op if user stopped it. */\n async softRestart(channelId: string): Promise<void> {\n if (this.manuallyStopped.has(channelId)) return;\n const plugin = this.opts.registry.get(channelId);\n if (!plugin || !this.initializedPluginIds.has(channelId)) return;\n try {\n await this.stopPlugin(plugin);\n await this.startPlugin(plugin, {});\n } catch (err) {\n log.error({ channel: channelId, err }, 'Channel soft restart after heartbeat failed');\n }\n }\n\n /** Forward a config snapshot to every initialised plugin's `onConfigUpdated` hook. */\n async forwardConfigUpdate(cfg: Config): Promise<void> {\n for (const id of this.initializedPluginIds) {\n const plugin = this.opts.registry.get(id);\n if (plugin?.onConfigUpdated) {\n await Promise.resolve(plugin.onConfigUpdated(cfg));\n }\n }\n }\n\n // ── Internals ───────────────────────────────────────────────────────────\n\n /**\n * Builtin channels require `channels.<id>.enabled`. Extension-managed channels\n * run unless explicitly disabled.\n */\n private shouldRunChannelPlugin(\n plugin: ChannelPlugin,\n channelConfig: Record<string, unknown> | undefined,\n ): boolean {\n if (plugin.extensionManagedConfig) {\n return channelConfig?.enabled !== false;\n }\n return !!channelConfig?.enabled;\n }\n\n private async initializePlugin(\n plugin: ChannelPlugin,\n channelConfig: Record<string, unknown>,\n ): Promise<void> {\n try {\n const options: ChannelPluginInitOptions = {\n bus: this.opts.bus,\n config: this.opts.getConfig(),\n channelConfig,\n sessionModel: this.opts.getSessionModelHooks?.(),\n };\n await plugin.init(options);\n this.initializedPluginIds.add(plugin.id);\n log.debug({ channel: plugin.id }, 'Channel plugin initialized');\n } catch (err) {\n log.error({ channel: plugin.id, err }, 'Failed to initialize channel plugin');\n }\n }\n\n private async startPlugin(\n plugin: ChannelPlugin,\n opts: { preserveRestartAttempts?: boolean },\n ): Promise<void> {\n const options: ChannelPluginStartOptions = {};\n try {\n await plugin.start(options);\n if (!opts.preserveRestartAttempts) {\n this.restartAttempts.delete(plugin.id);\n }\n this.opts.onPluginStarted?.(plugin);\n log.debug({ channel: plugin.id }, 'Channel plugin started');\n } catch (err) {\n const attempt = (this.restartAttempts.get(plugin.id) ?? 0) + 1;\n this.restartAttempts.set(plugin.id, attempt);\n if (attempt <= CHANNEL_RESTART_POLICY.maxAttempts) {\n const delayMs = computeBackoff(CHANNEL_RESTART_POLICY, attempt);\n log.warn(\n { channel: plugin.id, attempt, delayMs, err },\n 'Channel failed to start, scheduling restart',\n );\n setTimeout(() => {\n if (this.manuallyStopped.has(plugin.id)) {\n log.debug({ channel: plugin.id }, 'Skipping scheduled restart (manual stop)');\n return;\n }\n void this.startPlugin(plugin, { preserveRestartAttempts: true }).catch((e) => {\n log.error({ channel: plugin.id, err: e }, 'Channel restart attempt failed');\n });\n }, delayMs);\n } else {\n log.error({ channel: plugin.id, err }, 'Channel exceeded max restart attempts');\n }\n }\n }\n\n private async stopPlugin(plugin: ChannelPlugin): Promise<void> {\n this.opts.onPluginStopped?.(plugin.id);\n await plugin.stop();\n log.info({ channel: plugin.id }, 'Channel plugin stopped');\n }\n}\n"],"mappings":";;;;aA+BkD;AAElD,MAAM,MAAM,aAAa,6BAA6B;AAEtD,SAAS,gBAAgB,KAAmD;AAC1E,KAAI,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,CACvD,QAAO;;AAiBX,IAAa,6BAAb,MAAwC;CACtC;;CAEA,uCAAwC,IAAI,KAAa;CACzD,kCAAmC,IAAI,KAAqB;;CAE5D,kCAAmC,IAAI,KAAa;;CAEpD,yCAA0C,IAAI,KAAa;CAC3D,cAAsB;CACtB,UAAkB;CAElB,YAAY,MAAyC;AACnD,OAAK,OAAO;;CAGd,cAAc,UAA2B;AACvC,SAAO,KAAK,qBAAqB,IAAI,SAAS;;CAGhD,WAME;AACA,SAAO;GACL,aAAa,KAAK;GAClB,SAAS,KAAK;GACd,sBAAsB,CAAC,GAAG,KAAK,qBAAqB;GACpD,iBAAiB,CAAC,GAAG,KAAK,gBAAgB;GAC1C,iBAAiB,OAAO,YAAY,KAAK,gBAAgB;GAC1D;;;CAIH,2BAA2B,KAAuB;EAChD,MAAM,MAAgB,EAAE;AACxB,OAAK,MAAM,CAAC,IAAI,WAAW,KAAK,KAAK,SAAS,SAAS,EAAE;GACvD,MAAM,gBAAgB,gBAAgB,IAAI,WAAW,IAAI;AACzD,OAAI,CAAC,KAAK,uBAAuB,QAAQ,cAAc,CAAE;AACzD,OAAI,OAAO,KAAK,iCAAiC,KAC/C,KAAI,KAAK,GAAG;;AAGhB,SAAO;;CAGT,MAAM,aAA4B;AAChC,MAAI,KAAK,aAAa;AACpB,OAAI,KACF,EAAE,aAAa,KAAK,KAAK,SAAS,KAAK,CAAC,QAAQ,EAChD,qEACD;AACD;;EAGF,MAAM,MAAM,KAAK,KAAK,WAAW;EACjC,MAAM,eAAgC,EAAE;AAExC,OAAK,MAAM,CAAC,IAAI,WAAW,KAAK,KAAK,SAAS,SAAS,EAAE;GACvD,MAAM,gBAAgB,gBAAgB,IAAI,WAAW,IAAI;AAGzD,gBAAa,KAAK,KAAK,iBAAiB,QAAQ,iBAAiB,EAAE,CAAC,CAAC;;AAGvE,QAAM,QAAQ,WAAW,aAAa;AACtC,OAAK,cAAc;AACnB,MAAI,KAAK,kCAAkC;;;CAI7C,MAAM,MAAM,SAA0E;AACpF,MAAI,CAAC,KAAK,YACR,OAAM,IAAI,MAAM,2BAA2B;AAE7C,MAAI,KAAK,SAAS;AAChB,OAAI,KACF,EAAE,aAAa,KAAK,KAAK,SAAS,KAAK,CAAC,QAAQ,EAChD,2DACD;AACD;;EAGF,MAAM,WAAW,SAAS,yCAAyB,IAAI,KAAa;AACpE,OAAK,uBAAuB,OAAO;EAEnC,MAAM,MAAM,KAAK,KAAK,WAAW;EACjC,MAAM,gBAAiC,EAAE;AAEzC,OAAK,MAAM,CAAC,IAAI,WAAW,KAAK,KAAK,SAAS,SAAS,EAAE;GACvD,MAAM,gBAAgB,gBAAgB,IAAI,WAAW,IAAI;AACzD,OAAI,CAAC,KAAK,uBAAuB,QAAQ,cAAc,CAAE;AAEzD,OAAI,SAAS,IAAI,GAAG,EAAE;AACpB,SAAK,uBAAuB,IAAI,GAAG;AACnC,QAAI,KAAK,EAAE,SAAS,IAAI,EAAE,6CAA6C;AACvE;;AAGF,iBAAc,KACZ,KAAK,YAAY,QAAQ,EAAE,CAAC,CAAC,OAAO,QAAQ;AAC1C,QAAI,MAAM;KAAE,SAAS;KAAI;KAAK,EAAE,iCAAiC;KACjE,CACH;;AAGH,QAAM,QAAQ,WAAW,cAAc;AACvC,OAAK,UAAU;AACf,MAAI,KACF,EAAE,UAAU,CAAC,GAAG,KAAK,uBAAuB,EAAE,EAC9C,KAAK,uBAAuB,OAAO,IAC/B,wDACA,8BACL;;;CAIH,MAAM,wBAAuC;AAC3C,MAAI,KAAK,uBAAuB,SAAS,EAAG;AAC5C,MAAI,CAAC,KAAK,SAAS;AACjB,OAAI,KAAK,sEAAsE;AAC/E;;EAEF,MAAM,MAAM,CAAC,GAAG,KAAK,uBAAuB;AAC5C,OAAK,uBAAuB,OAAO;EACnC,MAAM,MAAM,KAAK,KAAK,WAAW;EACjC,MAAM,gBAAiC,EAAE;AACzC,OAAK,MAAM,MAAM,KAAK;GACpB,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,GAAG;AACzC,OAAI,CAAC,OAAQ;GACb,MAAM,gBAAgB,gBAAgB,IAAI,WAAW,IAAI;AACzD,OAAI,CAAC,KAAK,uBAAuB,QAAQ,cAAc,CAAE;AACzD,iBAAc,KACZ,KAAK,YAAY,QAAQ,EAAE,CAAC,CAAC,OAAO,QAAQ;AAC1C,QAAI,MAAM;KAAE,SAAS;KAAI;KAAK,EAAE,0CAA0C;KAC1E,CACH;;AAEH,QAAM,QAAQ,WAAW,cAAc;AACvC,MAAI,KAAK,EAAE,UAAU,KAAK,EAAE,sCAAsC;;CAGpE,MAAM,OAAsB;AAC1B,MAAI,CAAC,KAAK,QAAS;AAEnB,OAAK,uBAAuB,OAAO;EAEnC,MAAM,eAAgC,EAAE;AACxC,OAAK,MAAM,MAAM,KAAK,sBAAsB;GAC1C,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,GAAG;AACzC,OAAI,CAAC,OAAQ;AACb,gBAAa,KACX,KAAK,WAAW,OAAO,CAAC,OAAO,QAAQ;AACrC,QAAI,MAAM;KAAE,SAAS;KAAI;KAAK,EAAE,gCAAgC;KAChE,CACH;;AAGH,QAAM,QAAQ,WAAW,aAAa;AACtC,OAAK,UAAU;AACf,MAAI,KAAK,8BAA8B;;;CAIzC,MAAM,YAAY,WAAkC;AAClD,OAAK,gBAAgB,IAAI,UAAU;EACnC,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,UAAU;AAChD,MAAI,CAAC,UAAU,CAAC,KAAK,qBAAqB,IAAI,UAAU,CACtD;AAEF,QAAM,KAAK,WAAW,OAAO,CAAC,OAAO,QAAQ;AAC3C,OAAI,MAAM;IAAE,SAAS;IAAW;IAAK,EAAE,gCAAgC;IACvE;;;CAIJ,MAAM,aAAa,WAAkC;AACnD,OAAK,gBAAgB,OAAO,UAAU;EACtC,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,UAAU;AAChD,MAAI,CAAC,QAAQ;AACX,OAAI,KAAK,EAAE,SAAS,WAAW,EAAE,kBAAkB;AACnD;;AAEF,MAAI,CAAC,KAAK,aAAa;AACrB,OAAI,KAAK,EAAE,SAAS,WAAW,EAAE,2BAA2B;AAC5D;;EAGF,MAAM,gBAAgB,gBADV,KAAK,KAAK,WACmB,CAAC,WAAW,WAAW;AAChE,MAAI,CAAC,KAAK,uBAAuB,QAAQ,cAAc,EAAE;AACvD,OAAI,MAAM,EAAE,SAAS,WAAW,EAAE,6CAA6C;AAC/E;;AAEF,MAAI,CAAC,KAAK,qBAAqB,IAAI,UAAU,EAAE;AAC7C,OAAI,KAAK,EAAE,SAAS,WAAW,EAAE,yDAAyD;AAC1F;;AAEF,QAAM,KAAK,YAAY,QAAQ,EAAE,CAAC;;;CAIpC,MAAM,YAAY,WAAkC;AAClD,MAAI,KAAK,gBAAgB,IAAI,UAAU,CAAE;EACzC,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,UAAU;AAChD,MAAI,CAAC,UAAU,CAAC,KAAK,qBAAqB,IAAI,UAAU,CAAE;AAC1D,MAAI;AACF,SAAM,KAAK,WAAW,OAAO;AAC7B,SAAM,KAAK,YAAY,QAAQ,EAAE,CAAC;WAC3B,KAAK;AACZ,OAAI,MAAM;IAAE,SAAS;IAAW;IAAK,EAAE,8CAA8C;;;;CAKzF,MAAM,oBAAoB,KAA4B;AACpD,OAAK,MAAM,MAAM,KAAK,sBAAsB;GAC1C,MAAM,SAAS,KAAK,KAAK,SAAS,IAAI,GAAG;AACzC,OAAI,QAAQ,gBACV,OAAM,QAAQ,QAAQ,OAAO,gBAAgB,IAAI,CAAC;;;;;;;CAWxD,uBACE,QACA,eACS;AACT,MAAI,OAAO,uBACT,QAAO,eAAe,YAAY;AAEpC,SAAO,CAAC,CAAC,eAAe;;CAG1B,MAAc,iBACZ,QACA,eACe;AACf,MAAI;GACF,MAAM,UAAoC;IACxC,KAAK,KAAK,KAAK;IACf,QAAQ,KAAK,KAAK,WAAW;IAC7B;IACA,cAAc,KAAK,KAAK,wBAAwB;IACjD;AACD,SAAM,OAAO,KAAK,QAAQ;AAC1B,QAAK,qBAAqB,IAAI,OAAO,GAAG;AACxC,OAAI,MAAM,EAAE,SAAS,OAAO,IAAI,EAAE,6BAA6B;WACxD,KAAK;AACZ,OAAI,MAAM;IAAE,SAAS,OAAO;IAAI;IAAK,EAAE,sCAAsC;;;CAIjF,MAAc,YACZ,QACA,MACe;EACf,MAAM,UAAqC,EAAE;AAC7C,MAAI;AACF,SAAM,OAAO,MAAM,QAAQ;AAC3B,OAAI,CAAC,KAAK,wBACR,MAAK,gBAAgB,OAAO,OAAO,GAAG;AAExC,QAAK,KAAK,kBAAkB,OAAO;AACnC,OAAI,MAAM,EAAE,SAAS,OAAO,IAAI,EAAE,yBAAyB;WACpD,KAAK;GACZ,MAAM,WAAW,KAAK,gBAAgB,IAAI,OAAO,GAAG,IAAI,KAAK;AAC7D,QAAK,gBAAgB,IAAI,OAAO,IAAI,QAAQ;AAC5C,OAAI,WAAW,uBAAuB,aAAa;IACjD,MAAM,UAAU,eAAe,wBAAwB,QAAQ;AAC/D,QAAI,KACF;KAAE,SAAS,OAAO;KAAI;KAAS;KAAS;KAAK,EAC7C,8CACD;AACD,qBAAiB;AACf,SAAI,KAAK,gBAAgB,IAAI,OAAO,GAAG,EAAE;AACvC,UAAI,MAAM,EAAE,SAAS,OAAO,IAAI,EAAE,2CAA2C;AAC7E;;AAEG,UAAK,YAAY,QAAQ,EAAE,yBAAyB,MAAM,CAAC,CAAC,OAAO,MAAM;AAC5E,UAAI,MAAM;OAAE,SAAS,OAAO;OAAI,KAAK;OAAG,EAAE,iCAAiC;OAC3E;OACD,QAAQ;SAEX,KAAI,MAAM;IAAE,SAAS,OAAO;IAAI;IAAK,EAAE,wCAAwC;;;CAKrF,MAAc,WAAW,QAAsC;AAC7D,OAAK,KAAK,kBAAkB,OAAO,GAAG;AACtC,QAAM,OAAO,MAAM;AACnB,MAAI,KAAK,EAAE,SAAS,OAAO,IAAI,EAAE,yBAAyB"}
|
|
1
|
+
{"version":3,"file":"lifecycle-supervisor.js","names":[],"sources":["../../../src/channels/lifecycle-supervisor.ts"],"sourcesContent":["/**\n * ChannelLifecycleSupervisor — owns the start/stop/restart state machine for\n * every channel plugin.\n *\n * Concerns:\n * - `initialize()` — call each plugin's `init(...)` once and remember success\n * - Two-phase `start()` + `startDeferredConnects()` for channels whose\n * `meta.deferConnectUntilAfterListen` is true (HTTP listener has to be up\n * before they dial out)\n * - Per-channel manual stop / start (UI-driven; suppresses auto-restart)\n * - Exponential restart backoff via {@link CHANNEL_RESTART_POLICY}\n * - Soft restart (called from heartbeat) — stop + startPlugin, manual-stop guarded\n *\n * Heartbeat probes themselves live in {@link ChannelHeartbeatScheduler}; this\n * supervisor schedules them via `onPluginStarted` / `onPluginStopped` callbacks\n * passed in by the caller.\n *\n * Extracted from `ChannelManager` so the manager can be a thin composition root.\n */\n\nimport type { Config } from '../config/schema.js';\nimport type { MessageBus } from '../infra/bus/index.js';\n\nimport type {\n ChannelPlugin,\n ChannelPluginInitOptions,\n ChannelPluginSessionModelHooks,\n ChannelPluginStartOptions,\n} from './plugin-types.js';\nimport type { ChannelPluginRegistry } from './plugin-registry.js';\nimport { CHANNEL_RESTART_POLICY, computeBackoff } from './restart-policy.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('ChannelLifecycleSupervisor');\n\nfunction asChannelConfig(raw: unknown): Record<string, unknown> | undefined {\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as Record<string, unknown>;\n }\n return undefined;\n}\n\nexport interface ChannelLifecycleSupervisorOptions {\n bus: MessageBus;\n registry: ChannelPluginRegistry;\n /** Effective config snapshot (per-channel `channels.<id>.*`). */\n getConfig: () => Config;\n /** Hooks for sub-classes / external observers: heartbeat scheduling, etc. */\n onPluginStarted?: (plugin: ChannelPlugin) => void;\n onPluginStopped?: (pluginId: string) => void;\n /** Optional session-model hooks forwarded into `plugin.init()`. */\n getSessionModelHooks?: () => ChannelPluginSessionModelHooks | undefined;\n}\n\nexport class ChannelLifecycleSupervisor {\n private readonly opts: ChannelLifecycleSupervisorOptions;\n /** Plugin ids whose `init()` completed (used by start/stop loops). */\n private readonly initializedPluginIds = new Set<string>();\n private readonly restartAttempts = new Map<string, number>();\n /** When set, failed-start auto-restart is suppressed for that channel id. */\n private readonly manuallyStopped = new Set<string>();\n /** Plugins that skipped `start()` until `startDeferredConnects()`. */\n private readonly deferredConnectPending = new Set<string>();\n private initialized = false;\n private running = false;\n\n constructor(opts: ChannelLifecycleSupervisorOptions) {\n this.opts = opts;\n }\n\n isInitialized(pluginId: string): boolean {\n return this.initializedPluginIds.has(pluginId);\n }\n\n snapshot(): {\n initialized: boolean;\n running: boolean;\n initializedPluginIds: string[];\n manuallyStopped: string[];\n restartAttempts: Record<string, number>;\n } {\n return {\n initialized: this.initialized,\n running: this.running,\n initializedPluginIds: [...this.initializedPluginIds],\n manuallyStopped: [...this.manuallyStopped],\n restartAttempts: Object.fromEntries(this.restartAttempts),\n };\n }\n\n /** Channel ids that would run and declare `meta.deferConnectUntilAfterListen` (for logging / metrics). */\n listDeferConnectChannelIds(cfg: Config): string[] {\n const out: string[] = [];\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n if (plugin.meta.deferConnectUntilAfterListen === true) {\n out.push(id);\n }\n }\n return out;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n log.warn(\n { pluginCount: this.opts.registry.ids().length },\n 'initialize() called again; channels already initialized — skipping',\n );\n return;\n }\n\n const cfg = this.opts.getConfig();\n const initPromises: Promise<void>[] = [];\n\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n // Always init so `onConfigUpdated` runs on hot reload (e.g. Weixin turned off after QR-login\n // started monitors while the plugin was previously skipped here and had no bus/`initialized` id).\n initPromises.push(this.initializePlugin(plugin, channelConfig ?? {}));\n }\n\n await Promise.allSettled(initPromises);\n this.initialized = true;\n log.info('All channel plugins initialized');\n }\n\n async initializeChannel(channelId: string): Promise<boolean> {\n const plugin = this.opts.registry.get(channelId);\n if (!plugin) {\n log.warn({ channel: channelId }, 'Unknown channel');\n return false;\n }\n if (this.initializedPluginIds.has(channelId)) {\n return true;\n }\n const cfg = this.opts.getConfig();\n await this.initializePlugin(plugin, asChannelConfig(cfg.channels?.[channelId]) ?? {});\n return this.initializedPluginIds.has(channelId);\n }\n\n /** Phase 1: start every enabled channel except those in `deferConnectPluginIds`. */\n async start(options?: { deferConnectPluginIds?: ReadonlySet<string> }): Promise<void> {\n if (!this.initialized) {\n throw new Error('Channels not initialized');\n }\n if (this.running) {\n log.warn(\n { pluginCount: this.opts.registry.ids().length },\n 'start() called while channels already running — skipping',\n );\n return;\n }\n\n const deferIds = options?.deferConnectPluginIds ?? new Set<string>();\n this.deferredConnectPending.clear();\n\n const cfg = this.opts.getConfig();\n const startPromises: Promise<void>[] = [];\n\n for (const [id, plugin] of this.opts.registry.entries()) {\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n\n if (deferIds.has(id)) {\n this.deferredConnectPending.add(id);\n log.info({ channel: id }, 'Channel connect deferred until HTTP listen');\n continue;\n }\n\n startPromises.push(\n this.startPlugin(plugin, {}).catch((err) => {\n log.error({ channel: id, err }, 'Failed to start channel plugin');\n }),\n );\n }\n\n await Promise.allSettled(startPromises);\n this.running = true;\n log.info(\n { deferred: [...this.deferredConnectPending] },\n this.deferredConnectPending.size > 0\n ? 'Channel plugins started (deferred connects pending)'\n : 'All channel plugins started',\n );\n }\n\n /** Phase 2: `start()` for channels deferred at Phase 1. No-op if none pending. */\n async startDeferredConnects(): Promise<void> {\n if (this.deferredConnectPending.size === 0) return;\n if (!this.running) {\n log.warn('startDeferredConnects called before channel phase-1 start; skipping');\n return;\n }\n const ids = [...this.deferredConnectPending];\n this.deferredConnectPending.clear();\n const cfg = this.opts.getConfig();\n const startPromises: Promise<void>[] = [];\n for (const id of ids) {\n const plugin = this.opts.registry.get(id);\n if (!plugin) continue;\n const channelConfig = asChannelConfig(cfg.channels?.[id]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) continue;\n startPromises.push(\n this.startPlugin(plugin, {}).catch((err) => {\n log.error({ channel: id, err }, 'Failed to start deferred channel plugin');\n }),\n );\n }\n await Promise.allSettled(startPromises);\n log.info({ channels: ids }, 'Deferred channel connects completed');\n }\n\n async stop(): Promise<void> {\n if (!this.running) return;\n\n this.deferredConnectPending.clear();\n\n const stopPromises: Promise<void>[] = [];\n for (const id of this.initializedPluginIds) {\n const plugin = this.opts.registry.get(id);\n if (!plugin) continue;\n stopPromises.push(\n this.stopPlugin(plugin).catch((err) => {\n log.error({ channel: id, err }, 'Failed to stop channel plugin');\n }),\n );\n }\n\n await Promise.allSettled(stopPromises);\n this.running = false;\n log.info('All channel plugins stopped');\n }\n\n /** Stop one channel and suppress automatic restart until `startChannel` is called. */\n async stopChannel(channelId: string): Promise<void> {\n this.manuallyStopped.add(channelId);\n const plugin = this.opts.registry.get(channelId);\n if (!plugin || !this.initializedPluginIds.has(channelId)) {\n return;\n }\n await this.stopPlugin(plugin).catch((err) => {\n log.error({ channel: channelId, err }, 'Failed to stop channel plugin');\n });\n }\n\n /** Clear manual-stop and start one channel (requires prior `initialize()`). */\n async startChannel(channelId: string): Promise<void> {\n this.manuallyStopped.delete(channelId);\n const plugin = this.opts.registry.get(channelId);\n if (!plugin) {\n log.warn({ channel: channelId }, 'Unknown channel');\n return;\n }\n if (!this.initialized) {\n log.warn({ channel: channelId }, 'Channels not initialized');\n return;\n }\n const cfg = this.opts.getConfig();\n const channelConfig = asChannelConfig(cfg.channels?.[channelId]);\n if (!this.shouldRunChannelPlugin(plugin, channelConfig)) {\n log.debug({ channel: channelId }, 'Channel disabled in config, skipping start');\n return;\n }\n if (!this.initializedPluginIds.has(channelId)) {\n log.warn({ channel: channelId }, 'Channel was never initialized; call initialize() first');\n return;\n }\n await this.startPlugin(plugin, {});\n }\n\n /** Called by heartbeat: stop + start without clearing manualStop. No-op if user stopped it. */\n async softRestart(channelId: string): Promise<void> {\n if (this.manuallyStopped.has(channelId)) return;\n const plugin = this.opts.registry.get(channelId);\n if (!plugin || !this.initializedPluginIds.has(channelId)) return;\n try {\n await this.stopPlugin(plugin);\n await this.startPlugin(plugin, {});\n } catch (err) {\n log.error({ channel: channelId, err }, 'Channel soft restart after heartbeat failed');\n }\n }\n\n /** Forward a config snapshot to every initialised plugin's `onConfigUpdated` hook. */\n async forwardConfigUpdate(cfg: Config): Promise<void> {\n for (const id of this.initializedPluginIds) {\n const plugin = this.opts.registry.get(id);\n if (plugin?.onConfigUpdated) {\n await Promise.resolve(plugin.onConfigUpdated(cfg));\n }\n }\n }\n\n // ── Internals ───────────────────────────────────────────────────────────\n\n /**\n * Builtin channels require `channels.<id>.enabled`. Extension-managed channels\n * run unless explicitly disabled.\n */\n private shouldRunChannelPlugin(\n plugin: ChannelPlugin,\n channelConfig: Record<string, unknown> | undefined,\n ): boolean {\n if (plugin.extensionManagedConfig) {\n return channelConfig?.enabled !== false;\n }\n return !!channelConfig?.enabled;\n }\n\n private async initializePlugin(\n plugin: ChannelPlugin,\n channelConfig: Record<string, unknown>,\n ): Promise<void> {\n try {\n const options: ChannelPluginInitOptions = {\n bus: this.opts.bus,\n config: this.opts.getConfig(),\n channelConfig,\n sessionModel: this.opts.getSessionModelHooks?.(),\n };\n await plugin.init(options);\n this.initializedPluginIds.add(plugin.id);\n log.debug({ channel: plugin.id }, 'Channel plugin initialized');\n } catch (err) {\n log.error({ channel: plugin.id, err }, 'Failed to initialize channel plugin');\n }\n }\n\n private async startPlugin(\n plugin: ChannelPlugin,\n opts: { preserveRestartAttempts?: boolean },\n ): Promise<void> {\n const options: ChannelPluginStartOptions = {};\n try {\n await plugin.start(options);\n if (!opts.preserveRestartAttempts) {\n this.restartAttempts.delete(plugin.id);\n }\n this.opts.onPluginStarted?.(plugin);\n log.debug({ channel: plugin.id }, 'Channel plugin started');\n } catch (err) {\n const attempt = (this.restartAttempts.get(plugin.id) ?? 0) + 1;\n this.restartAttempts.set(plugin.id, attempt);\n if (attempt <= CHANNEL_RESTART_POLICY.maxAttempts) {\n const delayMs = computeBackoff(CHANNEL_RESTART_POLICY, attempt);\n log.warn(\n { channel: plugin.id, attempt, delayMs, err },\n 'Channel failed to start, scheduling restart',\n );\n setTimeout(() => {\n if (this.manuallyStopped.has(plugin.id)) {\n log.debug({ channel: plugin.id }, 'Skipping scheduled restart (manual stop)');\n return;\n }\n void this.startPlugin(plugin, { preserveRestartAttempts: true }).catch((e) => {\n log.error({ channel: plugin.id, err: e }, 'Channel restart attempt failed');\n });\n }, delayMs);\n } else {\n log.error({ channel: plugin.id, err }, 'Channel exceeded max restart attempts');\n }\n }\n }\n\n private async stopPlugin(plugin: ChannelPlugin): Promise<void> {\n this.opts.onPluginStopped?.(plugin.id);\n await plugin.stop();\n log.info({ channel: plugin.id }, 'Channel plugin stopped');\n }\n}\n"],"mappings":"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"}
|
|
@@ -41,6 +41,7 @@ export declare class ChannelManager {
|
|
|
41
41
|
/** Channel IDs whose runtime reports connected (e.g. Telegram polling active). */
|
|
42
42
|
getRunningChannels(): string[];
|
|
43
43
|
initialize(): Promise<void>;
|
|
44
|
+
initializeChannel(channelId: string): Promise<boolean>;
|
|
44
45
|
start(options?: {
|
|
45
46
|
deferConnectPluginIds?: ReadonlySet<string>;
|
|
46
47
|
}): Promise<void>;
|