@bastani/atomic 0.9.19-alpha.2 → 0.9.19-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/dist/builtin/intercom/CHANGELOG.md +15 -0
- package/dist/builtin/intercom/broker/broker.ts +8 -0
- package/dist/builtin/intercom/broker/client.ts +18 -0
- package/dist/builtin/intercom/broker/send-handler.ts +9 -0
- package/dist/builtin/intercom/index.bundle.mjs +161 -30
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/types.ts +2 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +18 -0
- package/dist/builtin/subagents/README.md +14 -14
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +14 -14
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +142 -60
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +33 -0
- package/dist/builtin/workflows/README.md +14 -15
- package/dist/builtin/workflows/builtin/{chunk-mygmtz6e.js → chunk-9k3ywfgd.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-r9qq7xfj.js → chunk-ahbntmx2.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-zggjyg5z.js → chunk-n8zysf1t.js} +1 -1
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +5 -5
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +171 -207
- package/dist/builtin/workflows/src/index.js +33 -6
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -1
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +1 -1
- package/dist/core/agent-session-auto-compaction.js +1 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-compaction.js +1 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
- package/dist/core/agent-session-custom-message-commit.js +33 -2
- package/dist/core/agent-session-custom-message-commit.js.map +1 -1
- package/dist/core/agent-session-message-queue.d.ts +1 -1
- package/dist/core/agent-session-message-queue.d.ts.map +1 -1
- package/dist/core/agent-session-message-queue.js +22 -8
- package/dist/core/agent-session-message-queue.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +7 -1
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.d.ts +1 -1
- package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.js +13 -3
- package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +1 -1
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +83 -0
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
- package/dist/core/agent-session-queue-pause.js +11 -0
- package/dist/core/agent-session-queue-pause.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts +5 -0
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +8 -1
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +2 -0
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +12 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-transfer.d.ts.map +1 -1
- package/dist/core/agent-session-transfer.js +7 -0
- package/dist/core/agent-session-transfer.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js +2 -0
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +4 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +22 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +6 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +3 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +2 -1
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +4 -1
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +1 -1
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +9 -3
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.js +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/workflow-events.d.ts +1 -1
- package/dist/core/extensions/workflow-events.d.ts.map +1 -1
- package/dist/core/extensions/workflow-events.js.map +1 -1
- package/dist/core/retry-policy.d.ts +1 -0
- package/dist/core/retry-policy.d.ts.map +1 -1
- package/dist/core/retry-policy.js +2 -1
- package/dist/core/retry-policy.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +1 -1
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +6 -3
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +25 -8
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-types.d.ts +6 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -5
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tasks/agent-adapter.d.ts +14 -2
- package/dist/core/tasks/agent-adapter.d.ts.map +1 -1
- package/dist/core/tasks/agent-adapter.js +45 -4
- package/dist/core/tasks/agent-adapter.js.map +1 -1
- package/dist/core/tasks/completion.d.ts.map +1 -1
- package/dist/core/tasks/completion.js +5 -1
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/pause.d.ts +4 -0
- package/dist/core/tasks/pause.d.ts.map +1 -0
- package/dist/core/tasks/pause.js +49 -0
- package/dist/core/tasks/pause.js.map +1 -0
- package/dist/core/tasks/supervisor.d.ts +3 -1
- package/dist/core/tasks/supervisor.d.ts.map +1 -1
- package/dist/core/tasks/supervisor.js +48 -22
- package/dist/core/tasks/supervisor.js.map +1 -1
- package/dist/core/tools/bash-pty-native.d.ts +16 -2
- package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
- package/dist/core/tools/bash-pty-native.js +82 -0
- package/dist/core/tools/bash-pty-native.js.map +1 -1
- package/dist/core/tools/bash.d.ts +15 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +49 -4
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/index.d.ts +4 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +12 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/kill.d.ts +17 -0
- package/dist/core/tools/kill.d.ts.map +1 -0
- package/dist/core/tools/kill.js +49 -0
- package/dist/core/tools/kill.js.map +1 -0
- package/dist/core/tools/powershell.d.ts +84 -28
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/powershell.js +11 -3
- package/dist/core/tools/powershell.js.map +1 -1
- package/dist/core/tools/resource-selectors.d.ts +1 -1
- package/dist/core/tools/resource-selectors.d.ts.map +1 -1
- package/dist/core/tools/resource-selectors.js +7 -4
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/workflow-stage-admission.d.ts +14 -0
- package/dist/core/workflow-stage-admission.d.ts.map +1 -1
- package/dist/core/workflow-stage-admission.js +63 -3
- package/dist/core/workflow-stage-admission.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +3 -2
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/task-row.d.ts.map +1 -1
- package/dist/modes/interactive/components/task-row.js +8 -1
- package/dist/modes/interactive/components/task-row.js.map +1 -1
- package/docs/background-tasks.md +31 -2
- package/docs/compaction.md +20 -0
- package/docs/computer-use.md +390 -0
- package/docs/development.md +23 -74
- package/docs/docs.json +1 -0
- package/docs/extensions.md +15 -1
- package/docs/herdr.md +26 -77
- package/docs/index.md +1 -0
- package/docs/intercom.md +14 -2
- package/docs/models/evals.md +2 -0
- package/docs/models/model-selection.md +10 -7
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +11 -1
- package/docs/settings.md +24 -0
- package/docs/subagents.md +10 -6
- package/docs/tmux.md +2 -0
- package/docs/tools.md +11 -1
- package/docs/usage.md +1 -1
- package/docs/workflows/api-reference.md +5 -4
- package/docs/workflows/authoring.md +3 -3
- package/docs/workflows/operations.md +44 -33
- package/docs/workflows/reliable-design.md +3 -3
- package/docs/workflows/verification.md +99 -40
- package/docs/workflows.md +4 -2
- package/npm-shrinkwrap.json +59 -59
- package/package.json +3 -3
|
@@ -615,10 +615,13 @@ export async function writeInternalSelector(value, cwd, content, context) {
|
|
|
615
615
|
export async function searchInternalSelector(value, cwd, pattern, ignoreCase = false, literal = false, context, contextBefore = 1, contextAfter = 3) {
|
|
616
616
|
return searchTextSelectorLines(value, await readInternalSelector(value, cwd, context), pattern, ignoreCase, literal, contextBefore, contextAfter).join("\n");
|
|
617
617
|
}
|
|
618
|
-
function shellQuote(value) {
|
|
619
|
-
|
|
618
|
+
function shellQuote(value, dialect) {
|
|
619
|
+
// PowerShell also treats U+2018–U+201B as single-quote delimiters.
|
|
620
|
+
return dialect === "powershell"
|
|
621
|
+
? `'${value.replace(/['\u2018-\u201b]/g, "$&$&")}'`
|
|
622
|
+
: `'${value.replace(/'/g, `'\\''`)}'`;
|
|
620
623
|
}
|
|
621
|
-
export async function expandShellInternalUrls(text, cwd, context, quote = false) {
|
|
624
|
+
export async function expandShellInternalUrls(text, cwd, context, quote = false, dialect = "posix") {
|
|
622
625
|
const pattern = /(?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\/\/[^\s'"`$)]+/gi;
|
|
623
626
|
const replacements = new Map();
|
|
624
627
|
for (const match of new Set(text.match(pattern) ?? [])) {
|
|
@@ -631,7 +634,7 @@ export async function expandShellInternalUrls(text, cwd, context, quote = false)
|
|
|
631
634
|
if (quote && !/^[a-zA-Z0-9_ ./:%+=,@~;|&\t-]*$/.test(text)) {
|
|
632
635
|
throw new Error("Internal URL shell expansion requires plain unquoted words; use a filesystem path for quotes, substitutions, escapes or heredocs.");
|
|
633
636
|
}
|
|
634
|
-
replacements.set(match, quote ? shellQuote(resolved) : resolved);
|
|
637
|
+
replacements.set(match, quote ? shellQuote(resolved, dialect) : resolved);
|
|
635
638
|
}
|
|
636
639
|
// Replace original occurrences only; never reinterpret a router's result.
|
|
637
640
|
return text.replace(pattern, (match) => replacements.get(match) ?? match);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-selectors.js","sourceRoot":"","sources":["../../../src/core/tools/resource-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { deflateRawSync, gunzipSync, gzipSync, inflateRawSync } from \"node:zlib\";\nimport { loadNativeSearchBinding } from \"./search-native.ts\";\n\nexport interface ArchiveSelector {\n\tarchivePath: string;\n\tmemberPath: string;\n}\nexport interface SqliteSelector {\n\tdatabasePath: string;\n\ttable?: string;\n\trowId?: string;\n\tquery?: string;\n\tlimit?: number;\n\toffset?: number;\n\twhere?: string;\n\torder?: string;\n\tschema?: boolean;\n\tsampleRows?: number;\n}\nexport interface InternalResourceRouter {\n\tread?: (url: string) => string | Buffer | undefined | Promise<string | Buffer | undefined>;\n\twrite?: (url: string, content: string) => void | Promise<void>;\n\tresolve?: (url: string) => string | undefined | Promise<string | undefined>;\n}\nexport interface InternalResourceContext {\n\tinternalRouter?: InternalResourceRouter;\n\tinternalResourceRouter?: InternalResourceRouter;\n\tresolveInternalUrl?: (url: string) => string | undefined | Promise<string | undefined>;\n}\ntype SqliteValue = string | number | boolean | null;\ninterface SqliteQuery {\n\tall(...params: SqliteValue[]): Record<string, SqliteValue>[];\n\tget?(...params: SqliteValue[]): Record<string, SqliteValue> | undefined;\n\titerate?(): Iterable<Record<string, SqliteValue>>;\n\trun(...params: SqliteValue[]): { changes?: number; lastInsertRowid?: number | bigint };\n}\ninterface SqliteDatabase {\n\tquery(sql: string): SqliteQuery;\n\tclose(): void;\n}\ntype SqliteDatabaseConstructor = new (path: string, options?: { readonly?: boolean }) => SqliteDatabase;\n/**\n * SQLite via `node:sqlite`.\n *\n * It is unflagged from Node v22.13.0, it is the module upstream pi uses, and\n * Bun ships it from 1.4.0 (oven-sh/bun#32498), before the current 1.4.2 floor,\n * so both runtimes provide it. The `bun:sqlite` fallback that covered older\n * Bun binaries was removed with the earlier 1.4.0 floor.\n *\n * `better-sqlite3` was evaluated and rejected: it segfaults Bun 1.3.14 on\n * construction, which is worse than a catchable missing-module error.\n *\n * The adapter keeps the `bun:sqlite`-shaped API these selectors were written\n * against and normalizes the deltas: `node:sqlite` spells the option\n * `readOnly` and rejects it when passed explicitly as `undefined`, and it\n * refuses to bind booleans, which are stored as integer 1/0.\n */\ninterface NodeSqliteStatement {\n\tall(...params: unknown[]): Record<string, SqliteValue>[];\n\tget(...params: unknown[]): Record<string, SqliteValue> | undefined;\n\titerate(...params: unknown[]): Iterable<Record<string, SqliteValue>>;\n\trun(...params: unknown[]): { changes?: number | bigint; lastInsertRowid?: number | bigint };\n}\ninterface NodeSqliteDatabase {\n\tprepare(sql: string): NodeSqliteStatement;\n\tclose(): void;\n}\ntype NodeSqliteConstructor = new (path: string, options?: { readOnly?: boolean }) => NodeSqliteDatabase;\n\n/** Callers may pass booleans; `node:sqlite` refuses to bind them, so store integer 1/0. */\nexport function toSqliteBindValues(params: readonly SqliteValue[]): unknown[] {\n\treturn params.map((param) => (typeof param === \"boolean\" ? (param ? 1 : 0) : param));\n}\n\nfunction nodeSqliteAdapter(DatabaseSync: NodeSqliteConstructor): SqliteDatabaseConstructor {\n\treturn class NodeSqliteAdapter implements SqliteDatabase {\n\t\tprivate readonly db: NodeSqliteDatabase;\n\t\tconstructor(path: string, options?: { readonly?: boolean }) {\n\t\t\t// Passing `undefined` explicitly fails node:sqlite's arity validation.\n\t\t\tthis.db = options?.readonly === true ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);\n\t\t}\n\t\tquery(sql: string): SqliteQuery {\n\t\t\tconst statement = this.db.prepare(sql);\n\t\t\treturn {\n\t\t\t\tall: (...params: SqliteValue[]) => statement.all(...toSqliteBindValues(params)),\n\t\t\t\tget: (...params: SqliteValue[]) => statement.get(...toSqliteBindValues(params)),\n\t\t\t\titerate: () => statement.iterate(),\n\t\t\t\trun: (...params: SqliteValue[]) => {\n\t\t\t\t\tconst result = statement.run(...toSqliteBindValues(params));\n\t\t\t\t\treturn { changes: Number(result.changes ?? 0), lastInsertRowid: result.lastInsertRowid };\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tclose(): void {\n\t\t\tthis.db.close();\n\t\t}\n\t};\n}\n\nfunction sqliteDatabase(): SqliteDatabaseConstructor {\n\tconst requireModule = createRequire(import.meta.url);\n\ttry {\n\t\tconst { DatabaseSync } = requireModule(\"node:sqlite\") as { DatabaseSync: NodeSqliteConstructor };\n\t\treturn nodeSqliteAdapter(DatabaseSync);\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite selectors need node:sqlite (Node >= 22.13 or Bun >= 1.4.2); this runtime does not provide it.\",\n\t\t);\n\t}\n}\nfunction existingSqliteFile(path: string): boolean | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path).subarray(0, 16).toString(\"binary\") === \"SQLite format 3\\0\";\n}\nexport function sqliteSelectorForPath(value: string, cwd: string): SqliteSelector | undefined {\n\tconst selector = parseSqliteSelector(value);\n\tif (!selector) return undefined;\n\tconst absolute = resolveContainedLocalPath(cwd, selector.databasePath, \"SQLite selector\");\n\tif (existingSqliteFile(absolute) !== true) return undefined;\n\treturn { ...selector, databasePath: absolute };\n}\n\nconst MAX_TAR_ARCHIVE_BYTES = 256 * 1024 * 1024;\nconst MAX_ARCHIVE_MEMBER_BYTES = 64 * 1024 * 1024;\nconst MAX_ARCHIVE_DIRECTORY_ENTRIES = 500;\n\nconst ARCHIVE_EXTENSIONS = [\"zip\", \"jar\", \"tar\", \"tgz\", \"tar.gz\", \"gz\"] as const;\nconst SQLITE_EXTENSIONS = [\"sqlite\", \"sqlite3\", \"db\", \"db3\"] as const;\n\n/** Whether `value[0..end)` ends with `.<extension>` preceded by at least one character. */\nfunction endsWithExtension(lower: string, end: number, extensions: readonly string[]): boolean {\n\treturn extensions.some((extension) => end > extension.length + 1 && lower.endsWith(`.${extension}`, end));\n}\n\nexport function parseArchiveSelector(value: string): ArchiveSelector | undefined {\n\t// Scan colons right to left so the longest archive path wins, exactly as the\n\t// previous greedy `(.+\\.ext):(.*)` regex did. That regex's ambiguous `.+`\n\t// prefix was flagged as polynomial ReDoS (js/polynomial-redos); this scan is\n\t// linear in the input.\n\tconst lower = value.toLowerCase();\n\tfor (let index = value.lastIndexOf(\":\"); index > 0; index = value.lastIndexOf(\":\", index - 1)) {\n\t\tif (endsWithExtension(lower, index, ARCHIVE_EXTENSIONS)) {\n\t\t\treturn { archivePath: value.slice(0, index), memberPath: value.slice(index + 1) };\n\t\t}\n\t}\n\treturn undefined;\n}\nexport function resolveArchiveSelector(selector: ArchiveSelector, cwd: string): ArchiveSelector {\n\treturn { ...selector, archivePath: resolveContainedLocalPath(cwd, selector.archivePath, \"Archive selector\") };\n}\nconst SQLITE_SELECTOR_SUFFIX = /^(?:\\?q=(.+)|:([^:?]+)(?:\\?(.+))?(?::([^:?]+))?)?$/i;\nexport function parseSqliteSelector(value: string): SqliteSelector | undefined {\n\t// Try each candidate database path from longest to shortest, mirroring the\n\t// previous greedy `(.+\\.ext)` regex prefix without its ambiguity, which was\n\t// flagged as polynomial ReDoS (js/polynomial-redos). The suffix grammar is\n\t// unchanged and unambiguous.\n\tconst lower = value.toLowerCase();\n\tfor (let end = value.length; end > 0; end--) {\n\t\tif (!endsWithExtension(lower, end, SQLITE_EXTENSIONS)) continue;\n\t\tconst match = value.slice(end).match(SQLITE_SELECTOR_SUFFIX);\n\t\tif (!match) continue;\n\t\tconst params = new URLSearchParams(match[3] ?? \"\");\n\t\tconst limit = Number.parseInt(params.get(\"limit\") ?? \"\", 10);\n\t\tconst offset = Number.parseInt(params.get(\"offset\") ?? \"\", 10);\n\t\tconst sampleRows = Number.parseInt(params.get(\"sampleRows\") ?? params.get(\"sample_rows\") ?? \"\", 10);\n\t\treturn {\n\t\t\tdatabasePath: value.slice(0, end),\n\t\t\tquery: match[1] ? decodeURIComponent(match[1]) : undefined,\n\t\t\ttable: match[2],\n\t\t\trowId: match[4] ?? params.get(\"id\") ?? undefined,\n\t\t\tlimit: Number.isFinite(limit) ? Math.max(0, Math.min(500, limit)) : undefined,\n\t\t\toffset: Number.isFinite(offset) ? Math.max(0, offset) : undefined,\n\t\t\twhere: params.get(\"where\") ?? undefined,\n\t\t\torder: params.get(\"order\") ?? undefined,\n\t\t\tschema: params.get(\"schema\") === \"true\" || params.get(\"schema\") === \"1\",\n\t\t\tsampleRows: Number.isFinite(sampleRows) ? Math.max(0, Math.min(100, sampleRows)) : undefined,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction isZipArchive(path: string): boolean {\n\treturn /\\.(?:zip|jar)$/i.test(path);\n}\nfunction isGzipTar(path: string): boolean {\n\treturn /\\.(?:tgz|tar\\.gz|gz)$/i.test(path);\n}\nfunction crc32(data: Buffer): number {\n\tlet crc = ~0;\n\tfor (const byte of data) {\n\t\tcrc ^= byte;\n\t\tfor (let i = 0; i < 8; i++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\n\t}\n\treturn ~crc >>> 0;\n}\nfunction assertZipRange(buf: Buffer, offset: number, length: number, label: string): void {\n\tif (\n\t\t!Number.isSafeInteger(offset) ||\n\t\t!Number.isSafeInteger(length) ||\n\t\toffset < 0 ||\n\t\tlength < 0 ||\n\t\toffset > buf.length - length\n\t)\n\t\tthrow new Error(`Invalid zip entry bounds: ${label}`);\n}\nfunction zipEntryPayload(\n\tbuf: Buffer,\n\tlabel: string,\n\tname: string,\n\tlocalOffset: number,\n\tcompressedSize: number,\n): Buffer {\n\tif (compressedSize > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member compressed data too large: ${name}`);\n\tassertZipRange(buf, localOffset, 30, label);\n\tif (buf.readUInt32LE(localOffset) !== 0x04034b50) throw new Error(`Invalid zip local header: ${label}`);\n\tconst localNameLen = buf.readUInt16LE(localOffset + 26),\n\t\tlocalExtraLen = buf.readUInt16LE(localOffset + 28),\n\t\tstart = localOffset + 30 + localNameLen + localExtraLen;\n\tassertZipRange(buf, start, compressedSize, label);\n\treturn buf.subarray(start, start + compressedSize);\n}\nexport function readZipEntriesFromBuffer(buf: Buffer, label: string): Map<string, Buffer> {\n\tconst entries = new Map<string, Buffer>();\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${label}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10);\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, label);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${label}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, label);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${name}`);\n\t\tconst data = zipEntryPayload(buf, label, name, localOffset, compressedSize);\n\t\tentries.set(\n\t\t\tname,\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})(),\n\t\t);\n\t}\n\treturn entries;\n}\nexport function readZipEntries(path: string): Map<string, Buffer> {\n\treturn readZipEntriesFromBuffer(readFileSync(path), path);\n}\nfunction writeZipEntries(path: string, entries: Map<string, Buffer>): void {\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tfor (const [name, data] of entries) {\n\t\tconst nameBuf = Buffer.from(name),\n\t\t\tcompressed = deflateRawSync(data),\n\t\t\tcrc = crc32(data);\n\t\tconst local = Buffer.alloc(30);\n\t\tlocal.writeUInt32LE(0x04034b50, 0);\n\t\tlocal.writeUInt16LE(20, 4);\n\t\tlocal.writeUInt16LE(8, 8);\n\t\tlocal.writeUInt32LE(crc, 14);\n\t\tlocal.writeUInt32LE(compressed.length, 18);\n\t\tlocal.writeUInt32LE(data.length, 22);\n\t\tlocal.writeUInt16LE(nameBuf.length, 26);\n\t\tlocals.push(local, nameBuf, compressed);\n\t\tconst central = Buffer.alloc(46);\n\t\tcentral.writeUInt32LE(0x02014b50, 0);\n\t\tcentral.writeUInt16LE(20, 4);\n\t\tcentral.writeUInt16LE(20, 6);\n\t\tcentral.writeUInt16LE(8, 10);\n\t\tcentral.writeUInt32LE(crc, 16);\n\t\tcentral.writeUInt32LE(compressed.length, 20);\n\t\tcentral.writeUInt32LE(data.length, 24);\n\t\tcentral.writeUInt16LE(nameBuf.length, 28);\n\t\tcentral.writeUInt32LE(offset, 42);\n\t\tcentrals.push(central, nameBuf);\n\t\toffset += local.length + nameBuf.length + compressed.length;\n\t}\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0);\n\tconst eocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(entries.size, 8);\n\teocd.writeUInt16LE(entries.size, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\nfunction parseTar(path: string): Map<string, Buffer> {\n\tconst raw = readFileSync(path);\n\tif (raw.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst buf = isGzipTar(path) ? gunzipSync(raw, { maxOutputLength: MAX_TAR_ARCHIVE_BYTES }) : raw;\n\tif (buf.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst entries = new Map<string, Buffer>();\n\tfor (let offset = 0; offset + 512 <= buf.length; ) {\n\t\tconst header = buf.subarray(offset, offset + 512);\n\t\tif (header.every((byte) => byte === 0)) break;\n\t\tconst name = header.subarray(0, 100).toString().replace(/\\0.*$/, \"\");\n\t\tconst prefix = header.subarray(345, 500).toString().replace(/\\0.*$/, \"\");\n\t\tconst fullName = prefix ? `${prefix}/${name}` : name;\n\t\tconst size = Number.parseInt(header.subarray(124, 136).toString().replace(/\\0.*$/, \"\").trim() || \"0\", 8);\n\t\tconst type = String.fromCharCode(header[156] ?? 48);\n\t\tconst dataStart = offset + 512;\n\t\tif (type !== \"5\" && fullName) {\n\t\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${fullName}`);\n\t\t\tentries.set(fullName, Buffer.from(buf.subarray(dataStart, dataStart + size)));\n\t\t}\n\t\toffset = dataStart + Math.ceil(size / 512) * 512;\n\t}\n\treturn entries;\n}\nfunction tarHeader(name: string, size: number): Buffer {\n\tconst header = Buffer.alloc(512);\n\tconst nameBytes = Buffer.from(name);\n\tnameBytes.copy(header, 0, 0, Math.min(100, nameBytes.length));\n\theader.write(\"0000644\\0\", 100);\n\theader.write(\"0000000\\0\", 108);\n\theader.write(\"0000000\\0\", 116);\n\theader.write(`${size.toString(8).padStart(11, \"0\")}\\0`, 124);\n\theader.write(\"00000000000\\0\", 136);\n\theader.fill(0x20, 148, 156);\n\theader[156] = 48;\n\theader.write(\"ustar\\0\", 257);\n\theader.write(\"00\", 263);\n\tlet sum = 0;\n\tfor (const byte of header) sum += byte;\n\theader.write(`${sum.toString(8).padStart(6, \"0\")}\\0 `, 148);\n\treturn header;\n}\nfunction writeTar(path: string, entries: Map<string, Buffer>): void {\n\tconst parts: Buffer[] = [];\n\tfor (const [name, data] of entries) {\n\t\tparts.push(tarHeader(name, data.length), data);\n\t\tconst pad = (512 - (data.length % 512)) % 512;\n\t\tif (pad) parts.push(Buffer.alloc(pad));\n\t}\n\tparts.push(Buffer.alloc(1024));\n\tconst out = Buffer.concat(parts);\n\twriteFileSync(path, isGzipTar(path) ? gzipSync(out) : out);\n}\nfunction listArchiveDirectory(names: Iterable<string>, memberPath: string): string {\n\tconst prefix = memberPath ? `${memberPath.replace(/\\/+$/g, \"\")}/` : \"\";\n\tconst children = new Set<string>();\n\tfor (const name of names) {\n\t\tif (!name.startsWith(prefix) || name === prefix) continue;\n\t\tconst rest = name.slice(prefix.length);\n\t\tconst [first, ...more] = rest.split(\"/\");\n\t\tif (first) children.add(more.length > 0 ? `${first}/` : first);\n\t}\n\treturn [...children].sort().slice(0, MAX_ARCHIVE_DIRECTORY_ENTRIES).join(\"\\n\");\n}\n\nfunction readZipSelector(path: string, memberPath: string): string {\n\tconst buf = readFileSync(path);\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10),\n\t\tnames: string[] = [];\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, path);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${path}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tnames.push(name);\n\t\tif (memberPath && name !== memberPath) continue;\n\t\tif (!memberPath) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${memberPath}`);\n\t\tconst data = zipEntryPayload(buf, path, name, localOffset, compressedSize);\n\t\treturn (\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})()\n\t\t).toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(names, memberPath);\n\tif (listing) return listing;\n\tif (!memberPath) return \"\";\n\tthrow new Error(`Archive member not found: ${memberPath}`);\n}\n\nexport function readArchiveSelector(selector: ArchiveSelector): string {\n\tif (isZipArchive(selector.archivePath)) return readZipSelector(selector.archivePath, selector.memberPath);\n\tconst entries = parseTar(selector.archivePath);\n\tif (!selector.memberPath) return listArchiveDirectory(entries.keys(), \"\");\n\tconst data = entries.get(selector.memberPath);\n\tif (data) {\n\t\tif (data.length > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${selector.memberPath}`);\n\t\treturn data.toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(entries.keys(), selector.memberPath);\n\tif (listing) return listing;\n\tthrow new Error(`Archive member not found: ${selector.memberPath}`);\n}\nfunction validateArchiveMemberPath(memberPath: string): void {\n\tif (!memberPath || memberPath.startsWith(\"/\") || memberPath.endsWith(\"/\") || memberPath.split(\"/\").includes(\"..\"))\n\t\tthrow new Error(`Invalid archive member path: ${memberPath}`);\n}\nfunction writeZipEntrySelective(path: string, memberPath: string, data: Buffer): void {\n\tconst source = existsSync(path) ? readFileSync(path) : Buffer.alloc(0);\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tif (source.length > 0) {\n\t\tlet eocd = -1;\n\t\tfor (let i = source.length - 22; i >= 0; i--)\n\t\t\tif (source.readUInt32LE(i) === 0x06054b50) {\n\t\t\t\teocd = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\t\tlet ptr = source.readUInt32LE(eocd + 16);\n\t\tconst total = source.readUInt16LE(eocd + 10);\n\t\tfor (let n = 0; n < total; n++) {\n\t\t\tassertZipRange(source, ptr, 46, path);\n\t\t\tconst start = ptr,\n\t\t\t\tflags = source.readUInt16LE(ptr + 8),\n\t\t\t\tnameLen = source.readUInt16LE(ptr + 28),\n\t\t\t\textraLen = source.readUInt16LE(ptr + 30),\n\t\t\t\tcommentLen = source.readUInt16LE(ptr + 32),\n\t\t\t\tlocalOffset = source.readUInt32LE(ptr + 42),\n\t\t\t\tcompressedSize = source.readUInt32LE(ptr + 20);\n\t\t\tassertZipRange(source, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\t\tconst name = source.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\t\tif (name === memberPath) continue;\n\t\t\tif ((flags & 0x0008) !== 0) throw new Error(`Unsupported zip data descriptor during selective write: ${name}`);\n\t\t\tassertZipRange(source, localOffset, 30, path);\n\t\t\tconst localNameLen = source.readUInt16LE(localOffset + 26),\n\t\t\t\tlocalExtraLen = source.readUInt16LE(localOffset + 28),\n\t\t\t\tlocalEnd = localOffset + 30 + localNameLen + localExtraLen + compressedSize;\n\t\t\tassertZipRange(source, localOffset, localEnd - localOffset, path);\n\t\t\tconst local = source.subarray(localOffset, localEnd),\n\t\t\t\tcentral = Buffer.from(source.subarray(start, ptr));\n\t\t\tcentral.writeUInt32LE(offset, 42);\n\t\t\tlocals.push(local);\n\t\t\tcentrals.push(central);\n\t\t\toffset += local.length;\n\t\t}\n\t}\n\tconst tmp = `${path}.atomic-entry-${Date.now()}`;\n\twriteZipEntries(tmp, new Map([[memberPath, data]]));\n\tconst built = readFileSync(tmp);\n\trmSync(tmp, { force: true });\n\tconst eocdStart = built.length - 22,\n\t\tlocalLen = built.readUInt32LE(eocdStart + 16),\n\t\tcentralSizeOne = built.readUInt32LE(eocdStart + 12);\n\tconst central = Buffer.from(built.subarray(localLen, localLen + centralSizeOne));\n\tcentral.writeUInt32LE(offset, 42);\n\tlocals.push(built.subarray(0, localLen));\n\tcentrals.push(central);\n\toffset += localLen;\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0),\n\t\teocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(centrals.length, 8);\n\teocd.writeUInt16LE(centrals.length, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\n\nexport function writeArchiveSelector(selector: ArchiveSelector, content: string): void {\n\tvalidateArchiveMemberPath(selector.memberPath);\n\tmkdirSync(dirname(selector.archivePath), { recursive: true });\n\tif (isZipArchive(selector.archivePath)) {\n\t\twriteZipEntrySelective(selector.archivePath, selector.memberPath, Buffer.from(content));\n\t\treturn;\n\t}\n\tconst entries = existsSync(selector.archivePath) ? parseTar(selector.archivePath) : new Map<string, Buffer>();\n\tentries.set(selector.memberPath, Buffer.from(content));\n\twriteTar(selector.archivePath, entries);\n}\nconst SEARCH_LINE_LIMIT = 512;\nfunction truncateSearchLine(line: string): string {\n\treturn line.length > SEARCH_LINE_LIMIT ? `${line.slice(0, SEARCH_LINE_LIMIT)}… [truncated]` : line;\n}\nfunction stripExtendedRegexWhitespace(pattern: string): string {\n\tlet out = \"\",\n\t\tescaped = false,\n\t\tinClass = false,\n\t\tinComment = false;\n\tfor (const ch of pattern) {\n\t\tif (inComment) {\n\t\t\tif (ch === \"\\n\" || ch === \"\\r\") inComment = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tout += ch;\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\") inClass = false;\n\t\tif (!inClass && ch === \"#\") {\n\t\t\tinComment = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!inClass && /\\s/.test(ch)) continue;\n\t\tout += ch;\n\t}\n\treturn out;\n}\n\nfunction normalizeSearchPattern(pattern: string, ignoreCase: boolean): { pattern: string; flags: string } {\n\tconst match = pattern.match(/^\\(\\?([imsUx-]+)\\)([\\s\\S]*)$/);\n\tconst flags = new Set<string>();\n\tif (ignoreCase) flags.add(\"i\");\n\tif (match) {\n\t\tconst inline = match[1] ?? \"\";\n\t\tfor (const flag of inline) {\n\t\t\tif (flag === \"i\" || flag === \"m\" || flag === \"s\") flags.add(flag);\n\t\t}\n\t\treturn {\n\t\t\tpattern: inline.includes(\"x\") ? stripExtendedRegexWhitespace(match[2] ?? \"\") : (match[2] ?? \"\"),\n\t\t\tflags: [...flags].join(\"\"),\n\t\t};\n\t}\n\treturn { pattern, flags: [...flags].join(\"\") };\n}\n\nfunction searchTextSelectorLines(\n\tlabel: string,\n\ttext: string,\n\tpattern: string,\n\tignoreCase: boolean,\n\tliteral: boolean,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string[] {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tif (!literal && !normalized.pattern.includes(\"\\n\") && !pattern.includes(\"\\\\n\"))\n\t\ttry {\n\t\t\tconst native = loadNativeSearchBinding()?.search?.(text, {\n\t\t\t\tpattern: normalized.pattern,\n\t\t\t\tignoreCase: normalized.flags.includes(\"i\"),\n\t\t\t\tmultiline: normalized.flags.includes(\"m\") || normalized.flags.includes(\"s\"),\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t});\n\t\t\tif (native && !native.error)\n\t\t\t\treturn native.matches.flatMap((match) => [\n\t\t\t\t\t...(match.contextBefore ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t\t`${label}:${match.lineNumber}: ${truncateSearchLine(match.line)}`,\n\t\t\t\t\t...(match.contextAfter ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t} catch {}\n\tconst matcher = literal ? undefined : new RegExp(normalized.pattern, normalized.flags);\n\tconst needle = normalized.flags.includes(\"i\") ? normalized.pattern.toLowerCase() : normalized.pattern;\n\tconst lines = text.split(\"\\n\");\n\tconst matchLines = new Set<number>();\n\tlines.forEach((line, index) => {\n\t\tconst haystack = normalized.flags.includes(\"i\") ? line.toLowerCase() : line;\n\t\tif (matcher ? matcher.test(line) : haystack.includes(needle)) matchLines.add(index + 1);\n\t});\n\tif (matchLines.size === 0 && matcher) {\n\t\tconst match = new RegExp(normalized.pattern, normalized.flags).exec(text);\n\t\tif (match?.[0]) {\n\t\t\tconst start = text.slice(0, match.index).split(\"\\n\").length;\n\t\t\tfor (let line = start; line < start + match[0].split(\"\\n\").length; line++) matchLines.add(line);\n\t\t}\n\t}\n\tconst outputLines = new Set<number>();\n\tfor (const line of matchLines)\n\t\tfor (let n = Math.max(1, line - contextBefore); n <= Math.min(lines.length, line + contextAfter); n++)\n\t\t\toutputLines.add(n);\n\treturn [...outputLines]\n\t\t.sort((a, b) => a - b)\n\t\t.map(\n\t\t\t(line) =>\n\t\t\t\t`${label}${matchLines.has(line) ? \":\" : \"-\"}${line}${matchLines.has(line) ? \":\" : \"-\"} ${truncateSearchLine(lines[line - 1] ?? \"\")}`,\n\t\t);\n}\n\nexport function searchArchiveSelector(\n\tselector: ArchiveSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tif (isZipArchive(selector.archivePath) && selector.memberPath)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.archivePath}:${selector.memberPath}`,\n\t\t\treadArchiveSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tliteral,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst entries = isZipArchive(selector.archivePath)\n\t\t? readZipEntries(selector.archivePath)\n\t\t: parseTar(selector.archivePath);\n\tconst out: string[] = [];\n\tfor (const [name, data] of entries) {\n\t\tif (selector.memberPath && name !== selector.memberPath) continue;\n\t\tout.push(\n\t\t\t...searchTextSelectorLines(\n\t\t\t\t`${selector.archivePath}:${name}`,\n\t\t\t\tdata.toString(\"utf8\"),\n\t\t\t\tpattern,\n\t\t\t\tignoreCase,\n\t\t\t\tliteral,\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t),\n\t\t);\n\t}\n\treturn out.join(\"\\n\");\n}\n\nfunction routerFromContext(context?: InternalResourceContext): InternalResourceRouter | undefined {\n\treturn context?.internalRouter ?? context?.internalResourceRouter;\n}\nasync function resolveViaRouter(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string | undefined> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.resolve?.(value);\n\tif (routed) return routed;\n\tconst resolved = await context?.resolveInternalUrl?.(value);\n\tif (resolved) return resolved;\n\treturn resolveInternalSelector(value, cwd);\n}\nfunction isContained(root: string, candidate: string): boolean {\n\tconst rel = relative(root, candidate);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\nfunction nearestExistingAncestor(pathValue: string): string {\n\tlet current = pathValue;\n\twhile (!existsSync(current)) {\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) return current;\n\t\tcurrent = parent;\n\t}\n\treturn current;\n}\nfunction realpathExisting(pathValue: string): string {\n\treturn realpathSync.native(nearestExistingAncestor(pathValue));\n}\nfunction resolveContainedPath(root: string, pathValue: string, label: string): string {\n\tconst lexicalRoot = resolve(root),\n\t\tresolved = resolve(root, pathValue);\n\tif (!isContained(lexicalRoot, resolved)) throw new Error(`${label} escapes the workspace: ${pathValue}`);\n\tif (!isContained(realpathExisting(lexicalRoot), realpathExisting(resolved)))\n\t\tthrow new Error(`${label} escapes the workspace: ${pathValue}`);\n\treturn resolved;\n}\nfunction resolveContainedLocalPath(cwd: string, pathValue: string, label = \"local:// resource\"): string {\n\treturn resolveContainedPath(cwd, pathValue, label);\n}\n\nfunction fallbackInternalPath(value: string, cwd: string): string | undefined {\n\tconst skill = value.match(/^skill:\\/\\/([^/]+)(?:\\/(.*))?$/);\n\tif (skill) {\n\t\tconst name = skill[1] ?? \"\",\n\t\t\trest = skill[2] || \"SKILL.md\";\n\t\treturn [\".agents/skills\", \"packages/subagents/skills\", \"packages/workflows/skills\"]\n\t\t\t.map((base) =>\n\t\t\t\tresolveContainedPath(\n\t\t\t\t\tresolveContainedLocalPath(cwd, base, \"skill:// resource\"),\n\t\t\t\t\t`${name}/${rest}`,\n\t\t\t\t\t\"skill:// resource\",\n\t\t\t\t),\n\t\t\t)\n\t\t\t.find((candidate) => existsSync(candidate));\n\t}\n\tconst local = value.match(/^local:\\/\\/(.+)$/);\n\tif (local) return resolveContainedLocalPath(cwd, local[1] ?? \"\");\n\treturn undefined;\n}\nexport function resolveInternalSelector(value: string, cwd: string): string | undefined {\n\treturn fallbackInternalPath(value, cwd);\n}\nexport async function readInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.read?.(value);\n\tif (typeof routed === \"string\") return routed;\n\tif (Buffer.isBuffer(routed)) return routed.toString(\"utf8\");\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved || !existsSync(resolved))\n\t\tthrow new Error(`Internal resource not found or no session router supports it: ${value}`);\n\treturn readFileSync(resolved, \"utf8\");\n}\nexport async function writeInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontent: string,\n\tcontext?: InternalResourceContext,\n): Promise<void> {\n\tconst router = routerFromContext(context);\n\tif (router?.write) {\n\t\tawait router.write(value, content);\n\t\treturn;\n\t}\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved) throw new Error(`Unsupported writable internal resource without a session router: ${value}`);\n\tmkdirSync(dirname(resolved), { recursive: true });\n\twriteFileSync(resolved, content);\n}\nexport async function searchInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontext?: InternalResourceContext,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): Promise<string> {\n\treturn searchTextSelectorLines(\n\t\tvalue,\n\t\tawait readInternalSelector(value, cwd, context),\n\t\tpattern,\n\t\tignoreCase,\n\t\tliteral,\n\t\tcontextBefore,\n\t\tcontextAfter,\n\t).join(\"\\n\");\n}\nfunction shellQuote(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nexport async function expandShellInternalUrls(\n\ttext: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n\tquote = false,\n): Promise<string> {\n\tconst pattern = /(?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\\/\\/[^\\s'\"`$)]+/gi;\n\tconst replacements = new Map<string, string>();\n\tfor (const match of new Set(text.match(pattern) ?? [])) {\n\t\tconst resolved = await resolveViaRouter(match, cwd, context);\n\t\tif (!resolved) continue;\n\t\t// This is deliberately not a Bash parser. Only expand in plain shell\n\t\t// words: quotes, escapes, substitutions and heredocs change how inserted\n\t\t// quotes are interpreted. Leave arbitrary shell syntax without URLs alone.\n\t\tif (quote && !/^[a-zA-Z0-9_ ./:%+=,@~;|&\\t-]*$/.test(text)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Internal URL shell expansion requires plain unquoted words; use a filesystem path for quotes, substitutions, escapes or heredocs.\",\n\t\t\t);\n\t\t}\n\t\treplacements.set(match, quote ? shellQuote(resolved) : resolved);\n\t}\n\t// Replace original occurrences only; never reinterpret a router's result.\n\treturn text.replace(pattern, (match) => replacements.get(match) ?? match);\n}\n\nconst ROW_COUNT_PROBE_CAP = 50_000;\nconst MAX_RAW_QUERY_ROWS = 1000;\n\nfunction quoteSqliteIdent(value: string): string {\n\treturn `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\nfunction formatSqliteOrder(order: string | undefined): string {\n\tif (!order) return \"\";\n\treturn order\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [column, direction] = part.split(\":\");\n\t\t\tif (!column || !/^[A-Za-z_][\\w$]*$/.test(column)) throw new Error(`Invalid SQLite order column: ${part}`);\n\t\t\tconst dir = direction?.toLowerCase() === \"desc\" ? \"desc\" : \"asc\";\n\t\t\treturn `${quoteSqliteIdent(column)} ${dir}`;\n\t\t})\n\t\t.join(\", \");\n}\nconst FORBIDDEN_WHERE_KEYWORDS = new Set([\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"select\",\n\t\"load_extension\",\n]);\nfunction validateSqliteWhere(where: string | undefined): string | undefined {\n\tconst trimmed = where?.trim();\n\tif (!trimmed) return undefined;\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (token && (FORBIDDEN_WHERE_KEYWORDS.has(lower) || lower.startsWith(\"pragma_\") || lower.startsWith(\"sqlite_\")))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\treturn trimmed;\n}\nfunction rowsToJsonLines(rows: Record<string, SqliteValue>[]): string {\n\treturn rows.map((row) => JSON.stringify(row)).join(\"\\n\");\n}\n\nconst FORBIDDEN_RAW_QUERY_KEYWORDS = new Set([\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"drop\",\n\t\"alter\",\n\t\"create\",\n\t\"replace\",\n\t\"vacuum\",\n\t\"reindex\",\n\t\"load_extension\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n]);\nfunction validateRawSqliteQuery(query: string): string {\n\tconst trimmed = query.trim();\n\tif (!trimmed) throw new Error(\"SQLite raw query must not be empty\");\n\tif (!/^select\\b/i.test(trimmed)) throw new Error(\"Invalid raw SQLite query\");\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (\n\t\t\tlower &&\n\t\t\t(FORBIDDEN_RAW_QUERY_KEYWORDS.has(lower) || lower.startsWith(\"sqlite_\") || lower.startsWith(\"pragma_\"))\n\t\t)\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\tif (quote) throw new Error(\"Invalid raw SQLite query\");\n\treturn trimmed;\n}\n\nfunction readRawSqliteRows(query: SqliteQuery): Record<string, SqliteValue>[] {\n\tconst rows: Record<string, SqliteValue>[] = [];\n\tconst iterable = query.iterate?.();\n\tif (!iterable) return query.all().slice(0, MAX_RAW_QUERY_ROWS);\n\tfor (const row of iterable) {\n\t\tif (rows.length >= MAX_RAW_QUERY_ROWS) break;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nfunction sqliteTableColumns(db: SqliteDatabase, table: string): string[] {\n\treturn (db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string }>)\n\t\t.map((row) => String(row.name ?? \"\"))\n\t\t.filter(Boolean);\n}\n\nfunction boundedSqliteRowCount(db: SqliteDatabase, table: string): string | number {\n\tconst row = db\n\t\t.query(\n\t\t\t`select count(*) as count from (select 1 from ${quoteSqliteIdent(table)} limit ${ROW_COUNT_PROBE_CAP + 1})`,\n\t\t)\n\t\t.all()[0];\n\tconst count = Number(row?.count ?? 0);\n\treturn count > ROW_COUNT_PROBE_CAP ? `${ROW_COUNT_PROBE_CAP}+` : count;\n}\nfunction normalizeSqliteWriteValue(value: unknown, column: string): SqliteValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\")\n\t\treturn value;\n\tthrow new Error(`SQLite column '${column}' only accepts JSON scalar values or null`);\n}\n\nfunction sqlitePrimaryKey(db: SqliteDatabase, table: string): string {\n\treturn (\n\t\t(db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string; pk?: number }>).find(\n\t\t\t(row) => row.pk === 1,\n\t\t)?.name ?? \"rowid\"\n\t);\n}\nexport function readSqliteSelector(selector: SqliteSelector): string {\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tif (selector.query) return rowsToJsonLines(readRawSqliteRows(db.query(validateRawSqliteQuery(selector.query))));\n\t\tif (!selector.table) {\n\t\t\tconst tables = db\n\t\t\t\t.query(\"select name from sqlite_master where type='table' and name not like 'sqlite_%' order by name\")\n\t\t\t\t.all()\n\t\t\t\t.slice(0, 500);\n\t\t\treturn tables\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst name = String(row.name ?? \"\");\n\t\t\t\t\treturn JSON.stringify({ table: name, rows: boundedSqliteRowCount(db, name) });\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t\tconst schemaRows = db.query(`pragma table_info(${quoteSqliteIdent(selector.table)})`).all();\n\t\tif (selector.schema) return rowsToJsonLines(schemaRows);\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst isQuery = selector.limit !== undefined || selector.offset !== undefined || selector.where || selector.order;\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? (isQuery ? 20 : 5);\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst sql = [\n\t\t\t`select * from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\tif (selector.rowId || isQuery || selector.sampleRows !== undefined) return rowsToJsonLines(rows);\n\t\treturn [`# ${selector.table}`, \"Schema:\", rowsToJsonLines(schemaRows), \"Rows:\", rowsToJsonLines(rows)].join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\nfunction stripJson5Comments(input: string): string {\n\tlet out = \"\",\n\t\tquote = \"\",\n\t\tescaped = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!,\n\t\t\tnext = input[i + 1];\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tout += ch;\n\t\t\tif (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === quote) quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tout += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"/\") {\n\t\t\twhile (i < input.length && input[i] !== \"\\n\") i++;\n\t\t\tout += \"\\n\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\ti += 2;\n\t\t\twhile (i < input.length && !(input[i] === \"*\" && input[i + 1] === \"/\")) i++;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tout += ch;\n\t}\n\treturn out;\n}\nfunction parseLooseJsonObject(content: string): Record<string, SqliteValue> {\n\tconst trimmed = stripJson5Comments(content.trim());\n\tif (!trimmed)\n\t\tthrow new Error(\n\t\t\t\"SQLite write content must be a JSON object; empty content only deletes a row when a row id is present.\",\n\t\t);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch {\n\t\tconst normalized = trimmed\n\t\t\t.replace(/([{,]\\s*)([A-Za-z_$][\\w$]*)\\s*:/g, '$1\"$2\":')\n\t\t\t.replace(/:\\s*\\+(-?\\d+(?:\\.\\d+)?)/g, \":$1\")\n\t\t\t.replace(\n\t\t\t\t/(:\\s*)0x[0-9a-fA-F]+/g,\n\t\t\t\t(match, prefix: string) => `${prefix}${Number.parseInt(match.slice(prefix.length + 2), 16)}`,\n\t\t\t)\n\t\t\t.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, (_match, body: string) => JSON.stringify(body.replace(/\\\\'/g, \"'\")))\n\t\t\t.replace(/,\\s*([}\\]])/g, \"$1\");\n\t\tparsed = JSON.parse(normalized);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n\t\tthrow new Error(\"SQLite write content must be a JSON object.\");\n\treturn Object.fromEntries(\n\t\tObject.entries(parsed as Record<string, unknown>).map(([column, value]) => [\n\t\t\tcolumn,\n\t\t\tnormalizeSqliteWriteValue(value, column),\n\t\t]),\n\t);\n}\nexport function writeSqliteSelector(selector: SqliteSelector, content: string): string {\n\tif (!selector.table) throw new Error(\"SQLite write target must include a table name\");\n\tif (!existsSync(selector.databasePath)) throw new Error(`SQLite database does not exist: ${selector.databasePath}`);\n\tif (content.trim() === \"\") {\n\t\tif (!selector.rowId) throw new Error(\"SQLite empty content deletes a row only when a row id is present.\");\n\t\tconst Database = sqliteDatabase();\n\t\tconst db = new Database(selector.databasePath);\n\t\ttry {\n\t\t\tconst table = selector.table;\n\t\t\tconst result = db\n\t\t\t\t.query(`delete from ${quoteSqliteIdent(table)} where ${quoteSqliteIdent(sqlitePrimaryKey(db, table))} = ?`)\n\t\t\t\t.run(selector.rowId);\n\t\t\treturn (result.changes ?? 0) > 0\n\t\t\t\t? `Deleted row '${selector.rowId}' in ${table}`\n\t\t\t\t: `No row deleted for '${selector.rowId}' in ${table}`;\n\t\t} finally {\n\t\t\tdb.close();\n\t\t}\n\t}\n\tconst data = parseLooseJsonObject(content);\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath);\n\ttry {\n\t\tconst table = selector.table;\n\t\tconst quotedTable = quoteSqliteIdent(table);\n\t\tconst key = sqlitePrimaryKey(db, table);\n\t\tconst quotedKey = quoteSqliteIdent(key);\n\t\tconst validColumns = new Set(sqliteTableColumns(db, table));\n\t\tif (!selector.rowId && key !== \"id\" && Object.hasOwn(data, \"id\") && !Object.hasOwn(data, key)) {\n\t\t\tdata[key] = data.id;\n\t\t\tdelete data.id;\n\t\t}\n\t\tconst columns = Object.keys(data);\n\t\tfor (const column of columns)\n\t\t\tif (!validColumns.has(column)) throw new Error(`SQLite table '${table}' has no column named '${column}'`);\n\t\tif (columns.length === 0) {\n\t\t\tif (!selector.rowId) {\n\t\t\t\tdb.query(`insert into ${quotedTable} default values`).run();\n\t\t\t\treturn `Inserted row into ${table}`;\n\t\t\t}\n\t\t\tthrow new Error(\"SQLite update content must include at least one column.\");\n\t\t}\n\t\tif (!selector.rowId) {\n\t\t\tconst quoted = columns.map(quoteSqliteIdent).join(\", \");\n\t\t\tdb.query(`insert into ${quotedTable} (${quoted}) values (${columns.map(() => \"?\").join(\", \")})`).run(\n\t\t\t\t...columns.map((column) => data[column]),\n\t\t\t);\n\t\t\treturn `Inserted row into ${table}`;\n\t\t}\n\t\tconst assignments = columns.map((column) => `${quoteSqliteIdent(column)} = ?`).join(\", \");\n\t\tconst result = db\n\t\t\t.query(`update ${quotedTable} set ${assignments} where ${quotedKey} = ?`)\n\t\t\t.run(...columns.map((column) => data[column]), selector.rowId);\n\t\treturn (result.changes ?? 0) > 0\n\t\t\t? `Updated row '${selector.rowId}' in ${table}`\n\t\t\t: `No row updated for '${selector.rowId}' in ${table}`;\n\t} finally {\n\t\tdb.close();\n\t}\n}\nexport function searchSqliteSelector(\n\tselector: SqliteSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tconst matcher = new RegExp(normalized.pattern, normalized.flags);\n\tif (!selector.table || selector.query)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.databasePath}:${selector.table ?? \"tables\"}`,\n\t\t\treadSqliteSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tfalse,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? 1000;\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst rowIdAlias = \"__atomic_rowid__\";\n\t\tconst selectList = key === \"rowid\" ? `rowid as ${quoteSqliteIdent(rowIdAlias)}, *` : \"*\";\n\t\tconst sql = [\n\t\t\t`select ${selectList} from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\treturn rows\n\t\t\t.map((rawRow, index) => {\n\t\t\t\tconst row = rawRow as Record<string, unknown>;\n\t\t\t\tconst rowKey = key === \"rowid\" ? row[rowIdAlias] : row[key];\n\t\t\t\tif (key === \"rowid\") delete row[rowIdAlias];\n\t\t\t\treturn { row, key: String(rowKey ?? offset + index + 1) };\n\t\t\t})\n\t\t\t.filter(({ row }) => matcher.test(JSON.stringify(row)))\n\t\t\t.map(\n\t\t\t\t({ row, key }) =>\n\t\t\t\t\t`${selector.databasePath}:${selector.table}:${key}: ${truncateSearchLine(JSON.stringify(row))}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resource-selectors.js","sourceRoot":"","sources":["../../../src/core/tools/resource-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { deflateRawSync, gunzipSync, gzipSync, inflateRawSync } from \"node:zlib\";\nimport { loadNativeSearchBinding } from \"./search-native.ts\";\n\nexport interface ArchiveSelector {\n\tarchivePath: string;\n\tmemberPath: string;\n}\nexport interface SqliteSelector {\n\tdatabasePath: string;\n\ttable?: string;\n\trowId?: string;\n\tquery?: string;\n\tlimit?: number;\n\toffset?: number;\n\twhere?: string;\n\torder?: string;\n\tschema?: boolean;\n\tsampleRows?: number;\n}\nexport interface InternalResourceRouter {\n\tread?: (url: string) => string | Buffer | undefined | Promise<string | Buffer | undefined>;\n\twrite?: (url: string, content: string) => void | Promise<void>;\n\tresolve?: (url: string) => string | undefined | Promise<string | undefined>;\n}\nexport interface InternalResourceContext {\n\tinternalRouter?: InternalResourceRouter;\n\tinternalResourceRouter?: InternalResourceRouter;\n\tresolveInternalUrl?: (url: string) => string | undefined | Promise<string | undefined>;\n}\ntype SqliteValue = string | number | boolean | null;\ninterface SqliteQuery {\n\tall(...params: SqliteValue[]): Record<string, SqliteValue>[];\n\tget?(...params: SqliteValue[]): Record<string, SqliteValue> | undefined;\n\titerate?(): Iterable<Record<string, SqliteValue>>;\n\trun(...params: SqliteValue[]): { changes?: number; lastInsertRowid?: number | bigint };\n}\ninterface SqliteDatabase {\n\tquery(sql: string): SqliteQuery;\n\tclose(): void;\n}\ntype SqliteDatabaseConstructor = new (path: string, options?: { readonly?: boolean }) => SqliteDatabase;\n/**\n * SQLite via `node:sqlite`.\n *\n * It is unflagged from Node v22.13.0, it is the module upstream pi uses, and\n * Bun ships it from 1.4.0 (oven-sh/bun#32498), before the current 1.4.2 floor,\n * so both runtimes provide it. The `bun:sqlite` fallback that covered older\n * Bun binaries was removed with the earlier 1.4.0 floor.\n *\n * `better-sqlite3` was evaluated and rejected: it segfaults Bun 1.3.14 on\n * construction, which is worse than a catchable missing-module error.\n *\n * The adapter keeps the `bun:sqlite`-shaped API these selectors were written\n * against and normalizes the deltas: `node:sqlite` spells the option\n * `readOnly` and rejects it when passed explicitly as `undefined`, and it\n * refuses to bind booleans, which are stored as integer 1/0.\n */\ninterface NodeSqliteStatement {\n\tall(...params: unknown[]): Record<string, SqliteValue>[];\n\tget(...params: unknown[]): Record<string, SqliteValue> | undefined;\n\titerate(...params: unknown[]): Iterable<Record<string, SqliteValue>>;\n\trun(...params: unknown[]): { changes?: number | bigint; lastInsertRowid?: number | bigint };\n}\ninterface NodeSqliteDatabase {\n\tprepare(sql: string): NodeSqliteStatement;\n\tclose(): void;\n}\ntype NodeSqliteConstructor = new (path: string, options?: { readOnly?: boolean }) => NodeSqliteDatabase;\n\n/** Callers may pass booleans; `node:sqlite` refuses to bind them, so store integer 1/0. */\nexport function toSqliteBindValues(params: readonly SqliteValue[]): unknown[] {\n\treturn params.map((param) => (typeof param === \"boolean\" ? (param ? 1 : 0) : param));\n}\n\nfunction nodeSqliteAdapter(DatabaseSync: NodeSqliteConstructor): SqliteDatabaseConstructor {\n\treturn class NodeSqliteAdapter implements SqliteDatabase {\n\t\tprivate readonly db: NodeSqliteDatabase;\n\t\tconstructor(path: string, options?: { readonly?: boolean }) {\n\t\t\t// Passing `undefined` explicitly fails node:sqlite's arity validation.\n\t\t\tthis.db = options?.readonly === true ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);\n\t\t}\n\t\tquery(sql: string): SqliteQuery {\n\t\t\tconst statement = this.db.prepare(sql);\n\t\t\treturn {\n\t\t\t\tall: (...params: SqliteValue[]) => statement.all(...toSqliteBindValues(params)),\n\t\t\t\tget: (...params: SqliteValue[]) => statement.get(...toSqliteBindValues(params)),\n\t\t\t\titerate: () => statement.iterate(),\n\t\t\t\trun: (...params: SqliteValue[]) => {\n\t\t\t\t\tconst result = statement.run(...toSqliteBindValues(params));\n\t\t\t\t\treturn { changes: Number(result.changes ?? 0), lastInsertRowid: result.lastInsertRowid };\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tclose(): void {\n\t\t\tthis.db.close();\n\t\t}\n\t};\n}\n\nfunction sqliteDatabase(): SqliteDatabaseConstructor {\n\tconst requireModule = createRequire(import.meta.url);\n\ttry {\n\t\tconst { DatabaseSync } = requireModule(\"node:sqlite\") as { DatabaseSync: NodeSqliteConstructor };\n\t\treturn nodeSqliteAdapter(DatabaseSync);\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"SQLite selectors need node:sqlite (Node >= 22.13 or Bun >= 1.4.2); this runtime does not provide it.\",\n\t\t);\n\t}\n}\nfunction existingSqliteFile(path: string): boolean | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path).subarray(0, 16).toString(\"binary\") === \"SQLite format 3\\0\";\n}\nexport function sqliteSelectorForPath(value: string, cwd: string): SqliteSelector | undefined {\n\tconst selector = parseSqliteSelector(value);\n\tif (!selector) return undefined;\n\tconst absolute = resolveContainedLocalPath(cwd, selector.databasePath, \"SQLite selector\");\n\tif (existingSqliteFile(absolute) !== true) return undefined;\n\treturn { ...selector, databasePath: absolute };\n}\n\nconst MAX_TAR_ARCHIVE_BYTES = 256 * 1024 * 1024;\nconst MAX_ARCHIVE_MEMBER_BYTES = 64 * 1024 * 1024;\nconst MAX_ARCHIVE_DIRECTORY_ENTRIES = 500;\n\nconst ARCHIVE_EXTENSIONS = [\"zip\", \"jar\", \"tar\", \"tgz\", \"tar.gz\", \"gz\"] as const;\nconst SQLITE_EXTENSIONS = [\"sqlite\", \"sqlite3\", \"db\", \"db3\"] as const;\n\n/** Whether `value[0..end)` ends with `.<extension>` preceded by at least one character. */\nfunction endsWithExtension(lower: string, end: number, extensions: readonly string[]): boolean {\n\treturn extensions.some((extension) => end > extension.length + 1 && lower.endsWith(`.${extension}`, end));\n}\n\nexport function parseArchiveSelector(value: string): ArchiveSelector | undefined {\n\t// Scan colons right to left so the longest archive path wins, exactly as the\n\t// previous greedy `(.+\\.ext):(.*)` regex did. That regex's ambiguous `.+`\n\t// prefix was flagged as polynomial ReDoS (js/polynomial-redos); this scan is\n\t// linear in the input.\n\tconst lower = value.toLowerCase();\n\tfor (let index = value.lastIndexOf(\":\"); index > 0; index = value.lastIndexOf(\":\", index - 1)) {\n\t\tif (endsWithExtension(lower, index, ARCHIVE_EXTENSIONS)) {\n\t\t\treturn { archivePath: value.slice(0, index), memberPath: value.slice(index + 1) };\n\t\t}\n\t}\n\treturn undefined;\n}\nexport function resolveArchiveSelector(selector: ArchiveSelector, cwd: string): ArchiveSelector {\n\treturn { ...selector, archivePath: resolveContainedLocalPath(cwd, selector.archivePath, \"Archive selector\") };\n}\nconst SQLITE_SELECTOR_SUFFIX = /^(?:\\?q=(.+)|:([^:?]+)(?:\\?(.+))?(?::([^:?]+))?)?$/i;\nexport function parseSqliteSelector(value: string): SqliteSelector | undefined {\n\t// Try each candidate database path from longest to shortest, mirroring the\n\t// previous greedy `(.+\\.ext)` regex prefix without its ambiguity, which was\n\t// flagged as polynomial ReDoS (js/polynomial-redos). The suffix grammar is\n\t// unchanged and unambiguous.\n\tconst lower = value.toLowerCase();\n\tfor (let end = value.length; end > 0; end--) {\n\t\tif (!endsWithExtension(lower, end, SQLITE_EXTENSIONS)) continue;\n\t\tconst match = value.slice(end).match(SQLITE_SELECTOR_SUFFIX);\n\t\tif (!match) continue;\n\t\tconst params = new URLSearchParams(match[3] ?? \"\");\n\t\tconst limit = Number.parseInt(params.get(\"limit\") ?? \"\", 10);\n\t\tconst offset = Number.parseInt(params.get(\"offset\") ?? \"\", 10);\n\t\tconst sampleRows = Number.parseInt(params.get(\"sampleRows\") ?? params.get(\"sample_rows\") ?? \"\", 10);\n\t\treturn {\n\t\t\tdatabasePath: value.slice(0, end),\n\t\t\tquery: match[1] ? decodeURIComponent(match[1]) : undefined,\n\t\t\ttable: match[2],\n\t\t\trowId: match[4] ?? params.get(\"id\") ?? undefined,\n\t\t\tlimit: Number.isFinite(limit) ? Math.max(0, Math.min(500, limit)) : undefined,\n\t\t\toffset: Number.isFinite(offset) ? Math.max(0, offset) : undefined,\n\t\t\twhere: params.get(\"where\") ?? undefined,\n\t\t\torder: params.get(\"order\") ?? undefined,\n\t\t\tschema: params.get(\"schema\") === \"true\" || params.get(\"schema\") === \"1\",\n\t\t\tsampleRows: Number.isFinite(sampleRows) ? Math.max(0, Math.min(100, sampleRows)) : undefined,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction isZipArchive(path: string): boolean {\n\treturn /\\.(?:zip|jar)$/i.test(path);\n}\nfunction isGzipTar(path: string): boolean {\n\treturn /\\.(?:tgz|tar\\.gz|gz)$/i.test(path);\n}\nfunction crc32(data: Buffer): number {\n\tlet crc = ~0;\n\tfor (const byte of data) {\n\t\tcrc ^= byte;\n\t\tfor (let i = 0; i < 8; i++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\n\t}\n\treturn ~crc >>> 0;\n}\nfunction assertZipRange(buf: Buffer, offset: number, length: number, label: string): void {\n\tif (\n\t\t!Number.isSafeInteger(offset) ||\n\t\t!Number.isSafeInteger(length) ||\n\t\toffset < 0 ||\n\t\tlength < 0 ||\n\t\toffset > buf.length - length\n\t)\n\t\tthrow new Error(`Invalid zip entry bounds: ${label}`);\n}\nfunction zipEntryPayload(\n\tbuf: Buffer,\n\tlabel: string,\n\tname: string,\n\tlocalOffset: number,\n\tcompressedSize: number,\n): Buffer {\n\tif (compressedSize > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member compressed data too large: ${name}`);\n\tassertZipRange(buf, localOffset, 30, label);\n\tif (buf.readUInt32LE(localOffset) !== 0x04034b50) throw new Error(`Invalid zip local header: ${label}`);\n\tconst localNameLen = buf.readUInt16LE(localOffset + 26),\n\t\tlocalExtraLen = buf.readUInt16LE(localOffset + 28),\n\t\tstart = localOffset + 30 + localNameLen + localExtraLen;\n\tassertZipRange(buf, start, compressedSize, label);\n\treturn buf.subarray(start, start + compressedSize);\n}\nexport function readZipEntriesFromBuffer(buf: Buffer, label: string): Map<string, Buffer> {\n\tconst entries = new Map<string, Buffer>();\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${label}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10);\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, label);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${label}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, label);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${name}`);\n\t\tconst data = zipEntryPayload(buf, label, name, localOffset, compressedSize);\n\t\tentries.set(\n\t\t\tname,\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})(),\n\t\t);\n\t}\n\treturn entries;\n}\nexport function readZipEntries(path: string): Map<string, Buffer> {\n\treturn readZipEntriesFromBuffer(readFileSync(path), path);\n}\nfunction writeZipEntries(path: string, entries: Map<string, Buffer>): void {\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tfor (const [name, data] of entries) {\n\t\tconst nameBuf = Buffer.from(name),\n\t\t\tcompressed = deflateRawSync(data),\n\t\t\tcrc = crc32(data);\n\t\tconst local = Buffer.alloc(30);\n\t\tlocal.writeUInt32LE(0x04034b50, 0);\n\t\tlocal.writeUInt16LE(20, 4);\n\t\tlocal.writeUInt16LE(8, 8);\n\t\tlocal.writeUInt32LE(crc, 14);\n\t\tlocal.writeUInt32LE(compressed.length, 18);\n\t\tlocal.writeUInt32LE(data.length, 22);\n\t\tlocal.writeUInt16LE(nameBuf.length, 26);\n\t\tlocals.push(local, nameBuf, compressed);\n\t\tconst central = Buffer.alloc(46);\n\t\tcentral.writeUInt32LE(0x02014b50, 0);\n\t\tcentral.writeUInt16LE(20, 4);\n\t\tcentral.writeUInt16LE(20, 6);\n\t\tcentral.writeUInt16LE(8, 10);\n\t\tcentral.writeUInt32LE(crc, 16);\n\t\tcentral.writeUInt32LE(compressed.length, 20);\n\t\tcentral.writeUInt32LE(data.length, 24);\n\t\tcentral.writeUInt16LE(nameBuf.length, 28);\n\t\tcentral.writeUInt32LE(offset, 42);\n\t\tcentrals.push(central, nameBuf);\n\t\toffset += local.length + nameBuf.length + compressed.length;\n\t}\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0);\n\tconst eocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(entries.size, 8);\n\teocd.writeUInt16LE(entries.size, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\nfunction parseTar(path: string): Map<string, Buffer> {\n\tconst raw = readFileSync(path);\n\tif (raw.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst buf = isGzipTar(path) ? gunzipSync(raw, { maxOutputLength: MAX_TAR_ARCHIVE_BYTES }) : raw;\n\tif (buf.length > MAX_TAR_ARCHIVE_BYTES) throw new Error(`Archive too large: ${path}`);\n\tconst entries = new Map<string, Buffer>();\n\tfor (let offset = 0; offset + 512 <= buf.length; ) {\n\t\tconst header = buf.subarray(offset, offset + 512);\n\t\tif (header.every((byte) => byte === 0)) break;\n\t\tconst name = header.subarray(0, 100).toString().replace(/\\0.*$/, \"\");\n\t\tconst prefix = header.subarray(345, 500).toString().replace(/\\0.*$/, \"\");\n\t\tconst fullName = prefix ? `${prefix}/${name}` : name;\n\t\tconst size = Number.parseInt(header.subarray(124, 136).toString().replace(/\\0.*$/, \"\").trim() || \"0\", 8);\n\t\tconst type = String.fromCharCode(header[156] ?? 48);\n\t\tconst dataStart = offset + 512;\n\t\tif (type !== \"5\" && fullName) {\n\t\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${fullName}`);\n\t\t\tentries.set(fullName, Buffer.from(buf.subarray(dataStart, dataStart + size)));\n\t\t}\n\t\toffset = dataStart + Math.ceil(size / 512) * 512;\n\t}\n\treturn entries;\n}\nfunction tarHeader(name: string, size: number): Buffer {\n\tconst header = Buffer.alloc(512);\n\tconst nameBytes = Buffer.from(name);\n\tnameBytes.copy(header, 0, 0, Math.min(100, nameBytes.length));\n\theader.write(\"0000644\\0\", 100);\n\theader.write(\"0000000\\0\", 108);\n\theader.write(\"0000000\\0\", 116);\n\theader.write(`${size.toString(8).padStart(11, \"0\")}\\0`, 124);\n\theader.write(\"00000000000\\0\", 136);\n\theader.fill(0x20, 148, 156);\n\theader[156] = 48;\n\theader.write(\"ustar\\0\", 257);\n\theader.write(\"00\", 263);\n\tlet sum = 0;\n\tfor (const byte of header) sum += byte;\n\theader.write(`${sum.toString(8).padStart(6, \"0\")}\\0 `, 148);\n\treturn header;\n}\nfunction writeTar(path: string, entries: Map<string, Buffer>): void {\n\tconst parts: Buffer[] = [];\n\tfor (const [name, data] of entries) {\n\t\tparts.push(tarHeader(name, data.length), data);\n\t\tconst pad = (512 - (data.length % 512)) % 512;\n\t\tif (pad) parts.push(Buffer.alloc(pad));\n\t}\n\tparts.push(Buffer.alloc(1024));\n\tconst out = Buffer.concat(parts);\n\twriteFileSync(path, isGzipTar(path) ? gzipSync(out) : out);\n}\nfunction listArchiveDirectory(names: Iterable<string>, memberPath: string): string {\n\tconst prefix = memberPath ? `${memberPath.replace(/\\/+$/g, \"\")}/` : \"\";\n\tconst children = new Set<string>();\n\tfor (const name of names) {\n\t\tif (!name.startsWith(prefix) || name === prefix) continue;\n\t\tconst rest = name.slice(prefix.length);\n\t\tconst [first, ...more] = rest.split(\"/\");\n\t\tif (first) children.add(more.length > 0 ? `${first}/` : first);\n\t}\n\treturn [...children].sort().slice(0, MAX_ARCHIVE_DIRECTORY_ENTRIES).join(\"\\n\");\n}\n\nfunction readZipSelector(path: string, memberPath: string): string {\n\tconst buf = readFileSync(path);\n\tlet eocd = -1;\n\tfor (let i = buf.length - 22; i >= 0; i--)\n\t\tif (buf.readUInt32LE(i) === 0x06054b50) {\n\t\t\teocd = i;\n\t\t\tbreak;\n\t\t}\n\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\tlet ptr = buf.readUInt32LE(eocd + 16);\n\tconst total = buf.readUInt16LE(eocd + 10),\n\t\tnames: string[] = [];\n\tfor (let n = 0; n < total; n++) {\n\t\tassertZipRange(buf, ptr, 46, path);\n\t\tif (buf.readUInt32LE(ptr) !== 0x02014b50) throw new Error(`Invalid zip central directory: ${path}`);\n\t\tconst method = buf.readUInt16LE(ptr + 10),\n\t\t\tcompressedSize = buf.readUInt32LE(ptr + 20),\n\t\t\tsize = buf.readUInt32LE(ptr + 24),\n\t\t\tnameLen = buf.readUInt16LE(ptr + 28),\n\t\t\textraLen = buf.readUInt16LE(ptr + 30),\n\t\t\tcommentLen = buf.readUInt16LE(ptr + 32),\n\t\t\tlocalOffset = buf.readUInt32LE(ptr + 42);\n\t\tassertZipRange(buf, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\tconst name = buf.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\tif (name.endsWith(\"/\")) continue;\n\t\tnames.push(name);\n\t\tif (memberPath && name !== memberPath) continue;\n\t\tif (!memberPath) continue;\n\t\tif (size > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${memberPath}`);\n\t\tconst data = zipEntryPayload(buf, path, name, localOffset, compressedSize);\n\t\treturn (\n\t\t\tmethod === 0\n\t\t\t\t? Buffer.from(data)\n\t\t\t\t: method === 8\n\t\t\t\t\t? inflateRawSync(data, { maxOutputLength: MAX_ARCHIVE_MEMBER_BYTES })\n\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\tthrow new Error(`Unsupported zip compression method ${method} for ${name}`);\n\t\t\t\t\t\t})()\n\t\t).toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(names, memberPath);\n\tif (listing) return listing;\n\tif (!memberPath) return \"\";\n\tthrow new Error(`Archive member not found: ${memberPath}`);\n}\n\nexport function readArchiveSelector(selector: ArchiveSelector): string {\n\tif (isZipArchive(selector.archivePath)) return readZipSelector(selector.archivePath, selector.memberPath);\n\tconst entries = parseTar(selector.archivePath);\n\tif (!selector.memberPath) return listArchiveDirectory(entries.keys(), \"\");\n\tconst data = entries.get(selector.memberPath);\n\tif (data) {\n\t\tif (data.length > MAX_ARCHIVE_MEMBER_BYTES) throw new Error(`Archive member too large: ${selector.memberPath}`);\n\t\treturn data.toString(\"utf8\");\n\t}\n\tconst listing = listArchiveDirectory(entries.keys(), selector.memberPath);\n\tif (listing) return listing;\n\tthrow new Error(`Archive member not found: ${selector.memberPath}`);\n}\nfunction validateArchiveMemberPath(memberPath: string): void {\n\tif (!memberPath || memberPath.startsWith(\"/\") || memberPath.endsWith(\"/\") || memberPath.split(\"/\").includes(\"..\"))\n\t\tthrow new Error(`Invalid archive member path: ${memberPath}`);\n}\nfunction writeZipEntrySelective(path: string, memberPath: string, data: Buffer): void {\n\tconst source = existsSync(path) ? readFileSync(path) : Buffer.alloc(0);\n\tconst locals: Buffer[] = [],\n\t\tcentrals: Buffer[] = [];\n\tlet offset = 0;\n\tif (source.length > 0) {\n\t\tlet eocd = -1;\n\t\tfor (let i = source.length - 22; i >= 0; i--)\n\t\t\tif (source.readUInt32LE(i) === 0x06054b50) {\n\t\t\t\teocd = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (eocd < 0) throw new Error(`Invalid zip archive: ${path}`);\n\t\tlet ptr = source.readUInt32LE(eocd + 16);\n\t\tconst total = source.readUInt16LE(eocd + 10);\n\t\tfor (let n = 0; n < total; n++) {\n\t\t\tassertZipRange(source, ptr, 46, path);\n\t\t\tconst start = ptr,\n\t\t\t\tflags = source.readUInt16LE(ptr + 8),\n\t\t\t\tnameLen = source.readUInt16LE(ptr + 28),\n\t\t\t\textraLen = source.readUInt16LE(ptr + 30),\n\t\t\t\tcommentLen = source.readUInt16LE(ptr + 32),\n\t\t\t\tlocalOffset = source.readUInt32LE(ptr + 42),\n\t\t\t\tcompressedSize = source.readUInt32LE(ptr + 20);\n\t\t\tassertZipRange(source, ptr + 46, nameLen + extraLen + commentLen, path);\n\t\t\tconst name = source.subarray(ptr + 46, ptr + 46 + nameLen).toString();\n\t\t\tptr += 46 + nameLen + extraLen + commentLen;\n\t\t\tif (name === memberPath) continue;\n\t\t\tif ((flags & 0x0008) !== 0) throw new Error(`Unsupported zip data descriptor during selective write: ${name}`);\n\t\t\tassertZipRange(source, localOffset, 30, path);\n\t\t\tconst localNameLen = source.readUInt16LE(localOffset + 26),\n\t\t\t\tlocalExtraLen = source.readUInt16LE(localOffset + 28),\n\t\t\t\tlocalEnd = localOffset + 30 + localNameLen + localExtraLen + compressedSize;\n\t\t\tassertZipRange(source, localOffset, localEnd - localOffset, path);\n\t\t\tconst local = source.subarray(localOffset, localEnd),\n\t\t\t\tcentral = Buffer.from(source.subarray(start, ptr));\n\t\t\tcentral.writeUInt32LE(offset, 42);\n\t\t\tlocals.push(local);\n\t\t\tcentrals.push(central);\n\t\t\toffset += local.length;\n\t\t}\n\t}\n\tconst tmp = `${path}.atomic-entry-${Date.now()}`;\n\twriteZipEntries(tmp, new Map([[memberPath, data]]));\n\tconst built = readFileSync(tmp);\n\trmSync(tmp, { force: true });\n\tconst eocdStart = built.length - 22,\n\t\tlocalLen = built.readUInt32LE(eocdStart + 16),\n\t\tcentralSizeOne = built.readUInt32LE(eocdStart + 12);\n\tconst central = Buffer.from(built.subarray(localLen, localLen + centralSizeOne));\n\tcentral.writeUInt32LE(offset, 42);\n\tlocals.push(built.subarray(0, localLen));\n\tcentrals.push(central);\n\toffset += localLen;\n\tconst centralSize = centrals.reduce((sum, part) => sum + part.length, 0),\n\t\teocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0);\n\teocd.writeUInt16LE(centrals.length, 8);\n\teocd.writeUInt16LE(centrals.length, 10);\n\teocd.writeUInt32LE(centralSize, 12);\n\teocd.writeUInt32LE(offset, 16);\n\twriteFileSync(path, Buffer.concat([...locals, ...centrals, eocd]));\n}\n\nexport function writeArchiveSelector(selector: ArchiveSelector, content: string): void {\n\tvalidateArchiveMemberPath(selector.memberPath);\n\tmkdirSync(dirname(selector.archivePath), { recursive: true });\n\tif (isZipArchive(selector.archivePath)) {\n\t\twriteZipEntrySelective(selector.archivePath, selector.memberPath, Buffer.from(content));\n\t\treturn;\n\t}\n\tconst entries = existsSync(selector.archivePath) ? parseTar(selector.archivePath) : new Map<string, Buffer>();\n\tentries.set(selector.memberPath, Buffer.from(content));\n\twriteTar(selector.archivePath, entries);\n}\nconst SEARCH_LINE_LIMIT = 512;\nfunction truncateSearchLine(line: string): string {\n\treturn line.length > SEARCH_LINE_LIMIT ? `${line.slice(0, SEARCH_LINE_LIMIT)}… [truncated]` : line;\n}\nfunction stripExtendedRegexWhitespace(pattern: string): string {\n\tlet out = \"\",\n\t\tescaped = false,\n\t\tinClass = false,\n\t\tinComment = false;\n\tfor (const ch of pattern) {\n\t\tif (inComment) {\n\t\t\tif (ch === \"\\n\" || ch === \"\\r\") inComment = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\") {\n\t\t\tout += ch;\n\t\t\tescaped = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\") inClass = false;\n\t\tif (!inClass && ch === \"#\") {\n\t\t\tinComment = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!inClass && /\\s/.test(ch)) continue;\n\t\tout += ch;\n\t}\n\treturn out;\n}\n\nfunction normalizeSearchPattern(pattern: string, ignoreCase: boolean): { pattern: string; flags: string } {\n\tconst match = pattern.match(/^\\(\\?([imsUx-]+)\\)([\\s\\S]*)$/);\n\tconst flags = new Set<string>();\n\tif (ignoreCase) flags.add(\"i\");\n\tif (match) {\n\t\tconst inline = match[1] ?? \"\";\n\t\tfor (const flag of inline) {\n\t\t\tif (flag === \"i\" || flag === \"m\" || flag === \"s\") flags.add(flag);\n\t\t}\n\t\treturn {\n\t\t\tpattern: inline.includes(\"x\") ? stripExtendedRegexWhitespace(match[2] ?? \"\") : (match[2] ?? \"\"),\n\t\t\tflags: [...flags].join(\"\"),\n\t\t};\n\t}\n\treturn { pattern, flags: [...flags].join(\"\") };\n}\n\nfunction searchTextSelectorLines(\n\tlabel: string,\n\ttext: string,\n\tpattern: string,\n\tignoreCase: boolean,\n\tliteral: boolean,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string[] {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tif (!literal && !normalized.pattern.includes(\"\\n\") && !pattern.includes(\"\\\\n\"))\n\t\ttry {\n\t\t\tconst native = loadNativeSearchBinding()?.search?.(text, {\n\t\t\t\tpattern: normalized.pattern,\n\t\t\t\tignoreCase: normalized.flags.includes(\"i\"),\n\t\t\t\tmultiline: normalized.flags.includes(\"m\") || normalized.flags.includes(\"s\"),\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t});\n\t\t\tif (native && !native.error)\n\t\t\t\treturn native.matches.flatMap((match) => [\n\t\t\t\t\t...(match.contextBefore ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t\t`${label}:${match.lineNumber}: ${truncateSearchLine(match.line)}`,\n\t\t\t\t\t...(match.contextAfter ?? []).map(\n\t\t\t\t\t\t(line) => `${label}-${line.lineNumber}- ${truncateSearchLine(line.line)}`,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t} catch {}\n\tconst matcher = literal ? undefined : new RegExp(normalized.pattern, normalized.flags);\n\tconst needle = normalized.flags.includes(\"i\") ? normalized.pattern.toLowerCase() : normalized.pattern;\n\tconst lines = text.split(\"\\n\");\n\tconst matchLines = new Set<number>();\n\tlines.forEach((line, index) => {\n\t\tconst haystack = normalized.flags.includes(\"i\") ? line.toLowerCase() : line;\n\t\tif (matcher ? matcher.test(line) : haystack.includes(needle)) matchLines.add(index + 1);\n\t});\n\tif (matchLines.size === 0 && matcher) {\n\t\tconst match = new RegExp(normalized.pattern, normalized.flags).exec(text);\n\t\tif (match?.[0]) {\n\t\t\tconst start = text.slice(0, match.index).split(\"\\n\").length;\n\t\t\tfor (let line = start; line < start + match[0].split(\"\\n\").length; line++) matchLines.add(line);\n\t\t}\n\t}\n\tconst outputLines = new Set<number>();\n\tfor (const line of matchLines)\n\t\tfor (let n = Math.max(1, line - contextBefore); n <= Math.min(lines.length, line + contextAfter); n++)\n\t\t\toutputLines.add(n);\n\treturn [...outputLines]\n\t\t.sort((a, b) => a - b)\n\t\t.map(\n\t\t\t(line) =>\n\t\t\t\t`${label}${matchLines.has(line) ? \":\" : \"-\"}${line}${matchLines.has(line) ? \":\" : \"-\"} ${truncateSearchLine(lines[line - 1] ?? \"\")}`,\n\t\t);\n}\n\nexport function searchArchiveSelector(\n\tselector: ArchiveSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tif (isZipArchive(selector.archivePath) && selector.memberPath)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.archivePath}:${selector.memberPath}`,\n\t\t\treadArchiveSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tliteral,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst entries = isZipArchive(selector.archivePath)\n\t\t? readZipEntries(selector.archivePath)\n\t\t: parseTar(selector.archivePath);\n\tconst out: string[] = [];\n\tfor (const [name, data] of entries) {\n\t\tif (selector.memberPath && name !== selector.memberPath) continue;\n\t\tout.push(\n\t\t\t...searchTextSelectorLines(\n\t\t\t\t`${selector.archivePath}:${name}`,\n\t\t\t\tdata.toString(\"utf8\"),\n\t\t\t\tpattern,\n\t\t\t\tignoreCase,\n\t\t\t\tliteral,\n\t\t\t\tcontextBefore,\n\t\t\t\tcontextAfter,\n\t\t\t),\n\t\t);\n\t}\n\treturn out.join(\"\\n\");\n}\n\nfunction routerFromContext(context?: InternalResourceContext): InternalResourceRouter | undefined {\n\treturn context?.internalRouter ?? context?.internalResourceRouter;\n}\nasync function resolveViaRouter(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string | undefined> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.resolve?.(value);\n\tif (routed) return routed;\n\tconst resolved = await context?.resolveInternalUrl?.(value);\n\tif (resolved) return resolved;\n\treturn resolveInternalSelector(value, cwd);\n}\nfunction isContained(root: string, candidate: string): boolean {\n\tconst rel = relative(root, candidate);\n\treturn rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\nfunction nearestExistingAncestor(pathValue: string): string {\n\tlet current = pathValue;\n\twhile (!existsSync(current)) {\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) return current;\n\t\tcurrent = parent;\n\t}\n\treturn current;\n}\nfunction realpathExisting(pathValue: string): string {\n\treturn realpathSync.native(nearestExistingAncestor(pathValue));\n}\nfunction resolveContainedPath(root: string, pathValue: string, label: string): string {\n\tconst lexicalRoot = resolve(root),\n\t\tresolved = resolve(root, pathValue);\n\tif (!isContained(lexicalRoot, resolved)) throw new Error(`${label} escapes the workspace: ${pathValue}`);\n\tif (!isContained(realpathExisting(lexicalRoot), realpathExisting(resolved)))\n\t\tthrow new Error(`${label} escapes the workspace: ${pathValue}`);\n\treturn resolved;\n}\nfunction resolveContainedLocalPath(cwd: string, pathValue: string, label = \"local:// resource\"): string {\n\treturn resolveContainedPath(cwd, pathValue, label);\n}\n\nfunction fallbackInternalPath(value: string, cwd: string): string | undefined {\n\tconst skill = value.match(/^skill:\\/\\/([^/]+)(?:\\/(.*))?$/);\n\tif (skill) {\n\t\tconst name = skill[1] ?? \"\",\n\t\t\trest = skill[2] || \"SKILL.md\";\n\t\treturn [\".agents/skills\", \"packages/subagents/skills\", \"packages/workflows/skills\"]\n\t\t\t.map((base) =>\n\t\t\t\tresolveContainedPath(\n\t\t\t\t\tresolveContainedLocalPath(cwd, base, \"skill:// resource\"),\n\t\t\t\t\t`${name}/${rest}`,\n\t\t\t\t\t\"skill:// resource\",\n\t\t\t\t),\n\t\t\t)\n\t\t\t.find((candidate) => existsSync(candidate));\n\t}\n\tconst local = value.match(/^local:\\/\\/(.+)$/);\n\tif (local) return resolveContainedLocalPath(cwd, local[1] ?? \"\");\n\treturn undefined;\n}\nexport function resolveInternalSelector(value: string, cwd: string): string | undefined {\n\treturn fallbackInternalPath(value, cwd);\n}\nexport async function readInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n): Promise<string> {\n\tconst router = routerFromContext(context);\n\tconst routed = await router?.read?.(value);\n\tif (typeof routed === \"string\") return routed;\n\tif (Buffer.isBuffer(routed)) return routed.toString(\"utf8\");\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved || !existsSync(resolved))\n\t\tthrow new Error(`Internal resource not found or no session router supports it: ${value}`);\n\treturn readFileSync(resolved, \"utf8\");\n}\nexport async function writeInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tcontent: string,\n\tcontext?: InternalResourceContext,\n): Promise<void> {\n\tconst router = routerFromContext(context);\n\tif (router?.write) {\n\t\tawait router.write(value, content);\n\t\treturn;\n\t}\n\tconst resolved = await resolveViaRouter(value, cwd, context);\n\tif (!resolved) throw new Error(`Unsupported writable internal resource without a session router: ${value}`);\n\tmkdirSync(dirname(resolved), { recursive: true });\n\twriteFileSync(resolved, content);\n}\nexport async function searchInternalSelector(\n\tvalue: string,\n\tcwd: string,\n\tpattern: string,\n\tignoreCase = false,\n\tliteral = false,\n\tcontext?: InternalResourceContext,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): Promise<string> {\n\treturn searchTextSelectorLines(\n\t\tvalue,\n\t\tawait readInternalSelector(value, cwd, context),\n\t\tpattern,\n\t\tignoreCase,\n\t\tliteral,\n\t\tcontextBefore,\n\t\tcontextAfter,\n\t).join(\"\\n\");\n}\nfunction shellQuote(value: string, dialect: \"posix\" | \"powershell\"): string {\n\t// PowerShell also treats U+2018–U+201B as single-quote delimiters.\n\treturn dialect === \"powershell\"\n\t\t? `'${value.replace(/['\\u2018-\\u201b]/g, \"$&$&\")}'`\n\t\t: `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nexport async function expandShellInternalUrls(\n\ttext: string,\n\tcwd: string,\n\tcontext?: InternalResourceContext,\n\tquote = false,\n\tdialect: \"posix\" | \"powershell\" = \"posix\",\n): Promise<string> {\n\tconst pattern = /(?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\\/\\/[^\\s'\"`$)]+/gi;\n\tconst replacements = new Map<string, string>();\n\tfor (const match of new Set(text.match(pattern) ?? [])) {\n\t\tconst resolved = await resolveViaRouter(match, cwd, context);\n\t\tif (!resolved) continue;\n\t\t// This is deliberately not a Bash parser. Only expand in plain shell\n\t\t// words: quotes, escapes, substitutions and heredocs change how inserted\n\t\t// quotes are interpreted. Leave arbitrary shell syntax without URLs alone.\n\t\tif (quote && !/^[a-zA-Z0-9_ ./:%+=,@~;|&\\t-]*$/.test(text)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Internal URL shell expansion requires plain unquoted words; use a filesystem path for quotes, substitutions, escapes or heredocs.\",\n\t\t\t);\n\t\t}\n\t\treplacements.set(match, quote ? shellQuote(resolved, dialect) : resolved);\n\t}\n\t// Replace original occurrences only; never reinterpret a router's result.\n\treturn text.replace(pattern, (match) => replacements.get(match) ?? match);\n}\n\nconst ROW_COUNT_PROBE_CAP = 50_000;\nconst MAX_RAW_QUERY_ROWS = 1000;\n\nfunction quoteSqliteIdent(value: string): string {\n\treturn `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\nfunction formatSqliteOrder(order: string | undefined): string {\n\tif (!order) return \"\";\n\treturn order\n\t\t.split(\",\")\n\t\t.map((part) => {\n\t\t\tconst [column, direction] = part.split(\":\");\n\t\t\tif (!column || !/^[A-Za-z_][\\w$]*$/.test(column)) throw new Error(`Invalid SQLite order column: ${part}`);\n\t\t\tconst dir = direction?.toLowerCase() === \"desc\" ? \"desc\" : \"asc\";\n\t\t\treturn `${quoteSqliteIdent(column)} ${dir}`;\n\t\t})\n\t\t.join(\", \");\n}\nconst FORBIDDEN_WHERE_KEYWORDS = new Set([\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"select\",\n\t\"load_extension\",\n]);\nfunction validateSqliteWhere(where: string | undefined): string | undefined {\n\tconst trimmed = where?.trim();\n\tif (!trimmed) return undefined;\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (token && (FORBIDDEN_WHERE_KEYWORDS.has(lower) || lower.startsWith(\"pragma_\") || lower.startsWith(\"sqlite_\")))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid SQLite where filter\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\treturn trimmed;\n}\nfunction rowsToJsonLines(rows: Record<string, SqliteValue>[]): string {\n\treturn rows.map((row) => JSON.stringify(row)).join(\"\\n\");\n}\n\nconst FORBIDDEN_RAW_QUERY_KEYWORDS = new Set([\n\t\"attach\",\n\t\"detach\",\n\t\"pragma\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"drop\",\n\t\"alter\",\n\t\"create\",\n\t\"replace\",\n\t\"vacuum\",\n\t\"reindex\",\n\t\"load_extension\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n]);\nfunction validateRawSqliteQuery(query: string): string {\n\tconst trimmed = query.trim();\n\tif (!trimmed) throw new Error(\"SQLite raw query must not be empty\");\n\tif (!/^select\\b/i.test(trimmed)) throw new Error(\"Invalid raw SQLite query\");\n\tlet quote = \"\",\n\t\ttoken = \"\";\n\tconst flush = () => {\n\t\tconst lower = token.toLowerCase();\n\t\tif (\n\t\t\tlower &&\n\t\t\t(FORBIDDEN_RAW_QUERY_KEYWORDS.has(lower) || lower.startsWith(\"sqlite_\") || lower.startsWith(\"pragma_\"))\n\t\t)\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\ttoken = \"\";\n\t};\n\tfor (let i = 0; i < trimmed.length; i++) {\n\t\tconst ch = trimmed[i],\n\t\t\tnext = trimmed[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\" && next === \"'\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"'\") quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === '\"') {\n\t\t\tif (ch === '\"' && next === '\"') {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') {\n\t\t\t\tquote = \"\";\n\t\t\t\tflush();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\t\ttoken += ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflush();\n\t\t\ttoken = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === '\"') {\n\t\t\tflush();\n\t\t\tquote = ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \";\" || (ch === \"-\" && next === \"-\") || (ch === \"/\" && next === \"*\") || (ch === \"*\" && next === \"/\"))\n\t\t\tthrow new Error(\"Invalid raw SQLite query\");\n\t\tif (ch && /[A-Za-z0-9_]/.test(ch)) {\n\t\t\ttoken += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t}\n\tflush();\n\tif (quote) throw new Error(\"Invalid raw SQLite query\");\n\treturn trimmed;\n}\n\nfunction readRawSqliteRows(query: SqliteQuery): Record<string, SqliteValue>[] {\n\tconst rows: Record<string, SqliteValue>[] = [];\n\tconst iterable = query.iterate?.();\n\tif (!iterable) return query.all().slice(0, MAX_RAW_QUERY_ROWS);\n\tfor (const row of iterable) {\n\t\tif (rows.length >= MAX_RAW_QUERY_ROWS) break;\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n\nfunction sqliteTableColumns(db: SqliteDatabase, table: string): string[] {\n\treturn (db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string }>)\n\t\t.map((row) => String(row.name ?? \"\"))\n\t\t.filter(Boolean);\n}\n\nfunction boundedSqliteRowCount(db: SqliteDatabase, table: string): string | number {\n\tconst row = db\n\t\t.query(\n\t\t\t`select count(*) as count from (select 1 from ${quoteSqliteIdent(table)} limit ${ROW_COUNT_PROBE_CAP + 1})`,\n\t\t)\n\t\t.all()[0];\n\tconst count = Number(row?.count ?? 0);\n\treturn count > ROW_COUNT_PROBE_CAP ? `${ROW_COUNT_PROBE_CAP}+` : count;\n}\nfunction normalizeSqliteWriteValue(value: unknown, column: string): SqliteValue {\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\")\n\t\treturn value;\n\tthrow new Error(`SQLite column '${column}' only accepts JSON scalar values or null`);\n}\n\nfunction sqlitePrimaryKey(db: SqliteDatabase, table: string): string {\n\treturn (\n\t\t(db.query(`pragma table_info(${quoteSqliteIdent(table)})`).all() as Array<{ name?: string; pk?: number }>).find(\n\t\t\t(row) => row.pk === 1,\n\t\t)?.name ?? \"rowid\"\n\t);\n}\nexport function readSqliteSelector(selector: SqliteSelector): string {\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tif (selector.query) return rowsToJsonLines(readRawSqliteRows(db.query(validateRawSqliteQuery(selector.query))));\n\t\tif (!selector.table) {\n\t\t\tconst tables = db\n\t\t\t\t.query(\"select name from sqlite_master where type='table' and name not like 'sqlite_%' order by name\")\n\t\t\t\t.all()\n\t\t\t\t.slice(0, 500);\n\t\t\treturn tables\n\t\t\t\t.map((row) => {\n\t\t\t\t\tconst name = String(row.name ?? \"\");\n\t\t\t\t\treturn JSON.stringify({ table: name, rows: boundedSqliteRowCount(db, name) });\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\t\tconst schemaRows = db.query(`pragma table_info(${quoteSqliteIdent(selector.table)})`).all();\n\t\tif (selector.schema) return rowsToJsonLines(schemaRows);\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst isQuery = selector.limit !== undefined || selector.offset !== undefined || selector.where || selector.order;\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? (isQuery ? 20 : 5);\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst sql = [\n\t\t\t`select * from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\tif (selector.rowId || isQuery || selector.sampleRows !== undefined) return rowsToJsonLines(rows);\n\t\treturn [`# ${selector.table}`, \"Schema:\", rowsToJsonLines(schemaRows), \"Rows:\", rowsToJsonLines(rows)].join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\nfunction stripJson5Comments(input: string): string {\n\tlet out = \"\",\n\t\tquote = \"\",\n\t\tescaped = false;\n\tfor (let i = 0; i < input.length; i++) {\n\t\tconst ch = input[i]!,\n\t\t\tnext = input[i + 1];\n\t\tif (escaped) {\n\t\t\tout += ch;\n\t\t\tescaped = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tout += ch;\n\t\t\tif (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === quote) quote = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\tquote = ch;\n\t\t\tout += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"/\") {\n\t\t\twhile (i < input.length && input[i] !== \"\\n\") i++;\n\t\t\tout += \"\\n\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\ti += 2;\n\t\t\twhile (i < input.length && !(input[i] === \"*\" && input[i + 1] === \"/\")) i++;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tout += ch;\n\t}\n\treturn out;\n}\nfunction parseLooseJsonObject(content: string): Record<string, SqliteValue> {\n\tconst trimmed = stripJson5Comments(content.trim());\n\tif (!trimmed)\n\t\tthrow new Error(\n\t\t\t\"SQLite write content must be a JSON object; empty content only deletes a row when a row id is present.\",\n\t\t);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(trimmed);\n\t} catch {\n\t\tconst normalized = trimmed\n\t\t\t.replace(/([{,]\\s*)([A-Za-z_$][\\w$]*)\\s*:/g, '$1\"$2\":')\n\t\t\t.replace(/:\\s*\\+(-?\\d+(?:\\.\\d+)?)/g, \":$1\")\n\t\t\t.replace(\n\t\t\t\t/(:\\s*)0x[0-9a-fA-F]+/g,\n\t\t\t\t(match, prefix: string) => `${prefix}${Number.parseInt(match.slice(prefix.length + 2), 16)}`,\n\t\t\t)\n\t\t\t.replace(/'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/g, (_match, body: string) => JSON.stringify(body.replace(/\\\\'/g, \"'\")))\n\t\t\t.replace(/,\\s*([}\\]])/g, \"$1\");\n\t\tparsed = JSON.parse(normalized);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n\t\tthrow new Error(\"SQLite write content must be a JSON object.\");\n\treturn Object.fromEntries(\n\t\tObject.entries(parsed as Record<string, unknown>).map(([column, value]) => [\n\t\t\tcolumn,\n\t\t\tnormalizeSqliteWriteValue(value, column),\n\t\t]),\n\t);\n}\nexport function writeSqliteSelector(selector: SqliteSelector, content: string): string {\n\tif (!selector.table) throw new Error(\"SQLite write target must include a table name\");\n\tif (!existsSync(selector.databasePath)) throw new Error(`SQLite database does not exist: ${selector.databasePath}`);\n\tif (content.trim() === \"\") {\n\t\tif (!selector.rowId) throw new Error(\"SQLite empty content deletes a row only when a row id is present.\");\n\t\tconst Database = sqliteDatabase();\n\t\tconst db = new Database(selector.databasePath);\n\t\ttry {\n\t\t\tconst table = selector.table;\n\t\t\tconst result = db\n\t\t\t\t.query(`delete from ${quoteSqliteIdent(table)} where ${quoteSqliteIdent(sqlitePrimaryKey(db, table))} = ?`)\n\t\t\t\t.run(selector.rowId);\n\t\t\treturn (result.changes ?? 0) > 0\n\t\t\t\t? `Deleted row '${selector.rowId}' in ${table}`\n\t\t\t\t: `No row deleted for '${selector.rowId}' in ${table}`;\n\t\t} finally {\n\t\t\tdb.close();\n\t\t}\n\t}\n\tconst data = parseLooseJsonObject(content);\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath);\n\ttry {\n\t\tconst table = selector.table;\n\t\tconst quotedTable = quoteSqliteIdent(table);\n\t\tconst key = sqlitePrimaryKey(db, table);\n\t\tconst quotedKey = quoteSqliteIdent(key);\n\t\tconst validColumns = new Set(sqliteTableColumns(db, table));\n\t\tif (!selector.rowId && key !== \"id\" && Object.hasOwn(data, \"id\") && !Object.hasOwn(data, key)) {\n\t\t\tdata[key] = data.id;\n\t\t\tdelete data.id;\n\t\t}\n\t\tconst columns = Object.keys(data);\n\t\tfor (const column of columns)\n\t\t\tif (!validColumns.has(column)) throw new Error(`SQLite table '${table}' has no column named '${column}'`);\n\t\tif (columns.length === 0) {\n\t\t\tif (!selector.rowId) {\n\t\t\t\tdb.query(`insert into ${quotedTable} default values`).run();\n\t\t\t\treturn `Inserted row into ${table}`;\n\t\t\t}\n\t\t\tthrow new Error(\"SQLite update content must include at least one column.\");\n\t\t}\n\t\tif (!selector.rowId) {\n\t\t\tconst quoted = columns.map(quoteSqliteIdent).join(\", \");\n\t\t\tdb.query(`insert into ${quotedTable} (${quoted}) values (${columns.map(() => \"?\").join(\", \")})`).run(\n\t\t\t\t...columns.map((column) => data[column]),\n\t\t\t);\n\t\t\treturn `Inserted row into ${table}`;\n\t\t}\n\t\tconst assignments = columns.map((column) => `${quoteSqliteIdent(column)} = ?`).join(\", \");\n\t\tconst result = db\n\t\t\t.query(`update ${quotedTable} set ${assignments} where ${quotedKey} = ?`)\n\t\t\t.run(...columns.map((column) => data[column]), selector.rowId);\n\t\treturn (result.changes ?? 0) > 0\n\t\t\t? `Updated row '${selector.rowId}' in ${table}`\n\t\t\t: `No row updated for '${selector.rowId}' in ${table}`;\n\t} finally {\n\t\tdb.close();\n\t}\n}\nexport function searchSqliteSelector(\n\tselector: SqliteSelector,\n\tpattern: string,\n\tignoreCase = false,\n\tcontextBefore = 1,\n\tcontextAfter = 3,\n): string {\n\tconst normalized = normalizeSearchPattern(pattern, ignoreCase);\n\tconst matcher = new RegExp(normalized.pattern, normalized.flags);\n\tif (!selector.table || selector.query)\n\t\treturn searchTextSelectorLines(\n\t\t\t`${selector.databasePath}:${selector.table ?? \"tables\"}`,\n\t\t\treadSqliteSelector(selector),\n\t\t\tpattern,\n\t\t\tignoreCase,\n\t\t\tfalse,\n\t\t\tcontextBefore,\n\t\t\tcontextAfter,\n\t\t).join(\"\\n\");\n\tconst Database = sqliteDatabase();\n\tconst db = new Database(selector.databasePath, { readonly: true });\n\ttry {\n\t\tconst key = sqlitePrimaryKey(db, selector.table);\n\t\tconst where = selector.rowId ? `${quoteSqliteIdent(key)} = ?` : validateSqliteWhere(selector.where);\n\t\tconst order = formatSqliteOrder(selector.order);\n\t\tconst limit = selector.sampleRows ?? selector.limit ?? 1000;\n\t\tconst offset = selector.offset ?? 0;\n\t\tconst rowIdAlias = \"__atomic_rowid__\";\n\t\tconst selectList = key === \"rowid\" ? `rowid as ${quoteSqliteIdent(rowIdAlias)}, *` : \"*\";\n\t\tconst sql = [\n\t\t\t`select ${selectList} from ${quoteSqliteIdent(selector.table)}`,\n\t\t\twhere ? `where ${where}` : \"\",\n\t\t\torder ? `order by ${order}` : \"\",\n\t\t\t\"limit ? offset ?\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\" \");\n\t\tconst rows = selector.rowId ? db.query(sql).all(selector.rowId, limit, offset) : db.query(sql).all(limit, offset);\n\t\treturn rows\n\t\t\t.map((rawRow, index) => {\n\t\t\t\tconst row = rawRow as Record<string, unknown>;\n\t\t\t\tconst rowKey = key === \"rowid\" ? row[rowIdAlias] : row[key];\n\t\t\t\tif (key === \"rowid\") delete row[rowIdAlias];\n\t\t\t\treturn { row, key: String(rowKey ?? offset + index + 1) };\n\t\t\t})\n\t\t\t.filter(({ row }) => matcher.test(JSON.stringify(row)))\n\t\t\t.map(\n\t\t\t\t({ row, key }) =>\n\t\t\t\t\t`${selector.databasePath}:${selector.table}:${key}: ${truncateSearchLine(JSON.stringify(row))}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\t} finally {\n\t\tdb.close();\n\t}\n}\n"]}
|
|
@@ -26,6 +26,10 @@ export declare class WorkflowStageAdmissionBoundary {
|
|
|
26
26
|
private readonly stageAttemptId;
|
|
27
27
|
private taskScope;
|
|
28
28
|
private taskHost;
|
|
29
|
+
private readonly messageDeliveryContext;
|
|
30
|
+
private readonly messageAdmissionContext;
|
|
31
|
+
private readonly messageDeliveries;
|
|
32
|
+
private messageDeliveryTail;
|
|
29
33
|
private taskClose;
|
|
30
34
|
/** Called by the actual stage session; replacement sessions retain the original identity. */
|
|
31
35
|
bindTaskIdentity(sessionId: string, runId: string, stageId: string): void;
|
|
@@ -37,8 +41,18 @@ export declare class WorkflowStageAdmissionBoundary {
|
|
|
37
41
|
private readonly drainAdmittedWork;
|
|
38
42
|
constructor(drainAdmittedWork?: (() => Promise<void>) | undefined, completedKeys?: Iterable<string>);
|
|
39
43
|
static restore(entries: Iterable<PersistedWorkflowStageAdmission>, drainAdmittedWork?: () => Promise<void>): WorkflowStageAdmissionBoundary;
|
|
44
|
+
/** One FIFO position for an external operation, including its retry waits. */
|
|
45
|
+
runMessageDelivery(deliver: () => void | Promise<void>, routeLate?: () => void | Promise<void>, preserveDestination?: boolean): Promise<void>;
|
|
46
|
+
/** Reentrant SDK commits stay inside their producer's FIFO position. */
|
|
47
|
+
serializeMessageDelivery(deliver: () => void | Promise<void>): Promise<void>;
|
|
48
|
+
/** Excludes tracked model turns: joining those from a native poll would deadlock. */
|
|
49
|
+
waitForMessageDeliveries(): Promise<void>;
|
|
50
|
+
hasMessageDeliveries(): boolean;
|
|
40
51
|
admit(key: string | undefined, deliver: () => void | Promise<void>, routeLate: () => void | Promise<void>): WorkflowStageAdmissionResult;
|
|
41
52
|
trackAdmittedWork(completion: Promise<void>): void;
|
|
53
|
+
/** Join already-reserved queue commits before a native turn polls its input. */
|
|
54
|
+
waitForPendingDeliveries(): Promise<void>;
|
|
55
|
+
hasPendingDeliveries(): boolean;
|
|
42
56
|
registerOwnedSubagentRun(runId: string): void;
|
|
43
57
|
ownsSubagentRun(runId: string): boolean;
|
|
44
58
|
isOpen(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-stage-admission.d.ts","sourceRoot":"","sources":["../../src/core/workflow-stage-admission.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGpF,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AAEH,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AACD,qBAAa,8BAA8B;IAC1C,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IACrE,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,SAAS,CAA8D;IAC/E,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAAiD;IAElE,6FAA6F;IAC7F,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAExE;IAED,uFAAuF;IACvF,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG,aAAa,CAM7E;IACD,gBAAgB,IAAI,OAAO,CAE1B;IAED,qGAAqG;IACrG,IAAI,WAAW,IAAI,WAAW,CAE7B;IACD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IAExD,YAAY,iBAAiB,GAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAqB,EAAE,aAAa,GAAE,QAAQ,CAAC,MAAM,CAAM,EAGjH;IAED,MAAM,CAAC,OAAO,CACb,OAAO,EAAE,QAAQ,CAAC,+BAA+B,CAAC,EAClD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACrC,8BAA8B,CAShC;IAED,KAAK,CACJ,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACnC,4BAA4B,
|
|
1
|
+
{"version":3,"file":"workflow-stage-admission.d.ts","sourceRoot":"","sources":["../../src/core/workflow-stage-admission.ts"],"names":[],"mappings":"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"}
|