@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-media.js","names":[],"sources":["../../../../src/agent/tools/send-media.ts"],"sourcesContent":["// Send media tool - allows sending local files as media\nimport { Type } from '@sinclair/typebox';\nimport { readFile } from 'fs/promises';\nimport { basename } from 'node:path';\nimport { AgentTool, type AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { checkFileSafety } from '../prompt/safety.js';\nimport { resolvePathUnderWorkspace } from './tool-paths.js';\nimport type { MessageBus, OutboundMessage } from '../../infra/bus/index.js';\n\nconst SendMediaSchema = Type.Object({\n filePath: Type.String({\n description:\n 'File to send. Relative paths are under the current agent workspace; absolute paths are used as given.',\n }),\n mediaType: Type.Optional(Type.Enum({\n photo: 'photo',\n video: 'video',\n audio: 'audio',\n document: 'document',\n }, { description: 'Type of media to send (auto-detected if not specified)' })),\n caption: Type.Optional(Type.String({ description: 'Caption for the media' })),\n});\n\ninterface MessageContext {\n channel: string;\n chatId: string;\n}\n\ntype SendMediaParams = {\n filePath: string;\n mediaType?: 'photo' | 'video' | 'audio' | 'document';\n caption?: string;\n};\n\n// Detect media type from file extension\nfunction detectMediaType(filePath: string): 'photo' | 'video' | 'audio' | 'document' {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp'
|
|
1
|
+
{"version":3,"file":"send-media.js","names":[],"sources":["../../../../src/agent/tools/send-media.ts"],"sourcesContent":["// Send media tool - allows sending local files as media\nimport { Type } from '@sinclair/typebox';\nimport { readFile } from 'fs/promises';\nimport { basename } from 'node:path';\nimport { AgentTool, type AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { checkFileSafety } from '../prompt/safety.js';\nimport { resolvePathUnderWorkspace } from './tool-paths.js';\nimport type { MessageBus, OutboundMessage } from '../../infra/bus/index.js';\n\nconst SendMediaSchema = Type.Object({\n filePath: Type.String({\n description:\n 'File to send. Relative paths are under the current agent workspace; absolute paths are used as given.',\n }),\n mediaType: Type.Optional(Type.Enum({\n photo: 'photo',\n video: 'video',\n audio: 'audio',\n document: 'document',\n }, { description: 'Type of media to send (auto-detected if not specified)' })),\n caption: Type.Optional(Type.String({ description: 'Caption for the media' })),\n});\n\ninterface MessageContext {\n channel: string;\n chatId: string;\n}\n\ntype SendMediaParams = {\n filePath: string;\n mediaType?: 'photo' | 'video' | 'audio' | 'document';\n caption?: string;\n};\n\n// Detect media type from file extension\nfunction detectMediaType(filePath: string): 'photo' | 'video' | 'audio' | 'document' {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp'];\n const videoExts = ['mp4', 'mov', 'avi', 'webm', 'mkv'];\n const audioExts = ['mp3', 'wav', 'ogg', 'm4a', 'flac'];\n\n if (imageExts.includes(ext || '')) return 'photo';\n if (videoExts.includes(ext || '')) return 'video';\n if (audioExts.includes(ext || '')) return 'audio';\n return 'document';\n}\n\n// Detect MIME type from file extension\nfunction detectMimeType(filePath: string): string {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const mimeMap: Record<string, string> = {\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n mp4: 'video/mp4',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n webm: 'video/webm',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n m4a: 'audio/mp4',\n flac: 'audio/flac',\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n txt: 'text/plain',\n zip: 'application/zip',\n rar: 'application/x-rar-compressed',\n };\n return mimeMap[ext || ''] || 'application/octet-stream';\n}\n\nexport function createSendMediaTool(\n workspace: string,\n bus: MessageBus,\n getContext: () => MessageContext | null,\n): AgentTool {\n return {\n name: 'send_media',\n description:\n 'Send a media file (photo, video, audio, document) to the current conversation. Relative paths resolve to the current agent workspace (same as read_file).',\n parameters: SendMediaSchema,\n label: '📎 Send Media',\n\n async execute(\n _toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n const p = params as SendMediaParams;\n const ctx = getContext();\n if (!ctx) {\n return {\n content: [{ type: 'text', text: 'Error: No active conversation context' }],\n details: {},\n };\n }\n\n const resolved = resolvePathUnderWorkspace(p.filePath, workspace);\n const safety = checkFileSafety('read', resolved);\n if (!safety.allowed) {\n return {\n content: [{ type: 'text', text: `🚫 ${safety.message}` }],\n details: {},\n };\n }\n\n try {\n const fileBuffer = await readFile(resolved);\n const base64 = fileBuffer.toString('base64');\n const mimeType = detectMimeType(resolved);\n const mediaType = p.mediaType || detectMediaType(resolved);\n\n // Create data URL\n const dataUrl = `data:${mimeType};base64,${base64}`;\n\n const msg: OutboundMessage = {\n channel: ctx.channel,\n chat_id: ctx.chatId,\n content: p.caption || '',\n mediaUrl: dataUrl,\n mediaType,\n };\n\n await bus.publishOutbound(msg);\n\n const fileName = basename(resolved);\n return {\n content: [{ type: 'text', text: `✅ Media sent: ${fileName} (${mediaType})` }],\n details: { filePath: resolved, mediaType },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text', text: `Error sending media: ${errorMessage}` }],\n details: { error: errorMessage },\n };\n }\n },\n } as any;\n}\n"],"mappings":";;;;;;AASA,MAAM,kBAAkB,KAAK,OAAO;CAClC,UAAU,KAAK,OAAO,EACpB,aACE,yGACH,CAAC;CACF,WAAW,KAAK,SAAS,KAAK,KAAK;EACjC,OAAO;EACP,OAAO;EACP,OAAO;EACP,UAAU;EACX,EAAE,EAAE,aAAa,0DAA0D,CAAC,CAAC;CAC9E,SAAS,KAAK,SAAS,KAAK,OAAO,EAAE,aAAa,yBAAyB,CAAC,CAAC;CAC9E,CAAC;AAcF,SAAS,gBAAgB,UAA4D;CACnF,MAAM,MAAM,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa;CACpD,MAAM,YAAY;EAAC;EAAO;EAAQ;EAAO;EAAO;EAAQ;EAAM;CAC9D,MAAM,YAAY;EAAC;EAAO;EAAO;EAAO;EAAQ;EAAM;CACtD,MAAM,YAAY;EAAC;EAAO;EAAO;EAAO;EAAO;EAAO;AAEtD,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,QAAO;;AAIT,SAAS,eAAe,UAA0B;AA0BhD,QAAO;EAvBL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EAEO,CAzBF,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,IAyB9B,OAAO;;AAG/B,SAAgB,oBACd,WACA,KACA,YACW;AACX,QAAO;EACL,MAAM;EACN,aACE;EACF,YAAY;EACZ,OAAO;EAEP,MAAM,QACJ,aACA,QACA,SAC8B;GAC9B,MAAM,IAAI;GACV,MAAM,MAAM,YAAY;AACxB,OAAI,CAAC,IACH,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAyC,CAAC;IAC1E,SAAS,EAAE;IACZ;GAGH,MAAM,WAAW,0BAA0B,EAAE,UAAU,UAAU;GACjE,MAAM,SAAS,gBAAgB,QAAQ,SAAS;AAChD,OAAI,CAAC,OAAO,QACV,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,MAAM,OAAO;KAAW,CAAC;IACzD,SAAS,EAAE;IACZ;AAGH,OAAI;IAEF,MAAM,UAAS,MADU,SAAS,SAAS,EACjB,SAAS,SAAS;IAC5C,MAAM,WAAW,eAAe,SAAS;IACzC,MAAM,YAAY,EAAE,aAAa,gBAAgB,SAAS;IAG1D,MAAM,UAAU,QAAQ,SAAS,UAAU;IAE3C,MAAM,MAAuB;KAC3B,SAAS,IAAI;KACb,SAAS,IAAI;KACb,SAAS,EAAE,WAAW;KACtB,UAAU;KACV;KACD;AAED,UAAM,IAAI,gBAAgB,IAAI;AAG9B,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,iBAFjB,SAAS,SAEiC,CAAC,IAAI,UAAU;MAAI,CAAC;KAC7E,SAAS;MAAE,UAAU;MAAU;MAAW;KAC3C;YACM,OAAO;IACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAC3E,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,wBAAwB;MAAgB,CAAC;KACzE,SAAS,EAAE,OAAO,cAAc;KACjC;;;EAGN"}
|
|
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
4
4
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
5
|
-
import { complete } from "@earendil-works/pi-ai";
|
|
6
5
|
import { Type } from "@sinclair/typebox";
|
|
6
|
+
import { complete } from "@earendil-works/pi-ai";
|
|
7
7
|
//#region src/agent/tools/session-search-tool.ts
|
|
8
8
|
init_providers();
|
|
9
9
|
init_logger();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { evaluateExecPolicy } from "../sandbox/exec-policy.js";
|
|
2
|
-
import { spawn } from "child_process";
|
|
3
2
|
import { Type } from "@sinclair/typebox";
|
|
3
|
+
import { spawn } from "child_process";
|
|
4
4
|
//#region src/agent/tools/shell.ts
|
|
5
5
|
const MAX_SHELL_TIMEOUT = 300;
|
|
6
6
|
const DEFAULT_MAX_BYTES = 50 * 1024;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../../config/paths-state.js";
|
|
2
2
|
import { init_paths } from "../../config/paths.js";
|
|
3
3
|
import { DEFAULT_MAX_BYTES, formatSize, truncateHead } from "./truncate.js";
|
|
4
|
-
import { createSkillConfigManager, isSkillEnabled } from "../skills/config.js";
|
|
4
|
+
import { createSkillConfigManager, isSkillEnabled, resolveSkillConfig } from "../skills/config.js";
|
|
5
5
|
import { resolveSkillReadablePath } from "../skills/skill-view-path.js";
|
|
6
6
|
import { readFileSync, statSync } from "fs";
|
|
7
7
|
import { Type } from "@sinclair/typebox";
|
|
@@ -76,17 +76,43 @@ function createSkillViewTool(deps) {
|
|
|
76
76
|
if (!skill) return {
|
|
77
77
|
content: [{
|
|
78
78
|
type: "text",
|
|
79
|
-
text: `Skill
|
|
79
|
+
text: `Skill "${p.name}" was not found. It may not be installed. Open the Skills library to install it, or use skills_list to see available names.`
|
|
80
80
|
}],
|
|
81
|
-
details: {
|
|
81
|
+
details: {
|
|
82
|
+
errorCode: "skill_not_found",
|
|
83
|
+
skillName: p.name
|
|
84
|
+
}
|
|
82
85
|
};
|
|
83
86
|
const skillsConfig = createSkillConfigManager(resolveStateDir()).load();
|
|
84
|
-
if (
|
|
87
|
+
if (resolveSkillConfig(skill, skillsConfig).enabled === false) return {
|
|
85
88
|
content: [{
|
|
86
89
|
type: "text",
|
|
87
|
-
text: `Skill "${skill.name}" is disabled
|
|
90
|
+
text: `Skill "${skill.name}" is installed but disabled. Enable it in Skills settings before using it.`
|
|
88
91
|
}],
|
|
89
|
-
details: {
|
|
92
|
+
details: {
|
|
93
|
+
errorCode: "skill_disabled",
|
|
94
|
+
skillName: skill.name
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
if (skill.disableModelInvocation) return {
|
|
98
|
+
content: [{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: `Skill "${skill.name}" is installed, but it is not available for model invocation.`
|
|
101
|
+
}],
|
|
102
|
+
details: {
|
|
103
|
+
errorCode: "skill_model_invocation_disabled",
|
|
104
|
+
skillName: skill.name
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
if (!isSkillEnabled(skill, skillsConfig)) return {
|
|
108
|
+
content: [{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: `Skill "${skill.name}" is installed, but its requirements are not met.`
|
|
111
|
+
}],
|
|
112
|
+
details: {
|
|
113
|
+
errorCode: "skill_requirements_unmet",
|
|
114
|
+
skillName: skill.name
|
|
115
|
+
}
|
|
90
116
|
};
|
|
91
117
|
const idx = deps.getSkillIndexingContext?.();
|
|
92
118
|
if (!mgr.getEnabledSkillsForAgentSession({
|
|
@@ -95,9 +121,12 @@ function createSkillViewTool(deps) {
|
|
|
95
121
|
}).some((s) => s.name === skill.name)) return {
|
|
96
122
|
content: [{
|
|
97
123
|
type: "text",
|
|
98
|
-
text: `
|
|
124
|
+
text: `The current agent cannot use skill "${skill.name}". It is installed, but it is not in this agent's skill allowlist or is hidden by tool gating. Enable it in Agent settings → Skills before using it.`
|
|
99
125
|
}],
|
|
100
|
-
details: {
|
|
126
|
+
details: {
|
|
127
|
+
errorCode: "skill_agent_denied",
|
|
128
|
+
skillName: skill.name
|
|
129
|
+
}
|
|
101
130
|
};
|
|
102
131
|
const resolved = resolveSkillReadablePath(skill, p.path);
|
|
103
132
|
if (resolved.ok === false) return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-tools.js","names":[],"sources":["../../../../src/agent/tools/skills-tools.ts"],"sourcesContent":["import { readFileSync, statSync } from 'fs';\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { resolveStateDir } from '../../config/paths.js';\nimport { createSkillConfigManager, isSkillEnabled } from '../skills/config.js';\nimport { resolveSkillReadablePath } from '../skills/skill-view-path.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { truncateHead, formatSize, DEFAULT_MAX_BYTES } from './truncate.js';\n\nconst DEFAULT_MAX_LINES = 500;\nconst DEFAULT_MAX_SKILL_FILE_BYTES = 1_048_576;\n\nconst SkillsListSchema = Type.Object({\n query: Type.Optional(\n Type.String({\n description: 'Optional case-insensitive substring filter on skill name and description',\n }),\n ),\n});\n\nconst SkillViewSchema = Type.Object({\n name: Type.String({ description: 'Skill name (as in <available_skills> / skills_list)' }),\n path: Type.Optional(\n Type.String({\n description:\n 'Relative path inside the skill dir: omit for SKILL.md, or e.g. references/doc.md (only references/, templates/, scripts/, assets/)',\n }),\n ),\n limit: Type.Optional(\n Type.Number({ description: 'Max lines to return (default 500, like read_file)' }),\n ),\n});\n\nexport interface SkillsToolsDeps {\n getSkillManager: () => SkillManager | undefined;\n getSkillIndexingContext?: () =>\n | { registeredToolNames: string[]; skillAllowlist?: string[] }\n | undefined;\n /** Register declared env var names for shell / tool passthrough (values never exposed). */\n registerSkillEnvPassthrough?: (names: string[]) => void;\n}\n\nfunction maxSkillBytes(): number {\n const lim = createSkillConfigManager(resolveStateDir()).load().limits?.maxSkillFileBytes;\n return typeof lim === 'number' && lim > 0 ? lim : DEFAULT_MAX_SKILL_FILE_BYTES;\n}\n\nexport function createSkillsListTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skills_list',\n label: '📚 Skills',\n description:\n 'List available skills (name and description only). Use skill_view(name) to load SKILL.md or a file under references/, templates/, scripts/, or assets/.',\n parameters: SkillsListSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n let skills = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n const q = (params as { query?: string }).query?.trim().toLowerCase();\n if (q) {\n skills = skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) || s.description.toLowerCase().includes(q),\n );\n }\n\n const payload = {\n skills: skills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.source,\n })),\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],\n details: {},\n };\n },\n } as any;\n}\n\nexport function createSkillViewTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skill_view',\n label: '📖 Skill',\n description:\n 'Load a skill\\'s SKILL.md (default) or a supporting file under references/, templates/, scripts/, or assets/.',\n parameters: SkillViewSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const p = params as { name: string; path?: string; limit?: number };\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const skill = mgr.findSkill(p.name.trim());\n if (!skill) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill not found: \"${p.name}\". Use skills_list to see available names.`,\n },\n ],\n details: {},\n };\n }\n\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n if (skill.disableModelInvocation || !isSkillEnabled(skill, skillsConfig)) {\n return {\n content: [{ type: 'text', text: `Skill \"${skill.name}\" is disabled or requirements are not met.` }],\n details: {},\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n const visible = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n if (!visible.some((s) => s.name === skill.name)) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill \"${skill.name}\" is not available in this session (tool gating or allowlist).`,\n },\n ],\n details: {},\n };\n }\n\n const resolved = resolveSkillReadablePath(skill, p.path);\n if (resolved.ok === false) {\n return { content: [{ type: 'text', text: resolved.error }], details: {} };\n }\n\n const maxBytes = maxSkillBytes();\n try {\n const st = statSync(resolved.absolutePath);\n if (st.size > maxBytes) {\n return {\n content: [\n {\n type: 'text',\n text: `File too large: ${formatSize(st.size)} (limit ${formatSize(maxBytes)})`,\n },\n ],\n details: {},\n };\n }\n\n const raw = readFileSync(resolved.absolutePath, 'utf-8');\n const truncation = truncateHead(raw, {\n maxLines: p.limit ?? DEFAULT_MAX_LINES,\n maxBytes: DEFAULT_MAX_BYTES,\n });\n\n let outputText = truncation.content;\n if (truncation.truncated) {\n if (truncation.firstLineExceedsLimit) {\n outputText = `(Line exceeds ${formatSize(DEFAULT_MAX_BYTES)})`;\n } else {\n outputText += `\\n\\n[${truncation.outputLines}/${truncation.totalLines} lines]`;\n }\n }\n\n const envNames = skill.requiredEnvVarNames;\n if (envNames?.length && deps.registerSkillEnvPassthrough) {\n deps.registerSkillEnvPassthrough(envNames);\n const setNow = envNames.filter((k) => process.env[k] !== undefined).length;\n outputText += `\\n\\n[skill env passthrough] Registered ${envNames.length} declared variable name(s) for this session; ${setNow} are currently defined in the process (values are never shown).`;\n }\n\n return { content: [{ type: 'text', text: outputText }], details: {} };\n } catch (e) {\n return {\n content: [{ type: 'text', text: `Error: ${e instanceof Error ? e.message : String(e)}` }],\n details: {},\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills-tools.js","names":[],"sources":["../../../../src/agent/tools/skills-tools.ts"],"sourcesContent":["import { readFileSync, statSync } from 'fs';\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { resolveStateDir } from '../../config/paths.js';\nimport { createSkillConfigManager, isSkillEnabled, resolveSkillConfig } from '../skills/config.js';\nimport { resolveSkillReadablePath } from '../skills/skill-view-path.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { truncateHead, formatSize, DEFAULT_MAX_BYTES } from './truncate.js';\n\nconst DEFAULT_MAX_LINES = 500;\nconst DEFAULT_MAX_SKILL_FILE_BYTES = 1_048_576;\n\nconst SkillsListSchema = Type.Object({\n query: Type.Optional(\n Type.String({\n description: 'Optional case-insensitive substring filter on skill name and description',\n }),\n ),\n});\n\nconst SkillViewSchema = Type.Object({\n name: Type.String({ description: 'Skill name (as in <available_skills> / skills_list)' }),\n path: Type.Optional(\n Type.String({\n description:\n 'Relative path inside the skill dir: omit for SKILL.md, or e.g. references/doc.md (only references/, templates/, scripts/, assets/)',\n }),\n ),\n limit: Type.Optional(\n Type.Number({ description: 'Max lines to return (default 500, like read_file)' }),\n ),\n});\n\nexport interface SkillsToolsDeps {\n getSkillManager: () => SkillManager | undefined;\n getSkillIndexingContext?: () =>\n | { registeredToolNames: string[]; skillAllowlist?: string[] }\n | undefined;\n /** Register declared env var names for shell / tool passthrough (values never exposed). */\n registerSkillEnvPassthrough?: (names: string[]) => void;\n}\n\nfunction maxSkillBytes(): number {\n const lim = createSkillConfigManager(resolveStateDir()).load().limits?.maxSkillFileBytes;\n return typeof lim === 'number' && lim > 0 ? lim : DEFAULT_MAX_SKILL_FILE_BYTES;\n}\n\nexport function createSkillsListTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skills_list',\n label: '📚 Skills',\n description:\n 'List available skills (name and description only). Use skill_view(name) to load SKILL.md or a file under references/, templates/, scripts/, or assets/.',\n parameters: SkillsListSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n let skills = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n const q = (params as { query?: string }).query?.trim().toLowerCase();\n if (q) {\n skills = skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) || s.description.toLowerCase().includes(q),\n );\n }\n\n const payload = {\n skills: skills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.source,\n })),\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],\n details: {},\n };\n },\n } as any;\n}\n\nexport function createSkillViewTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skill_view',\n label: '📖 Skill',\n description:\n 'Load a skill\\'s SKILL.md (default) or a supporting file under references/, templates/, scripts/, or assets/.',\n parameters: SkillViewSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const p = params as { name: string; path?: string; limit?: number };\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const skill = mgr.findSkill(p.name.trim());\n if (!skill) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill \"${p.name}\" was not found. It may not be installed. Open the Skills library to install it, or use skills_list to see available names.`,\n },\n ],\n details: { errorCode: 'skill_not_found', skillName: p.name },\n };\n }\n\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n const skillConfig = resolveSkillConfig(skill, skillsConfig);\n if (skillConfig.enabled === false) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill \"${skill.name}\" is installed but disabled. Enable it in Skills settings before using it.`,\n },\n ],\n details: { errorCode: 'skill_disabled', skillName: skill.name },\n };\n }\n if (skill.disableModelInvocation) {\n return {\n content: [{ type: 'text', text: `Skill \"${skill.name}\" is installed, but it is not available for model invocation.` }],\n details: { errorCode: 'skill_model_invocation_disabled', skillName: skill.name },\n };\n }\n if (!isSkillEnabled(skill, skillsConfig)) {\n return {\n content: [{ type: 'text', text: `Skill \"${skill.name}\" is installed, but its requirements are not met.` }],\n details: { errorCode: 'skill_requirements_unmet', skillName: skill.name },\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n const visible = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n if (!visible.some((s) => s.name === skill.name)) {\n return {\n content: [\n {\n type: 'text',\n text: `The current agent cannot use skill \"${skill.name}\". It is installed, but it is not in this agent's skill allowlist or is hidden by tool gating. Enable it in Agent settings → Skills before using it.`,\n },\n ],\n details: { errorCode: 'skill_agent_denied', skillName: skill.name },\n };\n }\n\n const resolved = resolveSkillReadablePath(skill, p.path);\n if (resolved.ok === false) {\n return { content: [{ type: 'text', text: resolved.error }], details: {} };\n }\n\n const maxBytes = maxSkillBytes();\n try {\n const st = statSync(resolved.absolutePath);\n if (st.size > maxBytes) {\n return {\n content: [\n {\n type: 'text',\n text: `File too large: ${formatSize(st.size)} (limit ${formatSize(maxBytes)})`,\n },\n ],\n details: {},\n };\n }\n\n const raw = readFileSync(resolved.absolutePath, 'utf-8');\n const truncation = truncateHead(raw, {\n maxLines: p.limit ?? DEFAULT_MAX_LINES,\n maxBytes: DEFAULT_MAX_BYTES,\n });\n\n let outputText = truncation.content;\n if (truncation.truncated) {\n if (truncation.firstLineExceedsLimit) {\n outputText = `(Line exceeds ${formatSize(DEFAULT_MAX_BYTES)})`;\n } else {\n outputText += `\\n\\n[${truncation.outputLines}/${truncation.totalLines} lines]`;\n }\n }\n\n const envNames = skill.requiredEnvVarNames;\n if (envNames?.length && deps.registerSkillEnvPassthrough) {\n deps.registerSkillEnvPassthrough(envNames);\n const setNow = envNames.filter((k) => process.env[k] !== undefined).length;\n outputText += `\\n\\n[skill env passthrough] Registered ${envNames.length} declared variable name(s) for this session; ${setNow} are currently defined in the process (values are never shown).`;\n }\n\n return { content: [{ type: 'text', text: outputText }], details: {} };\n } catch (e) {\n return {\n content: [{ type: 'text', text: `Error: ${e instanceof Error ? e.message : String(e)}` }],\n details: {},\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentTool } from '@earendil-works/pi-agent-core';
|
|
2
|
+
declare const ToolManualSchema: import("@sinclair/typebox/build/cjs/index.js").TObject<{
|
|
3
|
+
tool: import("@sinclair/typebox/build/cjs/index.js").TString;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function createToolManualTool(): AgentTool<typeof ToolManualSchema, {}>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getToolManual, listToolManuals } from "../tool-manuals/index.js";
|
|
2
|
+
import { Type } from "@sinclair/typebox";
|
|
3
|
+
//#region src/agent/tools/tool-manual-tool.ts
|
|
4
|
+
const ToolManualSchema = Type.Object({ tool: Type.String({ description: "Built-in tool name, e.g. browser_use" }) });
|
|
5
|
+
function createToolManualTool() {
|
|
6
|
+
return {
|
|
7
|
+
name: "tool_manual",
|
|
8
|
+
label: "📘 Tool Manual",
|
|
9
|
+
description: "Load built-in usage manuals for complex tools. Use before non-trivial use of tools such as browser_use.",
|
|
10
|
+
parameters: ToolManualSchema,
|
|
11
|
+
async execute(_toolCallId, params) {
|
|
12
|
+
const toolName = params.tool.trim();
|
|
13
|
+
const manual = getToolManual(toolName);
|
|
14
|
+
if (!manual) return {
|
|
15
|
+
content: [{
|
|
16
|
+
type: "text",
|
|
17
|
+
text: `No built-in manual found for tool: ${toolName}. Available manuals: ${listToolManuals().map((m) => m.toolName).join(", ") || "none"}.`
|
|
18
|
+
}],
|
|
19
|
+
details: {}
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
content: [{
|
|
23
|
+
type: "text",
|
|
24
|
+
text: manual.content
|
|
25
|
+
}],
|
|
26
|
+
details: {}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { createToolManualTool };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=tool-manual-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-manual-tool.js","names":[],"sources":["../../../../src/agent/tools/tool-manual-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { getToolManual, listToolManuals } from '../tool-manuals/index.js';\n\nconst ToolManualSchema = Type.Object({\n tool: Type.String({ description: 'Built-in tool name, e.g. browser_use' }),\n});\n\nexport function createToolManualTool(): AgentTool<typeof ToolManualSchema, {}> {\n return {\n name: 'tool_manual',\n label: '📘 Tool Manual',\n description:\n 'Load built-in usage manuals for complex tools. Use before non-trivial use of tools such as browser_use.',\n parameters: ToolManualSchema,\n async execute(_toolCallId, params): Promise<AgentToolResult<{}>> {\n const toolName = params.tool.trim();\n const manual = getToolManual(toolName);\n if (!manual) {\n const available = listToolManuals().map((m) => m.toolName);\n return {\n content: [\n {\n type: 'text',\n text: `No built-in manual found for tool: ${toolName}. Available manuals: ${available.join(', ') || 'none'}.`,\n },\n ],\n details: {},\n };\n }\n\n return {\n content: [{ type: 'text', text: manual.content }],\n details: {},\n };\n },\n };\n}\n"],"mappings":";;;AAKA,MAAM,mBAAmB,KAAK,OAAO,EACnC,MAAM,KAAK,OAAO,EAAE,aAAa,wCAAwC,CAAC,EAC3E,CAAC;AAEF,SAAgB,uBAA+D;AAC7E,QAAO;EACL,MAAM;EACN,OAAO;EACP,aACE;EACF,YAAY;EACZ,MAAM,QAAQ,aAAa,QAAsC;GAC/D,MAAM,WAAW,OAAO,KAAK,MAAM;GACnC,MAAM,SAAS,cAAc,SAAS;AACtC,OAAI,CAAC,OAEH,QAAO;IACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,sCAAsC,SAAS,uBALzC,iBAAiB,CAAC,KAAK,MAAM,EAAE,SAK0C,CAAC,KAAK,KAAK,IAAI,OAAO;KAC5G,CACF;IACD,SAAS,EAAE;IACZ;AAGH,UAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,OAAO;KAAS,CAAC;IACjD,SAAS,EAAE;IACZ;;EAEJ"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
4
3
|
import { checkUrlSafety, checkWebsiteBlocklist, cleanBase64Images } from "./url-safety.js";
|
|
5
|
-
import {
|
|
4
|
+
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
6
5
|
import { Type } from "@sinclair/typebox";
|
|
6
|
+
import { complete } from "@earendil-works/pi-ai";
|
|
7
7
|
//#region src/agent/tools/web-extract.ts
|
|
8
8
|
init_providers();
|
|
9
9
|
init_logger();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { checkUrlSafety, checkWebsiteBlocklist } from "./url-safety.js";
|
|
1
2
|
import { SearchProviderRegistry } from "./search/registry.js";
|
|
2
3
|
import { resolveWebSearchConfig } from "./search/resolve-config.js";
|
|
3
|
-
import { checkUrlSafety, checkWebsiteBlocklist } from "./url-safety.js";
|
|
4
4
|
import { Type } from "@sinclair/typebox";
|
|
5
5
|
//#region src/agent/tools/web.ts
|
|
6
6
|
const WebSearchSchema = Type.Object({
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Catalog for named workflows.
|
|
3
3
|
*
|
|
4
4
|
* Resolution order (built-ins are starting points, user workflows win):
|
|
5
|
-
* 1. `~/.xopc/workflows/<name
|
|
6
|
-
* 2.
|
|
5
|
+
* 1. `~/.xopc/workflows/<name>/workflow.js` (+ optional `manifest.json`)
|
|
6
|
+
* 2. `~/.xopc/workflows/<name>.js` (or `<name>.workflow.js`)
|
|
7
|
+
* 3. {@link BUILTIN_WORKFLOWS}
|
|
7
8
|
*
|
|
8
9
|
* The user dir is discovered via {@link resolveStateDir}, so `XOPC_STATE_DIR`
|
|
9
10
|
* overrides apply automatically (matches how skills / extensions are wired).
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
* the filename. This prevents copy-pasted scripts from being silently
|
|
16
17
|
* mis-addressed when invoked by name.
|
|
17
18
|
*/
|
|
19
|
+
import type { WorkflowDefinitionManifest } from '../../workflows/domain/definition.js';
|
|
18
20
|
import type { WorkflowMeta } from './types.js';
|
|
19
21
|
export type WorkflowSource = 'user' | 'builtin';
|
|
20
22
|
export interface CatalogEntry {
|
|
@@ -23,6 +25,8 @@ export interface CatalogEntry {
|
|
|
23
25
|
/** Absolute path for user entries; null for built-ins (in-memory). */
|
|
24
26
|
path: string | null;
|
|
25
27
|
description: string;
|
|
28
|
+
title?: string;
|
|
29
|
+
version?: string;
|
|
26
30
|
whenToUse?: string;
|
|
27
31
|
tags?: string[];
|
|
28
32
|
estimatedAgents?: {
|
|
@@ -36,6 +40,7 @@ export interface LoadedWorkflow {
|
|
|
36
40
|
script: string;
|
|
37
41
|
meta: WorkflowMeta;
|
|
38
42
|
path: string | null;
|
|
43
|
+
manifest?: WorkflowDefinitionManifest;
|
|
39
44
|
}
|
|
40
45
|
export interface WorkflowCatalog {
|
|
41
46
|
list(): CatalogEntry[];
|
|
@@ -8,8 +8,9 @@ import { join } from "node:path";
|
|
|
8
8
|
* Catalog for named workflows.
|
|
9
9
|
*
|
|
10
10
|
* Resolution order (built-ins are starting points, user workflows win):
|
|
11
|
-
* 1. `~/.xopc/workflows/<name
|
|
12
|
-
* 2.
|
|
11
|
+
* 1. `~/.xopc/workflows/<name>/workflow.js` (+ optional `manifest.json`)
|
|
12
|
+
* 2. `~/.xopc/workflows/<name>.js` (or `<name>.workflow.js`)
|
|
13
|
+
* 3. {@link BUILTIN_WORKFLOWS}
|
|
13
14
|
*
|
|
14
15
|
* The user dir is discovered via {@link resolveStateDir}, so `XOPC_STATE_DIR`
|
|
15
16
|
* overrides apply automatically (matches how skills / extensions are wired).
|
|
@@ -39,18 +40,18 @@ function createWorkflowCatalog(opts = {}) {
|
|
|
39
40
|
estimatedAgents: meta?.estimatedAgents
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
|
-
for (const
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
entries.set(name, {
|
|
48
|
-
name,
|
|
43
|
+
for (const entry of safeListUserEntries(userDir)) {
|
|
44
|
+
const meta = safeMeta(readScript(entry.path));
|
|
45
|
+
const manifest = readManifest(entry.manifestPath);
|
|
46
|
+
entries.set(entry.name, {
|
|
47
|
+
name: entry.name,
|
|
49
48
|
source: "user",
|
|
50
|
-
path:
|
|
51
|
-
description: meta?.description ?? "(unparseable)",
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
path: entry.path,
|
|
50
|
+
description: manifest?.description ?? meta?.description ?? "(unparseable)",
|
|
51
|
+
title: manifest?.title,
|
|
52
|
+
version: manifest?.version,
|
|
53
|
+
whenToUse: manifest?.whenToUse ?? meta?.whenToUse,
|
|
54
|
+
tags: manifest?.tags ?? meta?.tags,
|
|
54
55
|
estimatedAgents: meta?.estimatedAgents
|
|
55
56
|
});
|
|
56
57
|
}
|
|
@@ -58,17 +59,18 @@ function createWorkflowCatalog(opts = {}) {
|
|
|
58
59
|
};
|
|
59
60
|
const load = (name) => {
|
|
60
61
|
requireValidName(name);
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
const script = readScript(
|
|
62
|
+
const userEntry = findUserEntry(userDir, name);
|
|
63
|
+
if (userEntry) {
|
|
64
|
+
const script = readScript(userEntry.path);
|
|
64
65
|
const { meta } = parseWorkflowScript(script);
|
|
65
|
-
ensureMetaNameMatches(meta, name,
|
|
66
|
+
ensureMetaNameMatches(meta, name, userEntry.path);
|
|
66
67
|
return {
|
|
67
68
|
name,
|
|
68
69
|
source: "user",
|
|
69
70
|
script,
|
|
70
71
|
meta,
|
|
71
|
-
path:
|
|
72
|
+
path: userEntry.path,
|
|
73
|
+
manifest: readManifest(userEntry.manifestPath)
|
|
72
74
|
};
|
|
73
75
|
}
|
|
74
76
|
const builtin = BUILTIN_WORKFLOWS.find((b) => b.name === name);
|
|
@@ -96,9 +98,9 @@ function createWorkflowCatalog(opts = {}) {
|
|
|
96
98
|
};
|
|
97
99
|
const remove = (name) => {
|
|
98
100
|
requireValidName(name);
|
|
99
|
-
const
|
|
100
|
-
if (!
|
|
101
|
-
unlinkSync(
|
|
101
|
+
const userEntry = findUserEntry(userDir, name);
|
|
102
|
+
if (!userEntry) return false;
|
|
103
|
+
unlinkSync(userEntry.path);
|
|
102
104
|
return true;
|
|
103
105
|
};
|
|
104
106
|
return {
|
|
@@ -112,25 +114,64 @@ function createWorkflowCatalog(opts = {}) {
|
|
|
112
114
|
function defaultUserDir() {
|
|
113
115
|
return join(resolveStateDir(), "workflows");
|
|
114
116
|
}
|
|
115
|
-
function
|
|
117
|
+
function safeListUserEntries(dir) {
|
|
116
118
|
try {
|
|
117
119
|
if (!existsSync(dir)) return [];
|
|
118
120
|
if (!statSync(dir).isDirectory()) return [];
|
|
119
|
-
|
|
121
|
+
const entries = [];
|
|
122
|
+
for (const file of readdirSync(dir)) {
|
|
123
|
+
const full = join(dir, file);
|
|
124
|
+
if (statSync(full).isDirectory()) {
|
|
125
|
+
const workflowPath = join(full, "workflow.js");
|
|
126
|
+
if (existsSync(workflowPath) && isValidName(file)) entries.push({
|
|
127
|
+
name: file,
|
|
128
|
+
path: workflowPath,
|
|
129
|
+
manifestPath: join(full, "manifest.json")
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (!/\.(js|workflow\.js)$/i.test(file)) continue;
|
|
134
|
+
const name = stripExt(file);
|
|
135
|
+
if (!isValidName(name)) continue;
|
|
136
|
+
entries.push({
|
|
137
|
+
name,
|
|
138
|
+
path: full
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return entries;
|
|
120
142
|
} catch {
|
|
121
143
|
return [];
|
|
122
144
|
}
|
|
123
145
|
}
|
|
124
|
-
function
|
|
146
|
+
function findUserEntry(dir, name) {
|
|
147
|
+
const dirWorkflowPath = join(dir, name, "workflow.js");
|
|
148
|
+
if (existsSync(dirWorkflowPath)) return {
|
|
149
|
+
name,
|
|
150
|
+
path: dirWorkflowPath,
|
|
151
|
+
manifestPath: join(dir, name, "manifest.json")
|
|
152
|
+
};
|
|
125
153
|
for (const candidate of [`${name}.js`, `${name}.workflow.js`]) {
|
|
126
154
|
const full = join(dir, candidate);
|
|
127
|
-
if (existsSync(full)) return
|
|
155
|
+
if (existsSync(full)) return {
|
|
156
|
+
name,
|
|
157
|
+
path: full
|
|
158
|
+
};
|
|
128
159
|
}
|
|
129
160
|
return null;
|
|
130
161
|
}
|
|
131
162
|
function readScript(path) {
|
|
132
163
|
return readFileSync(path, "utf-8");
|
|
133
164
|
}
|
|
165
|
+
function readManifest(path) {
|
|
166
|
+
if (!path || !existsSync(path)) return void 0;
|
|
167
|
+
try {
|
|
168
|
+
const value = JSON.parse(readFileSync(path, "utf-8"));
|
|
169
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
|
|
170
|
+
return value;
|
|
171
|
+
} catch {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
134
175
|
function safeMeta(script) {
|
|
135
176
|
try {
|
|
136
177
|
return parseWorkflowScript(script).meta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","names":[],"sources":["../../../../src/agent/workflow/catalog.ts"],"sourcesContent":["/**\n * Catalog for named workflows.\n *\n * Resolution order (built-ins are starting points, user workflows win):\n * 1. `~/.xopc/workflows/<name>.js` (or `<name>.workflow.js`)\n * 2. {@link BUILTIN_WORKFLOWS}\n *\n * The user dir is discovered via {@link resolveStateDir}, so `XOPC_STATE_DIR`\n * overrides apply automatically (matches how skills / extensions are wired).\n *\n * Listing is filesystem-cheap (single `readdir`) and runs synchronously — the\n * `/workflows` slash command is interactive and should return immediately.\n *\n * Validation: on load we re-parse the script to make sure `meta.name` matches\n * the filename. This prevents copy-pasted scripts from being silently\n * mis-addressed when invoked by name.\n */\n\nimport {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n statSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\n\nimport { resolveStateDir } from '../../config/paths-state.js';\n\nimport { BUILTIN_WORKFLOWS } from './builtins/index.js';\nimport { parseWorkflowScript } from './parser.js';\nimport type { WorkflowMeta } from './types.js';\n\nexport type WorkflowSource = 'user' | 'builtin';\n\nexport interface CatalogEntry {\n name: string;\n source: WorkflowSource;\n /** Absolute path for user entries; null for built-ins (in-memory). */\n path: string | null;\n description: string;\n whenToUse?: string;\n tags?: string[];\n estimatedAgents?: { min: number; max: number };\n}\n\nexport interface LoadedWorkflow {\n name: string;\n source: WorkflowSource;\n script: string;\n meta: WorkflowMeta;\n path: string | null;\n}\n\nexport interface WorkflowCatalog {\n list(): CatalogEntry[];\n /** Load a named workflow. Throws if missing or meta.name disagrees with filename. */\n load(name: string): LoadedWorkflow;\n /** Save a script as a user workflow. Throws if the script fails to parse. */\n save(name: string, script: string): { path: string };\n /** Remove a user workflow. No-op if absent. Built-ins are never removed. */\n remove(name: string): boolean;\n /** Absolute path to the user workflows directory (created lazily on save). */\n userDir: string;\n}\n\nconst NAME_RE = /^[a-z][a-z0-9_-]*$/;\n\nexport function createWorkflowCatalog(opts: { userDir?: string } = {}): WorkflowCatalog {\n const userDir = opts.userDir ?? defaultUserDir();\n\n const list = (): CatalogEntry[] => {\n const entries = new Map<string, CatalogEntry>();\n for (const b of BUILTIN_WORKFLOWS) {\n const meta = safeMeta(b.script);\n entries.set(b.name, {\n name: b.name,\n source: 'builtin',\n path: null,\n description: meta?.description ?? '(unparseable)',\n whenToUse: meta?.whenToUse,\n tags: meta?.tags,\n estimatedAgents: meta?.estimatedAgents,\n });\n }\n for (const file of safeListUserFiles(userDir)) {\n const name = stripExt(file);\n if (!isValidName(name)) continue;\n const full = join(userDir, file);\n const meta = safeMeta(readScript(full));\n // User wins on collision.\n entries.set(name, {\n name,\n source: 'user',\n path: full,\n description: meta?.description ?? '(unparseable)',\n whenToUse: meta?.whenToUse,\n tags: meta?.tags,\n estimatedAgents: meta?.estimatedAgents,\n });\n }\n return [...entries.values()].sort((a, b) => a.name.localeCompare(b.name));\n };\n\n const load = (name: string): LoadedWorkflow => {\n requireValidName(name);\n const userPath = findUserPath(userDir, name);\n if (userPath) {\n const script = readScript(userPath);\n const { meta } = parseWorkflowScript(script);\n ensureMetaNameMatches(meta, name, userPath);\n return { name, source: 'user', script, meta, path: userPath };\n }\n const builtin = BUILTIN_WORKFLOWS.find((b) => b.name === name);\n if (builtin) {\n const { meta } = parseWorkflowScript(builtin.script);\n ensureMetaNameMatches(meta, name, '<builtin>');\n return { name, source: 'builtin', script: builtin.script, meta, path: null };\n }\n throw new Error(\n `workflow not found: ${name}. Drop a script at ${join(userDir, `${name}.js`)} or pick one of: ${list()\n .map((e) => e.name)\n .join(', ')}`,\n );\n };\n\n const save = (name: string, script: string): { path: string } => {\n requireValidName(name);\n const { meta } = parseWorkflowScript(script);\n if (meta.name !== name) {\n throw new Error(\n `meta.name \"${meta.name}\" does not match save name \"${name}\". Adjust one to match the other.`,\n );\n }\n if (!existsSync(userDir)) {\n mkdirSync(userDir, { recursive: true });\n }\n const path = join(userDir, `${name}.js`);\n writeFileSync(path, normalizeNewlines(script), 'utf-8');\n return { path };\n };\n\n const remove = (name: string): boolean => {\n requireValidName(name);\n const userPath = findUserPath(userDir, name);\n if (!userPath) return false;\n unlinkSync(userPath);\n return true;\n };\n\n return { list, load, save, remove, userDir };\n}\n\n// ---------------------------------------------------------------------------\n\nexport function defaultUserDir(): string {\n return join(resolveStateDir(), 'workflows');\n}\n\nfunction safeListUserFiles(dir: string): string[] {\n try {\n if (!existsSync(dir)) return [];\n const st = statSync(dir);\n if (!st.isDirectory()) return [];\n return readdirSync(dir).filter((f) => /\\.(js|workflow\\.js)$/i.test(f));\n } catch {\n return [];\n }\n}\n\nfunction findUserPath(dir: string, name: string): string | null {\n for (const candidate of [`${name}.js`, `${name}.workflow.js`]) {\n const full = join(dir, candidate);\n if (existsSync(full)) return full;\n }\n return null;\n}\n\nfunction readScript(path: string): string {\n return readFileSync(path, 'utf-8');\n}\n\nfunction safeMeta(script: string): WorkflowMeta | null {\n try {\n return parseWorkflowScript(script).meta;\n } catch {\n return null;\n }\n}\n\nfunction stripExt(filename: string): string {\n return filename.replace(/\\.workflow\\.js$/i, '').replace(/\\.js$/i, '');\n}\n\nfunction isValidName(name: string): boolean {\n return NAME_RE.test(name);\n}\n\nfunction requireValidName(name: string): void {\n if (!isValidName(name)) {\n throw new Error(`invalid workflow name \"${name}\". Use lowercase snake_case, e.g. \"audit_repo\".`);\n }\n}\n\nfunction ensureMetaNameMatches(meta: WorkflowMeta, name: string, locator: string): void {\n if (meta.name !== name) {\n throw new Error(\n `workflow ${locator}: meta.name \"${meta.name}\" disagrees with addressable name \"${name}\". ` +\n 'Rename the file or the meta.name to match.',\n );\n }\n}\n\nfunction normalizeNewlines(s: string): string {\n return s.endsWith('\\n') ? s : `${s}\\n`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog.js","names":[],"sources":["../../../../src/agent/workflow/catalog.ts"],"sourcesContent":["/**\n * Catalog for named workflows.\n *\n * Resolution order (built-ins are starting points, user workflows win):\n * 1. `~/.xopc/workflows/<name>/workflow.js` (+ optional `manifest.json`)\n * 2. `~/.xopc/workflows/<name>.js` (or `<name>.workflow.js`)\n * 3. {@link BUILTIN_WORKFLOWS}\n *\n * The user dir is discovered via {@link resolveStateDir}, so `XOPC_STATE_DIR`\n * overrides apply automatically (matches how skills / extensions are wired).\n *\n * Listing is filesystem-cheap (single `readdir`) and runs synchronously — the\n * `/workflows` slash command is interactive and should return immediately.\n *\n * Validation: on load we re-parse the script to make sure `meta.name` matches\n * the filename. This prevents copy-pasted scripts from being silently\n * mis-addressed when invoked by name.\n */\n\nimport {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n statSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { join } from 'node:path';\n\nimport type { WorkflowDefinitionManifest } from '../../workflows/domain/definition.js';\n\nimport { resolveStateDir } from '../../config/paths-state.js';\n\nimport { BUILTIN_WORKFLOWS } from './builtins/index.js';\nimport { parseWorkflowScript } from './parser.js';\nimport type { WorkflowMeta } from './types.js';\n\nexport type WorkflowSource = 'user' | 'builtin';\n\nexport interface CatalogEntry {\n name: string;\n source: WorkflowSource;\n /** Absolute path for user entries; null for built-ins (in-memory). */\n path: string | null;\n description: string;\n title?: string;\n version?: string;\n whenToUse?: string;\n tags?: string[];\n estimatedAgents?: { min: number; max: number };\n}\n\nexport interface LoadedWorkflow {\n name: string;\n source: WorkflowSource;\n script: string;\n meta: WorkflowMeta;\n path: string | null;\n manifest?: WorkflowDefinitionManifest;\n}\n\nexport interface WorkflowCatalog {\n list(): CatalogEntry[];\n /** Load a named workflow. Throws if missing or meta.name disagrees with filename. */\n load(name: string): LoadedWorkflow;\n /** Save a script as a user workflow. Throws if the script fails to parse. */\n save(name: string, script: string): { path: string };\n /** Remove a user workflow. No-op if absent. Built-ins are never removed. */\n remove(name: string): boolean;\n /** Absolute path to the user workflows directory (created lazily on save). */\n userDir: string;\n}\n\nconst NAME_RE = /^[a-z][a-z0-9_-]*$/;\n\nexport function createWorkflowCatalog(opts: { userDir?: string } = {}): WorkflowCatalog {\n const userDir = opts.userDir ?? defaultUserDir();\n\n const list = (): CatalogEntry[] => {\n const entries = new Map<string, CatalogEntry>();\n for (const b of BUILTIN_WORKFLOWS) {\n const meta = safeMeta(b.script);\n entries.set(b.name, {\n name: b.name,\n source: 'builtin',\n path: null,\n description: meta?.description ?? '(unparseable)',\n whenToUse: meta?.whenToUse,\n tags: meta?.tags,\n estimatedAgents: meta?.estimatedAgents,\n });\n }\n for (const entry of safeListUserEntries(userDir)) {\n const meta = safeMeta(readScript(entry.path));\n const manifest = readManifest(entry.manifestPath);\n // User wins on collision.\n entries.set(entry.name, {\n name: entry.name,\n source: 'user',\n path: entry.path,\n description: manifest?.description ?? meta?.description ?? '(unparseable)',\n title: manifest?.title,\n version: manifest?.version,\n whenToUse: manifest?.whenToUse ?? meta?.whenToUse,\n tags: manifest?.tags ?? meta?.tags,\n estimatedAgents: meta?.estimatedAgents,\n });\n }\n return [...entries.values()].sort((a, b) => a.name.localeCompare(b.name));\n };\n\n const load = (name: string): LoadedWorkflow => {\n requireValidName(name);\n const userEntry = findUserEntry(userDir, name);\n if (userEntry) {\n const script = readScript(userEntry.path);\n const { meta } = parseWorkflowScript(script);\n ensureMetaNameMatches(meta, name, userEntry.path);\n return {\n name,\n source: 'user',\n script,\n meta,\n path: userEntry.path,\n manifest: readManifest(userEntry.manifestPath),\n };\n }\n const builtin = BUILTIN_WORKFLOWS.find((b) => b.name === name);\n if (builtin) {\n const { meta } = parseWorkflowScript(builtin.script);\n ensureMetaNameMatches(meta, name, '<builtin>');\n return { name, source: 'builtin', script: builtin.script, meta, path: null };\n }\n throw new Error(\n `workflow not found: ${name}. Drop a script at ${join(userDir, `${name}.js`)} or pick one of: ${list()\n .map((e) => e.name)\n .join(', ')}`,\n );\n };\n\n const save = (name: string, script: string): { path: string } => {\n requireValidName(name);\n const { meta } = parseWorkflowScript(script);\n if (meta.name !== name) {\n throw new Error(\n `meta.name \"${meta.name}\" does not match save name \"${name}\". Adjust one to match the other.`,\n );\n }\n if (!existsSync(userDir)) {\n mkdirSync(userDir, { recursive: true });\n }\n const path = join(userDir, `${name}.js`);\n writeFileSync(path, normalizeNewlines(script), 'utf-8');\n return { path };\n };\n\n const remove = (name: string): boolean => {\n requireValidName(name);\n const userEntry = findUserEntry(userDir, name);\n if (!userEntry) return false;\n unlinkSync(userEntry.path);\n return true;\n };\n\n return { list, load, save, remove, userDir };\n}\n\n// ---------------------------------------------------------------------------\n\nexport function defaultUserDir(): string {\n return join(resolveStateDir(), 'workflows');\n}\n\ninterface UserWorkflowEntry {\n name: string;\n path: string;\n manifestPath?: string;\n}\n\nfunction safeListUserEntries(dir: string): UserWorkflowEntry[] {\n try {\n if (!existsSync(dir)) return [];\n const st = statSync(dir);\n if (!st.isDirectory()) return [];\n const entries: UserWorkflowEntry[] = [];\n for (const file of readdirSync(dir)) {\n const full = join(dir, file);\n const fileStat = statSync(full);\n if (fileStat.isDirectory()) {\n const workflowPath = join(full, 'workflow.js');\n if (existsSync(workflowPath) && isValidName(file)) {\n entries.push({ name: file, path: workflowPath, manifestPath: join(full, 'manifest.json') });\n }\n continue;\n }\n if (!/\\.(js|workflow\\.js)$/i.test(file)) continue;\n const name = stripExt(file);\n if (!isValidName(name)) continue;\n entries.push({ name, path: full });\n }\n return entries;\n } catch {\n return [];\n }\n}\n\nfunction findUserEntry(dir: string, name: string): UserWorkflowEntry | null {\n const dirWorkflowPath = join(dir, name, 'workflow.js');\n if (existsSync(dirWorkflowPath)) {\n return { name, path: dirWorkflowPath, manifestPath: join(dir, name, 'manifest.json') };\n }\n for (const candidate of [`${name}.js`, `${name}.workflow.js`]) {\n const full = join(dir, candidate);\n if (existsSync(full)) return { name, path: full };\n }\n return null;\n}\n\nfunction readScript(path: string): string {\n return readFileSync(path, 'utf-8');\n}\n\nfunction readManifest(path: string | undefined): WorkflowDefinitionManifest | undefined {\n if (!path || !existsSync(path)) return undefined;\n try {\n const value = JSON.parse(readFileSync(path, 'utf-8')) as WorkflowDefinitionManifest;\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n return value;\n } catch {\n return undefined;\n }\n}\n\nfunction safeMeta(script: string): WorkflowMeta | null {\n try {\n return parseWorkflowScript(script).meta;\n } catch {\n return null;\n }\n}\n\nfunction stripExt(filename: string): string {\n return filename.replace(/\\.workflow\\.js$/i, '').replace(/\\.js$/i, '');\n}\n\nfunction isValidName(name: string): boolean {\n return NAME_RE.test(name);\n}\n\nfunction requireValidName(name: string): void {\n if (!isValidName(name)) {\n throw new Error(`invalid workflow name \"${name}\". Use lowercase snake_case, e.g. \"audit_repo\".`);\n }\n}\n\nfunction ensureMetaNameMatches(meta: WorkflowMeta, name: string, locator: string): void {\n if (meta.name !== name) {\n throw new Error(\n `workflow ${locator}: meta.name \"${meta.name}\" disagrees with addressable name \"${name}\". ` +\n 'Rename the file or the meta.name to match.',\n );\n }\n}\n\nfunction normalizeNewlines(s: string): string {\n return s.endsWith('\\n') ? s : `${s}\\n`;\n}\n"],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import type { AgentTool } from '@earendil-works/pi-agent-core';
|
|
|
17
17
|
import type { Api, Model } from '@earendil-works/pi-ai';
|
|
18
18
|
import type { Config } from '../../config/schema.js';
|
|
19
19
|
import type { MessageBus } from '../../infra/bus/index.js';
|
|
20
|
+
import type { SessionStore } from '../../session/store.js';
|
|
20
21
|
import { type BuildChildToolsOptions } from '../child-agent-factory.js';
|
|
21
22
|
import type { ToolExecutorConfig } from '../tools/executor.js';
|
|
22
23
|
import type { SubagentRunOptions, SubagentRunner } from './types.js';
|
|
@@ -27,6 +28,7 @@ export interface DelegateSubagentRunnerDeps {
|
|
|
27
28
|
getDefaultModel: () => Model<Api>;
|
|
28
29
|
getConfig: () => Config | undefined;
|
|
29
30
|
toolExecutorConfig?: Partial<ToolExecutorConfig>;
|
|
31
|
+
sessionStore?: SessionStore;
|
|
30
32
|
/**
|
|
31
33
|
* Provided by the workflow tool from `AgentToolsFactory` — mirrors how
|
|
32
34
|
* `delegate-tool` is wired (avoids importing `tools/factory.ts` here and
|
|
@@ -39,4 +41,5 @@ export declare class DelegateSubagentRunner implements SubagentRunner {
|
|
|
39
41
|
private readonly deps;
|
|
40
42
|
constructor(deps: DelegateSubagentRunnerDeps);
|
|
41
43
|
run<T = string>(prompt: string, opts: SubagentRunOptions<T>): Promise<T | null>;
|
|
44
|
+
private preparePersistentSubagentSession;
|
|
42
45
|
}
|
|
@@ -3,6 +3,7 @@ import { init_logger } from "../../utils/logger.js";
|
|
|
3
3
|
import { createDelegateChildHandle } from "../child-agent-factory.js";
|
|
4
4
|
import { DEFAULT_DELEGATE_TOOLS, DELEGATE_BLOCKED_TOOLS } from "../tools/delegate-tool.js";
|
|
5
5
|
import { STRUCTURED_OUTPUT_TOOL_NAME, createStructuredOutputTool } from "./structured-output-tool.js";
|
|
6
|
+
import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
|
|
6
7
|
//#region src/agent/workflow/subagent-runner.ts
|
|
7
8
|
init_logger();
|
|
8
9
|
const log = createLogger("Agent:WorkflowSubagent");
|
|
@@ -26,7 +27,25 @@ var DelegateSubagentRunner = class {
|
|
|
26
27
|
}
|
|
27
28
|
const fullPrompt = buildPrompt(prompt, opts, wantStructured);
|
|
28
29
|
const streamMode = resolveSubagentStreamMode(this.deps.getConfig);
|
|
29
|
-
|
|
30
|
+
let transcriptPersistQueue = Promise.resolve();
|
|
31
|
+
const persistTranscriptSnapshot = opts.sessionKey && this.deps.sessionStore ? (messages) => {
|
|
32
|
+
const store = this.deps.sessionStore;
|
|
33
|
+
const key = opts.sessionKey;
|
|
34
|
+
if (!store || !key) return;
|
|
35
|
+
const snapshot = cloneAgentMessages(messages);
|
|
36
|
+
transcriptPersistQueue = transcriptPersistQueue.then(async () => {
|
|
37
|
+
await store.saveMessages(key, snapshot);
|
|
38
|
+
emitSessionTranscriptUpdate({ sessionKey: key });
|
|
39
|
+
}).catch((err) => {
|
|
40
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
41
|
+
log.warn({
|
|
42
|
+
err,
|
|
43
|
+
sessionKey: key,
|
|
44
|
+
errorMessage: msg
|
|
45
|
+
}, `Failed to persist workflow subagent transcript snapshot: ${msg}`);
|
|
46
|
+
});
|
|
47
|
+
} : void 0;
|
|
48
|
+
const childOptions = {
|
|
30
49
|
workspace: this.deps.workspace,
|
|
31
50
|
goal: fullPrompt,
|
|
32
51
|
allowedToolNames: allowed,
|
|
@@ -48,12 +67,20 @@ var DelegateSubagentRunner = class {
|
|
|
48
67
|
onProgress: (event) => {
|
|
49
68
|
opts.onProgress?.(mapChildProgressEvent(event));
|
|
50
69
|
}
|
|
51
|
-
} : void 0
|
|
52
|
-
|
|
70
|
+
} : void 0,
|
|
71
|
+
onTranscriptSnapshot: persistTranscriptSnapshot
|
|
72
|
+
};
|
|
73
|
+
if (opts.sessionKey && opts.sessionMetadata && this.deps.sessionStore) await this.preparePersistentSubagentSession(opts.sessionKey, opts.sessionMetadata);
|
|
74
|
+
const handle = createDelegateChildHandle(childOptions);
|
|
53
75
|
const onAbort = () => handle.abort();
|
|
54
76
|
opts.signal?.addEventListener("abort", onAbort, { once: true });
|
|
55
77
|
try {
|
|
56
|
-
const { summary } = await handle.run();
|
|
78
|
+
const { summary, messages } = await handle.run();
|
|
79
|
+
await transcriptPersistQueue;
|
|
80
|
+
if (opts.sessionKey && this.deps.sessionStore) {
|
|
81
|
+
await this.deps.sessionStore.saveMessages(opts.sessionKey, messages);
|
|
82
|
+
emitSessionTranscriptUpdate({ sessionKey: opts.sessionKey });
|
|
83
|
+
}
|
|
57
84
|
if (opts.signal?.aborted) return null;
|
|
58
85
|
if (wantStructured) {
|
|
59
86
|
if (!capture.called) {
|
|
@@ -76,7 +103,26 @@ var DelegateSubagentRunner = class {
|
|
|
76
103
|
opts.signal?.removeEventListener("abort", onAbort);
|
|
77
104
|
}
|
|
78
105
|
}
|
|
106
|
+
async preparePersistentSubagentSession(sessionKey, metadata) {
|
|
107
|
+
const store = this.deps.sessionStore;
|
|
108
|
+
if (!store) return;
|
|
109
|
+
await store.resolveTranscriptPath(sessionKey);
|
|
110
|
+
await store.updateMetadata(sessionKey, {
|
|
111
|
+
sessionType: "workflow-subagent",
|
|
112
|
+
hiddenFromSessionList: true,
|
|
113
|
+
parentSessionKey: metadata.parentSessionKey,
|
|
114
|
+
workflowRunId: metadata.workflowRunId,
|
|
115
|
+
workflowDefinitionId: metadata.workflowDefinitionId,
|
|
116
|
+
workflowAgentId: metadata.workflowAgentId,
|
|
117
|
+
workflowAgentLabel: metadata.workflowAgentLabel,
|
|
118
|
+
name: metadata.workflowAgentLabel,
|
|
119
|
+
tags: ["workflow-subagent", metadata.workflowDefinitionId]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
79
122
|
};
|
|
123
|
+
function cloneAgentMessages(messages) {
|
|
124
|
+
return messages.map((message) => structuredClone(message));
|
|
125
|
+
}
|
|
80
126
|
function resolveAllowedToolNames(requested, wantStructured) {
|
|
81
127
|
const filtered = (requested && requested.length > 0 ? requested : [...DEFAULT_DELEGATE_TOOLS]).map((s) => String(s).trim()).filter((s) => s.length > 0).filter((s) => !DELEGATE_BLOCKED_TOOLS.has(s));
|
|
82
128
|
if (wantStructured && !filtered.includes("structured_output")) filtered.push(STRUCTURED_OUTPUT_TOOL_NAME);
|