From c87b8b549bd36280fbc307a1ce12cd5794cab23d Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Sun, 15 Mar 2026 15:12:42 -0500 Subject: [PATCH] build: enforce plugin import boundaries --- docs/tools/plugin.md | 7 + .../discord/src/actions/handle-action.ts | 2 +- extensions/discord/src/monitor/allow-list.ts | 2 +- .../discord/src/monitor/inbound-worker.ts | 2 +- .../src/monitor/model-picker-preferences.ts | 5 +- .../imessage/src/target-parsing-helpers.ts | 2 +- extensions/signal/src/identity.ts | 2 +- extensions/slack/src/monitor/media.ts | 2 +- extensions/slack/src/monitor/policy.ts | 2 +- extensions/telegram/src/account-inspect.ts | 2 +- extensions/telegram/src/accounts.ts | 8 +- extensions/telegram/src/channel-actions.ts | 4 +- extensions/telegram/src/group-access.ts | 2 +- package.json | 31 +- .../check-plugin-import-boundaries.test.ts | 66 + scripts/check-plugin-import-boundaries.ts | 289 + .../plugin-import-boundaries.baseline.json | 10034 ++++++++++++++++ src/plugin-sdk/subpaths.test.ts | 23 + vitest.config.ts | 7 + 19 files changed, 10472 insertions(+), 20 deletions(-) create mode 100644 scripts/check-plugin-import-boundaries.test.ts create mode 100644 scripts/check-plugin-import-boundaries.ts create mode 100644 scripts/plugin-import-boundaries.baseline.json diff --git a/docs/tools/plugin.md b/docs/tools/plugin.md index 5455bb2b38d..845747dab83 100644 --- a/docs/tools/plugin.md +++ b/docs/tools/plugin.md @@ -274,6 +274,13 @@ Compatibility note: - New and migrated bundled plugins should use channel or extension-specific subpaths; use `core` for generic surfaces and `compat` only when broader shared helpers are required. +- Plugin code under `extensions/**` must not import OpenClaw core internals + directly. Allowed imports are: + - files inside the same extension + - `openclaw/plugin-sdk` and `openclaw/plugin-sdk/*` + - Node builtins and third-party packages +- Direct imports into `src/**`, `openclaw/src/**`, or another extension's source + tree are treated as plugin boundary violations and rejected by repo checks. ## Read-only channel inspection diff --git a/extensions/discord/src/actions/handle-action.ts b/extensions/discord/src/actions/handle-action.ts index b0842ce25b2..bd5d999a32d 100644 --- a/extensions/discord/src/actions/handle-action.ts +++ b/extensions/discord/src/actions/handle-action.ts @@ -1,4 +1,5 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; +import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param"; import { readNumberParam, readStringArrayParam, @@ -8,7 +9,6 @@ import { readDiscordParentIdParam } from "../../../../src/agents/tools/discord-a import { handleDiscordAction } from "../../../../src/agents/tools/discord-actions.js"; import { resolveReactionMessageId } from "../../../../src/channels/plugins/actions/reaction-message-id.js"; import type { ChannelMessageActionContext } from "../../../../src/channels/plugins/types.js"; -import { readBooleanParam } from "../../../../src/plugin-sdk/boolean-param.js"; import { resolveDiscordChannelId } from "../targets.js"; import { tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin.js"; diff --git a/extensions/discord/src/monitor/allow-list.ts b/extensions/discord/src/monitor/allow-list.ts index 6391ad5c3a5..a6208eaf63a 100644 --- a/extensions/discord/src/monitor/allow-list.ts +++ b/extensions/discord/src/monitor/allow-list.ts @@ -1,4 +1,5 @@ import type { Guild, User } from "@buape/carbon"; +import { evaluateGroupRouteAccessForPolicy } from "openclaw/plugin-sdk/group-access"; import type { AllowlistMatch } from "../../../../src/channels/allowlist-match.js"; import { buildChannelKeyCandidates, @@ -6,7 +7,6 @@ import { resolveChannelMatchConfig, type ChannelMatchSource, } from "../../../../src/channels/channel-config.js"; -import { evaluateGroupRouteAccessForPolicy } from "../../../../src/plugin-sdk/group-access.js"; import { formatDiscordUserTag } from "./format.js"; export type DiscordAllowList = { diff --git a/extensions/discord/src/monitor/inbound-worker.ts b/extensions/discord/src/monitor/inbound-worker.ts index 214eb6a8020..cbc8e246704 100644 --- a/extensions/discord/src/monitor/inbound-worker.ts +++ b/extensions/discord/src/monitor/inbound-worker.ts @@ -1,7 +1,7 @@ +import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue"; import { createRunStateMachine } from "../../../../src/channels/run-state-machine.js"; import { danger } from "../../../../src/globals.js"; import { formatDurationSeconds } from "../../../../src/infra/format-time/format-duration.ts"; -import { KeyedAsyncQueue } from "../../../../src/plugin-sdk/keyed-async-queue.js"; import { materializeDiscordInboundJob, type DiscordInboundJob } from "./inbound-job.js"; import type { RuntimeEnv } from "./message-handler.preflight.types.js"; import { processDiscordMessage } from "./message-handler.process.js"; diff --git a/extensions/discord/src/monitor/model-picker-preferences.ts b/extensions/discord/src/monitor/model-picker-preferences.ts index e75ce013403..50f80e5204b 100644 --- a/extensions/discord/src/monitor/model-picker-preferences.ts +++ b/extensions/discord/src/monitor/model-picker-preferences.ts @@ -1,13 +1,10 @@ import os from "node:os"; import path from "node:path"; +import { readJsonFileWithFallback, writeJsonFileAtomically } from "openclaw/plugin-sdk/json-store"; import { normalizeProviderId } from "../../../../src/agents/model-selection.js"; import { resolveStateDir } from "../../../../src/config/paths.js"; import { withFileLock } from "../../../../src/infra/file-lock.js"; import { resolveRequiredHomeDir } from "../../../../src/infra/home-dir.js"; -import { - readJsonFileWithFallback, - writeJsonFileAtomically, -} from "../../../../src/plugin-sdk/json-store.js"; import { normalizeAccountId as normalizeSharedAccountId } from "../../../../src/routing/account-id.js"; const MODEL_PICKER_PREFERENCES_LOCK_OPTIONS = { diff --git a/extensions/imessage/src/target-parsing-helpers.ts b/extensions/imessage/src/target-parsing-helpers.ts index 95ccc3682ce..04881fa2131 100644 --- a/extensions/imessage/src/target-parsing-helpers.ts +++ b/extensions/imessage/src/target-parsing-helpers.ts @@ -1,4 +1,4 @@ -import { isAllowedParsedChatSender } from "../../../src/plugin-sdk/allow-from.js"; +import { isAllowedParsedChatSender } from "openclaw/plugin-sdk/allow-from"; export type ServicePrefix = { prefix: string; service: TService }; diff --git a/extensions/signal/src/identity.ts b/extensions/signal/src/identity.ts index c39b0dd5eaa..bb2f8091bf4 100644 --- a/extensions/signal/src/identity.ts +++ b/extensions/signal/src/identity.ts @@ -1,4 +1,4 @@ -import { evaluateSenderGroupAccessForPolicy } from "../../../src/plugin-sdk/group-access.js"; +import { evaluateSenderGroupAccessForPolicy } from "openclaw/plugin-sdk/group-access"; import { normalizeE164 } from "../../../src/utils.js"; export type SignalSender = diff --git a/extensions/slack/src/monitor/media.ts b/extensions/slack/src/monitor/media.ts index 7c5a619129f..ef494f2e48c 100644 --- a/extensions/slack/src/monitor/media.ts +++ b/extensions/slack/src/monitor/media.ts @@ -1,9 +1,9 @@ import type { WebClient as SlackWebClient } from "@slack/web-api"; +import { resolveRequestUrl } from "openclaw/plugin-sdk/request-url"; import { normalizeHostname } from "../../../../src/infra/net/hostname.js"; import type { FetchLike } from "../../../../src/media/fetch.js"; import { fetchRemoteMedia } from "../../../../src/media/fetch.js"; import { saveMediaBuffer } from "../../../../src/media/store.js"; -import { resolveRequestUrl } from "../../../../src/plugin-sdk/request-url.js"; import type { SlackAttachment, SlackFile } from "../types.js"; function isSlackHostname(hostname: string): boolean { diff --git a/extensions/slack/src/monitor/policy.ts b/extensions/slack/src/monitor/policy.ts index ab5d9230a62..9f58c758c51 100644 --- a/extensions/slack/src/monitor/policy.ts +++ b/extensions/slack/src/monitor/policy.ts @@ -1,4 +1,4 @@ -import { evaluateGroupRouteAccessForPolicy } from "../../../../src/plugin-sdk/group-access.js"; +import { evaluateGroupRouteAccessForPolicy } from "openclaw/plugin-sdk/group-access"; export function isSlackChannelAllowedByPolicy(params: { groupPolicy: "open" | "disabled" | "allowlist"; diff --git a/extensions/telegram/src/account-inspect.ts b/extensions/telegram/src/account-inspect.ts index 8014df80080..91fff815778 100644 --- a/extensions/telegram/src/account-inspect.ts +++ b/extensions/telegram/src/account-inspect.ts @@ -1,3 +1,4 @@ +import { resolveAccountWithDefaultFallback } from "openclaw/plugin-sdk/account-resolution"; import type { OpenClawConfig } from "../../../src/config/config.js"; import { coerceSecretRef, @@ -6,7 +7,6 @@ import { } from "../../../src/config/types.secrets.js"; import type { TelegramAccountConfig } from "../../../src/config/types.telegram.js"; import { tryReadSecretFileSync } from "../../../src/infra/secret-file.js"; -import { resolveAccountWithDefaultFallback } from "../../../src/plugin-sdk/account-resolution.js"; import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../../src/routing/session-key.js"; import { resolveDefaultSecretProviderAlias } from "../../../src/secrets/ref-contract.js"; import { diff --git a/extensions/telegram/src/accounts.ts b/extensions/telegram/src/accounts.ts index 71d78590488..dc898d2f03e 100644 --- a/extensions/telegram/src/accounts.ts +++ b/extensions/telegram/src/accounts.ts @@ -1,13 +1,13 @@ import util from "node:util"; +import { + listConfiguredAccountIds as listConfiguredAccountIdsFromSection, + resolveAccountWithDefaultFallback, +} from "openclaw/plugin-sdk/account-resolution"; import { createAccountActionGate } from "../../../src/channels/plugins/account-action-gate.js"; import type { OpenClawConfig } from "../../../src/config/config.js"; import type { TelegramAccountConfig, TelegramActionConfig } from "../../../src/config/types.js"; import { isTruthyEnvValue } from "../../../src/infra/env.js"; import { createSubsystemLogger } from "../../../src/logging/subsystem.js"; -import { - listConfiguredAccountIds as listConfiguredAccountIdsFromSection, - resolveAccountWithDefaultFallback, -} from "../../../src/plugin-sdk/account-resolution.js"; import { resolveAccountEntry } from "../../../src/routing/account-lookup.js"; import { listBoundAccountIds, diff --git a/extensions/telegram/src/channel-actions.ts b/extensions/telegram/src/channel-actions.ts index 29095e7bc7c..607671cf2e2 100644 --- a/extensions/telegram/src/channel-actions.ts +++ b/extensions/telegram/src/channel-actions.ts @@ -1,3 +1,5 @@ +import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param"; +import { extractToolSend } from "openclaw/plugin-sdk/tool-send"; import { readNumberParam, readStringArrayParam, @@ -15,8 +17,6 @@ import type { ChannelMessageActionName, } from "../../../src/channels/plugins/types.js"; import type { TelegramActionConfig } from "../../../src/config/types.telegram.js"; -import { readBooleanParam } from "../../../src/plugin-sdk/boolean-param.js"; -import { extractToolSend } from "../../../src/plugin-sdk/tool-send.js"; import { resolveTelegramPollVisibility } from "../../../src/poll-params.js"; import { createTelegramActionGate, diff --git a/extensions/telegram/src/group-access.ts b/extensions/telegram/src/group-access.ts index b5c30979dbb..77a5ef8af43 100644 --- a/extensions/telegram/src/group-access.ts +++ b/extensions/telegram/src/group-access.ts @@ -1,3 +1,4 @@ +import { evaluateMatchedGroupAccessForPolicy } from "openclaw/plugin-sdk/group-access"; import type { OpenClawConfig } from "../../../src/config/config.js"; import type { ChannelGroupPolicy } from "../../../src/config/group-policy.js"; import { resolveOpenProviderRuntimeGroupPolicy } from "../../../src/config/runtime-group-policy.js"; @@ -7,7 +8,6 @@ import type { TelegramGroupConfig, TelegramTopicConfig, } from "../../../src/config/types.js"; -import { evaluateMatchedGroupAccessForPolicy } from "../../../src/plugin-sdk/group-access.js"; import { isSenderAllowed, type NormalizedAllowFrom } from "./bot-access.js"; import { firstDefined } from "./bot-access.js"; diff --git a/package.json b/package.json index 5bc7a8f2258..949efc32c63 100644 --- a/package.json +++ b/package.json @@ -212,10 +212,38 @@ "types": "./dist/plugin-sdk/account-id.d.ts", "default": "./dist/plugin-sdk/account-id.js" }, + "./plugin-sdk/account-resolution": { + "types": "./dist/plugin-sdk/account-resolution.d.ts", + "default": "./dist/plugin-sdk/account-resolution.js" + }, + "./plugin-sdk/allow-from": { + "types": "./dist/plugin-sdk/allow-from.d.ts", + "default": "./dist/plugin-sdk/allow-from.js" + }, + "./plugin-sdk/boolean-param": { + "types": "./dist/plugin-sdk/boolean-param.d.ts", + "default": "./dist/plugin-sdk/boolean-param.js" + }, + "./plugin-sdk/group-access": { + "types": "./dist/plugin-sdk/group-access.d.ts", + "default": "./dist/plugin-sdk/group-access.js" + }, + "./plugin-sdk/json-store": { + "types": "./dist/plugin-sdk/json-store.d.ts", + "default": "./dist/plugin-sdk/json-store.js" + }, "./plugin-sdk/keyed-async-queue": { "types": "./dist/plugin-sdk/keyed-async-queue.d.ts", "default": "./dist/plugin-sdk/keyed-async-queue.js" }, + "./plugin-sdk/request-url": { + "types": "./dist/plugin-sdk/request-url.d.ts", + "default": "./dist/plugin-sdk/request-url.js" + }, + "./plugin-sdk/tool-send": { + "types": "./dist/plugin-sdk/tool-send.d.ts", + "default": "./dist/plugin-sdk/tool-send.js" + }, "./cli-entry": "./openclaw.mjs" }, "scripts": { @@ -274,7 +302,7 @@ "ios:gen": "bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate'", "ios:open": "bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && open OpenClaw.xcodeproj'", "ios:run": "bash -lc './scripts/ios-configure-signing.sh && ./scripts/ios-write-version-xcconfig.sh && cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build && xcrun simctl boot \"${IOS_SIM:-iPhone 17}\" || true && xcrun simctl launch booted ai.openclaw.ios'", - "lint": "oxlint --type-aware", + "lint": "oxlint --type-aware && pnpm lint:plugins:import-boundaries", "lint:agent:ingress-owner": "node scripts/check-ingress-agent-owner-context.mjs", "lint:all": "pnpm lint && pnpm lint:swift", "lint:auth:no-pairing-store-group": "node scripts/check-no-pairing-store-group-auth.mjs", @@ -282,6 +310,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:import-boundaries": "node --import tsx scripts/check-plugin-import-boundaries.ts", "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/check-plugin-import-boundaries.test.ts b/scripts/check-plugin-import-boundaries.test.ts new file mode 100644 index 00000000000..bd2e3cfd603 --- /dev/null +++ b/scripts/check-plugin-import-boundaries.test.ts @@ -0,0 +1,66 @@ +import path from "node:path"; +import { describe, expect, it } from "vitest"; +import { findPluginImportBoundaryViolations } from "./check-plugin-import-boundaries.ts"; + +const repoRoot = "/Users/thoffman/openclaw"; + +function extensionFile(relativePath: string): string { + return path.join(repoRoot, relativePath); +} + +describe("findPluginImportBoundaryViolations", () => { + it("allows same-extension relative imports", () => { + const violations = findPluginImportBoundaryViolations( + 'import { helper } from "../shared/helper.js";', + extensionFile("extensions/demo/src/feature/index.ts"), + ); + expect(violations).toEqual([]); + }); + + it("allows plugin-sdk imports", () => { + const violations = findPluginImportBoundaryViolations( + 'import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";', + extensionFile("extensions/demo/src/feature/index.ts"), + ); + expect(violations).toEqual([]); + }); + + it("rejects direct core imports", () => { + const violations = findPluginImportBoundaryViolations( + 'import { loadConfig } from "../../../src/config/config.js";', + extensionFile("extensions/demo/src/feature/index.ts"), + ); + expect(violations).toEqual([ + expect.objectContaining({ + reason: "relative_escape", + specifier: "../../../src/config/config.js", + }), + ]); + }); + + it("rejects cross-extension source imports", () => { + const violations = findPluginImportBoundaryViolations( + 'import { helper } from "../../other-plugin/src/helper.js";', + extensionFile("extensions/demo/src/feature/index.ts"), + ); + expect(violations).toEqual([ + expect.objectContaining({ + reason: "cross_extension_import", + specifier: "../../other-plugin/src/helper.js", + }), + ]); + }); + + it("rejects host-internal bare imports outside the SDK", () => { + const violations = findPluginImportBoundaryViolations( + 'import { loadConfig } from "openclaw/src/config/config.js";', + extensionFile("extensions/demo/src/feature/index.ts"), + ); + expect(violations).toEqual([ + expect.objectContaining({ + reason: "core_internal_import", + specifier: "openclaw/src/config/config.js", + }), + ]); + }); +}); diff --git a/scripts/check-plugin-import-boundaries.ts b/scripts/check-plugin-import-boundaries.ts new file mode 100644 index 00000000000..48568e48852 --- /dev/null +++ b/scripts/check-plugin-import-boundaries.ts @@ -0,0 +1,289 @@ +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 extensionsRoot = path.join(repoRoot, "extensions"); +const baselinePath = path.join(repoRoot, "scripts", "plugin-import-boundaries.baseline.json"); +const codeFileRe = /\.(?:[cm]?[jt]s|tsx|jsx)$/u; +const ignoredDirNames = new Set(["node_modules", "dist", "coverage", ".git"]); +const nodeBuiltinSpecifiers = new Set([ + "assert", + "buffer", + "child_process", + "crypto", + "events", + "fs", + "http", + "https", + "net", + "os", + "path", + "stream", + "timers", + "tty", + "url", + "util", + "zlib", +]); + +type ViolationReason = + | "relative_escape" + | "absolute_import" + | "core_internal_import" + | "cross_extension_import"; + +export type PluginImportBoundaryViolation = { + path: string; + line: number; + specifier: string; + reason: ViolationReason; +}; + +function isCodeFile(filePath: string): boolean { + return codeFileRe.test(filePath) && !filePath.endsWith(".d.ts"); +} + +async function collectExtensionCodeFiles(rootDir: string): Promise { + const out: string[] = []; + const stack = [rootDir]; + while (stack.length > 0) { + const current = stack.pop(); + if (!current) { + continue; + } + const entries = await fs.readdir(current, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = path.join(current, entry.name); + if (entry.isDirectory()) { + if (ignoredDirNames.has(entry.name)) { + continue; + } + stack.push(fullPath); + continue; + } + if (entry.isFile() && isCodeFile(fullPath)) { + out.push(fullPath); + } + } + } + return out; +} + +function getExtensionRoot(filePath: string): string | null { + const relative = path.relative(extensionsRoot, filePath); + if (relative.startsWith("..")) { + return null; + } + const [extensionId] = relative.split(path.sep); + return extensionId ? path.join(extensionsRoot, extensionId) : null; +} + +function normalizeSpecifier(specifier: string): string { + return specifier.replaceAll("\\", "/"); +} + +function isNodeBuiltin(specifier: string): boolean { + return specifier.startsWith("node:") || nodeBuiltinSpecifiers.has(specifier); +} + +function isAllowedBareSpecifier(specifier: string): boolean { + if (isNodeBuiltin(specifier)) { + return true; + } + if (specifier === "openclaw/plugin-sdk" || specifier.startsWith("openclaw/plugin-sdk/")) { + return true; + } + return ( + !specifier.startsWith(".") && !specifier.startsWith("/") && !specifier.startsWith("openclaw/") + ); +} + +function classifySpecifier(params: { importerPath: string; specifier: string }): { + reason?: ViolationReason; +} { + const specifier = normalizeSpecifier(params.specifier); + if (specifier === "") { + return {}; + } + + if (isAllowedBareSpecifier(specifier)) { + return {}; + } + + if (specifier.startsWith("openclaw/src/") || specifier === "openclaw/src") { + return { reason: "core_internal_import" }; + } + + if (specifier.startsWith("/")) { + return { reason: "absolute_import" }; + } + + if (!specifier.startsWith(".")) { + return { reason: "core_internal_import" }; + } + + const extensionRoot = getExtensionRoot(params.importerPath); + if (!extensionRoot) { + return {}; + } + + const importerDir = path.dirname(params.importerPath); + const resolved = path.resolve(importerDir, specifier); + const normalizedRoot = `${extensionRoot}${path.sep}`; + const normalizedResolved = resolved.endsWith(path.sep) ? resolved : `${resolved}${path.sep}`; + if (!(resolved === extensionRoot || normalizedResolved.startsWith(normalizedRoot))) { + const relativeToExtensions = path.relative(extensionsRoot, resolved); + if (!relativeToExtensions.startsWith("..")) { + return { reason: "cross_extension_import" }; + } + return { reason: "relative_escape" }; + } + + return {}; +} + +function collectModuleSpecifiers( + sourceFile: ts.SourceFile, +): Array<{ specifier: string; line: number }> { + const specifiers: Array<{ specifier: string; line: number }> = []; + + const maybePushSpecifier = (node: ts.StringLiteralLike) => { + specifiers.push({ specifier: node.text, line: toLine(sourceFile, node) }); + }; + + const visit = (node: ts.Node) => { + if (ts.isImportDeclaration(node) && ts.isStringLiteralLike(node.moduleSpecifier)) { + maybePushSpecifier(node.moduleSpecifier); + } else if ( + ts.isExportDeclaration(node) && + node.moduleSpecifier && + ts.isStringLiteralLike(node.moduleSpecifier) + ) { + maybePushSpecifier(node.moduleSpecifier); + } else if ( + ts.isCallExpression(node) && + node.arguments.length > 0 && + ts.isStringLiteralLike(node.arguments[0]) + ) { + const firstArg = node.arguments[0]; + if ( + node.expression.kind === ts.SyntaxKind.ImportKeyword || + (ts.isIdentifier(node.expression) && node.expression.text === "require") || + (ts.isPropertyAccessExpression(node.expression) && + ts.isIdentifier(node.expression.name) && + node.expression.name.text === "mock") + ) { + maybePushSpecifier(firstArg); + } + } + + ts.forEachChild(node, visit); + }; + + visit(sourceFile); + return specifiers; +} + +export function findPluginImportBoundaryViolations( + content: string, + filePath: string, +): PluginImportBoundaryViolation[] { + const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true); + const relativePath = path.relative(repoRoot, filePath); + const violations: PluginImportBoundaryViolation[] = []; + + for (const entry of collectModuleSpecifiers(sourceFile)) { + const classified = classifySpecifier({ importerPath: filePath, specifier: entry.specifier }); + if (!classified.reason) { + continue; + } + violations.push({ + path: relativePath, + line: entry.line, + specifier: entry.specifier, + reason: classified.reason, + }); + } + + return violations; +} + +async function loadBaseline(): Promise { + const raw = await fs.readFile(baselinePath, "utf8"); + return JSON.parse(raw) as PluginImportBoundaryViolation[]; +} + +function sortViolations( + violations: PluginImportBoundaryViolation[], +): PluginImportBoundaryViolation[] { + return [...violations].toSorted( + (left, right) => + left.path.localeCompare(right.path) || + left.line - right.line || + left.specifier.localeCompare(right.specifier) || + left.reason.localeCompare(right.reason), + ); +} + +async function collectViolations(): Promise { + const files = await collectExtensionCodeFiles(extensionsRoot); + const violations: PluginImportBoundaryViolation[] = []; + for (const filePath of files) { + const content = await fs.readFile(filePath, "utf8"); + violations.push(...findPluginImportBoundaryViolations(content, filePath)); + } + return sortViolations(violations); +} + +function violationKey(violation: PluginImportBoundaryViolation): string { + return `${violation.path}:${violation.line}:${violation.reason}:${violation.specifier}`; +} + +async function writeBaseline(): Promise { + const violations = await collectViolations(); + await fs.writeFile(baselinePath, `${JSON.stringify(violations, null, 2)}\n`, "utf8"); + console.log(`Wrote plugin import boundary baseline (${violations.length} violations).`); +} + +async function main(): Promise { + if (process.argv.includes("--write-baseline")) { + await writeBaseline(); + return; + } + + const violations = await collectViolations(); + const baseline = sortViolations(await loadBaseline()); + const baselineKeys = new Set(baseline.map(violationKey)); + const violationKeys = new Set(violations.map(violationKey)); + + const newViolations = violations.filter((entry) => !baselineKeys.has(violationKey(entry))); + const resolvedViolations = baseline.filter((entry) => !violationKeys.has(violationKey(entry))); + + if (newViolations.length > 0) { + console.error("New plugin import boundary violations found:"); + for (const violation of newViolations) { + console.error( + `- ${violation.path}:${violation.line} ${violation.reason} ${JSON.stringify(violation.specifier)}`, + ); + } + console.error( + "Extensions may only import same-extension files, openclaw/plugin-sdk/*, Node builtins, or third-party packages.", + ); + process.exit(1); + } + + if (resolvedViolations.length > 0) { + console.warn( + `Note: ${resolvedViolations.length} baseline plugin-boundary violations were removed. Re-run with --write-baseline to refresh scripts/plugin-import-boundaries.baseline.json.`, + ); + } + + console.log( + `OK: no new plugin import boundary violations (${violations.length} baseline violations tracked).`, + ); +} + +runAsScript(import.meta.url, main); diff --git a/scripts/plugin-import-boundaries.baseline.json b/scripts/plugin-import-boundaries.baseline.json new file mode 100644 index 00000000000..ee3ae7f014e --- /dev/null +++ b/scripts/plugin-import-boundaries.baseline.json @@ -0,0 +1,10034 @@ +[ + { + "path": "extensions/acpx/src/runtime-internals/process.test.ts", + "line": 6, + "specifier": "../../../shared/windows-cmd-shim-test-fixtures.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/acpx/src/runtime.test.ts", + "line": 4, + "specifier": "../../../src/acp/runtime/adapter-contract.testkit.js", + "reason": "relative_escape" + }, + { + "path": "extensions/acpx/src/service.test.ts", + "line": 3, + "specifier": "../../../src/acp/runtime/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/acpx/src/service.test.ts", + "line": 8, + "specifier": "../../../src/acp/runtime/registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/acpx/src/test-utils/runtime-fixtures.ts", + "line": 4, + "specifier": "../../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/bluebubbles/src/monitor.test.ts", + "line": 5, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-auth.test.ts", + "line": 5, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-route.test.ts", + "line": 3, + "specifier": "../../../src/plugins/registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/bluebubbles/src/monitor.webhook-route.test.ts", + "line": 4, + "specifier": "../../../src/plugins/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/diffs/index.test.ts", + "line": 4, + "specifier": "../../src/test-utils/mock-http-response.js", + "reason": "relative_escape" + }, + { + "path": "extensions/diffs/index.test.ts", + "line": 5, + "specifier": "../test-utils/plugin-api.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/diffs/src/http.test.ts", + "line": 3, + "specifier": "../../../src/test-utils/mock-http-response.js", + "reason": "relative_escape" + }, + { + "path": "extensions/diffs/src/tool.test.ts", + "line": 5, + "specifier": "../../test-utils/plugin-api.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/account-inspect.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/account-inspect.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/account-inspect.ts", + "line": 2, + "specifier": "../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/account-inspect.ts", + "line": 6, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/account-inspect.ts", + "line": 7, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/account-action-gate.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/account-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 4, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 5, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/accounts.ts", + "line": 6, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "line": 7, + "specifier": "../../../../src/agents/tools/common.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "line": 11, + "specifier": "../../../../src/agents/tools/discord-actions-moderation-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "line": 12, + "specifier": "../../../../src/agents/tools/discord-actions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.guild-admin.ts", + "line": 13, + "specifier": "../../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "line": 6, + "specifier": "../../../../src/agents/tools/common.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "line": 7, + "specifier": "../../../../src/agents/tools/discord-actions-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "line": 8, + "specifier": "../../../../src/agents/tools/discord-actions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "line": 9, + "specifier": "../../../../src/channels/plugins/actions/reaction-message-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/actions/handle-action.ts", + "line": 10, + "specifier": "../../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/api.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/fetch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/api.ts", + "line": 1, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/api.ts", + "line": 2, + "specifier": "../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/audit.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/audit.ts", + "line": 2, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/audit.ts", + "line": 3, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "line": 4, + "specifier": "../../../src/channels/plugins/actions/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "line": 8, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/channel-actions.ts", + "line": 9, + "specifier": "../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/channel.ts", + "line": 40, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/chunk.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/chunk-test-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/chunk.ts", + "line": 1, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/client.test.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/client.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/client.ts", + "line": 3, + "specifier": "../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/client.ts", + "line": 4, + "specifier": "../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/client.ts", + "line": 5, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/directory-cache.ts", + "line": 1, + "specifier": "../../../src/routing/account-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/directory-live.test.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/directory-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/directory-live.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/directory-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/directory-live.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "line": 1, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "line": 2, + "specifier": "../../../src/channels/dock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "line": 4, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-chunking.ts", + "line": 5, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/draft-stream.ts", + "line": 3, + "specifier": "../../../src/channels/draft-stream-controls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "line": 1, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/exec-approvals.ts", + "line": 3, + "specifier": "../../../src/infra/exec-approval-reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/gateway-logging.test.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/gateway-logging.test.ts", + "line": 8, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/gateway-logging.ts", + "line": 2, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/gateway-logging.ts", + "line": 3, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "line": 3, + "specifier": "../../../src/test-utils/typed-cases.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "line": 25, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "line": 895, + "specifier": "../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.test.ts", + "line": 899, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts", + "line": 5, + "specifier": "../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts", + "line": 17, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "line": 2, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "line": 18, + "specifier": "../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "line": 39, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor.tool-result.test-harness.ts", + "line": 41, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 20, + "specifier": "../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 21, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 25, + "specifier": "../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 26, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 27, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 28, + "specifier": "../../../../src/auto-reply/reply/reply-reference.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 29, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 30, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 31, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 32, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 33, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 34, + "specifier": "../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 35, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 36, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 37, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 38, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 39, + "specifier": "../../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 40, + "specifier": "../../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 41, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 42, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 43, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 44, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/agent-components.ts", + "line": 48, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/allow-list.ts", + "line": 2, + "specifier": "../../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/allow-list.ts", + "line": 8, + "specifier": "../../../../src/channels/channel-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.test.ts", + "line": 2, + "specifier": "../../../../src/agents/auth-profiles.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "line": 9, + "specifier": "../../../../src/agents/auth-profiles.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "line": 13, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/auto-presence.ts", + "line": 14, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/commands.ts", + "line": 1, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/dm-command-auth.ts", + "line": 1, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/dm-command-auth.ts", + "line": 6, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/dm-command-decision.ts", + "line": 1, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/dm-command-decision.ts", + "line": 2, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "line": 7, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "line": 8, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "line": 79, + "specifier": "../../../../src/gateway/client.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "line": 99, + "specifier": "../../../../src/gateway/connection-auth.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.test.ts", + "line": 103, + "specifier": "../../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 13, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 14, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 15, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 16, + "specifier": "../../../../src/gateway/client.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 17, + "specifier": "../../../../src/gateway/operator-approvals-client.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 18, + "specifier": "../../../../src/gateway/protocol/index.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 19, + "specifier": "../../../../src/infra/exec-approval-command-display.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 20, + "specifier": "../../../../src/infra/exec-approval-reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 25, + "specifier": "../../../../src/infra/exec-approvals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 26, + "specifier": "../../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 30, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 31, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 35, + "specifier": "../../../../src/security/safe-regex.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/exec-approvals.ts", + "line": 36, + "specifier": "../../../../src/utils/message-channel.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "line": 6, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "line": 7, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/gateway-plugin.ts", + "line": 8, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/inbound-context.ts", + "line": 1, + "specifier": "../../../../src/security/channel-metadata.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "line": 1, + "specifier": "../../../../src/channels/run-state-machine.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/inbound-worker.ts", + "line": 3, + "specifier": "../../../../src/infra/format-time/format-duration.ts", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 11, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 12, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 13, + "specifier": "../../../../src/infra/format-time/format-duration.ts", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 14, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 15, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 16, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/listeners.ts", + "line": 20, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.inbound-contract.test.ts", + "line": 2, + "specifier": "../../../../test/helpers/inbound-contract-dispatch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.inbound-contract.test.ts", + "line": 3, + "specifier": "../../../../test/helpers/inbound-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.module-test-helpers.ts", + "line": 2, + "specifier": "../../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.acp-bindings.test.ts", + "line": 6, + "specifier": "../../../../src/acp/persistent-bindings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.acp-bindings.test.ts", + "line": 13, + "specifier": "../../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test-helpers.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test.ts", + "line": 6, + "specifier": "../../../../src/media-understanding/audio-preflight.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.test.ts", + "line": 12, + "specifier": "../../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 5, + "specifier": "../../../../src/acp/persistent-bindings.route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 6, + "specifier": "../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 7, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 11, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 15, + "specifier": "../../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 16, + "specifier": "../../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 17, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 18, + "specifier": "../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 19, + "specifier": "../../../../src/channels/mention-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 20, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 21, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 22, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 23, + "specifier": "../../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 27, + "specifier": "../../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 28, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 29, + "specifier": "../../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 30, + "specifier": "../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 31, + "specifier": "../../../../src/pairing/pairing-messages.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.ts", + "line": 32, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "line": 4, + "specifier": "../../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.preflight.types.ts", + "line": 5, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "line": 2, + "specifier": "../../../../src/channels/status-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "line": 87, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "line": 91, + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "line": 115, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.test.ts", + "line": 119, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 2, + "specifier": "../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 3, + "specifier": "../../../../src/agents/pi-embedded-block-chunker.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 5, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 9, + "specifier": "../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 13, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 14, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 15, + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 16, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 17, + "specifier": "../../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 18, + "specifier": "../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 19, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 20, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 25, + "specifier": "../../../../src/channels/status-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 26, + "specifier": "../../../../src/channels/typing.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 27, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 28, + "specifier": "../../../../src/config/discord-preview-streaming.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 29, + "specifier": "../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 30, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 31, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 32, + "specifier": "../../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 33, + "specifier": "../../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 34, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 35, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 36, + "specifier": "../../../../src/shared/text/reasoning-tags.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.process.ts", + "line": 37, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.test-helpers.ts", + "line": 2, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "line": 5, + "specifier": "../../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "line": 6, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-handler.ts", + "line": 7, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "line": 8, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "line": 12, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.test.ts", + "line": 16, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "line": 3, + "specifier": "../../../../src/channels/plugins/media-payload.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "line": 4, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "line": 5, + "specifier": "../../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "line": 6, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/message-utils.ts", + "line": 7, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "line": 3, + "specifier": "../../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "line": 4, + "specifier": "../../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "line": 5, + "specifier": "../../../../src/infra/file-lock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "line": 6, + "specifier": "../../../../src/infra/home-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker-preferences.ts", + "line": 11, + "specifier": "../../../../src/routing/account-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test-utils.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/reply/commands-models.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/commands-models.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.test.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "line": 14, + "specifier": "../../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "line": 18, + "specifier": "../../../../src/auto-reply/reply/commands-models.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/model-picker.ts", + "line": 19, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 10, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 11, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 12, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 57, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 62, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 70, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 78, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/monitor.test.ts", + "line": 82, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command-context.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command-context.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "line": 6, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.commands-allowfrom.test.ts", + "line": 7, + "specifier": "../../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 7, + "specifier": "../../../../src/auto-reply/commands-registry.types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 8, + "specifier": "../../../../src/auto-reply/reply/commands-models.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 9, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 10, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 11, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.model-picker.test.ts", + "line": 12, + "specifier": "../../../../src/utils/with-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.options.test.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.options.test.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "line": 6, + "specifier": "../../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts", + "line": 27, + "specifier": "../../../../src/acp/persistent-bindings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 20, + "specifier": "../../../../src/acp/persistent-bindings.route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 21, + "specifier": "../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 22, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 23, + "specifier": "../../../../src/auto-reply/command-auth.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 30, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 39, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 40, + "specifier": "../../../../src/auto-reply/reply/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 41, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 42, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 43, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 44, + "specifier": "../../../../src/channels/native-command-session-targets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 45, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 46, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 47, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 48, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 49, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 50, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 51, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 52, + "specifier": "../../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 53, + "specifier": "../../../../src/pairing/pairing-messages.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 54, + "specifier": "../../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 55, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 56, + "specifier": "../../../../src/utils/chunk-items.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 57, + "specifier": "../../../../src/utils/with-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/native-command.ts", + "line": 58, + "specifier": "../../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/preflight-audio.ts", + "line": 54, + "specifier": "../../../../src/media-understanding/audio-preflight.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/presence.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.test.ts", + "line": 2, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "line": 7, + "specifier": "../../../../src/channels/allowlists/resolve-utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "line": 8, + "specifier": "../../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "line": 9, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "line": 10, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.allowlist.ts", + "line": 11, + "specifier": "../../../../src/shared/string-normalization.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.group-policy.test.ts", + "line": 2, + "specifier": "../../../../src/test-utils/runtime-group-policy-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.test.ts", + "line": 4, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "line": 3, + "specifier": "../../../../src/channels/transport/stall-watchdog.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "line": 4, + "specifier": "../../../../src/gateway/channel-status-patches.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "line": 5, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.lifecycle.ts", + "line": 6, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 3, + "specifier": "../../../../src/acp/runtime/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 4, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 5, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 183, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 187, + "specifier": "../../../../src/acp/control-plane/manager.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 193, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 197, + "specifier": "../../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 201, + "specifier": "../../../../src/config/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 207, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 211, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 218, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 222, + "specifier": "../../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 226, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 230, + "specifier": "../../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.test.ts", + "line": 234, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 14, + "specifier": "../../../../src/acp/control-plane/manager.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 15, + "specifier": "../../../../src/acp/runtime/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 16, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 17, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 18, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 19, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 20, + "specifier": "../../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 25, + "specifier": "../../../../src/channels/thread-bindings-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 30, + "specifier": "../../../../src/config/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 31, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 32, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 33, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 39, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 40, + "specifier": "../../../../src/gateway/channel-status-patches.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 41, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 42, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 43, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 44, + "specifier": "../../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 45, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/provider.ts", + "line": 46, + "specifier": "../../../../src/shared/string-sample.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.test.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.test.ts", + "line": 3, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 2, + "specifier": "../../../../src/agents/identity-avatar.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 6, + "specifier": "../../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 7, + "specifier": "../../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 8, + "specifier": "../../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 9, + "specifier": "../../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/reply-delivery.ts", + "line": 10, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "line": 3, + "specifier": "../../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/rest-fetch.ts", + "line": 4, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.test.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.test.ts", + "line": 3, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "line": 7, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/route-resolution.ts", + "line": 8, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "line": 5, + "specifier": "../../../../src/channels/thread-bindings-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "line": 6, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.config.ts", + "line": 7, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.test.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.discord-api.ts", + "line": 3, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.test.ts", + "line": 9, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.test.ts", + "line": 55, + "specifier": "../../../../src/acp/runtime/session-meta.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "line": 4, + "specifier": "../../../../src/acp/runtime/session-meta.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.lifecycle.ts", + "line": 6, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "line": 2, + "specifier": "../../../../src/channels/thread-binding-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "line": 4, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "line": 10, + "specifier": "../../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.manager.ts", + "line": 14, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.messages.ts", + "line": 6, + "specifier": "../../../../src/channels/thread-bindings-messages.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.persona.ts", + "line": 1, + "specifier": "../../../../src/infra/system-message.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "line": 3, + "specifier": "../../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "line": 4, + "specifier": "../../../../src/infra/json-file.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-bindings.state.ts", + "line": 8, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.test.ts", + "line": 9, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/thread-session-close.ts", + "line": 2, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/reply/reply-reference.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "line": 4, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "line": 5, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "line": 6, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/monitor/threading.ts", + "line": 7, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 4, + "specifier": "../../../src/channels/plugins/onboarding-types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 5, + "specifier": "../../../src/channels/plugins/onboarding/channel-access-configure.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 19, + "specifier": "../../../src/channels/plugins/onboarding/helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 20, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 21, + "specifier": "../../../src/config/types.discord.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 22, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 23, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 24, + "specifier": "../../../src/terminal/links.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/onboarding.ts", + "line": 25, + "specifier": "../../../src/wizard/prompts.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.sendpayload.test.ts", + "line": 2, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.sendpayload.test.ts", + "line": 6, + "specifier": "../../../src/test-utils/send-payload-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "line": 4, + "specifier": "../../../src/infra/outbound/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/outbound-adapter.ts", + "line": 5, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/pluralkit.ts", + "line": 1, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/probe.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/probe.ts", + "line": 2, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/probe.ts", + "line": 3, + "specifier": "../../../src/utils/fetch-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/resolve-channels.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/fetch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/resolve-users.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/fetch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.components.test.ts", + "line": 9, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.components.ts", + "line": 8, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.components.ts", + "line": 9, + "specifier": "../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.components.ts", + "line": 10, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.creates-thread.test.ts", + "line": 21, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.emojis-stickers.ts", + "line": 2, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 6, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 7, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 8, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 9, + "specifier": "../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 10, + "specifier": "../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 11, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 12, + "specifier": "../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 13, + "specifier": "../../../src/media/constants.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 14, + "specifier": "../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 15, + "specifier": "../../../src/media/temp-files.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 16, + "specifier": "../../../src/polls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.outbound.ts", + "line": 17, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.reactions.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.sends-basic-channel-messages.test.ts", + "line": 3, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.sends-basic-channel-messages.test.ts", + "line": 24, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 12, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 13, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 14, + "specifier": "../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 15, + "specifier": "../../../src/media/load-options.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 20, + "specifier": "../../../src/polls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.shared.ts", + "line": 21, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/discord/src/send.test-harness.ts", + "line": 2, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.types.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.types.ts", + "line": 3, + "specifier": "../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.webhook-activity.test.ts", + "line": 7, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/send.webhook-activity.test.ts", + "line": 15, + "specifier": "../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/session-key-normalization.ts", + "line": 1, + "specifier": "../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/session-key-normalization.ts", + "line": 2, + "specifier": "../../../src/channels/chat-type.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/status-issues.ts", + "line": 6, + "specifier": "../../../src/channels/plugins/status-issues/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/status-issues.ts", + "line": 10, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/targets.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/targets.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/directory-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/targets.ts", + "line": 9, + "specifier": "../../../src/channels/targets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/token.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/token.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/token.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/token.ts", + "line": 3, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/token.ts", + "line": 4, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/ui.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.test.ts", + "line": 80, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "line": 17, + "specifier": "../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "line": 18, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "line": 23, + "specifier": "../../../src/media/ffmpeg-exec.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "line": 24, + "specifier": "../../../src/media/ffmpeg-limits.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice-message.ts", + "line": 25, + "specifier": "../../../src/media/temp-files.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "line": 13, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "line": 14, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "line": 15, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/command.ts", + "line": 16, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "line": 98, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "line": 102, + "specifier": "../../../../src/commands/agent.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.e2e.test.ts", + "line": 106, + "specifier": "../../../../src/media-understanding/runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 19, + "specifier": "../../../../src/agents/agent-scope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 20, + "specifier": "../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 21, + "specifier": "../../../../src/commands/agent.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 22, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 23, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 24, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 25, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 26, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 27, + "specifier": "../../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 28, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 34, + "specifier": "../../../../src/media-understanding/runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 35, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 36, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 37, + "specifier": "../../../../src/tts/tts-core.js", + "reason": "relative_escape" + }, + { + "path": "extensions/discord/src/voice/manager.ts", + "line": 38, + "specifier": "../../../../src/tts/tts.js", + "reason": "relative_escape" + }, + { + "path": "extensions/feishu/src/bot.test.ts", + "line": 3, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/feishu/src/media.test.ts", + "line": 4, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "line": 3, + "specifier": "../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "line": 7, + "specifier": "../../../src/auto-reply/inbound-debounce.js", + "reason": "relative_escape" + }, + { + "path": "extensions/feishu/src/monitor.reaction.test.ts", + "line": 8, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/googlechat/src/channel.startup.test.ts", + "line": 7, + "specifier": "../../test-utils/start-account-lifecycle.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/googlechat/src/channel.ts", + "line": 33, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "line": 5, + "specifier": "../../../src/plugins/registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "line": 6, + "specifier": "../../../src/plugins/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/googlechat/src/monitor.webhook-routing.test.ts", + "line": 7, + "specifier": "../../../src/test-utils/mock-http-response.js", + "reason": "relative_escape" + }, + { + "path": "extensions/googlechat/src/resolve-target.test.ts", + "line": 2, + "specifier": "../../shared/resolve-target-test-helpers.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/account-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "line": 3, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "line": 4, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/accounts.ts", + "line": 5, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/channel.ts", + "line": 32, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/channel.ts", + "line": 33, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/imessage/src/client.ts", + "line": 3, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/client.ts", + "line": 4, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor.gating.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "line": 2, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "line": 17, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "line": 22, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "line": 26, + "specifier": "../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.test.ts", + "line": 30, + "specifier": "../../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 4, + "specifier": "../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 5, + "specifier": "../../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/deliver.ts", + "line": 6, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.test.ts", + "line": 2, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.test.ts", + "line": 3, + "specifier": "../../../../src/terminal/safe-text.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 7, + "specifier": "../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 12, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 13, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 17, + "specifier": "../../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 18, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 19, + "specifier": "../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 20, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 24, + "specifier": "../../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 25, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 29, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 30, + "specifier": "../../../../src/terminal/safe-text.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/inbound-processing.ts", + "line": 31, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 2, + "specifier": "../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 9, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 10, + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 14, + "specifier": "../../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 15, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 16, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 17, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 22, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 23, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 24, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 25, + "specifier": "../../../../src/infra/scp-host.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 26, + "specifier": "../../../../src/infra/transport-ready.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 31, + "specifier": "../../../../src/media/inbound-path-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 32, + "specifier": "../../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 33, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 37, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 38, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/monitor-provider.ts", + "line": 39, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/provider.group-policy.test.ts", + "line": 2, + "specifier": "../../../../src/test-utils/runtime-group-policy-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/reflection-guard.ts", + "line": 7, + "specifier": "../../../../src/shared/text/code-regions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/runtime.ts", + "line": 1, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/runtime.ts", + "line": 2, + "specifier": "../../../../src/shared/string-normalization.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/sanitize-outbound.ts", + "line": 1, + "specifier": "../../../../src/shared/text/assistant-visible-text.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/types.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/monitor/types.ts", + "line": 2, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.test.ts", + "line": 8, + "specifier": "../../../src/commands/onboard-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.test.ts", + "line": 12, + "specifier": "../../../src/process/exec.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.ts", + "line": 2, + "specifier": "../../../src/commands/onboard-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.ts", + "line": 4, + "specifier": "../../../src/process/exec.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/probe.ts", + "line": 5, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/send.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/send.ts", + "line": 2, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/send.ts", + "line": 3, + "specifier": "../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/send.ts", + "line": 4, + "specifier": "../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/send.ts", + "line": 5, + "specifier": "../../../src/media/outbound-attachment.js", + "reason": "relative_escape" + }, + { + "path": "extensions/imessage/src/targets.ts", + "line": 1, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/irc/src/channel.startup.test.ts", + "line": 5, + "specifier": "../../test-utils/start-account-lifecycle.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/irc/src/channel.ts", + "line": 20, + "specifier": "../../shared/passive-monitor.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/irc/src/config-schema.ts", + "line": 12, + "specifier": "../../shared/config-schema-helpers.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/irc/src/monitor.ts", + "line": 2, + "specifier": "../../shared/runtime.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/irc/src/onboarding.test.ts", + "line": 3, + "specifier": "../../test-utils/runtime-env.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/irc/src/policy.test.ts", + "line": 2, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/irc/src/send.test.ts", + "line": 6, + "specifier": "../../test-utils/send-config.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/line/src/channel.logout.test.ts", + "line": 3, + "specifier": "../../test-utils/runtime-env.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/line/src/channel.startup.test.ts", + "line": 9, + "specifier": "../../test-utils/runtime-env.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/llm-task/src/llm-task-tool.test.ts", + "line": 3, + "specifier": "../../../src/agents/pi-embedded-runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/llm-task/src/llm-task-tool.test.ts", + "line": 12, + "specifier": "../../../src/agents/pi-embedded-runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/llm-task/src/llm-task-tool.ts", + "line": 23, + "specifier": "../../../src/agents/pi-embedded-runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/lobster/src/test-helpers.ts", + "line": 43, + "specifier": "../../shared/windows-cmd-shim-test-fixtures.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/matrix/src/channel.directory.test.ts", + "line": 3, + "specifier": "../../test-utils/runtime-env.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/matrix/src/channel.ts", + "line": 18, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/matrix/src/matrix/send-queue.test.ts", + "line": 2, + "specifier": "../../../shared/deferred.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/matrix/src/outbound.ts", + "line": 2, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/mattermost/src/channel.ts", + "line": 24, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/mattermost/src/config-schema.ts", + "line": 9, + "specifier": "../../shared/config-schema-helpers.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/mattermost/src/mattermost/send.test.ts", + "line": 5, + "specifier": "../../../test-utils/send-config.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/msteams/src/attachments.test.ts", + "line": 3, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/msteams/src/channel.directory.test.ts", + "line": 3, + "specifier": "../../test-utils/directory.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/msteams/src/messenger.test.ts", + "line": 6, + "specifier": "../../test-utils/plugin-runtime-mock.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/msteams/src/messenger.test.ts", + "line": 20, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/msteams/src/outbound.ts", + "line": 2, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/nextcloud-talk/src/channel.startup.test.ts", + "line": 2, + "specifier": "../../test-utils/start-account-context.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nextcloud-talk/src/channel.startup.test.ts", + "line": 6, + "specifier": "../../test-utils/start-account-lifecycle.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nextcloud-talk/src/channel.ts", + "line": 23, + "specifier": "../../shared/passive-monitor.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nextcloud-talk/src/config-schema.ts", + "line": 12, + "specifier": "../../shared/config-schema-helpers.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nextcloud-talk/src/monitor.read-body.test.ts", + "line": 2, + "specifier": "../../../test/helpers/mock-incoming-request.js", + "reason": "relative_escape" + }, + { + "path": "extensions/nextcloud-talk/src/monitor.ts", + "line": 9, + "specifier": "../../shared/runtime.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nextcloud-talk/src/send.test.ts", + "line": 6, + "specifier": "../../test-utils/send-config.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nostr/src/channel.outbound.test.ts", + "line": 3, + "specifier": "../../test-utils/start-account-context.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/nostr/src/channel.ts", + "line": 13, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/phone-control/index.test.ts", + "line": 10, + "specifier": "../test-utils/plugin-api.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/signal/src/accounts.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/account-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/accounts.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/accounts.ts", + "line": 3, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/accounts.ts", + "line": 4, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/accounts.ts", + "line": 5, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/channel.ts", + "line": 33, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.test.ts", + "line": 6, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.test.ts", + "line": 10, + "specifier": "../../../src/infra/secure-random.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.test.ts", + "line": 14, + "specifier": "../../../src/utils/fetch-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.ts", + "line": 1, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.ts", + "line": 2, + "specifier": "../../../src/infra/secure-random.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/client.ts", + "line": 3, + "specifier": "../../../src/utils/fetch-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/daemon.ts", + "line": 2, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/format.ts", + "line": 1, + "specifier": "../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/format.ts", + "line": 7, + "specifier": "../../../src/markdown/ir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/identity.ts", + "line": 2, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "line": 3, + "specifier": "../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "line": 4, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.sends-tool-summaries-responseprefix.test.ts", + "line": 5, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 3, + "specifier": "../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 4, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 71, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 79, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 89, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 94, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.tool-result.test-harness.ts", + "line": 119, + "specifier": "../../../src/infra/transport-ready.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 5, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 9, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 10, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 11, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 12, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 17, + "specifier": "../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 18, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 19, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 20, + "specifier": "../../../src/infra/transport-ready.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 21, + "specifier": "../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 22, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 23, + "specifier": "../../../src/shared/string-normalization.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor.ts", + "line": 24, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "line": 1, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "line": 2, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/access-policy.ts", + "line": 6, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "line": 3, + "specifier": "../../../../test/helpers/inbound-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "line": 37, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.inbound-contract.test.ts", + "line": 47, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "line": 3, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "line": 4, + "specifier": "../../../../test/helpers/dispatch-inbound-capture.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.mention-gating.test.ts", + "line": 21, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 1, + "specifier": "../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 8, + "specifier": "../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 13, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 14, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 18, + "specifier": "../../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 19, + "specifier": "../../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 20, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 24, + "specifier": "../../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 25, + "specifier": "../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 26, + "specifier": "../../../../src/channels/mention-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 27, + "specifier": "../../../../src/channels/plugins/normalize/signal.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 28, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 29, + "specifier": "../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 30, + "specifier": "../../../../src/channels/typing.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 31, + "specifier": "../../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 32, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 33, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 34, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 35, + "specifier": "../../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 36, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 40, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.ts", + "line": 41, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "line": 8, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/monitor/event-handler.types.ts", + "line": 9, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/probe.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/reaction-level.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/reaction-level.ts", + "line": 6, + "specifier": "../../../src/utils/reaction-level.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/rpc-context.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send-reactions.test.ts", + "line": 6, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send-reactions.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send-reactions.ts", + "line": 6, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send.ts", + "line": 2, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send.ts", + "line": 3, + "specifier": "../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/send.ts", + "line": 4, + "specifier": "../../../src/media/outbound-attachment.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "line": 1, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "line": 2, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "line": 3, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/signal/src/sse-reconnect.ts", + "line": 4, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/account-inspect.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/account-inspect.ts", + "line": 5, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/account-inspect.ts", + "line": 6, + "specifier": "../../../src/config/types.slack.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/account-inspect.ts", + "line": 7, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/account-surface-fields.ts", + "line": 1, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 1, + "specifier": "../../../src/channels/chat-type.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/account-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 4, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 5, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/accounts.ts", + "line": 6, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/actions.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/actions.ts", + "line": 3, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/blocks.test-helpers.ts", + "line": 20, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "line": 2, + "specifier": "../../../src/config/types.slack.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/channel-migration.ts", + "line": 3, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/channel.ts", + "line": 41, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/channel.ts", + "line": 42, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/slack/src/directory-live.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/directory-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/directory-live.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/draft-stream.ts", + "line": 1, + "specifier": "../../../src/channels/draft-stream-loop.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/format.ts", + "line": 1, + "specifier": "../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/format.ts", + "line": 2, + "specifier": "../../../src/markdown/ir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/format.ts", + "line": 3, + "specifier": "../../../src/markdown/render.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/interactive-replies.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/interactive-replies.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/message-actions.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "line": 1, + "specifier": "../../../src/agents/tools/common.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "line": 5, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/message-actions.ts", + "line": 6, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "line": 151, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "line": 159, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "line": 177, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.test-helpers.ts", + "line": 183, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.threading.missing-thread-ts.test.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "line": 3, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor.tool-result.test.ts", + "line": 4, + "specifier": "../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/allow-list.ts", + "line": 5, + "specifier": "../../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/allow-list.ts", + "line": 10, + "specifier": "../../../../src/shared/string-normalization.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/auth.test.ts", + "line": 6, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/auth.ts", + "line": 1, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/channel-config.ts", + "line": 6, + "specifier": "../../../../src/channels/channel-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/channel-config.ts", + "line": 7, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/commands.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.test.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.test.ts", + "line": 4, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 3, + "specifier": "../../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 7, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 8, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 9, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 10, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 11, + "specifier": "../../../../src/infra/dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 12, + "specifier": "../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 13, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/context.ts", + "line": 14, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "line": 1, + "specifier": "../../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "line": 2, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/dm-auth.ts", + "line": 3, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/channels.test.ts", + "line": 7, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "line": 2, + "specifier": "../../../../../src/channels/plugins/config-writes.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "line": 3, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "line": 4, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/channels.ts", + "line": 5, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.modal.ts", + "line": 1, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.test.ts", + "line": 6, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/interactions.ts", + "line": 3, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/members.test.ts", + "line": 13, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/members.test.ts", + "line": 17, + "specifier": "../../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/members.ts", + "line": 2, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/members.ts", + "line": 3, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/messages.test.ts", + "line": 11, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/messages.test.ts", + "line": 15, + "specifier": "../../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/messages.ts", + "line": 2, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/messages.ts", + "line": 3, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/pins.test.ts", + "line": 11, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/pins.test.ts", + "line": 14, + "specifier": "../../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/pins.ts", + "line": 2, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/pins.ts", + "line": 3, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.test.ts", + "line": 11, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.test.ts", + "line": 17, + "specifier": "../../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.ts", + "line": 2, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/reactions.ts", + "line": 3, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/events/system-event-context.ts", + "line": 1, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/external-arg-menu-store.ts", + "line": 1, + "specifier": "../../../../src/infra/secure-random.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 2, + "specifier": "../../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 3, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 4, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 5, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 6, + "specifier": "../../../../src/test-helpers/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.test.ts", + "line": 7, + "specifier": "../../../../src/test-utils/fetch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "line": 2, + "specifier": "../../../../src/infra/net/hostname.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "line": 3, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "line": 4, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/media.ts", + "line": 5, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler.app-mention-race.test.ts", + "line": 11, + "specifier": "../../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler.test.ts", + "line": 10, + "specifier": "../../../../src/auto-reply/inbound-debounce.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler.ts", + "line": 4, + "specifier": "../../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 1, + "specifier": "../../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 2, + "specifier": "../../../../../src/auto-reply/dispatch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 3, + "specifier": "../../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 4, + "specifier": "../../../../../src/auto-reply/reply/reply-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 5, + "specifier": "../../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 6, + "specifier": "../../../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 7, + "specifier": "../../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 8, + "specifier": "../../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 9, + "specifier": "../../../../../src/channels/typing.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 10, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 11, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 12, + "specifier": "../../../../../src/infra/outbound/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/dispatch.ts", + "line": 13, + "specifier": "../../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-content.ts", + "line": 1, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "line": 2, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare-thread-context.ts", + "line": 3, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test-helpers.ts", + "line": 2, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test-helpers.ts", + "line": 3, + "specifier": "../../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "line": 6, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "line": 7, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "line": 8, + "specifier": "../../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.test.ts", + "line": 9, + "specifier": "../../../../../test/helpers/inbound-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.thread-session-key.test.ts", + "line": 3, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 1, + "specifier": "../../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 2, + "specifier": "../../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 3, + "specifier": "../../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 7, + "specifier": "../../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 11, + "specifier": "../../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 12, + "specifier": "../../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 16, + "specifier": "../../../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 17, + "specifier": "../../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 21, + "specifier": "../../../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 22, + "specifier": "../../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 23, + "specifier": "../../../../../src/channels/conversation-label.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 24, + "specifier": "../../../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 25, + "specifier": "../../../../../src/channels/mention-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 26, + "specifier": "../../../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 27, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 28, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 29, + "specifier": "../../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 30, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 31, + "specifier": "../../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/prepare.ts", + "line": 32, + "specifier": "../../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/types.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/message-handler/types.ts", + "line": 2, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/monitor.test.ts", + "line": 3, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/monitor.test.ts", + "line": 4, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.group-policy.test.ts", + "line": 2, + "specifier": "../../../../src/test-utils/runtime-group-policy-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 11, + "specifier": "../../../../src/channels/allowlists/resolve-utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 12, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 13, + "specifier": "../../../../src/config/dangerous-name-matching.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 18, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 19, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 20, + "specifier": "../../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 21, + "specifier": "../../../../src/gateway/channel-status-patches.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 22, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 23, + "specifier": "../../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 24, + "specifier": "../../../../src/infra/http-body.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 25, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 26, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/provider.ts", + "line": 27, + "specifier": "../../../../src/shared/string-normalization.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/reply/reply-reference.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/tokens.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 5, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 6, + "specifier": "../../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/replies.ts", + "line": 7, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/room-context.ts", + "line": 1, + "specifier": "../../../../src/security/channel-metadata.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-commands.runtime.ts", + "line": 7, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 4, + "specifier": "../../../../src/channels/conversation-label.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 5, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 6, + "specifier": "../../../../src/channels/session-meta.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 7, + "specifier": "../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-dispatch.runtime.ts", + "line": 8, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash-skill-commands.runtime.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 15, + "specifier": "../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 19, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 24, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 28, + "specifier": "../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 32, + "specifier": "../../../../src/channels/conversation-label.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 36, + "specifier": "../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test-harness.ts", + "line": 40, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.test.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 5, + "specifier": "../../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 6, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 7, + "specifier": "../../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 8, + "specifier": "../../../../src/channels/native-command-session-targets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 12, + "specifier": "../../../../src/config/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 13, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/slash.ts", + "line": 14, + "specifier": "../../../../src/utils/chunk-items.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/thread-resolution.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/thread-resolution.ts", + "line": 3, + "specifier": "../../../../src/infra/map-size.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/types.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/monitor/types.ts", + "line": 2, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/probe.test.ts", + "line": 11, + "specifier": "../../../src/utils/with-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/probe.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/probe.ts", + "line": 2, + "specifier": "../../../src/utils/with-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/scopes.ts", + "line": 2, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 6, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 7, + "specifier": "../../../src/auto-reply/tokens.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 8, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 9, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 10, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 14, + "specifier": "../../../src/infra/net/fetch-guard.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.ts", + "line": 15, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/slack/src/send.upload.test.ts", + "line": 16, + "specifier": "../../../src/infra/net/fetch-guard.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/send.upload.test.ts", + "line": 25, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/slack/src/sent-thread-cache.test.ts", + "line": 2, + "specifier": "../../../test/helpers/import-fresh.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/sent-thread-cache.ts", + "line": 1, + "specifier": "../../../src/shared/global-singleton.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/stream-mode.ts", + "line": 7, + "specifier": "../../../src/config/discord-preview-streaming.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/streaming.ts", + "line": 16, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/targets.test.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/normalize/slack.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/targets.ts", + "line": 9, + "specifier": "../../../src/channels/targets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/threading-tool-context.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/threading-tool-context.ts", + "line": 4, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/threading-tool-context.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/threading.ts", + "line": 1, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/slack/src/token.ts", + "line": 1, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.test.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.test.ts", + "line": 6, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 6, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 7, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 8, + "specifier": "../../../src/infra/secret-file.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 10, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/account-inspect.ts", + "line": 11, + "specifier": "../../../src/secrets/ref-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "line": 3, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.test.ts", + "line": 32, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/account-action-gate.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 4, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 5, + "specifier": "../../../src/infra/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 6, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 11, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 15, + "specifier": "../../../src/routing/bindings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 16, + "specifier": "../../../src/routing/default-account-warnings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/accounts.ts", + "line": 21, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "line": 1, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "line": 2, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "line": 3, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/api-logging.ts", + "line": 4, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/approval-buttons.ts", + "line": 1, + "specifier": "../../../src/infra/exec-approval-reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/audit-membership-runtime.ts", + "line": 1, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/audit-membership-runtime.ts", + "line": 2, + "specifier": "../../../src/utils/fetch-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/audit.ts", + "line": 1, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/audit.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "line": 5, + "specifier": "../../../src/channels/allow-from.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "line": 6, + "specifier": "../../../src/channels/allowlist-match.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-access.ts", + "line": 7, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 2, + "specifier": "../../../src/agents/agent-scope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 3, + "specifier": "../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 7, + "specifier": "../../../src/auto-reply/inbound-debounce.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 8, + "specifier": "../../../src/auto-reply/reply/commands-info.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 12, + "specifier": "../../../src/auto-reply/reply/commands-models.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 13, + "specifier": "../../../src/auto-reply/reply/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 14, + "specifier": "../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 15, + "specifier": "../../../src/auto-reply/status.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 16, + "specifier": "../../../src/channels/inbound-debounce-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 17, + "specifier": "../../../src/channels/plugins/config-writes.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 18, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 19, + "specifier": "../../../src/config/io.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 25, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 26, + "specifier": "../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 31, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 32, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 33, + "specifier": "../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 34, + "specifier": "../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 35, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 36, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 37, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-handlers.ts", + "line": 38, + "specifier": "../../../src/sessions/model-overrides.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.acp-bindings.test.ts", + "line": 6, + "specifier": "../../../src/acp/persistent-bindings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.audio-transcript.test.ts", + "line": 9, + "specifier": "../../../src/media-understanding/audio-preflight.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 5, + "specifier": "../../../src/agents/model-catalog.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 6, + "specifier": "../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 7, + "specifier": "../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 11, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 15, + "specifier": "../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 16, + "specifier": "../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 17, + "specifier": "../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 18, + "specifier": "../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 19, + "specifier": "../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 20, + "specifier": "../../../src/channels/mention-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 21, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 26, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 27, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.body.ts", + "line": 186, + "specifier": "../../../src/media-understanding/audio-preflight.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.dm-threads.test.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.dm-topic-threadid.test.ts", + "line": 6, + "specifier": "../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.named-account-dm.test.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.named-account-dm.test.ts", + "line": 9, + "specifier": "../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 1, + "specifier": "../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 5, + "specifier": "../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 9, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 10, + "specifier": "../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 11, + "specifier": "../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 12, + "specifier": "../../../src/channels/session.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 13, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 14, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 19, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 20, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 21, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 22, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.session.ts", + "line": 23, + "specifier": "../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.thread-binding.test.ts", + "line": 12, + "specifier": "../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.topic-agentid.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.topic-agentid.test.ts", + "line": 15, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 1, + "specifier": "../../../src/acp/persistent-bindings.route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 2, + "specifier": "../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 3, + "specifier": "../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 4, + "specifier": "../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 8, + "specifier": "../../../src/channels/status-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 9, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 10, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 11, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 12, + "specifier": "../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 13, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.ts", + "line": 14, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-context.types.ts", + "line": 9, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "line": 4, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "line": 21, + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.test.ts", + "line": 33, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 2, + "specifier": "../../../src/agents/agent-scope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 7, + "specifier": "../../../src/agents/model-catalog.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 8, + "specifier": "../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 9, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 10, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 11, + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 12, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 13, + "specifier": "../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 14, + "specifier": "../../../src/channels/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 15, + "specifier": "../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 16, + "specifier": "../../../src/channels/typing.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 17, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 22, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 27, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 28, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 29, + "specifier": "../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message-dispatch.ts", + "line": 30, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "line": 3, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-message.ts", + "line": 4, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "line": 6, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "line": 10, + "specifier": "../../../src/config/telegram-custom-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "line": 11, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-command-menu.ts", + "line": 12, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "line": 3, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.group-auth.test.ts", + "line": 4, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.plugin-auth.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.plugin-auth.test.ts", + "line": 3, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 57, + "specifier": "../../../src/acp/persistent-bindings.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 65, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 69, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 72, + "specifier": "../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 75, + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 78, + "specifier": "../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 81, + "specifier": "../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 91, + "specifier": "../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.session-meta.test.ts", + "line": 95, + "specifier": "../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "line": 5, + "specifier": "../../../src/agents/skills.e2e-test-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "line": 6, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "line": 7, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.skills-allowlist.test.ts", + "line": 19, + "specifier": "../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 3, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 4, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 5, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 6, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 40, + "specifier": "../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test-helpers.ts", + "line": 51, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 4, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 5, + "specifier": "../../../src/config/telegram-custom-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 6, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 7, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 22, + "specifier": "../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.test.ts", + "line": 29, + "specifier": "../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 2, + "specifier": "../../../src/acp/persistent-bindings.route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 3, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 4, + "specifier": "../../../src/auto-reply/command-auth.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 5, + "specifier": "../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 13, + "specifier": "../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 14, + "specifier": "../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 15, + "specifier": "../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 16, + "specifier": "../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 17, + "specifier": "../../../src/channels/command-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 18, + "specifier": "../../../src/channels/native-command-session-targets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 19, + "specifier": "../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 20, + "specifier": "../../../src/channels/session-meta.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 21, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 22, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 23, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 28, + "specifier": "../../../src/config/telegram-custom-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 35, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 36, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 37, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 38, + "specifier": "../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 43, + "specifier": "../../../src/plugins/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 44, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 45, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-native-commands.ts", + "line": 46, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot-updates.ts", + "line": 2, + "specifier": "../../../src/infra/dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 3, + "specifier": "../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 4, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 6, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 23, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 34, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 42, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 71, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 81, + "specifier": "../../../src/auto-reply/skill-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 90, + "specifier": "../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test-harness.ts", + "line": 204, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test.ts", + "line": 5, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test.ts", + "line": 6, + "specifier": "../../../src/test-utils/frozen-time.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.create-telegram-bot.test.ts", + "line": 7, + "specifier": "../../../test/helpers/envelope-timestamp.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 95, + "specifier": "../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 108, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 118, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 126, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.e2e-harness.ts", + "line": 134, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.test-utils.ts", + "line": 2, + "specifier": "../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.media.test-utils.ts", + "line": 106, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "line": 6, + "specifier": "../../../src/auto-reply/commands-registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "line": 7, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "line": 8, + "specifier": "../../../src/config/telegram-custom-commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "line": 9, + "specifier": "../../../test/helpers/envelope-timestamp.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.test.ts", + "line": 10, + "specifier": "../../../test/helpers/inbound-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 5, + "specifier": "../../../src/agents/agent-scope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 6, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 10, + "specifier": "../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 15, + "specifier": "../../../src/channels/thread-bindings-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 20, + "specifier": "../../../src/config/commands.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 21, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 22, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 26, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 27, + "specifier": "../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 28, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 29, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 30, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 31, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot.ts", + "line": 32, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 4, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 5, + "specifier": "../../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 6, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 7, + "specifier": "../../../../src/hooks/fire-and-forget.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 11, + "specifier": "../../../../src/hooks/internal-hooks.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 17, + "specifier": "../../../../src/hooks/message-hook-mappers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 18, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 19, + "specifier": "../../../../src/media/load-options.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 20, + "specifier": "../../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 21, + "specifier": "../../../../src/plugins/hook-runner-global.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 22, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.replies.ts", + "line": 23, + "specifier": "../../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "line": 9, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "line": 17, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media-retry.test.ts", + "line": 21, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "line": 3, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "line": 4, + "specifier": "../../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "line": 5, + "specifier": "../../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.resolve-media.ts", + "line": 6, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.send.ts", + "line": 2, + "specifier": "../../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.send.ts", + "line": 3, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "line": 3, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "line": 27, + "specifier": "../../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "line": 31, + "specifier": "../../../../src/plugins/hook-runner-global.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/delivery.test.ts", + "line": 35, + "specifier": "../../../../src/hooks/internal-hooks.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "line": 2, + "specifier": "../../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "line": 3, + "specifier": "../../../../src/config/discord-preview-streaming.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "line": 8, + "specifier": "../../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "line": 9, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/helpers.ts", + "line": 10, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/bot/reply-threading.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 6, + "specifier": "../../../src/agents/tools/common.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 7, + "specifier": "../../../src/agents/tools/telegram-actions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 8, + "specifier": "../../../src/channels/plugins/actions/reaction-message-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 12, + "specifier": "../../../src/channels/plugins/actions/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 16, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 17, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel-actions.ts", + "line": 20, + "specifier": "../../../src/poll-params.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/channel.test.ts", + "line": 9, + "specifier": "../../test-utils/runtime-env.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/channel.ts", + "line": 46, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 1, + "specifier": "../../../src/acp/persistent-bindings.route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 3, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 4, + "specifier": "../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 10, + "specifier": "../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/conversation-route.ts", + "line": 14, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "line": 3, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "line": 5, + "specifier": "../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/dm-access.ts", + "line": 6, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "line": 1, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "line": 2, + "specifier": "../../../src/channels/dock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "line": 4, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-chunking.ts", + "line": 5, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-stream.test.ts", + "line": 3, + "specifier": "../../../test/helpers/import-fresh.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-stream.ts", + "line": 2, + "specifier": "../../../src/channels/draft-stream-controls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/draft-stream.ts", + "line": 3, + "specifier": "../../../src/shared/global-singleton.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 2, + "specifier": "../../../src/gateway/client.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 3, + "specifier": "../../../src/gateway/operator-approvals-client.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 4, + "specifier": "../../../src/gateway/protocol/index.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 5, + "specifier": "../../../src/infra/exec-approval-command-display.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 9, + "specifier": "../../../src/infra/exec-approval-reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 10, + "specifier": "../../../src/infra/exec-approval-session-target.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 14, + "specifier": "../../../src/infra/exec-approvals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 15, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 16, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 17, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals-handler.ts", + "line": 18, + "specifier": "../../../src/security/safe-regex.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "line": 1, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "line": 3, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/exec-approvals.ts", + "line": 4, + "specifier": "../../../src/infra/exec-approval-reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.test.ts", + "line": 2, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "line": 3, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "line": 4, + "specifier": "../../../src/infra/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "line": 5, + "specifier": "../../../src/infra/net/proxy-env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "line": 6, + "specifier": "../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/fetch.ts", + "line": 7, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/format.ts", + "line": 1, + "specifier": "../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/format.ts", + "line": 7, + "specifier": "../../../src/markdown/ir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/format.ts", + "line": 8, + "specifier": "../../../src/markdown/render.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.group-policy.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/runtime-group-policy-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.policy-access.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.policy-access.test.ts", + "line": 3, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "line": 2, + "specifier": "../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "line": 3, + "specifier": "../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-access.ts", + "line": 9, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-config-helpers.ts", + "line": 5, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/group-migration.ts", + "line": 3, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/inline-buttons.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/inline-buttons.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/lane-delivery-text-deliverer.ts", + "line": 1, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/lane-delivery.test.ts", + "line": 2, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "line": 212, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "line": 257, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "line": 262, + "specifier": "../../../src/infra/unhandled-rejections.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.test.ts", + "line": 275, + "specifier": "../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 2, + "specifier": "../../../src/config/agent-limits.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 4, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 5, + "specifier": "../../../src/infra/abort-signal.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 6, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 7, + "specifier": "../../../src/infra/unhandled-rejections.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/monitor.ts", + "line": 8, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.test.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.test.ts", + "line": 10, + "specifier": "../../../src/infra/wsl.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.test.ts", + "line": 14, + "specifier": "../../../src/infra/wsl.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "line": 3, + "specifier": "../../../src/infra/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-config.ts", + "line": 4, + "specifier": "../../../src/infra/wsl.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/network-errors.ts", + "line": 6, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 4, + "specifier": "../../../src/channels/plugins/onboarding-types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 15, + "specifier": "../../../src/channels/plugins/onboarding/helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 16, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 17, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 18, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 19, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 20, + "specifier": "../../../src/terminal/links.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/onboarding.ts", + "line": 21, + "specifier": "../../../src/wizard/prompts.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "line": 1, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "line": 5, + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "line": 6, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/outbound-adapter.ts", + "line": 10, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "line": 2, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "line": 3, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/polling-session.ts", + "line": 4, + "specifier": "../../../src/infra/format-time/format-duration.ts", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/probe.test.ts", + "line": 2, + "specifier": "../../../src/test-utils/fetch-mock.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/probe.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/probe.ts", + "line": 2, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/probe.ts", + "line": 3, + "specifier": "../../../src/utils/fetch-timeout.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/proxy.ts", + "line": 1, + "specifier": "../../../src/infra/net/proxy-fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reaction-level.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reaction-level.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reaction-level.ts", + "line": 6, + "specifier": "../../../src/utils/reaction-level.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "line": 1, + "specifier": "../../../src/agents/pi-embedded-utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "line": 2, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "line": 3, + "specifier": "../../../src/shared/text/code-regions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/reasoning-lane-coordinator.ts", + "line": 4, + "specifier": "../../../src/shared/text/reasoning-tags.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.proxy.test.ts", + "line": 24, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "line": 2, + "specifier": "../../../src/test-utils/vitest-mock-fn.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "line": 43, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/send.test-harness.ts", + "line": 63, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.test.ts", + "line": 3, + "specifier": "../../../test/helpers/import-fresh.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 8, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 9, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 10, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 11, + "specifier": "../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 12, + "specifier": "../../../src/infra/diagnostic-flags.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 13, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 14, + "specifier": "../../../src/infra/retry-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 15, + "specifier": "../../../src/infra/retry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 16, + "specifier": "../../../src/logging/redact.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 17, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 18, + "specifier": "../../../src/media/constants.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 19, + "specifier": "../../../src/media/load-options.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 20, + "specifier": "../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 21, + "specifier": "../../../src/polls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/send.ts", + "line": 22, + "specifier": "../../whatsapp/src/media.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/telegram/src/sendchataction-401-backoff.test.ts", + "line": 5, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sendchataction-401-backoff.ts", + "line": 1, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sent-message-cache.ts", + "line": 1, + "specifier": "../../../src/shared/global-singleton.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sequential-key.ts", + "line": 2, + "specifier": "../../../src/auto-reply/reply/abort.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sequential-key.ts", + "line": 3, + "specifier": "../../../src/auto-reply/reply/btw-command.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/status-issues.ts", + "line": 6, + "specifier": "../../../src/channels/plugins/status-issues/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/status-issues.ts", + "line": 10, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/status-reaction-variants.test.ts", + "line": 2, + "specifier": "../../../src/channels/status-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/status-reaction-variants.ts", + "line": 4, + "specifier": "../../../src/channels/status-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.test.ts", + "line": 13, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 3, + "specifier": "../../../src/agents/model-auth.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 4, + "specifier": "../../../src/agents/model-catalog.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 9, + "specifier": "../../../src/agents/model-catalog.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 10, + "specifier": "../../../src/agents/model-selection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 11, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 12, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 13, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 14, + "specifier": "../../../src/infra/json-file.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 18, + "specifier": "../../../src/media-understanding/defaults.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 19, + "specifier": "../../../src/media-understanding/runner.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/sticker-cache.ts", + "line": 154, + "specifier": "../../../src/media-understanding/providers/image-runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.test.ts", + "line": 10, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.test.ts", + "line": 19, + "specifier": "../../../src/cron/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "line": 3, + "specifier": "../../../src/cron/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/target-writeback.ts", + "line": 4, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.test.ts", + "line": 5, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.test.ts", + "line": 6, + "specifier": "../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.test.ts", + "line": 7, + "specifier": "../../../test/helpers/import-fresh.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 4, + "specifier": "../../../src/channels/thread-binding-id.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 5, + "specifier": "../../../src/channels/thread-bindings-messages.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 6, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 7, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 8, + "specifier": "../../../src/infra/json-files.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 14, + "specifier": "../../../src/infra/outbound/session-binding-service.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 15, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/thread-bindings.ts", + "line": 16, + "specifier": "../../../src/shared/global-singleton.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.test.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.test.ts", + "line": 6, + "specifier": "../../../src/test-helpers/state-dir-env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 1, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 3, + "specifier": "../../../src/config/types.secrets.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 4, + "specifier": "../../../src/config/types.telegram.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 5, + "specifier": "../../../src/infra/secret-file.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/token.ts", + "line": 6, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/update-offset-store.test.ts", + "line": 4, + "specifier": "../../../src/test-helpers/state-dir-env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/update-offset-store.ts", + "line": 4, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/update-offset-store.ts", + "line": 5, + "specifier": "../../../src/infra/json-files.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/voice.ts", + "line": 1, + "specifier": "../../../src/media/audio.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 4, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 5, + "specifier": "../../../src/infra/diagnostic-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 6, + "specifier": "../../../src/infra/errors.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 7, + "specifier": "../../../src/infra/http-body.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 14, + "specifier": "../../../src/logging/diagnostic.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 15, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/telegram/src/webhook.ts", + "line": 16, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/test-utils/directory.ts", + "line": 1, + "specifier": "../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/test-utils/plugin-api.ts", + "line": 1, + "specifier": "../../src/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/twitch/src/plugin.ts", + "line": 10, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/twitch/test/setup.ts", + "line": 7, + "specifier": "../../../test/setup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 3, + "specifier": "../../../src/channels/plugins/account-helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 4, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 5, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 6, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 7, + "specifier": "../../../src/routing/account-lookup.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 8, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.ts", + "line": 9, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/accounts.whatsapp-auth.test.ts", + "line": 5, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "line": 1, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "line": 2, + "specifier": "../../../src/polls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/active-listener.ts", + "line": 3, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/agent-tools-login.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 4, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 5, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 6, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 7, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 8, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 9, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 10, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auth-store.ts", + "line": 11, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.broadcast-groups.combined.test.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.impl.ts", + "line": 1, + "specifier": "../../../src/auto-reply/heartbeat.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.impl.ts", + "line": 2, + "specifier": "../../../src/auto-reply/tokens.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "line": 6, + "specifier": "../../../src/auto-reply/reply/inbound-dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "line": 7, + "specifier": "../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "line": 8, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.test-harness.ts", + "line": 32, + "specifier": "../../../src/agents/pi-embedded.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "line": 5, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "line": 6, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "line": 7, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.connection-and-logging.e2e.test.ts", + "line": 8, + "specifier": "../../../test/helpers/envelope-timestamp.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply.web-auto-reply.last-route.test.ts", + "line": 4, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "line": 2, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "line": 3, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "line": 8, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.test.ts", + "line": 21, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 3, + "specifier": "../../../../src/config/types.base.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 4, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 5, + "specifier": "../../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 6, + "specifier": "../../../../src/markdown/whatsapp.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/deliver-reply.ts", + "line": 7, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/tokens.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 4, + "specifier": "../../../../src/logging/redact-identifier.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 25, + "specifier": "../../../../src/agents/current-time.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 32, + "specifier": "../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 36, + "specifier": "../../../../src/channels/plugins/whatsapp-heartbeat.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 40, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 44, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 48, + "specifier": "../../../../src/infra/heartbeat-visibility.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 52, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 65, + "specifier": "../../../../src/infra/heartbeat-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.test.ts", + "line": 70, + "specifier": "../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 1, + "specifier": "../../../../src/agents/current-time.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/heartbeat-reply-payload.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 7, + "specifier": "../../../../src/auto-reply/heartbeat.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 8, + "specifier": "../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 9, + "specifier": "../../../../src/auto-reply/tokens.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 10, + "specifier": "../../../../src/channels/plugins/whatsapp-heartbeat.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 11, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 17, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 21, + "specifier": "../../../../src/infra/heartbeat-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 22, + "specifier": "../../../../src/infra/heartbeat-visibility.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 23, + "specifier": "../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 24, + "specifier": "../../../../src/logging/redact-identifier.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/heartbeat-runner.ts", + "line": 25, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/loggers.ts", + "line": 1, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/mentions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "line": 5, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/mentions.ts", + "line": 6, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 1, + "specifier": "../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 2, + "specifier": "../../../../src/auto-reply/inbound-debounce.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 4, + "specifier": "../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 5, + "specifier": "../../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 6, + "specifier": "../../../../src/cli/wait.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 7, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 8, + "specifier": "../../../../src/gateway/channel-status-patches.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 9, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 10, + "specifier": "../../../../src/infra/format-time/format-duration.ts", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 11, + "specifier": "../../../../src/infra/system-events.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 12, + "specifier": "../../../../src/infra/unhandled-rejections.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 13, + "specifier": "../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 14, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor.ts", + "line": 15, + "specifier": "../../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "line": 1, + "specifier": "../../../../../src/channels/ack-reactions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "line": 2, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/ack-reaction.ts", + "line": 3, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "line": 1, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "line": 2, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "line": 6, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/broadcast.ts", + "line": 11, + "specifier": "../../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/group-activation.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "line": 2, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "line": 6, + "specifier": "../../../../../src/config/group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-activation.ts", + "line": 11, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 2, + "specifier": "../../../../../src/auto-reply/group-activation.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 3, + "specifier": "../../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 4, + "specifier": "../../../../../src/channels/mention-gating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 5, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-gating.ts", + "line": 6, + "specifier": "../../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/group-members.ts", + "line": 1, + "specifier": "../../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "line": 2, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/last-route.ts", + "line": 3, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "line": 1, + "specifier": "../../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "line": 5, + "specifier": "../../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/message-line.ts", + "line": 6, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 1, + "specifier": "../../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 2, + "specifier": "../../../../../src/auto-reply/templating.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 3, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 4, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 5, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 6, + "specifier": "../../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/on-message.ts", + "line": 7, + "specifier": "../../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/peer.ts", + "line": 1, + "specifier": "../../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.inbound-contract.test.ts", + "line": 5, + "specifier": "../../../../../test/helpers/inbound-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.inbound-contract.test.ts", + "line": 86, + "specifier": "../../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 1, + "specifier": "../../../../../src/agents/identity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 2, + "specifier": "../../../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 3, + "specifier": "../../../../../src/auto-reply/command-detection.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 4, + "specifier": "../../../../../src/auto-reply/envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 5, + "specifier": "../../../../../src/auto-reply/reply.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 9, + "specifier": "../../../../../src/auto-reply/reply/history.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 10, + "specifier": "../../../../../src/auto-reply/reply/inbound-context.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 11, + "specifier": "../../../../../src/auto-reply/reply/provider-dispatcher.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 12, + "specifier": "../../../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 13, + "specifier": "../../../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 14, + "specifier": "../../../../../src/channels/reply-prefix.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 15, + "specifier": "../../../../../src/channels/session-envelope.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 16, + "specifier": "../../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 17, + "specifier": "../../../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 18, + "specifier": "../../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 19, + "specifier": "../../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 20, + "specifier": "../../../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 21, + "specifier": "../../../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 25, + "specifier": "../../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 30, + "specifier": "../../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/monitor/process-message.ts", + "line": 31, + "specifier": "../../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "line": 11, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/session-snapshot.ts", + "line": 12, + "specifier": "../../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-monitor.test.ts", + "line": 5, + "specifier": "../../../../src/routing/resolve-route.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-utils.test.ts", + "line": 4, + "specifier": "../../../../src/config/sessions.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/auto-reply/web-auto-reply-utils.test.ts", + "line": 5, + "specifier": "../../../../src/test-utils/temp-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/channel.outbound.test.ts", + "line": 5, + "specifier": "../../../src/test-helpers/whatsapp-outbound.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "line": 11, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "line": 29, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound.media.test.ts", + "line": 40, + "specifier": "../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.group-policy.test.ts", + "line": 2, + "specifier": "../../../../src/test-utils/runtime-group-policy-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.test-harness.ts", + "line": 36, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.test-harness.ts", + "line": 44, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 1, + "specifier": "../../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 6, + "specifier": "../../../../src/config/runtime-group-policy.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 7, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 8, + "specifier": "../../../../src/pairing/pairing-challenge.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 9, + "specifier": "../../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 13, + "specifier": "../../../../src/security/dm-policy-shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/access-control.ts", + "line": 14, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/dedupe.ts", + "line": 1, + "specifier": "../../../../src/infra/dedupe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "line": 7, + "specifier": "../../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "line": 8, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/extract.ts", + "line": 9, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/media.ts", + "line": 3, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 3, + "specifier": "../../../../src/auto-reply/inbound-debounce.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 4, + "specifier": "../../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 5, + "specifier": "../../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 6, + "specifier": "../../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 7, + "specifier": "../../../../src/logging/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 8, + "specifier": "../../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 9, + "specifier": "../../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/monitor.ts", + "line": 10, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.test.ts", + "line": 4, + "specifier": "../../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.ts", + "line": 2, + "specifier": "../../../../src/infra/channel-activity.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/send-api.ts", + "line": 3, + "specifier": "../../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/inbound/types.ts", + "line": 2, + "specifier": "../../../../src/channels/location.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "line": 5, + "specifier": "../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login-qr.ts", + "line": 6, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.coverage.test.ts", + "line": 17, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.test.ts", + "line": 5, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "line": 2, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "line": 3, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "line": 5, + "specifier": "../../../src/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/login.ts", + "line": 6, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 6, + "specifier": "../../../src/config/paths.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 7, + "specifier": "../../../src/infra/tmp-openclaw-dir.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 8, + "specifier": "../../../src/media/image-ops.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 9, + "specifier": "../../../src/test-helpers/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 10, + "specifier": "../../../src/test-utils/env.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 11, + "specifier": "../../discord/src/send.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/whatsapp/src/media.test.ts", + "line": 21, + "specifier": "../../../src/media/image-ops.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 5, + "specifier": "../../../src/infra/fs-safe.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 6, + "specifier": "../../../src/infra/net/ssrf.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 7, + "specifier": "../../../src/media/constants.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 8, + "specifier": "../../../src/media/fetch.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 14, + "specifier": "../../../src/media/image-ops.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 15, + "specifier": "../../../src/media/local-roots.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 16, + "specifier": "../../../src/media/mime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/media.ts", + "line": 17, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.captures-media-path-image-messages.test.ts", + "line": 7, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "line": 6, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "line": 84, + "specifier": "../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "line": 97, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/monitor-inbox.test-harness.ts", + "line": 105, + "specifier": "../../../src/pairing/pairing-store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/normalize.ts", + "line": 4, + "specifier": "../../../src/channels/plugins/normalize/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/normalize.ts", + "line": 5, + "specifier": "../../../src/whatsapp/normalize.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.test.ts", + "line": 2, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.test.ts", + "line": 3, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.test.ts", + "line": 4, + "specifier": "../../../src/wizard/prompts.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.test.ts", + "line": 17, + "specifier": "../../../src/channel-web.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.test.ts", + "line": 21, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 2, + "specifier": "../../../src/channel-web.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 3, + "specifier": "../../../src/channels/plugins/onboarding-types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 9, + "specifier": "../../../src/channels/plugins/onboarding/helpers.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 10, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 11, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 12, + "specifier": "../../../src/config/merge-config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 13, + "specifier": "../../../src/config/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 14, + "specifier": "../../../src/routing/session-key.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 15, + "specifier": "../../../src/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 16, + "specifier": "../../../src/terminal/links.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 17, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/onboarding.ts", + "line": 18, + "specifier": "../../../src/wizard/prompts.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.poll.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.poll.test.ts", + "line": 8, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.sendpayload.test.ts", + "line": 2, + "specifier": "../../../src/auto-reply/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.sendpayload.test.ts", + "line": 6, + "specifier": "../../../src/test-utils/send-payload-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 1, + "specifier": "../../../src/auto-reply/chunk.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 2, + "specifier": "../../../src/channels/plugins/outbound/direct-text-media.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 3, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 4, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 5, + "specifier": "../../../src/infra/outbound/send-deps.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/outbound-adapter.ts", + "line": 6, + "specifier": "../../../src/whatsapp/resolve-outbound-target.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/qr-image.ts", + "line": 3, + "specifier": "../../../src/media/png-encode.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/reconnect.test.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "line": 2, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "line": 3, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "line": 4, + "specifier": "../../../src/infra/backoff.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/reconnect.ts", + "line": 5, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/resolve-target.test.ts", + "line": 2, + "specifier": "../../shared/resolve-target-test-helpers.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "line": 6, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "line": 7, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.test.ts", + "line": 8, + "specifier": "../../../src/logging/redact-identifier.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 1, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 2, + "specifier": "../../../src/config/markdown-tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 3, + "specifier": "../../../src/infra/secure-random.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 4, + "specifier": "../../../src/logging/logger.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 5, + "specifier": "../../../src/logging/redact-identifier.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 6, + "specifier": "../../../src/logging/subsystem.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 7, + "specifier": "../../../src/markdown/tables.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 8, + "specifier": "../../../src/markdown/whatsapp.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 9, + "specifier": "../../../src/polls.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/send.ts", + "line": 10, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.test.ts", + "line": 5, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "line": 11, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "line": 12, + "specifier": "../../../src/globals.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "line": 13, + "specifier": "../../../src/logging.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "line": 14, + "specifier": "../../../src/utils.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/session.ts", + "line": 15, + "specifier": "../../../src/version.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "line": 5, + "specifier": "../../../src/channels/plugins/status-issues/shared.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "line": 9, + "specifier": "../../../src/channels/plugins/types.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/status-issues.ts", + "line": 10, + "specifier": "../../../src/cli/command-format.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "line": 2, + "specifier": "../../../test/mocks/baileys.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "line": 3, + "specifier": "../../../test/mocks/baileys.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "line": 33, + "specifier": "../../../src/config/config.js", + "reason": "relative_escape" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "line": 50, + "specifier": "../../config/config.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/whatsapp/src/test-helpers.ts", + "line": 67, + "specifier": "../../../src/media/store.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/channel.directory.test.ts", + "line": 3, + "specifier": "../../test-utils/directory.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalo/src/channel.sendpayload.test.ts", + "line": 6, + "specifier": "../../../src/test-utils/send-payload-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/channel.startup.test.ts", + "line": 6, + "specifier": "../../test-utils/start-account-lifecycle.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalo/src/monitor.lifecycle.test.ts", + "line": 3, + "specifier": "../../../src/plugins/registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/monitor.lifecycle.test.ts", + "line": 4, + "specifier": "../../../src/plugins/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/monitor.webhook.test.ts", + "line": 5, + "specifier": "../../../src/plugins/registry.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/monitor.webhook.test.ts", + "line": 6, + "specifier": "../../../src/plugins/runtime.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/monitor.webhook.ts", + "line": 19, + "specifier": "../../../src/gateway/net.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalo/src/status-issues.test.ts", + "line": 2, + "specifier": "../../test-utils/status-issues.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalo/src/status-issues.ts", + "line": 2, + "specifier": "../../shared/status-issues.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalouser/src/channel.sendpayload.test.ts", + "line": 7, + "specifier": "../../../src/test-utils/send-payload-contract.js", + "reason": "relative_escape" + }, + { + "path": "extensions/zalouser/src/channel.ts", + "line": 32, + "specifier": "../../shared/channel-status-summary.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalouser/src/monitor.ts", + "line": 34, + "specifier": "../../shared/deferred.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalouser/src/status-issues.test.ts", + "line": 2, + "specifier": "../../test-utils/status-issues.js", + "reason": "cross_extension_import" + }, + { + "path": "extensions/zalouser/src/status-issues.ts", + "line": 2, + "specifier": "../../shared/status-issues.js", + "reason": "cross_extension_import" + } +] diff --git a/src/plugin-sdk/subpaths.test.ts b/src/plugin-sdk/subpaths.test.ts index ce66f789857..db80599138c 100644 --- a/src/plugin-sdk/subpaths.test.ts +++ b/src/plugin-sdk/subpaths.test.ts @@ -3,6 +3,7 @@ import * as discordSdk from "openclaw/plugin-sdk/discord"; import * as imessageSdk from "openclaw/plugin-sdk/imessage"; import * as lineSdk from "openclaw/plugin-sdk/line"; import * as msteamsSdk from "openclaw/plugin-sdk/msteams"; +import * as requestUrlSdk from "openclaw/plugin-sdk/request-url"; import * as signalSdk from "openclaw/plugin-sdk/signal"; import * as slackSdk from "openclaw/plugin-sdk/slack"; import * as telegramSdk from "openclaw/plugin-sdk/telegram"; @@ -99,6 +100,28 @@ describe("plugin-sdk subpath exports", () => { expect(typeof msteamsSdk.loadOutboundMediaFromUrl).toBe("function"); }); + it("exports shared utility subpaths", async () => { + expect(typeof requestUrlSdk.resolveRequestUrl).toBe("function"); + + const booleanParamSdk = await import("openclaw/plugin-sdk/boolean-param"); + expect(typeof booleanParamSdk.readBooleanParam).toBe("function"); + + const groupAccessSdk = await import("openclaw/plugin-sdk/group-access"); + expect(typeof groupAccessSdk.evaluateGroupRouteAccessForPolicy).toBe("function"); + + const toolSendSdk = await import("openclaw/plugin-sdk/tool-send"); + expect(typeof toolSendSdk.extractToolSend).toBe("function"); + + const accountResolutionSdk = await import("openclaw/plugin-sdk/account-resolution"); + expect(typeof accountResolutionSdk.resolveAccountWithDefaultFallback).toBe("function"); + + const allowFromSdk = await import("openclaw/plugin-sdk/allow-from"); + expect(typeof allowFromSdk.isAllowedParsedChatSender).toBe("function"); + + const jsonStoreSdk = await import("openclaw/plugin-sdk/json-store"); + expect(typeof jsonStoreSdk.readJsonFileWithFallback).toBe("function"); + }); + it("exports acpx helpers", async () => { const acpxSdk = await import("openclaw/plugin-sdk/acpx"); expect(typeof acpxSdk.listKnownProviderAuthEnvVarNames).toBe("function"); diff --git a/vitest.config.ts b/vitest.config.ts index ac5f060ac56..b02a0239dae 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -10,6 +10,9 @@ const localWorkers = Math.max(4, Math.min(16, os.cpus().length)); const ciWorkers = isWindows ? 2 : 3; const pluginSdkSubpaths = [ "account-id", + "account-resolution", + "allow-from", + "boolean-param", "core", "web-search", "compat", @@ -30,7 +33,9 @@ const pluginSdkSubpaths = [ "feishu", "google-gemini-cli-auth", "googlechat", + "group-access", "irc", + "json-store", "llm-task", "lobster", "matrix", @@ -48,11 +53,13 @@ const pluginSdkSubpaths = [ "test-utils", "thread-ownership", "tlon", + "tool-send", "twitch", "voice-call", "zalo", "zalouser", "keyed-async-queue", + "request-url", ] as const; export default defineConfig({