From 1f11ff2eab5da8569832e568b7354ef72b37ee72 Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Mon, 16 Mar 2026 10:33:01 -0500 Subject: [PATCH] CI: add bundled plugin boundary ratchet --- docs/refactor/plugin-sdk.md | 21 + package.json | 3 +- .../baselines/plugin-boundary-ratchet.json | 8466 +++++++++++++++++ scripts/check-plugin-boundary-ratchet.mjs | 379 + .../check-plugin-boundary-ratchet.test.ts | 167 + 5 files changed, 9035 insertions(+), 1 deletion(-) create mode 100644 scripts/baselines/plugin-boundary-ratchet.json create mode 100644 scripts/check-plugin-boundary-ratchet.mjs create mode 100644 test/scripts/check-plugin-boundary-ratchet.test.ts diff --git a/docs/refactor/plugin-sdk.md b/docs/refactor/plugin-sdk.md index 5a630982a97..f90ee52fc2d 100644 --- a/docs/refactor/plugin-sdk.md +++ b/docs/refactor/plugin-sdk.md @@ -213,6 +213,27 @@ Notes: Related docs: [Plugins](/tools/plugin), [Channels](/channels/index), [Configuration](/gateway/configuration). +## Boundary ratchet + +Bundled plugins should generally target the same public surfaces as external +plugins: `openclaw/plugin-sdk/*`, `openclaw/extension-api`, and injected +runtime capabilities. This keeps bundled plugins moving toward the same stable +boundary the npm-installed plugin ecosystem depends on. + +The current repo is still transitional. `openclaw/plugin-sdk/compat`, +`plugin-sdk-internal`, and direct `src/**` imports still exist in some bundled +plugins. The default expectation is: + +- prefer public SDK/runtime surfaces first +- use `openclaw/plugin-sdk/compat` only as a temporary bundled-only escape hatch +- treat `plugin-sdk-internal` and direct core imports as non-default privileged + access + +Search providers are a good example of why this matters: moving code from core +into `extensions/` is not enough if provider-specific ownership still leaks back +into core. Boundary checks should ratchet bundled plugins toward public surfaces +without requiring an all-at-once migration. + ## Implemented channel-owned seams Recent refactor work widened the channel plugin contract so core can stop owning diff --git a/package.json b/package.json index a0b5e9581df..a034c8a1c21 100644 --- a/package.json +++ b/package.json @@ -248,7 +248,7 @@ "build:plugin-sdk:dts": "tsc -p tsconfig.plugin-sdk.dts.json || true", "build:strict-smoke": "pnpm canvas:a2ui:bundle && node scripts/tsdown-build.mjs && node scripts/runtime-postbuild.mjs && pnpm build:plugin-sdk:dts", "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh", - "check": "pnpm check:host-env-policy:swift && pnpm format:check && pnpm tsgo && pnpm plugin-sdk:check-exports && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:tmp:channel-agnostic-boundaries && pnpm lint:tmp:no-raw-channel-fetch && pnpm lint:agent:ingress-owner && pnpm lint:plugins:no-register-http-handler && pnpm lint:plugins:no-monolithic-plugin-sdk-entry-imports && pnpm lint:webhook:no-low-level-body-read && pnpm lint:auth:no-pairing-store-group && pnpm lint:auth:pairing-account-scope", + "check": "pnpm check:host-env-policy:swift && pnpm format:check && pnpm tsgo && pnpm plugin-sdk:check-exports && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:tmp:channel-agnostic-boundaries && pnpm lint:tmp:no-raw-channel-fetch && pnpm lint:agent:ingress-owner && pnpm lint:plugins:no-register-http-handler && pnpm lint:plugins:no-monolithic-plugin-sdk-entry-imports && pnpm lint:plugins:boundary-ratchet && pnpm lint:webhook:no-low-level-body-read && pnpm lint:auth:no-pairing-store-group && pnpm lint:auth:pairing-account-scope", "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-i18n-glossary && pnpm docs:check-links", "check:host-env-policy:swift": "node scripts/generate-host-env-security-policy-swift.mjs --check", "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500", @@ -300,6 +300,7 @@ "lint:docs": "pnpm dlx markdownlint-cli2", "lint:docs:fix": "pnpm dlx markdownlint-cli2 --fix", "lint:fix": "oxlint --type-aware --fix && pnpm format", + "lint:plugins:boundary-ratchet": "node scripts/check-plugin-boundary-ratchet.mjs", "lint:plugins:no-monolithic-plugin-sdk-entry-imports": "node --import tsx scripts/check-no-monolithic-plugin-sdk-entry-imports.ts", "lint:plugins:no-register-http-handler": "node scripts/check-no-register-http-handler.mjs", "lint:swift": "swiftlint lint --config .swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)", diff --git a/scripts/baselines/plugin-boundary-ratchet.json b/scripts/baselines/plugin-boundary-ratchet.json new file mode 100644 index 00000000000..75ac313bbfa --- /dev/null +++ b/scripts/baselines/plugin-boundary-ratchet.json @@ -0,0 +1,8466 @@ +[ + { + "path": "extensions/acpx/src/runtime-internals/process.test.ts", + "specifier": "../../../shared/windows-cmd-shim-test-fixtures.js" + }, + { + "path": "extensions/acpx/src/runtime.test.ts", + "specifier": "../../../src/acp/runtime/adapter-contract.testkit.js" + }, + { + "path": "extensions/acpx/src/service.test.ts", + "specifier": "../../../src/acp/runtime/errors.js" + }, + { + "path": "extensions/acpx/src/service.test.ts", + "specifier": "../../../src/acp/runtime/registry.js" + }, + { + "path": "extensions/acpx/src/test-utils/runtime-fixtures.ts", + "specifier": "../../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/amazon-bedrock/index.test.ts", + "specifier": "../../src/test-utils/plugin-registration.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/agents/auth-profiles/repair.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/agents/auth-profiles/types.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/cli/command-format.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/cli/parse-duration.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/commands/auth-choice.apply-helpers.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/commands/auth-token.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/infra/provider-usage.fetch.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/anthropic/index.ts", + "specifier": "../../src/utils/normalize-secret-input.js" + }, + { + "path": "extensions/bluebubbles/src/monitor.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-auth.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-route.test.ts", + "specifier": "../../../src/plugins/registry.js" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-route.test.ts", + "specifier": "../../../src/plugins/runtime.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/bluebubbles/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.test.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.test.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/bluebubbles/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/brave/index.ts", + "specifier": "../../src/agents/tools/web-search-plugin-factory.js" + }, + { + "path": "extensions/brave/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/brave/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/byteplus/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/byteplus/index.ts", + "specifier": "../../src/commands/model-allowlist.js" + }, + { + "path": "extensions/byteplus/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/agents/cloudflare-ai-gateway.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/agents/model-auth-markers.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/commands/auth-choice.api-key.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/commands/auth-choice.apply-helpers.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/commands/onboard-auth.credentials.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/config/types.secrets.js" + }, + { + "path": "extensions/cloudflare-ai-gateway/index.ts", + "specifier": "../../src/utils/normalize-secret-input.js" + }, + { + "path": "extensions/diffs/index.test.ts", + "specifier": "../../src/test-utils/mock-http-response.js" + }, + { + "path": "extensions/diffs/index.test.ts", + "specifier": "../test-utils/plugin-api.js" + }, + { + "path": "extensions/diffs/src/http.test.ts", + "specifier": "../../../src/test-utils/mock-http-response.js" + }, + { + "path": "extensions/diffs/src/tool.test.ts", + "specifier": "../../test-utils/plugin-api.js" + }, + { + "path": "extensions/discord/src/account-inspect.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/account-inspect.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/discord/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-action-gate.js" + }, + { + "path": "extensions/discord/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-helpers.js" + }, + { + "path": "extensions/discord/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/discord/src/accounts.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "specifier": "../../../../src/agents/tools/common.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "specifier": "../../../../src/agents/tools/discord-actions-moderation-shared.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "specifier": "../../../../src/agents/tools/discord-actions.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "specifier": "../../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/agents/tools/common.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/agents/tools/discord-actions-shared.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/agents/tools/discord-actions.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/channels/plugins/actions/reaction-message-id.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/interactive/payload.js" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "specifier": "../../../../src/plugin-sdk/boolean-param.js" + }, + { + "path": "extensions/discord/src/api.test.ts", + "specifier": "../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/discord/src/api.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/discord/src/api.ts", + "specifier": "../../../src/infra/retry.js" + }, + { + "path": "extensions/discord/src/audit.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/audit.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/discord/src/audit.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "specifier": "../../../src/channels/plugins/actions/shared.js" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "specifier": "../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/channel.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/discord/src/channel.ts", + "specifier": "../../../src/utils/message-channel.js" + }, + { + "path": "extensions/discord/src/chunk.test.ts", + "specifier": "../../../src/test-utils/chunk-test-helpers.js" + }, + { + "path": "extensions/discord/src/chunk.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/client.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/client.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/client.ts", + "specifier": "../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/discord/src/client.ts", + "specifier": "../../../src/infra/retry.js" + }, + { + "path": "extensions/discord/src/client.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/directory-cache.ts", + "specifier": "../../../src/routing/account-id.js" + }, + { + "path": "extensions/discord/src/directory-live.test.ts", + "specifier": "../../../src/channels/plugins/directory-config.js" + }, + { + "path": "extensions/discord/src/directory-live.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/directory-live.ts", + "specifier": "../../../src/channels/plugins/directory-config.js" + }, + { + "path": "extensions/discord/src/directory-live.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/draft-stream.ts", + "specifier": "../../../src/channels/draft-stream-controls.js" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "specifier": "../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/discord/src/gateway-logging.test.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/discord/src/gateway-logging.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/discord/src/gateway-logging.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "specifier": "../../../src/infra/system-events.js" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "specifier": "../../../src/test-utils/typed-cases.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts", + "specifier": "../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/agents/identity.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/auto-reply/reply/reply-reference.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/logger.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/media/local-roots.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/plugins/interactive.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/discord/src/monitor/allow-list.ts", + "specifier": "../../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/discord/src/monitor/allow-list.ts", + "specifier": "../../../../src/channels/channel-config.js" + }, + { + "path": "extensions/discord/src/monitor/allow-list.ts", + "specifier": "../../../../src/plugin-sdk/group-access.js" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.test.ts", + "specifier": "../../../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "specifier": "../../../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/commands.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/dm-command-auth.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/discord/src/monitor/dm-command-auth.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/discord/src/monitor/dm-command-decision.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/discord/src/monitor/dm-command-decision.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "specifier": "../../../../src/gateway/client.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "specifier": "../../../../src/gateway/connection-auth.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "specifier": "../../../../src/logger.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/gateway/client.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/gateway/operator-approvals-client.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/gateway/protocol/index.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/infra/exec-approval-command-display.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/infra/exec-approvals.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/logger.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/security/safe-regex.js" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "specifier": "../../../../src/utils/message-channel.js" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/inbound-context.ts", + "specifier": "../../../../src/security/channel-metadata.js" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "specifier": "../../../../src/channels/run-state-machine.js" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "specifier": "../../../../src/infra/format-time/format-duration.ts" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "specifier": "../../../../src/plugin-sdk/keyed-async-queue.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/infra/format-time/format-duration.ts" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.inbound-contract.test.ts", + "specifier": "../../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.module-test-helpers.ts", + "specifier": "../../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.acp-bindings.test.ts", + "specifier": "../../../../src/acp/persistent-bindings.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.acp-bindings.test.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test-helpers.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test.ts", + "specifier": "../../../../src/media-understanding/audio-preflight.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/channels/logging.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/channels/mention-gating.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/logger.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/logging.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/pairing/pairing-messages.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "specifier": "../../../../src/channels/status-reactions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/agents/identity.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/agents/pi-embedded-block-chunker.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/logging.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/status-reactions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/channels/typing.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/config/discord-preview-streaming.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/markdown/tables.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/media/local-roots.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/shared/text/reasoning-tags.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.test-helpers.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "specifier": "../../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "specifier": "../../../../src/channels/plugins/media-payload.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "specifier": "../../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/agents/model-selection.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/config/paths.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/infra/file-lock.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/infra/home-dir.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/plugin-sdk/json-store.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "specifier": "../../../../src/routing/account-id.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test-utils.ts", + "specifier": "../../../../src/auto-reply/reply/commands-models.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test.ts", + "specifier": "../../../../src/auto-reply/reply/commands-models.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "specifier": "../../../../src/agents/model-selection.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "specifier": "../../../../src/auto-reply/reply/commands-models.js" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/plugins/interactive.js" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/native-command-context.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command-context.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "specifier": "../../../../src/plugins/commands.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.types.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/auto-reply/reply/commands-models.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "specifier": "../../../../src/utils/with-timeout.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.options.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.options.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "specifier": "../../../../src/acp/persistent-bindings.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "specifier": "../../../../src/plugins/commands.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/agents/identity.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/auto-reply/reply/model-selection.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/channels/native-command-session-targets.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/media/local-roots.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/pairing/pairing-messages.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/plugins/commands.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/utils/chunk-items.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../../src/utils/with-timeout.js" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "specifier": "../../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "specifier": "../../../../src/media-understanding/audio-preflight.js" + }, + { + "path": "extensions/discord/src/monitor/presence.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "specifier": "../../../../src/channels/allowlists/resolve-utils.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "specifier": "../../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "specifier": "../../../../src/shared/string-normalization.js" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "specifier": "../../../../src/channels/transport/stall-watchdog.js" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "specifier": "../../../../src/gateway/channel-status-patches.js" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/acp/control-plane/manager.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/acp/runtime/errors.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/config/commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/plugins/commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/acp/control-plane/manager.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/acp/runtime/errors.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/channels/thread-bindings-policy.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/config/commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/gateway/channel-status-patches.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/plugins/commands.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "specifier": "../../../../src/shared/string-sample.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/agents/identity-avatar.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/config/types.base.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/infra/retry.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/markdown/tables.js" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "specifier": "../../../../src/infra/fetch.js" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.test.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "specifier": "../../../../src/channels/thread-bindings-policy.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.test.ts", + "specifier": "../../../../src/acp/runtime/session-meta.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.test.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "specifier": "../../../../src/acp/runtime/session-meta.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "specifier": "../../../../src/channels/thread-binding-id.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "specifier": "../../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.messages.ts", + "specifier": "../../../../src/channels/thread-bindings-messages.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.persona.ts", + "specifier": "../../../../src/infra/system-message.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "specifier": "../../../../src/config/paths.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "specifier": "../../../../src/infra/json-file.js" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "specifier": "../../../../src/auto-reply/reply/reply-reference.js" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/identity.js" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/discord/src/pluralkit.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/discord/src/probe.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/probe.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/discord/src/probe.ts", + "specifier": "../../../src/utils/fetch-timeout.js" + }, + { + "path": "extensions/discord/src/resolve-channels.test.ts", + "specifier": "../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/discord/src/resolve-users.test.ts", + "specifier": "../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/discord/src/send.components.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.components.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.components.ts", + "specifier": "../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/discord/src/send.components.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.creates-thread.test.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.emojis-stickers.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/infra/retry.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/markdown/tables.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/media/constants.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/media/mime.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/media/temp-files.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../../src/polls.js" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.reactions.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.sends-basic-channel-messages.test.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../../src/media/load-options.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../../src/polls.js" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/discord/src/send.test-harness.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/discord/src/send.types.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.types.ts", + "specifier": "../../../src/infra/retry.js" + }, + { + "path": "extensions/discord/src/send.webhook-activity.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/send.webhook-activity.test.ts", + "specifier": "../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/discord/src/session-key-normalization.ts", + "specifier": "../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/discord/src/session-key-normalization.ts", + "specifier": "../../../src/channels/chat-type.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/config/types.discord.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/discord/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/discord/src/shared-interactive.ts", + "specifier": "../../../src/channels/plugins/outbound/interactive.js" + }, + { + "path": "extensions/discord/src/shared-interactive.ts", + "specifier": "../../../src/interactive/payload.js" + }, + { + "path": "extensions/discord/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/status-issues/shared.js" + }, + { + "path": "extensions/discord/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/targets.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/targets.ts", + "specifier": "../../../src/channels/plugins/directory-config.js" + }, + { + "path": "extensions/discord/src/targets.ts", + "specifier": "../../../src/channels/targets.js" + }, + { + "path": "extensions/discord/src/token.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/token.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/discord/src/token.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/token.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/discord/src/token.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/discord/src/ui.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/voice-message.test.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "specifier": "../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "specifier": "../../../src/media/ffmpeg-exec.js" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "specifier": "../../../src/media/ffmpeg-limits.js" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "specifier": "../../../src/media/temp-files.js" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "specifier": "../../../../src/commands/agent.js" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "specifier": "../../../../src/media-understanding/runner.js" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/agents/agent-scope.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/commands/agent.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/media-understanding/runner.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/tts/tts-core.js" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "specifier": "../../../../src/tts/tts.js" + }, + { + "path": "extensions/feishu/src/bot.test.ts", + "specifier": "../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/feishu/src/bot.test.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/feishu/src/bot.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/feishu/src/bot.ts", + "specifier": "../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/feishu/src/bot.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/feishu/src/bot.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/feishu/src/bot.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/feishu/src/media.test.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/feishu/src/media.ts", + "specifier": "../../../src/media/constants.js" + }, + { + "path": "extensions/feishu/src/monitor.bot-menu.test.ts", + "specifier": "../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/feishu/src/monitor.bot-menu.test.ts", + "specifier": "../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/feishu/src/monitor.bot-menu.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "specifier": "../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "specifier": "../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/feishu/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/feishu/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/feishu/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/feishu/src/setup-status.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/feishu/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/feishu/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.test.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/channels/thread-binding-id.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/channels/thread-bindings-policy.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/feishu/src/thread-bindings.ts", + "specifier": "../../../src/shared/global-singleton.js" + }, + { + "path": "extensions/firecrawl/index.ts", + "specifier": "../../src/agents/tools/common.js" + }, + { + "path": "extensions/firecrawl/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/firecrawl/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/firecrawl/src/config.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/firecrawl/src/config.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/firecrawl/src/config.ts", + "specifier": "../../../src/utils/normalize-secret-input.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-client.ts", + "specifier": "../../../src/agents/tools/web-fetch-utils.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-client.ts", + "specifier": "../../../src/agents/tools/web-guarded-fetch.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-client.ts", + "specifier": "../../../src/agents/tools/web-shared.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-client.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-client.ts", + "specifier": "../../../src/security/external-content.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-scrape-tool.ts", + "specifier": "../../../src/agents/schema/typebox.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-scrape-tool.ts", + "specifier": "../../../src/agents/tools/common.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-scrape-tool.ts", + "specifier": "../../../src/plugins/types.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-search-provider.ts", + "specifier": "../../../src/plugins/types.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-search-tool.ts", + "specifier": "../../../src/agents/tools/common.js" + }, + { + "path": "extensions/firecrawl/src/firecrawl-search-tool.ts", + "specifier": "../../../src/plugins/types.js" + }, + { + "path": "extensions/github-copilot/index.ts", + "specifier": "../../src/agents/auth-profiles/profiles.js" + }, + { + "path": "extensions/github-copilot/index.ts", + "specifier": "../../src/agents/auth-profiles/store.js" + }, + { + "path": "extensions/github-copilot/index.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/github-copilot/index.ts", + "specifier": "../../src/config/types.secrets.js" + }, + { + "path": "extensions/github-copilot/index.ts", + "specifier": "../../src/providers/github-copilot-auth.js" + }, + { + "path": "extensions/github-copilot/token.ts", + "specifier": "../../src/config/paths.js" + }, + { + "path": "extensions/github-copilot/token.ts", + "specifier": "../../src/infra/json-file.js" + }, + { + "path": "extensions/github-copilot/usage.test.ts", + "specifier": "../../src/test-utils/provider-usage-fetch.js" + }, + { + "path": "extensions/github-copilot/usage.ts", + "specifier": "../../src/infra/provider-usage.fetch.shared.js" + }, + { + "path": "extensions/github-copilot/usage.ts", + "specifier": "../../src/infra/provider-usage.shared.js" + }, + { + "path": "extensions/github-copilot/usage.ts", + "specifier": "../../src/infra/provider-usage.types.js" + }, + { + "path": "extensions/google/gemini-cli-provider.ts", + "specifier": "../../src/infra/provider-usage.fetch.js" + }, + { + "path": "extensions/google/gemini-cli-provider.ts", + "specifier": "../../src/plugin-sdk/provider-auth-result.js" + }, + { + "path": "extensions/google/gemini-cli-provider.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/google/index.ts", + "specifier": "../../src/agents/tools/web-search-plugin-factory.js" + }, + { + "path": "extensions/google/index.ts", + "specifier": "../../src/commands/google-gemini-model-default.js" + }, + { + "path": "extensions/google/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/google/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/google/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/google/oauth.flow.ts", + "specifier": "../../src/infra/wsl.js" + }, + { + "path": "extensions/google/oauth.http.ts", + "specifier": "../../src/infra/net/fetch-guard.js" + }, + { + "path": "extensions/google/oauth.test.ts", + "specifier": "../../src/infra/net/fetch-guard.js" + }, + { + "path": "extensions/google/oauth.test.ts", + "specifier": "../../src/infra/wsl.js" + }, + { + "path": "extensions/google/provider-models.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/google/provider-models.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/googlechat/src/channel.startup.test.ts", + "specifier": "../../test-utils/start-account-lifecycle.js" + }, + { + "path": "extensions/googlechat/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "specifier": "../../../src/plugins/registry.js" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "specifier": "../../../src/plugins/runtime.js" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "specifier": "../../../src/test-utils/mock-http-response.js" + }, + { + "path": "extensions/googlechat/src/resolve-target.test.ts", + "specifier": "../../shared/resolve-target-test-helpers.js" + }, + { + "path": "extensions/googlechat/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/googlechat/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/googlechat/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/googlechat/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/huggingface/index.ts", + "specifier": "../../src/agents/models-config.providers.discovery.js" + }, + { + "path": "extensions/huggingface/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/huggingface/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-helpers.js" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/imessage/src/channel.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/imessage/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/imessage/src/client.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/client.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/imessage/src/monitor.gating.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "specifier": "../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "specifier": "../../../../src/markdown/tables.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/markdown/tables.js" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.test.ts", + "specifier": "../../../../src/terminal/safe-text.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/channels/logging.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/config/group-policy.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/terminal/safe-text.js" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/agents/identity.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/infra/scp-host.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/infra/transport-ready.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/media/inbound-path-policy.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/media/mime.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/imessage/src/monitor/reflection-guard.ts", + "specifier": "../../../../src/shared/text/code-regions.js" + }, + { + "path": "extensions/imessage/src/monitor/runtime.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/monitor/runtime.ts", + "specifier": "../../../../src/shared/string-normalization.js" + }, + { + "path": "extensions/imessage/src/monitor/sanitize-outbound.ts", + "specifier": "../../../../src/shared/text/assistant-visible-text.js" + }, + { + "path": "extensions/imessage/src/monitor/types.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/monitor/types.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/imessage/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/imessage/src/probe.test.ts", + "specifier": "../../../src/commands/onboard-helpers.js" + }, + { + "path": "extensions/imessage/src/probe.test.ts", + "specifier": "../../../src/process/exec.js" + }, + { + "path": "extensions/imessage/src/probe.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/imessage/src/probe.ts", + "specifier": "../../../src/commands/onboard-helpers.js" + }, + { + "path": "extensions/imessage/src/probe.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/probe.ts", + "specifier": "../../../src/process/exec.js" + }, + { + "path": "extensions/imessage/src/probe.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/imessage/src/send.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/send.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/imessage/src/send.ts", + "specifier": "../../../src/markdown/tables.js" + }, + { + "path": "extensions/imessage/src/send.ts", + "specifier": "../../../src/media/mime.js" + }, + { + "path": "extensions/imessage/src/send.ts", + "specifier": "../../../src/media/outbound-attachment.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/imessage/src/setup-core.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/commands/onboard-helpers.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/imessage/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/imessage/src/target-parsing-helpers.ts", + "specifier": "../../../src/plugin-sdk/allow-from.js" + }, + { + "path": "extensions/imessage/src/targets.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/irc/src/channel.startup.test.ts", + "specifier": "../../test-utils/start-account-lifecycle.js" + }, + { + "path": "extensions/irc/src/channel.ts", + "specifier": "../../shared/passive-monitor.js" + }, + { + "path": "extensions/irc/src/config-schema.ts", + "specifier": "../../shared/config-schema-helpers.js" + }, + { + "path": "extensions/irc/src/monitor.ts", + "specifier": "../../shared/runtime.js" + }, + { + "path": "extensions/irc/src/policy.test.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/irc/src/send.test.ts", + "specifier": "../../test-utils/send-config.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.core.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/irc/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/irc/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/irc/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/irc/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/kilocode/index.ts", + "specifier": "../../src/agents/models-config.providers.discovery.js" + }, + { + "path": "extensions/kilocode/index.ts", + "specifier": "../../src/agents/pi-embedded-runner/proxy-stream-wrappers.js" + }, + { + "path": "extensions/kilocode/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/kilocode/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/kimi-coding/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/kimi-coding/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/kimi-coding/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/kimi-coding/index.ts", + "specifier": "../../src/utils.js" + }, + { + "path": "extensions/line/src/channel.logout.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/line/src/channel.setup.ts", + "specifier": "../../../src/line/accounts.js" + }, + { + "path": "extensions/line/src/channel.startup.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/line/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/line/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/line/src/setup-core.ts", + "specifier": "../../../src/line/accounts.js" + }, + { + "path": "extensions/line/src/setup-core.ts", + "specifier": "../../../src/line/types.js" + }, + { + "path": "extensions/line/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/line/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/line/src/setup-surface.test.ts", + "specifier": "../../../src/line/accounts.js" + }, + { + "path": "extensions/line/src/setup-surface.test.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/line/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/line/accounts.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/line/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/lobster/src/test-helpers.ts", + "specifier": "../../shared/windows-cmd-shim-test-fixtures.js" + }, + { + "path": "extensions/matrix/src/channel.directory.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/matrix/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/matrix/src/matrix/send-queue.test.ts", + "specifier": "../../../shared/deferred.js" + }, + { + "path": "extensions/matrix/src/outbound.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/matrix/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/matrix/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/matrix/src/setup-core.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/matrix/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/plugin-sdk/resolution-notes.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/matrix/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/mattermost/index.test.ts", + "specifier": "../test-utils/plugin-api.js" + }, + { + "path": "extensions/mattermost/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/mattermost/src/config-schema.ts", + "specifier": "../../shared/config-schema-helpers.js" + }, + { + "path": "extensions/mattermost/src/mattermost/send.test.ts", + "specifier": "../../../test-utils/send-config.js" + }, + { + "path": "extensions/mattermost/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/mattermost/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/mattermost/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/agents/model-auth-markers.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/commands/onboard-auth.config-minimax.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/infra/provider-usage.fetch.js" + }, + { + "path": "extensions/minimax/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/mistral/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/mistral/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/modelstudio/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/modelstudio/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/modelstudio/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/agents/pi-embedded-runner/moonshot-stream-wrappers.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/agents/tools/web-search-plugin-factory.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/commands/onboard-auth.config-core.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/commands/onboard-auth.models.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/moonshot/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/msteams/src/attachments.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/msteams/src/channel.directory.test.ts", + "specifier": "../../test-utils/directory.js" + }, + { + "path": "extensions/msteams/src/graph-upload.test.ts", + "specifier": "../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/msteams/src/messenger.test.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/msteams/src/messenger.test.ts", + "specifier": "../../test-utils/plugin-runtime-mock.js" + }, + { + "path": "extensions/msteams/src/outbound.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/msteams/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/msteams/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/msteams/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/nextcloud-talk/src/channel.startup.test.ts", + "specifier": "../../test-utils/start-account-context.js" + }, + { + "path": "extensions/nextcloud-talk/src/channel.startup.test.ts", + "specifier": "../../test-utils/start-account-lifecycle.js" + }, + { + "path": "extensions/nextcloud-talk/src/channel.ts", + "specifier": "../../shared/passive-monitor.js" + }, + { + "path": "extensions/nextcloud-talk/src/config-schema.ts", + "specifier": "../../shared/config-schema-helpers.js" + }, + { + "path": "extensions/nextcloud-talk/src/monitor.ts", + "specifier": "../../shared/runtime.js" + }, + { + "path": "extensions/nextcloud-talk/src/send.test.ts", + "specifier": "../../test-utils/send-config.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.core.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-core.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.test.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/types.core.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/nextcloud-talk/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/nostr/src/channel.outbound.test.ts", + "specifier": "../../test-utils/start-account-context.js" + }, + { + "path": "extensions/nostr/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/nostr/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/nostr/src/setup-surface.test.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/nostr/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/nostr/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/nvidia/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/ollama/index.ts", + "specifier": "../../src/agents/models-config.providers.discovery.js" + }, + { + "path": "extensions/ollama/index.ts", + "specifier": "../../src/agents/ollama-defaults.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/auth-profiles/profiles.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/auth-profiles/store.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/auth-profiles/types.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/defaults.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/agents/provider-id.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/commands/openai-codex-oauth.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/infra/provider-usage.fetch.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/plugin-sdk/provider-auth-result.js" + }, + { + "path": "extensions/openai/openai-codex-provider.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/openai/openai-provider.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/openai/openai-provider.ts", + "specifier": "../../src/agents/provider-id.js" + }, + { + "path": "extensions/openai/openai-provider.ts", + "specifier": "../../src/commands/openai-model-default.js" + }, + { + "path": "extensions/openai/openai-provider.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/openai/openai-provider.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/openai/shared.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/openai/shared.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/opencode-go/index.ts", + "specifier": "../../src/commands/onboard-auth.config-opencode-go.js" + }, + { + "path": "extensions/opencode-go/index.ts", + "specifier": "../../src/commands/opencode-go-model-default.js" + }, + { + "path": "extensions/opencode-go/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/opencode/index.ts", + "specifier": "../../src/commands/onboard-auth.config-opencode.js" + }, + { + "path": "extensions/opencode/index.ts", + "specifier": "../../src/commands/opencode-zen-model-default.js" + }, + { + "path": "extensions/opencode/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/agents/defaults.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/agents/pi-embedded-runner/openrouter-model-capabilities.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/agents/pi-embedded-runner/proxy-stream-wrappers.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/openrouter/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/openshell/src/fs-bridge.test.ts", + "specifier": "../../../src/agents/sandbox/test-fixtures.js" + }, + { + "path": "extensions/openshell/src/remote-fs-bridge.test.ts", + "specifier": "../../../src/agents/sandbox/test-fixtures.js" + }, + { + "path": "extensions/perplexity/index.ts", + "specifier": "../../src/agents/tools/web-search-plugin-factory.js" + }, + { + "path": "extensions/perplexity/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/perplexity/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/phone-control/index.test.ts", + "specifier": "../test-utils/plugin-api.js" + }, + { + "path": "extensions/qianfan/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/qianfan/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/qianfan/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/qwen-portal-auth/index.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/qwen-portal-auth/index.ts", + "specifier": "../../src/agents/model-auth-markers.js" + }, + { + "path": "extensions/qwen-portal-auth/index.ts", + "specifier": "../../src/providers/qwen-portal-oauth.js" + }, + { + "path": "extensions/sglang/index.ts", + "specifier": "../../src/agents/sglang-defaults.js" + }, + { + "path": "extensions/signal/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-helpers.js" + }, + { + "path": "extensions/signal/src/accounts.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/signal/src/channel.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/signal/src/channel.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/signal/src/channel.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/signal/src/client.test.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/signal/src/client.test.ts", + "specifier": "../../../src/infra/secure-random.js" + }, + { + "path": "extensions/signal/src/client.test.ts", + "specifier": "../../../src/utils/fetch-timeout.js" + }, + { + "path": "extensions/signal/src/client.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/signal/src/client.ts", + "specifier": "../../../src/infra/secure-random.js" + }, + { + "path": "extensions/signal/src/client.ts", + "specifier": "../../../src/utils/fetch-timeout.js" + }, + { + "path": "extensions/signal/src/daemon.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/signal/src/format.ts", + "specifier": "../../../src/config/types.base.js" + }, + { + "path": "extensions/signal/src/format.ts", + "specifier": "../../../src/markdown/ir.js" + }, + { + "path": "extensions/signal/src/identity.ts", + "specifier": "../../../src/plugin-sdk/group-access.js" + }, + { + "path": "extensions/signal/src/identity.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "specifier": "../../../src/infra/system-events.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/infra/system-events.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/infra/transport-ready.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/infra/transport-ready.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/media/store.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/shared/string-normalization.js" + }, + { + "path": "extensions/signal/src/monitor.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "specifier": "../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "specifier": "../../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "specifier": "../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/agents/identity.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/logging.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/mention-gating.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/plugins/normalize/signal.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/session.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/channels/typing.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/config/group-policy.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/media/mime.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/signal/src/outbound-adapter.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/signal/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/signal/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/signal/src/outbound-adapter.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/signal/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/signal/src/probe.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/signal/src/reaction-level.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/reaction-level.ts", + "specifier": "../../../src/utils/reaction-level.js" + }, + { + "path": "extensions/signal/src/rpc-context.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/send-reactions.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/send-reactions.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/send.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/send.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/signal/src/send.ts", + "specifier": "../../../src/media/mime.js" + }, + { + "path": "extensions/signal/src/send.ts", + "specifier": "../../../src/media/outbound-attachment.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/signal/src/setup-core.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/commands/onboard-helpers.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/commands/signal-install.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/signal/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/account-inspect.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/slack/src/account-surface-fields.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/channels/chat-type.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-helpers.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/slack/src/accounts.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/actions.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/actions.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/slack/src/blocks-render.ts", + "specifier": "../../../src/channels/plugins/outbound/interactive.js" + }, + { + "path": "extensions/slack/src/blocks-render.ts", + "specifier": "../../../src/interactive/payload.js" + }, + { + "path": "extensions/slack/src/blocks.test-helpers.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "specifier": "../../../src/config/types.slack.js" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/channel.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/slack/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/slack/src/directory-live.ts", + "specifier": "../../../src/channels/plugins/directory-config.js" + }, + { + "path": "extensions/slack/src/directory-live.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/slack/src/draft-stream.ts", + "specifier": "../../../src/channels/draft-stream-loop.js" + }, + { + "path": "extensions/slack/src/format.ts", + "specifier": "../../../src/config/types.base.js" + }, + { + "path": "extensions/slack/src/format.ts", + "specifier": "../../../src/markdown/ir.js" + }, + { + "path": "extensions/slack/src/format.ts", + "specifier": "../../../src/markdown/render.js" + }, + { + "path": "extensions/slack/src/interactive-replies.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/interactive-replies.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/message-actions.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "specifier": "../../../src/agents/tools/common.js" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor.threading.missing-thread-ts.test.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "specifier": "../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/slack/src/monitor/allow-list.ts", + "specifier": "../../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/slack/src/monitor/allow-list.ts", + "specifier": "../../../../src/shared/string-normalization.js" + }, + { + "path": "extensions/slack/src/monitor/auth.test.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/auth.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/slack/src/monitor/channel-config.ts", + "specifier": "../../../../src/channels/channel-config.js" + }, + { + "path": "extensions/slack/src/monitor/channel-config.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/commands.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/context.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/context.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/infra/dedupe.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/logging.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "specifier": "../../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/events/channels.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "specifier": "../../../../../src/channels/plugins/config-writes.js" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.block-actions.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.block-actions.ts", + "specifier": "../../../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.block-actions.ts", + "specifier": "../../../../../src/plugins/interactive.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.modal.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.test.ts", + "specifier": "../../../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.test.ts", + "specifier": "../../../../../src/plugins/interactive.js" + }, + { + "path": "extensions/slack/src/monitor/events/members.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/members.test.ts", + "specifier": "../../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/events/members.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/events/members.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/messages.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/messages.test.ts", + "specifier": "../../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/events/messages.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/events/messages.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/pins.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/pins.test.ts", + "specifier": "../../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/events/pins.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/events/pins.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.test.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.test.ts", + "specifier": "../../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/events/system-event-context.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/external-arg-menu-store.ts", + "specifier": "../../../../src/infra/secure-random.js" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "specifier": "../../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "specifier": "../../../../src/test-helpers/ssrf.js" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "specifier": "../../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "specifier": "../../../../src/infra/net/hostname.js" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "specifier": "../../../../src/plugin-sdk/request-url.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler.app-mention-race.test.ts", + "specifier": "../../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler.test.ts", + "specifier": "../../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler.ts", + "specifier": "../../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/agents/identity.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/auto-reply/dispatch.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/auto-reply/reply/reply-dispatcher.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/channels/logging.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/channels/typing.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/infra/outbound/identity.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "specifier": "../../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-content.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "specifier": "../../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test-helpers.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test-helpers.ts", + "specifier": "../../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "specifier": "../../../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "specifier": "../../../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.thread-session-key.test.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/agents/identity.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/conversation-label.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/logging.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/mention-gating.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/channels/session.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/infra/system-events.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "specifier": "../../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/types.ts", + "specifier": "../../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/slack/src/monitor/message-handler/types.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/monitor.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/monitor.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/policy.ts", + "specifier": "../../../../src/plugin-sdk/group-access.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/channels/allowlists/resolve-utils.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/config/dangerous-name-matching.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/config/types.secrets.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/gateway/channel-status-patches.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/infra/backoff.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/infra/http-body.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "specifier": "../../../../src/shared/string-normalization.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/auto-reply/reply/reply-reference.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/auto-reply/tokens.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/config/types.base.js" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/monitor/room-context.ts", + "specifier": "../../../../src/security/channel-metadata.js" + }, + { + "path": "extensions/slack/src/monitor/slash-commands.runtime.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/channels/conversation-label.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/channels/session-meta.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/slash-skill-commands.runtime.ts", + "specifier": "../../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/channels/conversation-label.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/slack/src/monitor/slash.test.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/channels/command-gating.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/channels/native-command-session-targets.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/config/commands.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "specifier": "../../../../src/utils/chunk-items.js" + }, + { + "path": "extensions/slack/src/monitor/thread-resolution.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/slack/src/monitor/thread-resolution.ts", + "specifier": "../../../../src/infra/map-size.js" + }, + { + "path": "extensions/slack/src/monitor/types.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/monitor/types.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/identity.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/interactive/payload.js" + }, + { + "path": "extensions/slack/src/outbound-adapter.ts", + "specifier": "../../../src/plugins/hook-runner-global.js" + }, + { + "path": "extensions/slack/src/probe.test.ts", + "specifier": "../../../src/utils/with-timeout.js" + }, + { + "path": "extensions/slack/src/probe.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/slack/src/probe.ts", + "specifier": "../../../src/utils/with-timeout.js" + }, + { + "path": "extensions/slack/src/scopes.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/auto-reply/tokens.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../../src/infra/net/fetch-guard.js" + }, + { + "path": "extensions/slack/src/send.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/slack/src/send.upload.test.ts", + "specifier": "../../../src/infra/net/fetch-guard.js" + }, + { + "path": "extensions/slack/src/send.upload.test.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/slack/src/sent-thread-cache.ts", + "specifier": "../../../src/shared/global-singleton.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/slack/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/slack/src/stream-mode.ts", + "specifier": "../../../src/config/discord-preview-streaming.js" + }, + { + "path": "extensions/slack/src/streaming.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/slack/src/targets.test.ts", + "specifier": "../../../src/channels/plugins/normalize/slack.js" + }, + { + "path": "extensions/slack/src/targets.ts", + "specifier": "../../../src/channels/targets.js" + }, + { + "path": "extensions/slack/src/threading-tool-context.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/threading-tool-context.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/slack/src/threading-tool-context.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/slack/src/threading.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/slack/src/token.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.test.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/synology-chat/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/synthetic/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/synthetic/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/synthetic/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/telegram/src/account-inspect.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/account-inspect.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/infra/secret-file.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/plugin-sdk/account-resolution.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "specifier": "../../../src/secrets/ref-contract.js" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-action-gate.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/infra/env.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/plugin-sdk/account-resolution.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/routing/bindings.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/routing/default-account-warnings.js" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/approval-buttons.ts", + "specifier": "../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/telegram/src/audit-membership-runtime.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/telegram/src/audit-membership-runtime.ts", + "specifier": "../../../src/utils/fetch-timeout.js" + }, + { + "path": "extensions/telegram/src/audit.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/audit.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "specifier": "../../../src/channels/allow-from.js" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "specifier": "../../../src/channels/allowlist-match.js" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/agents/agent-scope.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/agents/model-selection.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/reply/commands-info.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/reply/commands-models.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/reply/model-selection.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/auto-reply/status.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/channels/inbound-debounce-policy.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/channels/plugins/config-writes.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/config/io.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/config/types.base.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/infra/system-events.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/media/fetch.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/plugins/interactive.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "specifier": "../../../src/sessions/model-overrides.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.acp-bindings.test.ts", + "specifier": "../../../src/acp/persistent-bindings.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.audio-transcript.test.ts", + "specifier": "../../../src/media-understanding/audio-preflight.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/agents/model-catalog.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/agents/model-selection.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/channels/command-gating.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/channels/location.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/channels/logging.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/channels/mention-gating.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "specifier": "../../../src/media-understanding/audio-preflight.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.dm-threads.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.dm-topic-threadid.test.ts", + "specifier": "../../../src/channels/session.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.named-account-dm.test.ts", + "specifier": "../../../src/channels/session.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.named-account-dm.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/channels/location.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/channels/session.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "specifier": "../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.thread-binding.test.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.topic-agentid.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/agents/identity.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/channels/logging.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/channels/status-reactions.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/agents/agent-scope.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/agents/model-catalog.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/agents/model-selection.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/channels/logging.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/channels/typing.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/media/local-roots.js" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "specifier": "../../../src/config/telegram-custom-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.plugin-auth.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.plugin-auth.test.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/acp/persistent-bindings.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "specifier": "../../../src/plugins/commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "specifier": "../../../src/agents/skills.e2e-test-helpers.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "specifier": "../../../src/plugins/commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/channels/session-meta.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/plugins/commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/config/telegram-custom-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/plugins/commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/command-auth.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/channels/command-gating.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/channels/native-command-session-targets.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/channels/session-meta.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/config/telegram-custom-commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/media/local-roots.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/plugins/commands.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot-updates.ts", + "specifier": "../../../src/infra/dedupe.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/auto-reply/skill-commands.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/infra/system-events.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test.ts", + "specifier": "../../../src/test-utils/frozen-time.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/media/store.js" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot.media.test-utils.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/telegram/src/bot.media.test-utils.ts", + "specifier": "../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/auto-reply/commands-registry.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/config/telegram-custom-commands.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/plugins/interactive.js" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "specifier": "../../../src/plugins/types.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/agents/agent-scope.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/channels/thread-bindings-policy.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/config/commands.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/config/sessions.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/bot.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/config/types.base.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/hooks/fire-and-forget.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/hooks/internal-hooks.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/hooks/message-hook-mappers.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/media/load-options.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/media/mime.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/plugins/hook-runner-global.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "specifier": "../../../whatsapp/src/media.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "specifier": "../../../../src/infra/retry.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "specifier": "../../../../src/media/fetch.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.send.ts", + "specifier": "../../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.send.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "specifier": "../../../../src/hooks/internal-hooks.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "specifier": "../../../../src/plugins/hook-runner-global.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "specifier": "../../../whatsapp/src/media.js" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "specifier": "../../../../src/channels/location.js" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "specifier": "../../../../src/config/discord-preview-streaming.js" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "specifier": "../../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/bot/reply-threading.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/button-types.ts", + "specifier": "../../../src/channels/plugins/outbound/interactive.js" + }, + { + "path": "extensions/telegram/src/button-types.ts", + "specifier": "../../../src/interactive/payload.js" + }, + { + "path": "extensions/telegram/src/channel-actions.test.ts", + "specifier": "../../../src/agents/tools/telegram-actions.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/agents/tools/common.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/agents/tools/telegram-actions.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/channels/plugins/actions/reaction-message-id.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/channels/plugins/actions/shared.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/plugin-sdk/boolean-param.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/plugin-sdk/tool-send.js" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "specifier": "../../../src/poll-params.js" + }, + { + "path": "extensions/telegram/src/channel.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/telegram/src/channel.ts", + "specifier": "../../../src/acp/conversation-id.js" + }, + { + "path": "extensions/telegram/src/channel.ts", + "specifier": "../../../src/infra/exec-approval-command-display.js" + }, + { + "path": "extensions/telegram/src/channel.ts", + "specifier": "../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/telegram/src/channel.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/telegram/src/channel.ts", + "specifier": "../../../src/utils/message-channel.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/acp/persistent-bindings.route.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/plugins/conversation-binding.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "specifier": "../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/telegram/src/draft-chunking.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/draft-stream.ts", + "specifier": "../../../src/channels/draft-stream-controls.js" + }, + { + "path": "extensions/telegram/src/draft-stream.ts", + "specifier": "../../../src/shared/global-singleton.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/gateway/client.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/gateway/operator-approvals-client.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/gateway/protocol/index.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/infra/exec-approval-command-display.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/infra/exec-approval-session-target.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/infra/exec-approvals.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "specifier": "../../../src/security/safe-regex.js" + }, + { + "path": "extensions/telegram/src/exec-approvals.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "specifier": "../../../src/infra/exec-approval-reply.js" + }, + { + "path": "extensions/telegram/src/fetch.test.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "specifier": "../../../src/infra/fetch.js" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "specifier": "../../../src/infra/net/proxy-env.js" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "specifier": "../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/format.ts", + "specifier": "../../../src/config/types.base.js" + }, + { + "path": "extensions/telegram/src/format.ts", + "specifier": "../../../src/markdown/ir.js" + }, + { + "path": "extensions/telegram/src/format.ts", + "specifier": "../../../src/markdown/render.js" + }, + { + "path": "extensions/telegram/src/group-access.policy-access.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/group-access.policy-access.test.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "specifier": "../../../src/config/group-policy.js" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "specifier": "../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "specifier": "../../../src/plugin-sdk/group-access.js" + }, + { + "path": "extensions/telegram/src/group-config-helpers.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/inline-buttons.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/inline-buttons.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/lane-delivery-text-deliverer.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/lane-delivery.test.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "specifier": "../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "specifier": "../../../src/infra/unhandled-rejections.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/config/agent-limits.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/infra/abort-signal.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/infra/unhandled-rejections.js" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/telegram/src/network-config.test.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/network-config.test.ts", + "specifier": "../../../src/infra/wsl.js" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "specifier": "../../../src/infra/env.js" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "specifier": "../../../src/infra/wsl.js" + }, + { + "path": "extensions/telegram/src/network-errors.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "specifier": "../../../src/interactive/payload.js" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "specifier": "../../../src/infra/format-time/format-duration.ts" + }, + { + "path": "extensions/telegram/src/probe.test.ts", + "specifier": "../../../src/test-utils/fetch-mock.js" + }, + { + "path": "extensions/telegram/src/probe.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/telegram/src/probe.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/probe.ts", + "specifier": "../../../src/utils/fetch-timeout.js" + }, + { + "path": "extensions/telegram/src/proxy.ts", + "specifier": "../../../src/infra/net/proxy-fetch.js" + }, + { + "path": "extensions/telegram/src/reaction-level.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/reaction-level.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/reaction-level.ts", + "specifier": "../../../src/utils/reaction-level.js" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "specifier": "../../../src/agents/pi-embedded-utils.js" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "specifier": "../../../src/auto-reply/types.js" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "specifier": "../../../src/shared/text/code-regions.js" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "specifier": "../../../src/shared/text/reasoning-tags.js" + }, + { + "path": "extensions/telegram/src/send.proxy.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "specifier": "../../../src/test-utils/vitest-mock-fn.js" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/infra/diagnostic-flags.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/infra/retry-policy.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/infra/retry.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/logging/redact.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/media/constants.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/media/load-options.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/media/mime.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../../src/polls.js" + }, + { + "path": "extensions/telegram/src/send.ts", + "specifier": "../../whatsapp/src/media.js" + }, + { + "path": "extensions/telegram/src/sendchataction-401-backoff.test.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/telegram/src/sendchataction-401-backoff.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/telegram/src/sent-message-cache.ts", + "specifier": "../../../src/shared/global-singleton.js" + }, + { + "path": "extensions/telegram/src/sequential-key.ts", + "specifier": "../../../src/auto-reply/reply/abort.js" + }, + { + "path": "extensions/telegram/src/sequential-key.ts", + "specifier": "../../../src/auto-reply/reply/btw-command.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.runtime.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/setup-core.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/telegram/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/status-issues/shared.js" + }, + { + "path": "extensions/telegram/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/telegram/src/status-reaction-variants.test.ts", + "specifier": "../../../src/channels/status-reactions.js" + }, + { + "path": "extensions/telegram/src/status-reaction-variants.ts", + "specifier": "../../../src/channels/status-reactions.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.test.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/agents/model-auth.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/agents/model-catalog.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/agents/model-selection.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/infra/json-file.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/media-understanding/defaults.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/media-understanding/providers/image-runtime.js" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "specifier": "../../../src/media-understanding/runner.js" + }, + { + "path": "extensions/telegram/src/target-writeback.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/target-writeback.test.ts", + "specifier": "../../../src/cron/store.js" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "specifier": "../../../src/cron/store.js" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.test.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.test.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/channels/thread-binding-id.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/channels/thread-bindings-messages.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/infra/json-files.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/infra/outbound/session-binding-service.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "specifier": "../../../src/shared/global-singleton.js" + }, + { + "path": "extensions/telegram/src/token.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/token.test.ts", + "specifier": "../../../src/test-helpers/state-dir-env.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/config/types.telegram.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/infra/secret-file.js" + }, + { + "path": "extensions/telegram/src/token.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/telegram/src/update-offset-store.test.ts", + "specifier": "../../../src/test-helpers/state-dir-env.js" + }, + { + "path": "extensions/telegram/src/update-offset-store.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/telegram/src/update-offset-store.ts", + "specifier": "../../../src/infra/json-files.js" + }, + { + "path": "extensions/telegram/src/voice.ts", + "specifier": "../../../src/media/audio.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/infra/diagnostic-events.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/infra/errors.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/infra/http-body.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/logging/diagnostic.js" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/tlon/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/tlon/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/tlon/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.core.js" + }, + { + "path": "extensions/tlon/src/setup-core.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/tlon/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/tlon/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/tlon/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/tlon/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/tlon/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/tlon/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/together/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/together/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/together/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/twitch/src/plugin.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/twitch/src/setup-surface.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/venice/index.ts", + "specifier": "../../src/agents/models-config.providers.discovery.js" + }, + { + "path": "extensions/venice/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/venice/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/vercel-ai-gateway/index.ts", + "specifier": "../../src/agents/models-config.providers.discovery.js" + }, + { + "path": "extensions/vercel-ai-gateway/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/vercel-ai-gateway/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/vllm/index.ts", + "specifier": "../../src/agents/vllm-defaults.js" + }, + { + "path": "extensions/volcengine/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/volcengine/index.ts", + "specifier": "../../src/commands/model-allowlist.js" + }, + { + "path": "extensions/volcengine/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "specifier": "../../../src/channels/plugins/account-helpers.js" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "specifier": "../../../src/routing/account-lookup.js" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/accounts.whatsapp-auth.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "specifier": "../../../src/polls.js" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/agent-tools-login.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.broadcast-groups.combined.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.impl.ts", + "specifier": "../../../src/auto-reply/heartbeat.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.impl.ts", + "specifier": "../../../src/auto-reply/tokens.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "specifier": "../../../src/agents/pi-embedded.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "specifier": "../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.last-route.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/config/types.base.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/markdown/tables.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/markdown/whatsapp.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/agents/current-time.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/auto-reply/tokens.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/channels/plugins/whatsapp-heartbeat.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/infra/heartbeat-events.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/infra/heartbeat-visibility.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/logging/redact-identifier.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/agents/current-time.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/auto-reply/heartbeat-reply-payload.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/auto-reply/heartbeat.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/auto-reply/tokens.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/channels/plugins/whatsapp-heartbeat.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/infra/heartbeat-events.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/infra/heartbeat-visibility.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/logging/redact-identifier.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/loggers.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "specifier": "../../../../src/auto-reply/reply/mentions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/cli/wait.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/gateway/channel-status-patches.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/infra/format-time/format-duration.ts" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/infra/system-events.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/infra/unhandled-rejections.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "specifier": "../../../../src/runtime.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "specifier": "../../../../../src/channels/ack-reactions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "specifier": "../../../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "specifier": "../../../../../src/auto-reply/group-activation.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "specifier": "../../../../../src/config/group-policy.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/auto-reply/group-activation.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/channels/mention-gating.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "specifier": "../../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-members.ts", + "specifier": "../../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "specifier": "../../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "specifier": "../../../../../src/agents/identity.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "specifier": "../../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/auto-reply/templating.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "specifier": "../../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/peer.ts", + "specifier": "../../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.inbound-contract.test.ts", + "specifier": "../../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.inbound-contract.test.ts", + "specifier": "../../../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/agents/identity.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/command-detection.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/envelope.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/reply.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/reply/history.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/reply/inbound-context.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/reply/provider-dispatcher.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/auto-reply/types.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/channels/location.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/channels/reply-prefix.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/channels/session-envelope.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/media/local-roots.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "specifier": "../../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "specifier": "../../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-monitor.test.ts", + "specifier": "../../../../src/routing/resolve-route.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-utils.test.ts", + "specifier": "../../../../src/config/sessions.js" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-utils.test.ts", + "specifier": "../../../../src/test-utils/temp-dir.js" + }, + { + "path": "extensions/whatsapp/src/channel.outbound.test.ts", + "specifier": "../../../src/test-helpers/whatsapp-outbound.js" + }, + { + "path": "extensions/whatsapp/src/channel.ts", + "specifier": "../../../src/whatsapp/normalize.js" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "specifier": "../../../src/media/store.js" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.test-harness.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.test-harness.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/config/runtime-group-policy.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/pairing/pairing-challenge.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/security/dm-policy-shared.js" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/inbound/dedupe.ts", + "specifier": "../../../../src/infra/dedupe.js" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "specifier": "../../../../src/channels/location.js" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/inbound/media.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/auto-reply/inbound-debounce.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/channels/location.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/logging/logger.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/logging/subsystem.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/media/store.js" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.test.ts", + "specifier": "../../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.ts", + "specifier": "../../../../src/infra/channel-activity.js" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.ts", + "specifier": "../../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/inbound/types.ts", + "specifier": "../../../../src/channels/location.js" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "specifier": "../../../src/logger.js" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/whatsapp/src/login.coverage.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/login.test.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "specifier": "../../../src/logger.js" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../../src/config/paths.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../../src/infra/tmp-openclaw-dir.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../../src/media/image-ops.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../../src/test-helpers/ssrf.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../../src/test-utils/env.js" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "specifier": "../../discord/src/send.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/infra/fs-safe.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/infra/net/ssrf.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/media/constants.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/media/fetch.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/media/image-ops.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/media/local-roots.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/media/mime.js" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.captures-media-path-image-messages.test.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "specifier": "../../../src/media/store.js" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "specifier": "../../../src/pairing/pairing-store.js" + }, + { + "path": "extensions/whatsapp/src/normalize.ts", + "specifier": "../../../src/channels/plugins/normalize/shared.js" + }, + { + "path": "extensions/whatsapp/src/normalize.ts", + "specifier": "../../../src/whatsapp/normalize.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.poll.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.poll.test.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/auto-reply/chunk.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/infra/outbound/send-deps.js" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "specifier": "../../../src/whatsapp/resolve-outbound-target.js" + }, + { + "path": "extensions/whatsapp/src/qr-image.ts", + "specifier": "../../../src/media/png-encode.js" + }, + { + "path": "extensions/whatsapp/src/reconnect.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "specifier": "../../../src/infra/backoff.js" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/resolve-target.test.ts", + "specifier": "../../shared/resolve-target-test-helpers.js" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "specifier": "../../../src/logging/redact-identifier.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/config/markdown-tables.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/infra/secure-random.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/logging/logger.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/logging/redact-identifier.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/logging/subsystem.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/markdown/tables.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/markdown/whatsapp.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/polls.js" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/session.test.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "specifier": "../../../src/globals.js" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "specifier": "../../../src/logging.js" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "specifier": "../../../src/version.js" + }, + { + "path": "extensions/whatsapp/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/whatsapp/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/whatsapp/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/channel-web.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/runtime.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.test.ts", + "specifier": "../../../src/wizard/prompts.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/channel-web.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/config/merge-config.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/config/types.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/whatsapp/src/setup-surface.ts", + "specifier": "../../../src/utils.js" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/status-issues/shared.js" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "specifier": "../../../src/channels/plugins/types.js" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "specifier": "../../../src/cli/command-format.js" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "specifier": "../../../src/media/store.js" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "specifier": "../../config/config.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/agents/provider-id.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/agents/tools/web-search-plugin-factory.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/plugins/config-schema.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/xai/index.ts", + "specifier": "../../src/plugins/types.js" + }, + { + "path": "extensions/xiaomi/index.ts", + "specifier": "../../src/agents/models-config.providers.static.js" + }, + { + "path": "extensions/xiaomi/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/xiaomi/index.ts", + "specifier": "../../src/infra/provider-usage.shared.js" + }, + { + "path": "extensions/xiaomi/index.ts", + "specifier": "../../src/plugins/provider-api-key-auth.js" + }, + { + "path": "extensions/zai/detect.ts", + "specifier": "../../src/commands/zai-endpoint-detect.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/agents/auth-profiles.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/agents/defaults.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/agents/model-compat.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/agents/pi-embedded-runner/zai-stream-wrappers.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/commands/auth-choice.api-key.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/commands/auth-choice.apply-helpers.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/commands/onboard-auth.credentials.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/commands/onboard-auth.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/config/types.secrets.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/infra/home-dir.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/infra/provider-usage.fetch.js" + }, + { + "path": "extensions/zai/index.ts", + "specifier": "../../src/utils/normalize-secret-input.js" + }, + { + "path": "extensions/zalo/src/channel.directory.test.ts", + "specifier": "../../test-utils/directory.js" + }, + { + "path": "extensions/zalo/src/channel.startup.test.ts", + "specifier": "../../test-utils/start-account-lifecycle.js" + }, + { + "path": "extensions/zalo/src/monitor.lifecycle.test.ts", + "specifier": "../../../src/plugins/registry.js" + }, + { + "path": "extensions/zalo/src/monitor.lifecycle.test.ts", + "specifier": "../../../src/plugins/runtime.js" + }, + { + "path": "extensions/zalo/src/monitor.webhook.test.ts", + "specifier": "../../../src/plugins/registry.js" + }, + { + "path": "extensions/zalo/src/monitor.webhook.test.ts", + "specifier": "../../../src/plugins/runtime.js" + }, + { + "path": "extensions/zalo/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/zalo/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/zalo/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/zalo/src/setup-status.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/zalo/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/zalo/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/config/types.secrets.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/zalo/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/zalo/src/status-issues.test.ts", + "specifier": "../../test-utils/status-issues.js" + }, + { + "path": "extensions/zalo/src/status-issues.ts", + "specifier": "../../shared/status-issues.js" + }, + { + "path": "extensions/zalouser/src/channel.sendpayload.test.ts", + "specifier": "../../../src/channels/plugins/contracts/suites.js" + }, + { + "path": "extensions/zalouser/src/channel.ts", + "specifier": "../../shared/channel-status-summary.js" + }, + { + "path": "extensions/zalouser/src/monitor.ts", + "specifier": "../../shared/deferred.js" + }, + { + "path": "extensions/zalouser/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/zalouser/src/setup-core.ts", + "specifier": "../../../src/channels/plugins/types.adapters.js" + }, + { + "path": "extensions/zalouser/src/setup-core.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.test.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.test.ts", + "specifier": "../../test-utils/runtime-env.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-helpers.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-helpers.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard-types.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/channels/plugins/setup-wizard.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/config/config.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/plugin-sdk/resolution-notes.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/routing/session-key.js" + }, + { + "path": "extensions/zalouser/src/setup-surface.ts", + "specifier": "../../../src/terminal/links.js" + }, + { + "path": "extensions/zalouser/src/status-issues.test.ts", + "specifier": "../../test-utils/status-issues.js" + }, + { + "path": "extensions/zalouser/src/status-issues.ts", + "specifier": "../../shared/status-issues.js" + } +] diff --git a/scripts/check-plugin-boundary-ratchet.mjs b/scripts/check-plugin-boundary-ratchet.mjs new file mode 100644 index 00000000000..584e986a1ff --- /dev/null +++ b/scripts/check-plugin-boundary-ratchet.mjs @@ -0,0 +1,379 @@ +#!/usr/bin/env node + +import { promises as fs } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import ts from "typescript"; +import { runAsScript, toLine } from "./lib/ts-guard-utils.mjs"; + +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const baselinePath = path.join(repoRoot, "scripts", "baselines", "plugin-boundary-ratchet.json"); + +const sourceFilePattern = /\.(?:[cm]?ts|[cm]?js|tsx|jsx)$/u; + +function isRelativeOrAbsoluteSpecifier(specifier) { + return specifier.startsWith(".") || specifier.startsWith("/") || specifier.startsWith("file:"); +} + +function normalizeForCompare(filePath) { + return filePath.replaceAll("\\", "/"); +} + +function isPathInside(parentPath, childPath) { + const relative = path.relative(parentPath, childPath); + return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative)); +} + +function resolveImportPath(filePath, specifier) { + if (specifier.startsWith("file:")) { + try { + return new URL(specifier); + } catch { + return null; + } + } + return path.resolve(path.dirname(filePath), specifier); +} + +function resolvePluginRoot(filePath, repo = repoRoot) { + const relative = path.relative(path.join(repo, "extensions"), filePath); + if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) { + return null; + } + const [pluginId] = normalizeForCompare(relative).split("/"); + if (!pluginId) { + return null; + } + return path.join(repo, "extensions", pluginId); +} + +export function classifyPluginBoundaryImport(specifier, filePath, options = {}) { + const repo = options.repoRoot ?? repoRoot; + const normalizedSpecifier = specifier.trim(); + if (!normalizedSpecifier) { + return null; + } + + if (normalizedSpecifier === "openclaw/extension-api") { + return null; + } + + if (normalizedSpecifier === "openclaw/plugin-sdk") { + return null; + } + + if (normalizedSpecifier === "openclaw/plugin-sdk/compat") { + return null; + } + + if (normalizedSpecifier.startsWith("openclaw/plugin-sdk/")) { + return null; + } + + if (normalizedSpecifier.includes("plugin-sdk-internal")) { + return { + kind: "plugin-sdk-internal", + reason: "imports non-public plugin-sdk-internal surface", + preferredReplacement: "Use openclaw/plugin-sdk/* or openclaw/plugin-sdk/compat temporarily.", + }; + } + + if (!isRelativeOrAbsoluteSpecifier(normalizedSpecifier)) { + return null; + } + + const resolved = resolveImportPath(filePath, normalizedSpecifier); + const resolvedPath = + resolved instanceof URL + ? path.resolve(resolved.pathname) + : resolved + ? path.resolve(resolved) + : null; + if (!resolvedPath) { + return null; + } + + const importerPluginRoot = resolvePluginRoot(filePath, repo); + if (importerPluginRoot && isPathInside(path.join(repo, "extensions"), resolvedPath)) { + if (!isPathInside(importerPluginRoot, resolvedPath)) { + return { + kind: "cross-extension", + reason: "reaches into another extension via a relative import", + preferredReplacement: + "Keep relative imports within the same plugin root, or expose a public surface via openclaw/plugin-sdk/*, openclaw/extension-api, or a dedicated shared package.", + }; + } + return null; + } + + const internalSdkRoot = path.join(repo, "src", "plugin-sdk-internal"); + if (isPathInside(internalSdkRoot, resolvedPath)) { + return { + kind: "plugin-sdk-internal", + reason: "reaches into non-public plugin-sdk-internal implementation", + preferredReplacement: "Use openclaw/plugin-sdk/* or openclaw/plugin-sdk/compat temporarily.", + }; + } + + const coreSrcRoot = path.join(repo, "src"); + if (isPathInside(coreSrcRoot, resolvedPath)) { + return { + kind: "core-src", + reason: "reaches into core src/** from an extension", + preferredReplacement: + "Use openclaw/plugin-sdk/*, openclaw/extension-api, or openclaw/plugin-sdk/compat temporarily.", + }; + } + + return null; +} + +function getImportLikeSpecifiers(sourceFile) { + const specifiers = []; + + const push = (node, specifierNode) => { + if (!ts.isStringLiteralLike(specifierNode)) { + return; + } + specifiers.push({ + specifier: specifierNode.text, + line: toLine(sourceFile, specifierNode), + }); + }; + + const visit = (node) => { + if (ts.isImportDeclaration(node) && node.moduleSpecifier) { + push(node, node.moduleSpecifier); + } else if (ts.isExportDeclaration(node) && node.moduleSpecifier) { + push(node, node.moduleSpecifier); + } else if ( + ts.isCallExpression(node) && + node.expression.kind === ts.SyntaxKind.ImportKeyword && + node.arguments.length > 0 + ) { + push(node, node.arguments[0]); + } else if ( + ts.isCallExpression(node) && + node.arguments.length > 0 && + ts.isStringLiteralLike(node.arguments[0]) && + ((ts.isIdentifier(node.expression) && node.expression.text === "require") || + (ts.isPropertyAccessExpression(node.expression) && + ((ts.isIdentifier(node.expression.expression) && + node.expression.expression.text === "vi") || + (ts.isIdentifier(node.expression.expression) && + node.expression.expression.text === "jest")) && + node.expression.name.text === "mock")) + ) { + push(node, node.arguments[0]); + } + ts.forEachChild(node, visit); + }; + + visit(sourceFile); + return specifiers; +} + +export function findPluginBoundaryViolations(content, filePath, options = {}) { + const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true); + const violations = []; + for (const entry of getImportLikeSpecifiers(sourceFile)) { + const classification = classifyPluginBoundaryImport(entry.specifier, filePath, options); + if (!classification) { + continue; + } + violations.push({ + line: entry.line, + specifier: entry.specifier, + kind: classification.kind, + reason: classification.reason, + preferredReplacement: classification.preferredReplacement, + }); + } + return violations; +} + +async function collectSourceFiles(rootDir) { + const files = []; + const stack = [rootDir]; + while (stack.length > 0) { + const current = stack.pop(); + if (!current) { + continue; + } + let entries = []; + try { + entries = await fs.readdir(current, { withFileTypes: true }); + } catch { + continue; + } + for (const entry of entries) { + const fullPath = path.join(current, entry.name); + if (entry.isDirectory()) { + if (["node_modules", "dist", ".git", "coverage"].includes(entry.name)) { + continue; + } + stack.push(fullPath); + continue; + } + if (!entry.isFile() || !sourceFilePattern.test(entry.name) || fullPath.endsWith(".d.ts")) { + continue; + } + files.push(fullPath); + } + } + return files.toSorted(); +} + +async function collectBundledPluginSourceFiles(repo = repoRoot) { + const entries = await fs.readdir(path.join(repo, "extensions"), { withFileTypes: true }); + const filesToCheck = new Set(); + + for (const entry of entries) { + if (!entry.isDirectory()) { + continue; + } + const rootDir = path.join(repo, "extensions", entry.name); + const manifestPath = path.join(rootDir, "openclaw.plugin.json"); + try { + await fs.access(manifestPath); + } catch { + continue; + } + const entrySource = path.join(rootDir, "index.ts"); + try { + await fs.access(entrySource); + filesToCheck.add(entrySource); + } catch { + // Some plugins may be source-only under src/ without a root index.ts. + } + for (const srcFile of await collectSourceFiles(rootDir)) { + filesToCheck.add(srcFile); + } + } + + for (const sharedFile of await collectSourceFiles(path.join(repo, "extensions", "shared"))) { + filesToCheck.add(sharedFile); + } + + return [...filesToCheck].toSorted((left, right) => left.localeCompare(right)); +} + +export function toBaselineKey(entry) { + return `${normalizeForCompare(entry.path)}::${entry.specifier}`; +} + +export function compareViolationBaseline(current, baseline) { + const baselineKeys = new Set(baseline.map(toBaselineKey)); + const currentKeys = new Set(current.map(toBaselineKey)); + + const newViolations = current.filter((entry) => !baselineKeys.has(toBaselineKey(entry))); + const resolvedViolations = baseline.filter((entry) => !currentKeys.has(toBaselineKey(entry))); + + return { newViolations, resolvedViolations }; +} + +export async function loadViolationBaseline(filePath = baselinePath) { + const raw = await fs.readFile(filePath, "utf8"); + const parsed = JSON.parse(raw); + if (!Array.isArray(parsed)) { + throw new Error(`Baseline file must be an array: ${filePath}`); + } + return parsed.map((entry, index) => { + if (!entry || typeof entry !== "object") { + throw new Error(`Baseline entry #${index + 1} must be an object.`); + } + if (typeof entry.path !== "string" || typeof entry.specifier !== "string") { + throw new Error(`Baseline entry #${index + 1} must include string path and specifier.`); + } + return { + path: entry.path, + specifier: entry.specifier, + }; + }); +} + +export async function collectCurrentViolations(options = {}) { + const repo = options.repoRoot ?? repoRoot; + const files = await collectBundledPluginSourceFiles(repo); + const violations = []; + + for (const filePath of files) { + const content = await fs.readFile(filePath, "utf8"); + const fileViolations = findPluginBoundaryViolations(content, filePath, { repoRoot: repo }); + for (const violation of fileViolations) { + violations.push({ + path: path.relative(repo, filePath), + specifier: violation.specifier, + line: violation.line, + kind: violation.kind, + reason: violation.reason, + preferredReplacement: violation.preferredReplacement, + }); + } + } + + const deduped = [...new Map(violations.map((entry) => [toBaselineKey(entry), entry])).values()]; + + return deduped.toSorted((left, right) => { + const pathCompare = left.path.localeCompare(right.path); + if (pathCompare !== 0) { + return pathCompare; + } + return left.specifier.localeCompare(right.specifier); + }); +} + +function printViolations(header, violations) { + if (violations.length === 0) { + return; + } + console.error(header); + for (const violation of violations) { + console.error(`- ${violation.path}:${violation.line}`); + console.error(` import: ${JSON.stringify(violation.specifier)}`); + console.error(` why: ${violation.reason}`); + console.error(` prefer: ${violation.preferredReplacement}`); + } +} + +async function main() { + const files = await collectBundledPluginSourceFiles(repoRoot); + const currentViolations = await collectCurrentViolations({ repoRoot }); + const baseline = await loadViolationBaseline(); + const { newViolations, resolvedViolations } = compareViolationBaseline( + currentViolations, + baseline, + ); + + if (newViolations.length > 0) { + printViolations( + "New extension boundary violations found. Bundled plugins should generally use public plugin SDK/runtime surfaces.", + newViolations, + ); + if (resolvedViolations.length > 0) { + console.error(""); + console.error( + `Note: ${resolvedViolations.length} baseline violation(s) were removed; delete them from ${path.relative(repoRoot, baselinePath)} after this change lands.`, + ); + } + console.error(""); + console.error( + "Allowed for now: openclaw/plugin-sdk/*, openclaw/plugin-sdk/compat, and openclaw/extension-api.", + ); + console.error( + "Reducing existing baseline entries is encouraged; only new violations should fail this ratchet.", + ); + process.exit(1); + } + + if (resolvedViolations.length > 0) { + console.log( + `OK: no new extension boundary violations (${files.length} files checked). ${resolvedViolations.length} baseline violation(s) are now gone; remove them from ${path.relative(repoRoot, baselinePath)} when convenient.`, + ); + return; + } + + console.log(`OK: no new extension boundary violations (${files.length} files checked).`); +} + +runAsScript(import.meta.url, main); diff --git a/test/scripts/check-plugin-boundary-ratchet.test.ts b/test/scripts/check-plugin-boundary-ratchet.test.ts new file mode 100644 index 00000000000..85824c845ba --- /dev/null +++ b/test/scripts/check-plugin-boundary-ratchet.test.ts @@ -0,0 +1,167 @@ +import path from "node:path"; +import { describe, expect, it } from "vitest"; +import { + classifyPluginBoundaryImport, + compareViolationBaseline, + findPluginBoundaryViolations, + toBaselineKey, +} from "../../scripts/check-plugin-boundary-ratchet.mjs"; + +const repoRoot = "/repo"; +const extensionFile = "/repo/extensions/example/src/index.ts"; + +describe("check-plugin-boundary-ratchet", () => { + it("allows public plugin-sdk imports", () => { + expect( + classifyPluginBoundaryImport("openclaw/plugin-sdk/discord", extensionFile, { repoRoot }), + ).toBeNull(); + expect( + classifyPluginBoundaryImport("openclaw/plugin-sdk", extensionFile, { repoRoot }), + ).toBeNull(); + }); + + it("allows compat for now", () => { + expect( + classifyPluginBoundaryImport("openclaw/plugin-sdk/compat", extensionFile, { repoRoot }), + ).toBeNull(); + }); + + it("rejects plugin-sdk-internal imports", () => { + expect( + classifyPluginBoundaryImport("../../../src/plugin-sdk-internal/discord.js", extensionFile, { + repoRoot, + }), + ).toMatchObject({ + kind: "plugin-sdk-internal", + }); + }); + + it("rejects direct core src imports", () => { + expect( + classifyPluginBoundaryImport( + "../../src/config/config.js", + "/repo/extensions/example/index.ts", + { + repoRoot, + }, + ), + ).toMatchObject({ + kind: "core-src", + }); + }); + + it("ignores same-plugin relative imports", () => { + expect(classifyPluginBoundaryImport("./helpers.js", extensionFile, { repoRoot })).toBeNull(); + expect( + classifyPluginBoundaryImport("../shared/util.js", extensionFile, { repoRoot }), + ).toBeNull(); + }); + + it("rejects cross-extension relative imports", () => { + expect( + classifyPluginBoundaryImport("../../other-plugin/src/helper.js", extensionFile, { repoRoot }), + ).toMatchObject({ + kind: "cross-extension", + }); + }); + + it("finds import and dynamic import violations", () => { + const source = ` + import { x } from "../../../src/config/config.js"; + export { y } from "../../../src/plugin-sdk-internal/discord.js"; + const z = await import("../../../src/runtime.js"); + `; + expect( + findPluginBoundaryViolations(source, "/repo/extensions/example/nested/file.ts", { repoRoot }), + ).toEqual([ + { + kind: "core-src", + line: 2, + preferredReplacement: + "Use openclaw/plugin-sdk/*, openclaw/extension-api, or openclaw/plugin-sdk/compat temporarily.", + reason: "reaches into core src/** from an extension", + specifier: "../../../src/config/config.js", + }, + { + kind: "plugin-sdk-internal", + line: 3, + preferredReplacement: + "Use openclaw/plugin-sdk/* or openclaw/plugin-sdk/compat temporarily.", + reason: "imports non-public plugin-sdk-internal surface", + specifier: "../../../src/plugin-sdk-internal/discord.js", + }, + { + kind: "core-src", + line: 4, + preferredReplacement: + "Use openclaw/plugin-sdk/*, openclaw/extension-api, or openclaw/plugin-sdk/compat temporarily.", + reason: "reaches into core src/** from an extension", + specifier: "../../../src/runtime.js", + }, + ]); + }); + + it("finds require and test mock violations", () => { + const source = ` + const x = require("../../../src/config/config.js"); + vi.mock("../../../src/plugin-sdk-internal/discord.js", () => ({})); + jest.mock("../../other-plugin/src/helper.js", () => ({})); + `; + expect( + findPluginBoundaryViolations(source, "/repo/extensions/example/nested/file.test.ts", { + repoRoot, + }), + ).toEqual([ + { + kind: "core-src", + line: 2, + preferredReplacement: + "Use openclaw/plugin-sdk/*, openclaw/extension-api, or openclaw/plugin-sdk/compat temporarily.", + reason: "reaches into core src/** from an extension", + specifier: "../../../src/config/config.js", + }, + { + kind: "plugin-sdk-internal", + line: 3, + preferredReplacement: + "Use openclaw/plugin-sdk/* or openclaw/plugin-sdk/compat temporarily.", + reason: "imports non-public plugin-sdk-internal surface", + specifier: "../../../src/plugin-sdk-internal/discord.js", + }, + { + kind: "cross-extension", + line: 4, + preferredReplacement: + "Keep relative imports within the same plugin root, or expose a public surface via openclaw/plugin-sdk/*, openclaw/extension-api, or a dedicated shared package.", + reason: "reaches into another extension via a relative import", + specifier: "../../other-plugin/src/helper.js", + }, + ]); + }); + + it("compares current violations to the baseline by path and specifier", () => { + const current = [ + { path: "extensions/a/index.ts", specifier: "../../src/config/config.js" }, + { path: "extensions/b/index.ts", specifier: "../../../src/plugin-sdk-internal/discord.js" }, + ]; + const baseline = [ + { path: "extensions/a/index.ts", specifier: "../../src/config/config.js" }, + { path: "extensions/c/index.ts", specifier: "../../src/runtime.js" }, + ]; + expect(compareViolationBaseline(current, baseline)).toEqual({ + newViolations: [ + { path: "extensions/b/index.ts", specifier: "../../../src/plugin-sdk-internal/discord.js" }, + ], + resolvedViolations: [{ path: "extensions/c/index.ts", specifier: "../../src/runtime.js" }], + }); + }); + + it("builds a stable baseline key", () => { + expect( + toBaselineKey({ + path: path.join("extensions", "a", "index.ts"), + specifier: "../../src/config/config.js", + }), + ).toBe("extensions/a/index.ts::../../src/config/config.js"); + }); +});