pi-fabric 0.62.4 → 0.62.6
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/dist/capture/interceptor.d.ts +6 -1
- package/dist/capture/interceptor.d.ts.map +1 -1
- package/dist/chunks/{chunk-AVGXXQ5N.js → chunk-5PMNF4ON.js} +2 -2
- package/dist/chunks/{chunk-6RD2HK7U.js → chunk-QEP3ZBVZ.js} +17 -8
- package/dist/chunks/{chunk-6RD2HK7U.js.map → chunk-QEP3ZBVZ.js.map} +2 -2
- package/dist/chunks/{fabric-runtime-state-E6FQ4SF2.js → fabric-runtime-state-XXAABN22.js} +3 -3
- package/dist/chunks/{settings-RDYXA7V6.js → settings-W2242VKH.js} +2 -2
- package/dist/config-migrations.d.ts +1 -0
- package/dist/config-migrations.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +32 -4
- package/dist/index.js.map +2 -2
- package/dist/residency/host.js +2 -2
- package/package.json +1 -1
- /package/dist/chunks/{chunk-AVGXXQ5N.js.map → chunk-5PMNF4ON.js.map} +0 -0
- /package/dist/chunks/{fabric-runtime-state-E6FQ4SF2.js.map → fabric-runtime-state-XXAABN22.js.map} +0 -0
- /package/dist/chunks/{settings-RDYXA7V6.js.map → settings-W2242VKH.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import type { ExtensionRunner, ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { type FabricToolCaptureConfig } from "../config.js";
|
|
3
3
|
import { CapturedToolCatalog } from "./catalog.js";
|
|
4
4
|
export interface RegisteredToolCaptureController {
|
|
@@ -11,5 +11,10 @@ export interface RegisteredToolCaptureOptions {
|
|
|
11
11
|
initialPolicy?: FabricToolCaptureConfig;
|
|
12
12
|
onCatalogRefresh?: () => void;
|
|
13
13
|
}
|
|
14
|
+
type ExtensionRunnerConstructor = {
|
|
15
|
+
prototype: ExtensionRunner;
|
|
16
|
+
};
|
|
17
|
+
export declare const bundleExtensionRunnerConstructors: (bundleDir: string) => Promise<ExtensionRunnerConstructor[]>;
|
|
14
18
|
export declare const installRegisteredToolCapture: (options: RegisteredToolCaptureOptions) => Promise<RegisteredToolCaptureController>;
|
|
19
|
+
export {};
|
|
15
20
|
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/capture/interceptor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/capture/interceptor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAQnD,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,uBAAuB,CAAC;IAOxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AA0BD,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAaF,eAAO,MAAM,iCAAiC,GAC5C,WAAW,MAAM,KAChB,OAAO,CAAC,0BAA0B,EAAE,CAuBtC,CAAC;AAmFF,eAAO,MAAM,4BAA4B,GACvC,SAAS,4BAA4B,KACpC,OAAO,CAAC,+BAA+B,CAuCzC,CAAC"}
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
MIN_AGENT_TIMEOUT_MS,
|
|
29
29
|
writeFileAtomic,
|
|
30
30
|
writeJsonAtomic
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-QEP3ZBVZ.js";
|
|
32
32
|
import {
|
|
33
33
|
isFabricThinking
|
|
34
34
|
} from "./chunk-7B55UIZL.js";
|
|
@@ -6186,4 +6186,4 @@ export {
|
|
|
6186
6186
|
residentRoot,
|
|
6187
6187
|
residentDeliveryPrefix
|
|
6188
6188
|
};
|
|
6189
|
-
//# sourceMappingURL=chunk-
|
|
6189
|
+
//# sourceMappingURL=chunk-5PMNF4ON.js.map
|
|
@@ -139,15 +139,20 @@ var configVersion = (document) => {
|
|
|
139
139
|
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
140
140
|
throw new Error("Fabric configuration configVersion must be a non-negative integer");
|
|
141
141
|
}
|
|
142
|
-
if (value > CURRENT_FABRIC_CONFIG_VERSION) {
|
|
143
|
-
throw new Error(
|
|
144
|
-
`Fabric configuration version ${value} is newer than supported version ${CURRENT_FABRIC_CONFIG_VERSION}`
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
142
|
return value;
|
|
148
143
|
};
|
|
149
144
|
var migrateFabricConfigDocument = (input) => {
|
|
150
145
|
const fromVersion = configVersion(input);
|
|
146
|
+
if (fromVersion > CURRENT_FABRIC_CONFIG_VERSION) {
|
|
147
|
+
return {
|
|
148
|
+
document: structuredClone(input),
|
|
149
|
+
fromVersion,
|
|
150
|
+
toVersion: fromVersion,
|
|
151
|
+
appliedVersions: [],
|
|
152
|
+
changed: false,
|
|
153
|
+
forwardCompatible: true
|
|
154
|
+
};
|
|
155
|
+
}
|
|
151
156
|
let version = fromVersion;
|
|
152
157
|
let document = structuredClone(input);
|
|
153
158
|
const appliedVersions = [];
|
|
@@ -169,7 +174,8 @@ var migrateFabricConfigDocument = (input) => {
|
|
|
169
174
|
fromVersion,
|
|
170
175
|
toVersion: version,
|
|
171
176
|
appliedVersions,
|
|
172
|
-
changed: appliedVersions.length > 0
|
|
177
|
+
changed: appliedVersions.length > 0,
|
|
178
|
+
forwardCompatible: false
|
|
173
179
|
};
|
|
174
180
|
};
|
|
175
181
|
|
|
@@ -1000,7 +1006,10 @@ var saveFabricConfig = (options, partial) => {
|
|
|
1000
1006
|
const input = readJsonObjectFile(targetPath);
|
|
1001
1007
|
const existing = migrateFabricConfigDocument(input?.document ?? {}).document;
|
|
1002
1008
|
const merged = mergeObjects2(existing, partial);
|
|
1003
|
-
merged.configVersion =
|
|
1009
|
+
merged.configVersion = Math.max(
|
|
1010
|
+
typeof merged.configVersion === "number" ? merged.configVersion : 0,
|
|
1011
|
+
CURRENT_FABRIC_CONFIG_VERSION
|
|
1012
|
+
);
|
|
1004
1013
|
writeJsonAtomic2(targetPath, merged, input?.source);
|
|
1005
1014
|
return { scope, path: targetPath };
|
|
1006
1015
|
};
|
|
@@ -1024,4 +1033,4 @@ export {
|
|
|
1024
1033
|
loadFabricConfig,
|
|
1025
1034
|
saveFabricConfig
|
|
1026
1035
|
};
|
|
1027
|
-
//# sourceMappingURL=chunk-
|
|
1036
|
+
//# sourceMappingURL=chunk-QEP3ZBVZ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/core/atomic-write.ts", "../../src/config.ts", "../../src/config-migrations.ts"],
|
|
4
|
-
"sourcesContent": ["import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface AtomicWriteOptions {\n // File mode for the committed file (default 0o600) and for mkdir -p of its\n // parent directory (default 0o700).\n mode?: number;\n dirMode?: number;\n // Windows transiently rejects rename() with EPERM/EACCES/EEXIST/EBUSY while\n // an antivirus scan, indexer, or sibling reader probes the destination \u2014\n // milliseconds of contention, not a policy failure. Retry a bounded number\n // of times with linear backoff before surfacing the error.\n renameRetries?: number;\n renameRetryDelayMs?: number;\n}\n\nconst RETRYABLE_RENAME_CODES = new Set([\"EPERM\", \"EACCES\", \"EEXIST\", \"EBUSY\"]);\n\nconst errorCode = (error: unknown): string | undefined =>\n typeof error === \"object\" && error !== null && \"code\" in error\n ? String((error as { code?: unknown }).code)\n : undefined;\n\n// Portable synchronous sleep for the retry window (Atomics.wait is legal on\n// the Node main thread). If unavailable, retries proceed immediately \u2014 still\n// correct, just less cooperative under contention.\nconst syncSleep = (() => {\n try {\n const buffer = new Int32Array(new SharedArrayBuffer(4));\n return (ms: number): void => {\n Atomics.wait(buffer, 0, 0, ms);\n };\n } catch {\n return (): void => undefined;\n }\n})();\n\nexport const renameAtomic = (\n source: string,\n target: string,\n options?: AtomicWriteOptions,\n): void => {\n const attempts = Math.max(1, options?.renameRetries ?? 8);\n const delay = options?.renameRetryDelayMs ?? 25;\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n fs.renameSync(source, target);\n return;\n } catch (error) {\n const code = errorCode(error);\n if (attempt === attempts || code === undefined || !RETRYABLE_RENAME_CODES.has(code)) {\n throw error;\n }\n syncSleep(delay * attempt);\n }\n }\n};\n\nexport const writeFileAtomic = (\n filePath: string,\n contents: string,\n options?: AtomicWriteOptions,\n): void => {\n fs.mkdirSync(path.dirname(filePath), {\n recursive: true,\n mode: options?.dirMode ?? 0o700,\n });\n const temporary = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n fs.writeFileSync(temporary, contents, {\n encoding: \"utf8\",\n mode: options?.mode ?? 0o600,\n });\n renameAtomic(temporary, filePath, options);\n } finally {\n // No-op right after a successful rename; removes the temp on failure.\n fs.rmSync(temporary, { force: true });\n }\n};\n\nexport interface AtomicJsonOptions extends AtomicWriteOptions {\n // Pretty-print indent for JSON.stringify (default: compact).\n space?: number;\n // Some on-disk formats expect a trailing newline (schema state files).\n newline?: boolean;\n}\n\nexport const writeJsonAtomic = (\n filePath: string,\n value: unknown,\n options?: AtomicJsonOptions,\n): void => {\n const space = options?.space;\n const serialized =\n JSON.stringify(value, null, space) + (options?.newline === true ? \"\\n\" : \"\");\n writeFileAtomic(filePath, serialized, options);\n};\n", "import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { renameAtomic } from \"./core/atomic-write.js\";\nimport { PI_CORE_TOOL_NAME_SET } from \"./core/pi-tools.js\";\nimport {\n CURRENT_FABRIC_CONFIG_VERSION,\n migrateFabricConfigDocument,\n} from \"./config-migrations.js\";\nimport type { FabricComponentEntry } from \"./components/types.js\";\nimport type { FabricRisk } from \"./protocol.js\";\nimport { DEFAULT_FABRIC_THINKING, isFabricThinking, type FabricThinking } from \"./thinking.js\";\nimport {\n defaultCodePreviewSettings,\n normalizeCodePreviewSettings,\n type CodePreviewSettings,\n} from \"./ui/code-preview.js\";\n\ntype FabricApprovalMode = \"allow\" | \"ask\" | \"auto\" | \"deny\";\nexport type FabricAgentTransport =\n | \"auto\"\n | \"process\"\n | \"tmux\"\n | \"screen\"\n | \"localterm\"\n | \"herdr\";\nexport type FabricAgentRunner = \"pi\" | \"claude\" | \"veda\";\nexport type FabricUiWidgetMode = \"auto\" | \"always\" | \"hidden\";\ntype FabricToolDisplayMode = \"full\" | \"compact\";\nexport type FabricResultFormat = \"auto\" | \"yaml\" | \"json\" | \"text\";\nexport type FabricPrewalkMode = \"in-place\" | \"trajectory\";\nexport type FabricExecutorRuntime = \"quickjs\" | \"node-process\";\nexport type FabricConfigScope = \"global\" | \"project\";\ntype FabricCompactionEngine = \"pi\" | \"fabric\";\ntype FabricActorScope = \"project\" | \"session\";\n\ninterface FabricExecutorConfig {\n runtime: FabricExecutorRuntime;\n timeoutMs: number;\n memoryLimitBytes: number;\n maxOutputChars: number;\n maxNestedResultChars: number;\n resultFormat: FabricResultFormat;\n}\n\nexport interface FabricApprovalConfig {\n read: FabricApprovalMode;\n write: FabricApprovalMode;\n execute: FabricApprovalMode;\n network: FabricApprovalMode;\n agent: FabricApprovalMode;\n model?: string;\n}\n\n/** Session-start background revalidation scope for the MCP descriptor cache:\n * \"changed\" lists only added/reconfigured servers, \"all\" re-lists every known\n * server, \"off\" never spawns servers in the background. */\ntype FabricMcpRevalidatePolicy = \"changed\" | \"all\" | \"off\";\n\ninterface FabricMcpCacheConfig {\n /** Serve MCP tool metadata from the on-disk descriptor cache instead of\n * connecting to every configured server on first discovery each session. */\n enabled: boolean;\n revalidate: FabricMcpRevalidatePolicy;\n /** Wall-clock budget for one session-start background revalidation pass. */\n revalidateBudgetMs: number;\n}\n\nexport interface FabricMcpConfig {\n enabled: boolean;\n configPath?: string;\n disableOAuth: boolean;\n allowDynamicServers: boolean;\n callTimeoutMs: number;\n cache: FabricMcpCacheConfig;\n /** Include cached MCP tools in the prompt-matched capability advisory. */\n advisory: boolean;\n}\n\ninterface FabricClaudeRunnerConfig {\n binary: string;\n model?: string;\n}\n\n/** Veda CLI options for the `veda` agent runner. The Veda CLI wraps external\n * backends (agy, codex, claude-code, droid, pi, and any backend registered by\n * the installed Veda build); the backend is selected here and the persona\n * controls read-only vs write-capable behavior. */\ninterface FabricVedaRunnerConfig {\n binary: string;\n /** Veda backend to drive. Defaults to the Antigravity CLI (agy). */\n backend: string;\n /** Optional backend-specific model or Veda model alias. */\n model?: string;\n /** Veda persona: navigator-plan, navigator-chat, reviewer, or worker. */\n persona: string;\n}\n\ninterface FabricPrewalkConfig {\n mode: FabricPrewalkMode;\n model?: string;\n alwaysRearm: boolean;\n // Compact with the configured engine just before restoring Main's boundary\n // model after an in-place continuation settles.\n compactOnReturn: boolean;\n // Filesystem fallback trigger: when an armed boundary ran a successful\n // pi.bash without an audited mutation, claim on stat-manifest drift so\n // shell heredocs / sed -i / formatter writes also hand off.\n detectShellWrites: boolean;\n // Reasoning effort for the trajectory executor; unset inherits agents.thinking.\n thinking?: FabricThinking;\n}\n\nexport interface FabricAgentConfig {\n enabled: boolean;\n runner: FabricAgentRunner;\n transport: FabricAgentTransport;\n model?: string;\n claude: FabricClaudeRunnerConfig;\n veda: FabricVedaRunnerConfig;\n thinking: FabricThinking;\n maxConcurrent: number;\n maxPerExecution: number;\n maxDepth: number;\n timeoutMs: number;\n extensions: boolean;\n defaultTools: string[];\n retainRuns: boolean;\n notifyOnComplete: boolean;\n budgetUsd: number;\n maxTokensPerChild: number;\n /** Write usage-only pi-format session files per agent run for external trackers. */\n sessionExport: boolean;\n /** Export store root override; PI_FABRIC_AGENT_DIR wins. Empty = ~/.pi-fabric/agent. */\n sessionExportDir: string;\n}\n\nexport type FabricCapabilityAdvisoryMode = \"enabled\" | \"hidden\" | \"disabled\";\n\nexport interface FabricCapabilityAdvisoryConfig {\n mode: FabricCapabilityAdvisoryMode;\n threshold: number;\n maxPerSession: number;\n /** Token ceiling for the advisory text (estimated as chars/4, like fovea's sync.budget). */\n budget: number;\n}\n\nexport interface FabricToolCaptureConfig {\n enabled: boolean;\n hideFromModel: boolean;\n keepVisible: string[];\n defaultRisk: FabricRisk;\n risks: Record<string, FabricRisk>;\n advisory: FabricCapabilityAdvisoryConfig;\n}\n\nexport type FabricSchemaMode = \"off\" | \"audit\" | \"enforce\";\n\nexport interface FabricSchemaTrustedCommand {\n command: string;\n args: string[];\n shell: boolean;\n timeoutMs: number;\n}\n\nexport interface FabricSchemaConfig {\n mode: FabricSchemaMode;\n certificateTtlMs: number;\n maxFiles: number;\n maxBytes: number;\n trustedCommands: Record<string, FabricSchemaTrustedCommand>;\n}\n\ninterface FabricUiConfig {\n enabled: boolean;\n widget: FabricUiWidgetMode;\n maxRows: number;\n refreshMs: number;\n eventHistory: number;\n haltOnEscape: boolean;\n showAgentToolPreview: boolean;\n toolDisplay: FabricToolDisplayMode;\n updateDebounceMs: number;\n}\n\ninterface FabricCompactionConfig {\n engine: FabricCompactionEngine;\n targetContextRatio: number;\n thresholds: Record<string, number>;\n tokenThresholds: Record<string, number>;\n}\n\nexport const MIN_COMPACTION_TOKEN_THRESHOLD = 1_000;\nexport const MAX_COMPACTION_TOKEN_THRESHOLD = 100_000_000;\nexport const MIN_COMPACTION_RATIO_THRESHOLD = 0.25;\nexport const MAX_COMPACTION_RATIO_THRESHOLD = 0.95;\n\nexport const clampCompactionTokenThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_TOKEN_THRESHOLD,\n Math.max(MIN_COMPACTION_TOKEN_THRESHOLD, Math.round(value)),\n );\n\nexport const clampCompactionRatioThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_RATIO_THRESHOLD,\n Math.max(MIN_COMPACTION_RATIO_THRESHOLD, value),\n );\n\nexport interface FabricRetentionConfig {\n orphanedTempRunMs: number;\n oneShotRunMs: number;\n actorRunArchiveMs: number;\n}\n\nexport interface FabricMeshConfig {\n enabled: boolean;\n root?: string;\n actorScope: FabricActorScope;\n maxEventBytes: number;\n maxReadEvents: number;\n actorPollMs: number;\n actorQueueLimit: number;\n eventContextChars: number;\n actorContextEntries: number;\n}\n\nexport interface FabricMemoryConfig {\n enabled: boolean;\n indexDir?: string;\n maxSessions: number;\n maxEntryChars: number;\n indexThinking: boolean;\n indexToolOutput: boolean;\n hotSessions?: number;\n digestTerms?: number;\n maxColdVocabularyBytes?: number;\n maxColdCacheBytes?: number;\n maxSyncSessions?: number;\n maxSyncSourceBytes?: number;\n maxCacheCleanupFiles?: number;\n regexMaxPatternBytes?: number;\n regexMaxHaystackTerms?: number;\n regexMaxHaystackBytes?: number;\n regexTimeoutMs?: number;\n}\n\nexport interface FabricConfig {\n fullCodeMode: boolean;\n executor: FabricExecutorConfig;\n approvals: FabricApprovalConfig;\n mcp: FabricMcpConfig;\n prewalk: FabricPrewalkConfig;\n agents: FabricAgentConfig;\n components: FabricComponentEntry[];\n capture: FabricToolCaptureConfig;\n ui: FabricUiConfig;\n compaction: FabricCompactionConfig;\n retention: FabricRetentionConfig;\n mesh: FabricMeshConfig;\n memory: FabricMemoryConfig;\n schema: FabricSchemaConfig;\n codePreview: CodePreviewSettings;\n}\n\nexport const MIN_AGENT_TIMEOUT_MS = 1_000;\nconst DEFAULT_AGENT_TIMEOUT_MS = 3_600_000;\nexport const MAX_AGENT_TIMEOUT_MS = 24 * 3_600_000;\nexport const QUICKJS_MAX_MEMORY_LIMIT_BYTES = 0xffff_ffff;\nexport const MAX_EXECUTOR_MEMORY_LIMIT_BYTES = Math.max(\n 8 * 1024 * 1024,\n Math.min(Number.MAX_SAFE_INTEGER, Math.floor(os.totalmem())),\n);\n\nexport const maxExecutorMemoryLimitBytes = (runtime: FabricExecutorRuntime): number =>\n runtime === \"quickjs\"\n ? Math.min(QUICKJS_MAX_MEMORY_LIMIT_BYTES, MAX_EXECUTOR_MEMORY_LIMIT_BYTES)\n : MAX_EXECUTOR_MEMORY_LIMIT_BYTES;\n\nexport const DEFAULT_FABRIC_CONFIG: FabricConfig = {\n fullCodeMode: true,\n executor: {\n runtime: \"quickjs\",\n timeoutMs: 120_000,\n memoryLimitBytes: 64 * 1024 * 1024,\n maxOutputChars: 50_000,\n maxNestedResultChars: 2_000_000,\n resultFormat: \"auto\",\n },\n approvals: {\n read: \"allow\",\n write: \"allow\",\n execute: \"allow\",\n network: \"allow\",\n agent: \"allow\",\n },\n mcp: {\n enabled: true,\n disableOAuth: true,\n allowDynamicServers: true,\n callTimeoutMs: 120_000,\n cache: {\n enabled: true,\n revalidate: \"changed\",\n revalidateBudgetMs: 60_000,\n },\n advisory: true,\n },\n prewalk: {\n mode: \"in-place\",\n alwaysRearm: false,\n compactOnReturn: true,\n detectShellWrites: true,\n },\n agents: {\n enabled: true,\n runner: \"pi\",\n transport: \"process\",\n claude: { binary: \"claude\" },\n veda: { binary: \"veda\", backend: \"agy\", persona: \"navigator-chat\" },\n thinking: DEFAULT_FABRIC_THINKING,\n maxConcurrent: 4,\n maxPerExecution: 100,\n maxDepth: 2,\n timeoutMs: DEFAULT_AGENT_TIMEOUT_MS,\n extensions: true,\n defaultTools: [\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"],\n retainRuns: false,\n notifyOnComplete: true,\n budgetUsd: 0,\n maxTokensPerChild: 0,\n sessionExport: true,\n sessionExportDir: \"\",\n },\n components: [],\n capture: {\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n defaultRisk: \"execute\",\n risks: {\n read: \"read\",\n grep: \"read\",\n find: \"read\",\n ls: \"read\",\n edit: \"write\",\n write: \"write\",\n bash: \"execute\",\n fovea_sketch: \"read\",\n fovea_focus: \"read\",\n fovea_dwell: \"read\",\n fovea_impact: \"read\",\n },\n advisory: {\n mode: \"enabled\",\n threshold: 0.9,\n // 2\u03C4 \u2212 1 with the advisory's patience scale \u03C4 = 2 (see docs/capability-combustion.md).\n maxPerSession: 3,\n budget: 512,\n },\n },\n ui: {\n enabled: true,\n widget: \"auto\",\n maxRows: 6,\n refreshMs: 500,\n eventHistory: 80,\n haltOnEscape: true,\n showAgentToolPreview: true,\n toolDisplay: \"compact\",\n updateDebounceMs: 100,\n },\n compaction: {\n engine: \"fabric\",\n targetContextRatio: 0.65,\n thresholds: {},\n tokenThresholds: {},\n },\n retention: {\n orphanedTempRunMs: 6 * 60 * 60 * 1_000,\n oneShotRunMs: 24 * 60 * 60 * 1_000,\n actorRunArchiveMs: 7 * 24 * 60 * 60 * 1_000,\n },\n mesh: {\n enabled: true,\n actorScope: \"project\",\n maxEventBytes: 256 * 1024,\n maxReadEvents: 500,\n actorPollMs: 250,\n actorQueueLimit: 32,\n eventContextChars: 40_000,\n actorContextEntries: 14,\n },\n memory: {\n enabled: true,\n maxSessions: 500,\n maxEntryChars: 2_000,\n indexThinking: false,\n indexToolOutput: true,\n hotSessions: 50,\n digestTerms: 200,\n maxColdVocabularyBytes: 512 * 1024,\n maxColdCacheBytes: 1024 * 1024,\n maxSyncSessions: 10_000,\n maxSyncSourceBytes: 512 * 1024 * 1024,\n maxCacheCleanupFiles: 100_000,\n regexMaxPatternBytes: 1_024,\n regexMaxHaystackTerms: 20_000,\n regexMaxHaystackBytes: 2 * 1024 * 1024,\n regexTimeoutMs: 250,\n },\n schema: {\n mode: \"off\",\n certificateTtlMs: 30_000,\n maxFiles: 100,\n maxBytes: 10 * 1024 * 1024,\n trustedCommands: {},\n },\n codePreview: defaultCodePreviewSettings(),\n};\n\ninterface JsonObjectFile {\n document: Record<string, unknown>;\n source: string;\n}\n\nconst readJsonObjectFile = (filePath: string): JsonObjectFile | undefined => {\n try {\n const source = fs.readFileSync(filePath, \"utf8\");\n const parsed: unknown = JSON.parse(source);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"configuration root must be an object\");\n }\n return { document: parsed as Record<string, unknown>, source };\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") return undefined;\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read ${filePath}: ${message}`);\n }\n};\n\nconst readJsonObject = (filePath: string): Record<string, unknown> | undefined =>\n readJsonObjectFile(filePath)?.document;\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const baseValue = merged[key];\n if (\n typeof baseValue === \"object\" &&\n baseValue !== null &&\n !Array.isArray(baseValue) &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n merged[key] = mergeObjects(\n baseValue as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n merged[key] = value;\n }\n }\n return merged;\n};\n\nconst approvalMode = (value: unknown, fallback: FabricApprovalMode): FabricApprovalMode =>\n value === \"allow\" || value === \"ask\" || value === \"auto\" || value === \"deny\"\n ? value\n : fallback;\n\nconst booleanValue = (value: unknown, fallback: boolean): boolean =>\n typeof value === \"boolean\" ? value : fallback;\n\nconst boundedInteger = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isInteger(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst boundedFloat = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value : undefined;\n\nconst runnerValue = (value: unknown, fallback: FabricAgentRunner): FabricAgentRunner =>\n value === \"pi\" || value === \"claude\" || value === \"veda\" ? value : fallback;\n\nconst prewalkModeValue = (\n value: unknown,\n fallback: FabricPrewalkMode,\n): FabricPrewalkMode =>\n value === \"in-place\" || value === \"trajectory\" ? value : fallback;\n\nconst transportValue = (\n value: unknown,\n fallback: FabricAgentTransport,\n): FabricAgentTransport =>\n value === \"auto\" ||\n value === \"process\" ||\n value === \"tmux\" ||\n value === \"screen\" ||\n value === \"localterm\" ||\n value === \"herdr\"\n ? value\n : fallback;\n\nconst thinkingValue = (value: unknown, fallback: FabricThinking): FabricThinking =>\n isFabricThinking(value) ? value : fallback;\n\nconst objectValue = (value: unknown): Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst widgetModeValue = (value: unknown, fallback: FabricUiWidgetMode): FabricUiWidgetMode =>\n value === \"auto\" || value === \"always\" || value === \"hidden\" ? value : fallback;\n\nconst toolDisplayModeValue = (\n value: unknown,\n fallback: FabricToolDisplayMode,\n): FabricToolDisplayMode => value === \"full\" || value === \"compact\" ? value : fallback;\n\nconst executorRuntimeValue = (\n value: unknown,\n fallback: FabricExecutorRuntime,\n): FabricExecutorRuntime =>\n value === \"quickjs\" || value === \"node-process\" ? value : fallback;\n\nconst resultFormatValue = (\n value: unknown,\n fallback: FabricResultFormat,\n): FabricResultFormat =>\n value === \"auto\" || value === \"yaml\" || value === \"json\" || value === \"text\"\n ? value\n : fallback;\n\nconst compactionEngineValue = (\n value: unknown,\n fallback: FabricCompactionEngine,\n): FabricCompactionEngine =>\n value === \"pi\" || value === \"fabric\" ? value : fallback;\n\nconst actorScopeValue = (value: unknown, fallback: FabricActorScope): FabricActorScope =>\n value === \"project\" || value === \"session\" ? value : fallback;\n\nconst schemaModeValue = (value: unknown, fallback: FabricSchemaMode): FabricSchemaMode =>\n value === \"off\" || value === \"audit\" || value === \"enforce\" ? value : fallback;\n\nconst advisoryModeValue = (\n value: unknown,\n fallback: FabricCapabilityAdvisoryMode,\n): FabricCapabilityAdvisoryMode =>\n value === \"enabled\" || value === \"hidden\" || value === \"disabled\" ? value : fallback;\n\nconst mcpRevalidatePolicyValue = (\n value: unknown,\n fallback: FabricMcpRevalidatePolicy,\n): FabricMcpRevalidatePolicy =>\n value === \"changed\" || value === \"all\" || value === \"off\" ? value : fallback;\n\nconst riskValue = (value: unknown, fallback: FabricRisk): FabricRisk =>\n value === \"read\" ||\n value === \"write\" ||\n value === \"execute\" ||\n value === \"network\" ||\n value === \"agent\"\n ? value\n : fallback;\n\nexport const normalizeFabricConfig = (input: Record<string, unknown>): FabricConfig => {\n const executor = objectValue(input.executor);\n const approvals = objectValue(input.approvals);\n const mcp = objectValue(input.mcp);\n const mcpCache = objectValue(mcp.cache);\n const prewalk = objectValue(input.prewalk);\n const agents = objectValue(input.agents);\n const claude = objectValue(agents.claude);\n const veda = objectValue(agents.veda);\n const capture = objectValue(input.capture);\n const ui = objectValue(input.ui);\n const compaction = objectValue(input.compaction);\n const retention = objectValue(input.retention);\n const mesh = objectValue(input.mesh);\n const memory = objectValue(input.memory);\n const schema = objectValue(input.schema);\n const schemaMode = schemaModeValue(schema.mode, DEFAULT_FABRIC_CONFIG.schema.mode);\n const configuredExecutorRuntime = executorRuntimeValue(\n executor.runtime,\n DEFAULT_FABRIC_CONFIG.executor.runtime,\n );\n const executorRuntime = schemaMode === \"enforce\" ? \"quickjs\" : configuredExecutorRuntime;\n const configuredTools = Array.isArray(agents.defaultTools)\n ? agents.defaultTools.filter(\n (tool): tool is string => typeof tool === \"string\" && Boolean(tool),\n )\n : DEFAULT_FABRIC_CONFIG.agents.defaultTools;\n const approvalModel = stringValue(approvals.model);\n const configPath = stringValue(mcp.configPath);\n const meshRoot = stringValue(mesh.root);\n const memoryIndexDir = stringValue(memory.indexDir);\n const compactionThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.thresholds))\n .filter(([model, threshold]) =>\n model.includes(\"/\")\n && typeof threshold === \"number\"\n && Number.isFinite(threshold),\n )\n .map(([model, threshold]) => [\n model,\n clampCompactionRatioThreshold(threshold as number),\n ]),\n );\n const compactionTokenThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.tokenThresholds))\n .filter(([model, tokens]) =>\n model.includes(\"/\")\n && typeof tokens === \"number\"\n && Number.isFinite(tokens),\n )\n .map(([model, tokens]) => [\n model,\n clampCompactionTokenThreshold(tokens as number),\n ]),\n );\n const prewalkModel = stringValue(prewalk.model);\n const prewalkThinking = isFabricThinking(prewalk.thinking) ? prewalk.thinking : undefined;\n const agentModel = stringValue(agents.model);\n const claudeBinary = stringValue(claude.binary);\n const claudeModel = stringValue(claude.model);\n const vedaBinary = stringValue(veda.binary);\n const vedaBackend = stringValue(veda.backend);\n const vedaModel = stringValue(veda.model);\n const vedaPersona = stringValue(veda.persona);\n const agentThinking = thinkingValue(agents.thinking, DEFAULT_FABRIC_CONFIG.agents.thinking);\n const configuredComponents: FabricComponentEntry[] = Array.isArray(input.components)\n ? input.components.flatMap((raw) => {\n const componentEntry = objectValue(raw);\n const id = stringValue(componentEntry.id);\n const component = stringValue(componentEntry.component);\n if (!id || !component) return [];\n return [{\n id,\n component,\n ...(Object.prototype.hasOwnProperty.call(componentEntry, \"config\")\n ? { config: componentEntry.config }\n : {}),\n ...(typeof componentEntry.disabled === \"boolean\"\n ? { disabled: componentEntry.disabled }\n : {}),\n }];\n }).slice(0, 256)\n : DEFAULT_FABRIC_CONFIG.components;\n const configuredVisible = Array.isArray(capture.keepVisible)\n ? capture.keepVisible.filter(\n (name): name is string => typeof name === \"string\" && Boolean(name.trim()),\n )\n : DEFAULT_FABRIC_CONFIG.capture.keepVisible;\n const configuredRisks = {\n ...DEFAULT_FABRIC_CONFIG.capture.risks,\n ...objectValue(capture.risks),\n };\n const configuredAdvisory = objectValue(capture.advisory);\n const trustedCommands = Object.fromEntries(\n Object.entries(objectValue(schema.trustedCommands)).flatMap(([name, raw]) => {\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(name)) return [];\n const command = objectValue(raw);\n const executable = stringValue(command.command);\n if (!executable) return [];\n const shell = booleanValue(command.shell, false);\n const args = !shell && Array.isArray(command.args)\n ? command.args.filter((arg): arg is string => typeof arg === \"string\").slice(0, 64)\n : [];\n return [[name, {\n command: executable,\n args,\n shell,\n timeoutMs: boundedInteger(command.timeoutMs, 30_000, 1, 300_000),\n } satisfies FabricSchemaTrustedCommand]];\n }),\n );\n const risks = Object.fromEntries(\n Object.entries(configuredRisks)\n .filter(([name]) => Boolean(name.trim()))\n .map(([name, risk]) => [name, riskValue(risk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk)]),\n );\n\n return {\n fullCodeMode: booleanValue(input.fullCodeMode, DEFAULT_FABRIC_CONFIG.fullCodeMode),\n executor: {\n runtime: executorRuntime,\n timeoutMs: boundedInteger(\n executor.timeoutMs,\n DEFAULT_FABRIC_CONFIG.executor.timeoutMs,\n 1_000,\n 900_000,\n ),\n memoryLimitBytes: boundedInteger(\n executor.memoryLimitBytes,\n DEFAULT_FABRIC_CONFIG.executor.memoryLimitBytes,\n 8 * 1024 * 1024,\n maxExecutorMemoryLimitBytes(executorRuntime),\n ),\n maxOutputChars: boundedInteger(\n executor.maxOutputChars,\n DEFAULT_FABRIC_CONFIG.executor.maxOutputChars,\n 1_000,\n 1_000_000,\n ),\n maxNestedResultChars: boundedInteger(\n executor.maxNestedResultChars,\n DEFAULT_FABRIC_CONFIG.executor.maxNestedResultChars,\n 10_000,\n 20_000_000,\n ),\n resultFormat: resultFormatValue(\n executor.resultFormat,\n DEFAULT_FABRIC_CONFIG.executor.resultFormat,\n ),\n },\n approvals: {\n read: approvalMode(approvals.read, DEFAULT_FABRIC_CONFIG.approvals.read),\n write: approvalMode(approvals.write, DEFAULT_FABRIC_CONFIG.approvals.write),\n execute: approvalMode(approvals.execute, DEFAULT_FABRIC_CONFIG.approvals.execute),\n network: approvalMode(approvals.network, DEFAULT_FABRIC_CONFIG.approvals.network),\n agent: approvalMode(approvals.agent, DEFAULT_FABRIC_CONFIG.approvals.agent),\n ...(approvalModel ? { model: approvalModel } : {}),\n },\n mcp: {\n enabled: booleanValue(mcp.enabled, DEFAULT_FABRIC_CONFIG.mcp.enabled),\n ...(configPath ? { configPath } : {}),\n disableOAuth: booleanValue(mcp.disableOAuth, DEFAULT_FABRIC_CONFIG.mcp.disableOAuth),\n allowDynamicServers: booleanValue(\n mcp.allowDynamicServers,\n DEFAULT_FABRIC_CONFIG.mcp.allowDynamicServers,\n ),\n callTimeoutMs: boundedInteger(\n mcp.callTimeoutMs,\n DEFAULT_FABRIC_CONFIG.mcp.callTimeoutMs,\n 1_000,\n 900_000,\n ),\n cache: {\n enabled: booleanValue(mcpCache.enabled, DEFAULT_FABRIC_CONFIG.mcp.cache.enabled),\n revalidate: mcpRevalidatePolicyValue(\n mcpCache.revalidate,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidate,\n ),\n revalidateBudgetMs: boundedInteger(\n mcpCache.revalidateBudgetMs,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidateBudgetMs,\n 1_000,\n 600_000,\n ),\n },\n advisory: booleanValue(mcp.advisory, DEFAULT_FABRIC_CONFIG.mcp.advisory),\n },\n prewalk: {\n mode: prewalkModeValue(prewalk.mode, DEFAULT_FABRIC_CONFIG.prewalk.mode),\n ...(prewalkModel ? { model: prewalkModel } : {}),\n ...(prewalkThinking ? { thinking: prewalkThinking } : {}),\n alwaysRearm: booleanValue(\n prewalk.alwaysRearm,\n DEFAULT_FABRIC_CONFIG.prewalk.alwaysRearm,\n ),\n compactOnReturn: booleanValue(\n prewalk.compactOnReturn,\n DEFAULT_FABRIC_CONFIG.prewalk.compactOnReturn,\n ),\n detectShellWrites: booleanValue(\n prewalk.detectShellWrites,\n DEFAULT_FABRIC_CONFIG.prewalk.detectShellWrites,\n ),\n },\n agents: {\n enabled: booleanValue(agents.enabled, DEFAULT_FABRIC_CONFIG.agents.enabled),\n runner: runnerValue(agents.runner, DEFAULT_FABRIC_CONFIG.agents.runner),\n transport: transportValue(agents.transport, DEFAULT_FABRIC_CONFIG.agents.transport),\n ...(agentModel ? { model: agentModel } : {}),\n claude: {\n binary: claudeBinary ?? DEFAULT_FABRIC_CONFIG.agents.claude.binary,\n ...(claudeModel ? { model: claudeModel } : {}),\n },\n veda: {\n binary: vedaBinary ?? DEFAULT_FABRIC_CONFIG.agents.veda.binary,\n backend: vedaBackend ?? DEFAULT_FABRIC_CONFIG.agents.veda.backend,\n ...(vedaModel ? { model: vedaModel } : {}),\n persona: vedaPersona ?? DEFAULT_FABRIC_CONFIG.agents.veda.persona,\n },\n thinking: agentThinking,\n maxConcurrent: boundedInteger(\n agents.maxConcurrent,\n DEFAULT_FABRIC_CONFIG.agents.maxConcurrent,\n 1,\n 32,\n ),\n maxPerExecution: boundedInteger(\n agents.maxPerExecution,\n DEFAULT_FABRIC_CONFIG.agents.maxPerExecution,\n 1,\n 1_000,\n ),\n maxDepth: boundedInteger(\n agents.maxDepth,\n DEFAULT_FABRIC_CONFIG.agents.maxDepth,\n 0,\n Number.MAX_SAFE_INTEGER,\n ),\n timeoutMs: boundedInteger(\n agents.timeoutMs,\n DEFAULT_FABRIC_CONFIG.agents.timeoutMs,\n MIN_AGENT_TIMEOUT_MS,\n MAX_AGENT_TIMEOUT_MS,\n ),\n extensions: booleanValue(agents.extensions, DEFAULT_FABRIC_CONFIG.agents.extensions),\n defaultTools: configuredTools,\n retainRuns: booleanValue(agents.retainRuns, DEFAULT_FABRIC_CONFIG.agents.retainRuns),\n notifyOnComplete: booleanValue(\n agents.notifyOnComplete,\n DEFAULT_FABRIC_CONFIG.agents.notifyOnComplete,\n ),\n budgetUsd: boundedFloat(\n agents.budgetUsd,\n DEFAULT_FABRIC_CONFIG.agents.budgetUsd,\n 0,\n 1_000_000,\n ),\n maxTokensPerChild: boundedInteger(\n agents.maxTokensPerChild,\n DEFAULT_FABRIC_CONFIG.agents.maxTokensPerChild,\n 0,\n 100_000_000,\n ),\n sessionExport: booleanValue(\n agents.sessionExport,\n DEFAULT_FABRIC_CONFIG.agents.sessionExport,\n ),\n sessionExportDir:\n typeof agents.sessionExportDir === \"string\"\n ? agents.sessionExportDir\n : DEFAULT_FABRIC_CONFIG.agents.sessionExportDir,\n },\n components: configuredComponents.map((entry) => structuredClone(entry)),\n capture: {\n enabled: booleanValue(capture.enabled, DEFAULT_FABRIC_CONFIG.capture.enabled),\n hideFromModel: booleanValue(\n capture.hideFromModel,\n DEFAULT_FABRIC_CONFIG.capture.hideFromModel,\n ),\n keepVisible: [...new Set(configuredVisible)],\n defaultRisk: riskValue(capture.defaultRisk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk),\n risks,\n advisory: {\n mode: advisoryModeValue(configuredAdvisory.mode, DEFAULT_FABRIC_CONFIG.capture.advisory.mode),\n threshold: boundedFloat(\n configuredAdvisory.threshold,\n DEFAULT_FABRIC_CONFIG.capture.advisory.threshold,\n 0,\n 1_000,\n ),\n maxPerSession: boundedInteger(\n configuredAdvisory.maxPerSession,\n DEFAULT_FABRIC_CONFIG.capture.advisory.maxPerSession,\n 1,\n 50,\n ),\n budget: boundedInteger(\n configuredAdvisory.budget,\n DEFAULT_FABRIC_CONFIG.capture.advisory.budget,\n 128,\n 8192,\n ),\n },\n },\n ui: {\n enabled: booleanValue(ui.enabled, DEFAULT_FABRIC_CONFIG.ui.enabled),\n widget: widgetModeValue(ui.widget, DEFAULT_FABRIC_CONFIG.ui.widget),\n maxRows: boundedInteger(ui.maxRows, DEFAULT_FABRIC_CONFIG.ui.maxRows, 1, 20),\n refreshMs: boundedInteger(ui.refreshMs, DEFAULT_FABRIC_CONFIG.ui.refreshMs, 100, 10_000),\n eventHistory: boundedInteger(\n ui.eventHistory,\n DEFAULT_FABRIC_CONFIG.ui.eventHistory,\n 1,\n 500,\n ),\n haltOnEscape: booleanValue(ui.haltOnEscape, DEFAULT_FABRIC_CONFIG.ui.haltOnEscape),\n // Renamed from ui.showNestedToolCalls; the v2 migration rewrites persisted\n // files, and this fallback covers configs normalized without migration.\n showAgentToolPreview: booleanValue(\n ui.showAgentToolPreview ?? ui.showNestedToolCalls,\n DEFAULT_FABRIC_CONFIG.ui.showAgentToolPreview,\n ),\n toolDisplay: toolDisplayModeValue(\n ui.toolDisplay,\n DEFAULT_FABRIC_CONFIG.ui.toolDisplay,\n ),\n // Renamed from ui.nestedToolDebounceMs (v3): the window coalesces every\n // live fabric_exec card update \u2014 nested calls, progress, agent previews.\n updateDebounceMs: boundedInteger(\n ui.updateDebounceMs ?? ui.nestedToolDebounceMs,\n DEFAULT_FABRIC_CONFIG.ui.updateDebounceMs,\n 0,\n 2_000,\n ),\n },\n compaction: {\n engine: compactionEngineValue(compaction.engine, DEFAULT_FABRIC_CONFIG.compaction.engine),\n targetContextRatio: boundedFloat(\n compaction.targetContextRatio,\n DEFAULT_FABRIC_CONFIG.compaction.targetContextRatio,\n 0.25,\n 0.85,\n ),\n thresholds: compactionThresholds,\n tokenThresholds: compactionTokenThresholds,\n },\n retention: {\n orphanedTempRunMs: boundedInteger(\n retention.orphanedTempRunMs,\n DEFAULT_FABRIC_CONFIG.retention.orphanedTempRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n oneShotRunMs: boundedInteger(\n retention.oneShotRunMs,\n DEFAULT_FABRIC_CONFIG.retention.oneShotRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n actorRunArchiveMs: boundedInteger(\n retention.actorRunArchiveMs,\n DEFAULT_FABRIC_CONFIG.retention.actorRunArchiveMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n },\n mesh: {\n enabled: booleanValue(mesh.enabled, DEFAULT_FABRIC_CONFIG.mesh.enabled),\n ...(meshRoot ? { root: meshRoot } : {}),\n actorScope: actorScopeValue(mesh.actorScope, DEFAULT_FABRIC_CONFIG.mesh.actorScope),\n maxEventBytes: boundedInteger(\n mesh.maxEventBytes,\n DEFAULT_FABRIC_CONFIG.mesh.maxEventBytes,\n 1_024,\n 4 * 1024 * 1024,\n ),\n maxReadEvents: boundedInteger(\n mesh.maxReadEvents,\n DEFAULT_FABRIC_CONFIG.mesh.maxReadEvents,\n 1,\n 10_000,\n ),\n actorPollMs: boundedInteger(\n mesh.actorPollMs,\n DEFAULT_FABRIC_CONFIG.mesh.actorPollMs,\n 50,\n 10_000,\n ),\n actorQueueLimit: boundedInteger(\n mesh.actorQueueLimit,\n DEFAULT_FABRIC_CONFIG.mesh.actorQueueLimit,\n 1,\n 1_000,\n ),\n eventContextChars: boundedInteger(\n mesh.eventContextChars,\n DEFAULT_FABRIC_CONFIG.mesh.eventContextChars,\n 1_000,\n 1_000_000,\n ),\n actorContextEntries: boundedInteger(\n mesh.actorContextEntries,\n DEFAULT_FABRIC_CONFIG.mesh.actorContextEntries,\n 1,\n 100,\n ),\n },\n memory: {\n enabled: booleanValue(memory.enabled, DEFAULT_FABRIC_CONFIG.memory.enabled),\n ...(memoryIndexDir ? { indexDir: memoryIndexDir } : {}),\n maxSessions: boundedInteger(\n memory.maxSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSessions,\n 1,\n 100_000,\n ),\n maxEntryChars: boundedInteger(\n memory.maxEntryChars,\n DEFAULT_FABRIC_CONFIG.memory.maxEntryChars,\n 100,\n 1_000_000,\n ),\n indexThinking: booleanValue(\n memory.indexThinking,\n DEFAULT_FABRIC_CONFIG.memory.indexThinking ?? false,\n ),\n indexToolOutput: booleanValue(\n memory.indexToolOutput,\n DEFAULT_FABRIC_CONFIG.memory.indexToolOutput ?? true,\n ),\n hotSessions: boundedInteger(\n memory.hotSessions,\n DEFAULT_FABRIC_CONFIG.memory.hotSessions ?? 50,\n 0,\n 100_000,\n ),\n digestTerms: boundedInteger(\n memory.digestTerms,\n DEFAULT_FABRIC_CONFIG.memory.digestTerms ?? 200,\n 1,\n 10_000,\n ),\n maxColdVocabularyBytes: boundedInteger(\n memory.maxColdVocabularyBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdVocabularyBytes ?? 512 * 1024,\n 2,\n 64 * 1024 * 1024,\n ),\n maxColdCacheBytes: boundedInteger(\n memory.maxColdCacheBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdCacheBytes ?? 1024 * 1024,\n 512,\n 128 * 1024 * 1024,\n ),\n maxSyncSessions: boundedInteger(\n memory.maxSyncSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSessions ?? 10_000,\n 1,\n 1_000_000,\n ),\n maxSyncSourceBytes: boundedInteger(\n memory.maxSyncSourceBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSourceBytes ?? 512 * 1024 * 1024,\n 1_024,\n 8 * 1024 * 1024 * 1024,\n ),\n maxCacheCleanupFiles: boundedInteger(\n memory.maxCacheCleanupFiles,\n DEFAULT_FABRIC_CONFIG.memory.maxCacheCleanupFiles ?? 100_000,\n 1,\n 1_000_000,\n ),\n regexMaxPatternBytes: boundedInteger(\n memory.regexMaxPatternBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxPatternBytes ?? 1_024,\n 1,\n 64 * 1024,\n ),\n regexMaxHaystackTerms: boundedInteger(\n memory.regexMaxHaystackTerms,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackTerms ?? 20_000,\n 1,\n 1_000_000,\n ),\n regexMaxHaystackBytes: boundedInteger(\n memory.regexMaxHaystackBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackBytes ?? 2 * 1024 * 1024,\n 1_024,\n 128 * 1024 * 1024,\n ),\n regexTimeoutMs: boundedInteger(\n memory.regexTimeoutMs,\n DEFAULT_FABRIC_CONFIG.memory.regexTimeoutMs ?? 250,\n 10,\n 10_000,\n ),\n },\n schema: {\n mode: schemaMode,\n certificateTtlMs: boundedInteger(\n schema.certificateTtlMs,\n DEFAULT_FABRIC_CONFIG.schema.certificateTtlMs,\n 1_000,\n 10 * 60_000,\n ),\n maxFiles: boundedInteger(\n schema.maxFiles,\n DEFAULT_FABRIC_CONFIG.schema.maxFiles,\n 1,\n 1_000,\n ),\n maxBytes: boundedInteger(\n schema.maxBytes,\n DEFAULT_FABRIC_CONFIG.schema.maxBytes,\n 1_024,\n 100 * 1024 * 1024,\n ),\n trustedCommands,\n },\n codePreview: normalizeCodePreviewSettings(input.codePreview),\n };\n};\n\nexport const effectiveToolCaptureConfig = (\n config: Pick<FabricConfig, \"fullCodeMode\" | \"capture\"> & Partial<Pick<FabricConfig, \"schema\">>,\n): FabricToolCaptureConfig =>\n config.schema?.mode === \"enforce\"\n ? {\n ...config.capture,\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n risks: { ...config.capture.risks },\n }\n : config.fullCodeMode\n ? {\n ...config.capture,\n keepVisible: config.capture.keepVisible.filter(\n (name) => !PI_CORE_TOOL_NAME_SET.has(name),\n ),\n risks: { ...config.capture.risks },\n }\n : {\n ...config.capture,\n enabled: false,\n hideFromModel: false,\n keepVisible: [...config.capture.keepVisible],\n risks: { ...config.capture.risks },\n };\n\ninterface FabricConfigFilePlan {\n path: string;\n document: Record<string, unknown>;\n source: string;\n changed: boolean;\n}\n\nconst planConfigFile = (filePath: string): FabricConfigFilePlan | undefined => {\n const input = readJsonObjectFile(filePath);\n if (!input) return undefined;\n const migration = migrateFabricConfigDocument(input.document);\n return {\n path: filePath,\n document: migration.document,\n source: input.source,\n changed: migration.changed,\n };\n};\n\nconst writeJsonAtomic = (\n filePath: string,\n document: Record<string, unknown>,\n expectedSource?: string,\n): void => {\n const resolvedPath = fs.existsSync(filePath) ? fs.realpathSync(filePath) : filePath;\n const directory = path.dirname(resolvedPath);\n if (!fs.existsSync(directory)) fs.mkdirSync(directory, { recursive: true });\n const mode = fs.existsSync(resolvedPath) ? fs.statSync(resolvedPath).mode & 0o777 : 0o600;\n const temporaryPath = path.join(\n directory,\n `.${path.basename(resolvedPath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`,\n );\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(temporaryPath, \"wx\", mode);\n fs.writeFileSync(descriptor, `${JSON.stringify(document, null, 2)}\\n`, \"utf8\");\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n descriptor = undefined;\n if (expectedSource !== undefined) {\n let currentSource: string;\n try {\n currentSource = fs.readFileSync(resolvedPath, \"utf8\");\n } catch (error) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`, { cause: error });\n }\n if (currentSource !== expectedSource) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`);\n }\n }\n renameAtomic(temporaryPath, resolvedPath);\n try {\n const directoryDescriptor = fs.openSync(directory, \"r\");\n try {\n fs.fsyncSync(directoryDescriptor);\n } finally {\n fs.closeSync(directoryDescriptor);\n }\n } catch (error) {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n if (code !== \"EINVAL\" && code !== \"ENOTSUP\" && code !== \"EISDIR\" && code !== \"EPERM\") throw error;\n }\n } catch (error) {\n if (descriptor !== undefined) fs.closeSync(descriptor);\n fs.rmSync(temporaryPath, { force: true });\n throw error;\n }\n};\n\nconst resolveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n },\n includeProject: boolean,\n): FabricConfig => {\n let merged = structuredClone(DEFAULT_FABRIC_CONFIG) as unknown as Record<string, unknown>;\n const plans = [\n planConfigFile(path.join(options.agentDir, \"fabric.json\")),\n ...(includeProject\n ? [planConfigFile(path.join(options.cwd, \".pi\", \"fabric.json\"))]\n : []),\n ].filter((plan): plan is FabricConfigFilePlan => plan !== undefined);\n for (const plan of plans) {\n if (plan.changed) writeJsonAtomic(plan.path, plan.document, plan.source);\n merged = mergeObjects(merged, plan.document);\n }\n const inheritedFullCodeMode = process.env.PI_FABRIC_FULL_CODE_MODE;\n if (inheritedFullCodeMode === \"true\" || inheritedFullCodeMode === \"false\") {\n merged.fullCodeMode = inheritedFullCodeMode === \"true\";\n }\n return normalizeFabricConfig(merged);\n};\n\nexport const loadFabricConfigForScope = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n },\n scope: FabricConfigScope,\n): FabricConfig => {\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot load project Fabric configuration for an untrusted project\");\n }\n return resolveFabricConfig(options, scope === \"project\");\n};\n\nexport const loadFabricConfig = (options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n}): FabricConfig => {\n const config = resolveFabricConfig(options, options.projectTrusted);\n if (config.compaction.engine === \"fabric\") {\n process.env.PI_FABRIC_COMPACTION_ENGINE = \"fabric\";\n } else {\n delete process.env.PI_FABRIC_COMPACTION_ENGINE;\n }\n return config;\n};\n\nexport const saveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n scope?: FabricConfigScope;\n },\n partial: Record<string, unknown>,\n): { scope: FabricConfigScope; path: string } => {\n const scope = options.scope ?? (options.projectTrusted ? \"project\" : \"global\");\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot save project Fabric configuration for an untrusted project\");\n }\n const targetPath = scope === \"project\"\n ? path.join(options.cwd, \".pi\", \"fabric.json\")\n : path.join(options.agentDir, \"fabric.json\");\n if (Object.hasOwn(partial, \"configVersion\") || Object.hasOwn(partial, \"subagents\")) {\n throw new Error(\"Fabric configuration updates must use the current schema\");\n }\n const input = readJsonObjectFile(targetPath);\n const existing = migrateFabricConfigDocument(input?.document ?? {}).document;\n const merged = mergeObjects(existing, partial) as Record<string, unknown>;\n merged.configVersion = CURRENT_FABRIC_CONFIG_VERSION;\n writeJsonAtomic(targetPath, merged, input?.source);\n return { scope, path: targetPath };\n};\n", "export const CURRENT_FABRIC_CONFIG_VERSION = 3;\n\nexport interface FabricConfigMigrationResult {\n document: Record<string, unknown>;\n fromVersion: number;\n toVersion: number;\n appliedVersions: number[];\n changed: boolean;\n}\n\ninterface FabricConfigMigration {\n from: number;\n to: number;\n migrate(document: Readonly<Record<string, unknown>>): Record<string, unknown>;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = merged[key];\n merged[key] = isObject(current) && isObject(value) ? mergeObjects(current, value) : value;\n }\n return merged;\n};\n\nconst migrations: readonly FabricConfigMigration[] = [\n {\n from: 0,\n to: 1,\n migrate(document) {\n const migrated = { ...document };\n const legacy = migrated.subagents;\n const canonical = migrated.agents;\n if (legacy !== undefined) {\n if (canonical !== undefined && isObject(legacy) !== isObject(canonical)) {\n throw new Error(\n \"Fabric configuration cannot merge legacy subagents with a malformed agents section\",\n );\n }\n migrated.agents = isObject(legacy) && isObject(canonical)\n ? mergeObjects(legacy, canonical)\n : canonical ?? legacy;\n }\n delete migrated.subagents;\n return migrated;\n },\n },\n {\n from: 1,\n to: 2,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"showNestedToolCalls\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"showAgentToolPreview\")) {\n renamed.showAgentToolPreview = renamed.showNestedToolCalls;\n }\n delete renamed.showNestedToolCalls;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n {\n from: 2,\n to: 3,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"nestedToolDebounceMs\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"updateDebounceMs\")) {\n renamed.updateDebounceMs = renamed.nestedToolDebounceMs;\n }\n delete renamed.nestedToolDebounceMs;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n];\n\nconst configVersion = (document: Readonly<Record<string, unknown>>): number => {\n const value = document.configVersion;\n if (value === undefined) return 0;\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n throw new Error(\"Fabric configuration configVersion must be a non-negative integer\");\n }\n if (value > CURRENT_FABRIC_CONFIG_VERSION) {\n throw new Error(\n `Fabric configuration version ${value} is newer than supported version ${CURRENT_FABRIC_CONFIG_VERSION}`,\n );\n }\n return value;\n};\n\nexport const migrateFabricConfigDocument = (\n input: Readonly<Record<string, unknown>>,\n): FabricConfigMigrationResult => {\n const fromVersion = configVersion(input);\n let version = fromVersion;\n let document = structuredClone(input) as Record<string, unknown>;\n const appliedVersions: number[] = [];\n\n while (version < CURRENT_FABRIC_CONFIG_VERSION) {\n const migration = migrations.find((candidate) => candidate.from === version);\n if (!migration || migration.to !== version + 1) {\n throw new Error(`No Fabric configuration migration exists for version ${version}`);\n }\n document = migration.migrate(document);\n version = migration.to;\n document.configVersion = version;\n appliedVersions.push(version);\n }\n\n if (Object.hasOwn(document, \"subagents\")) {\n throw new Error(\"Current Fabric configuration contains removed key subagents\");\n }\n\n return {\n document,\n fromVersion,\n toVersion: version,\n appliedVersions,\n changed: appliedVersions.length > 0,\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface AtomicWriteOptions {\n // File mode for the committed file (default 0o600) and for mkdir -p of its\n // parent directory (default 0o700).\n mode?: number;\n dirMode?: number;\n // Windows transiently rejects rename() with EPERM/EACCES/EEXIST/EBUSY while\n // an antivirus scan, indexer, or sibling reader probes the destination \u2014\n // milliseconds of contention, not a policy failure. Retry a bounded number\n // of times with linear backoff before surfacing the error.\n renameRetries?: number;\n renameRetryDelayMs?: number;\n}\n\nconst RETRYABLE_RENAME_CODES = new Set([\"EPERM\", \"EACCES\", \"EEXIST\", \"EBUSY\"]);\n\nconst errorCode = (error: unknown): string | undefined =>\n typeof error === \"object\" && error !== null && \"code\" in error\n ? String((error as { code?: unknown }).code)\n : undefined;\n\n// Portable synchronous sleep for the retry window (Atomics.wait is legal on\n// the Node main thread). If unavailable, retries proceed immediately \u2014 still\n// correct, just less cooperative under contention.\nconst syncSleep = (() => {\n try {\n const buffer = new Int32Array(new SharedArrayBuffer(4));\n return (ms: number): void => {\n Atomics.wait(buffer, 0, 0, ms);\n };\n } catch {\n return (): void => undefined;\n }\n})();\n\nexport const renameAtomic = (\n source: string,\n target: string,\n options?: AtomicWriteOptions,\n): void => {\n const attempts = Math.max(1, options?.renameRetries ?? 8);\n const delay = options?.renameRetryDelayMs ?? 25;\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n fs.renameSync(source, target);\n return;\n } catch (error) {\n const code = errorCode(error);\n if (attempt === attempts || code === undefined || !RETRYABLE_RENAME_CODES.has(code)) {\n throw error;\n }\n syncSleep(delay * attempt);\n }\n }\n};\n\nexport const writeFileAtomic = (\n filePath: string,\n contents: string,\n options?: AtomicWriteOptions,\n): void => {\n fs.mkdirSync(path.dirname(filePath), {\n recursive: true,\n mode: options?.dirMode ?? 0o700,\n });\n const temporary = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n fs.writeFileSync(temporary, contents, {\n encoding: \"utf8\",\n mode: options?.mode ?? 0o600,\n });\n renameAtomic(temporary, filePath, options);\n } finally {\n // No-op right after a successful rename; removes the temp on failure.\n fs.rmSync(temporary, { force: true });\n }\n};\n\nexport interface AtomicJsonOptions extends AtomicWriteOptions {\n // Pretty-print indent for JSON.stringify (default: compact).\n space?: number;\n // Some on-disk formats expect a trailing newline (schema state files).\n newline?: boolean;\n}\n\nexport const writeJsonAtomic = (\n filePath: string,\n value: unknown,\n options?: AtomicJsonOptions,\n): void => {\n const space = options?.space;\n const serialized =\n JSON.stringify(value, null, space) + (options?.newline === true ? \"\\n\" : \"\");\n writeFileAtomic(filePath, serialized, options);\n};\n", "import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { renameAtomic } from \"./core/atomic-write.js\";\nimport { PI_CORE_TOOL_NAME_SET } from \"./core/pi-tools.js\";\nimport {\n CURRENT_FABRIC_CONFIG_VERSION,\n migrateFabricConfigDocument,\n} from \"./config-migrations.js\";\nimport type { FabricComponentEntry } from \"./components/types.js\";\nimport type { FabricRisk } from \"./protocol.js\";\nimport { DEFAULT_FABRIC_THINKING, isFabricThinking, type FabricThinking } from \"./thinking.js\";\nimport {\n defaultCodePreviewSettings,\n normalizeCodePreviewSettings,\n type CodePreviewSettings,\n} from \"./ui/code-preview.js\";\n\ntype FabricApprovalMode = \"allow\" | \"ask\" | \"auto\" | \"deny\";\nexport type FabricAgentTransport =\n | \"auto\"\n | \"process\"\n | \"tmux\"\n | \"screen\"\n | \"localterm\"\n | \"herdr\";\nexport type FabricAgentRunner = \"pi\" | \"claude\" | \"veda\";\nexport type FabricUiWidgetMode = \"auto\" | \"always\" | \"hidden\";\ntype FabricToolDisplayMode = \"full\" | \"compact\";\nexport type FabricResultFormat = \"auto\" | \"yaml\" | \"json\" | \"text\";\nexport type FabricPrewalkMode = \"in-place\" | \"trajectory\";\nexport type FabricExecutorRuntime = \"quickjs\" | \"node-process\";\nexport type FabricConfigScope = \"global\" | \"project\";\ntype FabricCompactionEngine = \"pi\" | \"fabric\";\ntype FabricActorScope = \"project\" | \"session\";\n\ninterface FabricExecutorConfig {\n runtime: FabricExecutorRuntime;\n timeoutMs: number;\n memoryLimitBytes: number;\n maxOutputChars: number;\n maxNestedResultChars: number;\n resultFormat: FabricResultFormat;\n}\n\nexport interface FabricApprovalConfig {\n read: FabricApprovalMode;\n write: FabricApprovalMode;\n execute: FabricApprovalMode;\n network: FabricApprovalMode;\n agent: FabricApprovalMode;\n model?: string;\n}\n\n/** Session-start background revalidation scope for the MCP descriptor cache:\n * \"changed\" lists only added/reconfigured servers, \"all\" re-lists every known\n * server, \"off\" never spawns servers in the background. */\ntype FabricMcpRevalidatePolicy = \"changed\" | \"all\" | \"off\";\n\ninterface FabricMcpCacheConfig {\n /** Serve MCP tool metadata from the on-disk descriptor cache instead of\n * connecting to every configured server on first discovery each session. */\n enabled: boolean;\n revalidate: FabricMcpRevalidatePolicy;\n /** Wall-clock budget for one session-start background revalidation pass. */\n revalidateBudgetMs: number;\n}\n\nexport interface FabricMcpConfig {\n enabled: boolean;\n configPath?: string;\n disableOAuth: boolean;\n allowDynamicServers: boolean;\n callTimeoutMs: number;\n cache: FabricMcpCacheConfig;\n /** Include cached MCP tools in the prompt-matched capability advisory. */\n advisory: boolean;\n}\n\ninterface FabricClaudeRunnerConfig {\n binary: string;\n model?: string;\n}\n\n/** Veda CLI options for the `veda` agent runner. The Veda CLI wraps external\n * backends (agy, codex, claude-code, droid, pi, and any backend registered by\n * the installed Veda build); the backend is selected here and the persona\n * controls read-only vs write-capable behavior. */\ninterface FabricVedaRunnerConfig {\n binary: string;\n /** Veda backend to drive. Defaults to the Antigravity CLI (agy). */\n backend: string;\n /** Optional backend-specific model or Veda model alias. */\n model?: string;\n /** Veda persona: navigator-plan, navigator-chat, reviewer, or worker. */\n persona: string;\n}\n\ninterface FabricPrewalkConfig {\n mode: FabricPrewalkMode;\n model?: string;\n alwaysRearm: boolean;\n // Compact with the configured engine just before restoring Main's boundary\n // model after an in-place continuation settles.\n compactOnReturn: boolean;\n // Filesystem fallback trigger: when an armed boundary ran a successful\n // pi.bash without an audited mutation, claim on stat-manifest drift so\n // shell heredocs / sed -i / formatter writes also hand off.\n detectShellWrites: boolean;\n // Reasoning effort for the trajectory executor; unset inherits agents.thinking.\n thinking?: FabricThinking;\n}\n\nexport interface FabricAgentConfig {\n enabled: boolean;\n runner: FabricAgentRunner;\n transport: FabricAgentTransport;\n model?: string;\n claude: FabricClaudeRunnerConfig;\n veda: FabricVedaRunnerConfig;\n thinking: FabricThinking;\n maxConcurrent: number;\n maxPerExecution: number;\n maxDepth: number;\n timeoutMs: number;\n extensions: boolean;\n defaultTools: string[];\n retainRuns: boolean;\n notifyOnComplete: boolean;\n budgetUsd: number;\n maxTokensPerChild: number;\n /** Write usage-only pi-format session files per agent run for external trackers. */\n sessionExport: boolean;\n /** Export store root override; PI_FABRIC_AGENT_DIR wins. Empty = ~/.pi-fabric/agent. */\n sessionExportDir: string;\n}\n\nexport type FabricCapabilityAdvisoryMode = \"enabled\" | \"hidden\" | \"disabled\";\n\nexport interface FabricCapabilityAdvisoryConfig {\n mode: FabricCapabilityAdvisoryMode;\n threshold: number;\n maxPerSession: number;\n /** Token ceiling for the advisory text (estimated as chars/4, like fovea's sync.budget). */\n budget: number;\n}\n\nexport interface FabricToolCaptureConfig {\n enabled: boolean;\n hideFromModel: boolean;\n keepVisible: string[];\n defaultRisk: FabricRisk;\n risks: Record<string, FabricRisk>;\n advisory: FabricCapabilityAdvisoryConfig;\n}\n\nexport type FabricSchemaMode = \"off\" | \"audit\" | \"enforce\";\n\nexport interface FabricSchemaTrustedCommand {\n command: string;\n args: string[];\n shell: boolean;\n timeoutMs: number;\n}\n\nexport interface FabricSchemaConfig {\n mode: FabricSchemaMode;\n certificateTtlMs: number;\n maxFiles: number;\n maxBytes: number;\n trustedCommands: Record<string, FabricSchemaTrustedCommand>;\n}\n\ninterface FabricUiConfig {\n enabled: boolean;\n widget: FabricUiWidgetMode;\n maxRows: number;\n refreshMs: number;\n eventHistory: number;\n haltOnEscape: boolean;\n showAgentToolPreview: boolean;\n toolDisplay: FabricToolDisplayMode;\n updateDebounceMs: number;\n}\n\ninterface FabricCompactionConfig {\n engine: FabricCompactionEngine;\n targetContextRatio: number;\n thresholds: Record<string, number>;\n tokenThresholds: Record<string, number>;\n}\n\nexport const MIN_COMPACTION_TOKEN_THRESHOLD = 1_000;\nexport const MAX_COMPACTION_TOKEN_THRESHOLD = 100_000_000;\nexport const MIN_COMPACTION_RATIO_THRESHOLD = 0.25;\nexport const MAX_COMPACTION_RATIO_THRESHOLD = 0.95;\n\nexport const clampCompactionTokenThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_TOKEN_THRESHOLD,\n Math.max(MIN_COMPACTION_TOKEN_THRESHOLD, Math.round(value)),\n );\n\nexport const clampCompactionRatioThreshold = (value: number): number =>\n Math.min(\n MAX_COMPACTION_RATIO_THRESHOLD,\n Math.max(MIN_COMPACTION_RATIO_THRESHOLD, value),\n );\n\nexport interface FabricRetentionConfig {\n orphanedTempRunMs: number;\n oneShotRunMs: number;\n actorRunArchiveMs: number;\n}\n\nexport interface FabricMeshConfig {\n enabled: boolean;\n root?: string;\n actorScope: FabricActorScope;\n maxEventBytes: number;\n maxReadEvents: number;\n actorPollMs: number;\n actorQueueLimit: number;\n eventContextChars: number;\n actorContextEntries: number;\n}\n\nexport interface FabricMemoryConfig {\n enabled: boolean;\n indexDir?: string;\n maxSessions: number;\n maxEntryChars: number;\n indexThinking: boolean;\n indexToolOutput: boolean;\n hotSessions?: number;\n digestTerms?: number;\n maxColdVocabularyBytes?: number;\n maxColdCacheBytes?: number;\n maxSyncSessions?: number;\n maxSyncSourceBytes?: number;\n maxCacheCleanupFiles?: number;\n regexMaxPatternBytes?: number;\n regexMaxHaystackTerms?: number;\n regexMaxHaystackBytes?: number;\n regexTimeoutMs?: number;\n}\n\nexport interface FabricConfig {\n fullCodeMode: boolean;\n executor: FabricExecutorConfig;\n approvals: FabricApprovalConfig;\n mcp: FabricMcpConfig;\n prewalk: FabricPrewalkConfig;\n agents: FabricAgentConfig;\n components: FabricComponentEntry[];\n capture: FabricToolCaptureConfig;\n ui: FabricUiConfig;\n compaction: FabricCompactionConfig;\n retention: FabricRetentionConfig;\n mesh: FabricMeshConfig;\n memory: FabricMemoryConfig;\n schema: FabricSchemaConfig;\n codePreview: CodePreviewSettings;\n}\n\nexport const MIN_AGENT_TIMEOUT_MS = 1_000;\nconst DEFAULT_AGENT_TIMEOUT_MS = 3_600_000;\nexport const MAX_AGENT_TIMEOUT_MS = 24 * 3_600_000;\nexport const QUICKJS_MAX_MEMORY_LIMIT_BYTES = 0xffff_ffff;\nexport const MAX_EXECUTOR_MEMORY_LIMIT_BYTES = Math.max(\n 8 * 1024 * 1024,\n Math.min(Number.MAX_SAFE_INTEGER, Math.floor(os.totalmem())),\n);\n\nexport const maxExecutorMemoryLimitBytes = (runtime: FabricExecutorRuntime): number =>\n runtime === \"quickjs\"\n ? Math.min(QUICKJS_MAX_MEMORY_LIMIT_BYTES, MAX_EXECUTOR_MEMORY_LIMIT_BYTES)\n : MAX_EXECUTOR_MEMORY_LIMIT_BYTES;\n\nexport const DEFAULT_FABRIC_CONFIG: FabricConfig = {\n fullCodeMode: true,\n executor: {\n runtime: \"quickjs\",\n timeoutMs: 120_000,\n memoryLimitBytes: 64 * 1024 * 1024,\n maxOutputChars: 50_000,\n maxNestedResultChars: 2_000_000,\n resultFormat: \"auto\",\n },\n approvals: {\n read: \"allow\",\n write: \"allow\",\n execute: \"allow\",\n network: \"allow\",\n agent: \"allow\",\n },\n mcp: {\n enabled: true,\n disableOAuth: true,\n allowDynamicServers: true,\n callTimeoutMs: 120_000,\n cache: {\n enabled: true,\n revalidate: \"changed\",\n revalidateBudgetMs: 60_000,\n },\n advisory: true,\n },\n prewalk: {\n mode: \"in-place\",\n alwaysRearm: false,\n compactOnReturn: true,\n detectShellWrites: true,\n },\n agents: {\n enabled: true,\n runner: \"pi\",\n transport: \"process\",\n claude: { binary: \"claude\" },\n veda: { binary: \"veda\", backend: \"agy\", persona: \"navigator-chat\" },\n thinking: DEFAULT_FABRIC_THINKING,\n maxConcurrent: 4,\n maxPerExecution: 100,\n maxDepth: 2,\n timeoutMs: DEFAULT_AGENT_TIMEOUT_MS,\n extensions: true,\n defaultTools: [\"read\", \"bash\", \"edit\", \"write\", \"grep\", \"find\", \"ls\"],\n retainRuns: false,\n notifyOnComplete: true,\n budgetUsd: 0,\n maxTokensPerChild: 0,\n sessionExport: true,\n sessionExportDir: \"\",\n },\n components: [],\n capture: {\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n defaultRisk: \"execute\",\n risks: {\n read: \"read\",\n grep: \"read\",\n find: \"read\",\n ls: \"read\",\n edit: \"write\",\n write: \"write\",\n bash: \"execute\",\n fovea_sketch: \"read\",\n fovea_focus: \"read\",\n fovea_dwell: \"read\",\n fovea_impact: \"read\",\n },\n advisory: {\n mode: \"enabled\",\n threshold: 0.9,\n // 2\u03C4 \u2212 1 with the advisory's patience scale \u03C4 = 2 (see docs/capability-combustion.md).\n maxPerSession: 3,\n budget: 512,\n },\n },\n ui: {\n enabled: true,\n widget: \"auto\",\n maxRows: 6,\n refreshMs: 500,\n eventHistory: 80,\n haltOnEscape: true,\n showAgentToolPreview: true,\n toolDisplay: \"compact\",\n updateDebounceMs: 100,\n },\n compaction: {\n engine: \"fabric\",\n targetContextRatio: 0.65,\n thresholds: {},\n tokenThresholds: {},\n },\n retention: {\n orphanedTempRunMs: 6 * 60 * 60 * 1_000,\n oneShotRunMs: 24 * 60 * 60 * 1_000,\n actorRunArchiveMs: 7 * 24 * 60 * 60 * 1_000,\n },\n mesh: {\n enabled: true,\n actorScope: \"project\",\n maxEventBytes: 256 * 1024,\n maxReadEvents: 500,\n actorPollMs: 250,\n actorQueueLimit: 32,\n eventContextChars: 40_000,\n actorContextEntries: 14,\n },\n memory: {\n enabled: true,\n maxSessions: 500,\n maxEntryChars: 2_000,\n indexThinking: false,\n indexToolOutput: true,\n hotSessions: 50,\n digestTerms: 200,\n maxColdVocabularyBytes: 512 * 1024,\n maxColdCacheBytes: 1024 * 1024,\n maxSyncSessions: 10_000,\n maxSyncSourceBytes: 512 * 1024 * 1024,\n maxCacheCleanupFiles: 100_000,\n regexMaxPatternBytes: 1_024,\n regexMaxHaystackTerms: 20_000,\n regexMaxHaystackBytes: 2 * 1024 * 1024,\n regexTimeoutMs: 250,\n },\n schema: {\n mode: \"off\",\n certificateTtlMs: 30_000,\n maxFiles: 100,\n maxBytes: 10 * 1024 * 1024,\n trustedCommands: {},\n },\n codePreview: defaultCodePreviewSettings(),\n};\n\ninterface JsonObjectFile {\n document: Record<string, unknown>;\n source: string;\n}\n\nconst readJsonObjectFile = (filePath: string): JsonObjectFile | undefined => {\n try {\n const source = fs.readFileSync(filePath, \"utf8\");\n const parsed: unknown = JSON.parse(source);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"configuration root must be an object\");\n }\n return { document: parsed as Record<string, unknown>, source };\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") return undefined;\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read ${filePath}: ${message}`);\n }\n};\n\nconst readJsonObject = (filePath: string): Record<string, unknown> | undefined =>\n readJsonObjectFile(filePath)?.document;\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const baseValue = merged[key];\n if (\n typeof baseValue === \"object\" &&\n baseValue !== null &&\n !Array.isArray(baseValue) &&\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n ) {\n merged[key] = mergeObjects(\n baseValue as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n merged[key] = value;\n }\n }\n return merged;\n};\n\nconst approvalMode = (value: unknown, fallback: FabricApprovalMode): FabricApprovalMode =>\n value === \"allow\" || value === \"ask\" || value === \"auto\" || value === \"deny\"\n ? value\n : fallback;\n\nconst booleanValue = (value: unknown, fallback: boolean): boolean =>\n typeof value === \"boolean\" ? value : fallback;\n\nconst boundedInteger = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isInteger(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst boundedFloat = (value: unknown, fallback: number, min: number, max: number): number =>\n typeof value === \"number\" && Number.isFinite(value)\n ? Math.max(min, Math.min(max, value))\n : fallback;\n\nconst stringValue = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value : undefined;\n\nconst runnerValue = (value: unknown, fallback: FabricAgentRunner): FabricAgentRunner =>\n value === \"pi\" || value === \"claude\" || value === \"veda\" ? value : fallback;\n\nconst prewalkModeValue = (\n value: unknown,\n fallback: FabricPrewalkMode,\n): FabricPrewalkMode =>\n value === \"in-place\" || value === \"trajectory\" ? value : fallback;\n\nconst transportValue = (\n value: unknown,\n fallback: FabricAgentTransport,\n): FabricAgentTransport =>\n value === \"auto\" ||\n value === \"process\" ||\n value === \"tmux\" ||\n value === \"screen\" ||\n value === \"localterm\" ||\n value === \"herdr\"\n ? value\n : fallback;\n\nconst thinkingValue = (value: unknown, fallback: FabricThinking): FabricThinking =>\n isFabricThinking(value) ? value : fallback;\n\nconst objectValue = (value: unknown): Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n\nconst widgetModeValue = (value: unknown, fallback: FabricUiWidgetMode): FabricUiWidgetMode =>\n value === \"auto\" || value === \"always\" || value === \"hidden\" ? value : fallback;\n\nconst toolDisplayModeValue = (\n value: unknown,\n fallback: FabricToolDisplayMode,\n): FabricToolDisplayMode => value === \"full\" || value === \"compact\" ? value : fallback;\n\nconst executorRuntimeValue = (\n value: unknown,\n fallback: FabricExecutorRuntime,\n): FabricExecutorRuntime =>\n value === \"quickjs\" || value === \"node-process\" ? value : fallback;\n\nconst resultFormatValue = (\n value: unknown,\n fallback: FabricResultFormat,\n): FabricResultFormat =>\n value === \"auto\" || value === \"yaml\" || value === \"json\" || value === \"text\"\n ? value\n : fallback;\n\nconst compactionEngineValue = (\n value: unknown,\n fallback: FabricCompactionEngine,\n): FabricCompactionEngine =>\n value === \"pi\" || value === \"fabric\" ? value : fallback;\n\nconst actorScopeValue = (value: unknown, fallback: FabricActorScope): FabricActorScope =>\n value === \"project\" || value === \"session\" ? value : fallback;\n\nconst schemaModeValue = (value: unknown, fallback: FabricSchemaMode): FabricSchemaMode =>\n value === \"off\" || value === \"audit\" || value === \"enforce\" ? value : fallback;\n\nconst advisoryModeValue = (\n value: unknown,\n fallback: FabricCapabilityAdvisoryMode,\n): FabricCapabilityAdvisoryMode =>\n value === \"enabled\" || value === \"hidden\" || value === \"disabled\" ? value : fallback;\n\nconst mcpRevalidatePolicyValue = (\n value: unknown,\n fallback: FabricMcpRevalidatePolicy,\n): FabricMcpRevalidatePolicy =>\n value === \"changed\" || value === \"all\" || value === \"off\" ? value : fallback;\n\nconst riskValue = (value: unknown, fallback: FabricRisk): FabricRisk =>\n value === \"read\" ||\n value === \"write\" ||\n value === \"execute\" ||\n value === \"network\" ||\n value === \"agent\"\n ? value\n : fallback;\n\nexport const normalizeFabricConfig = (input: Record<string, unknown>): FabricConfig => {\n const executor = objectValue(input.executor);\n const approvals = objectValue(input.approvals);\n const mcp = objectValue(input.mcp);\n const mcpCache = objectValue(mcp.cache);\n const prewalk = objectValue(input.prewalk);\n const agents = objectValue(input.agents);\n const claude = objectValue(agents.claude);\n const veda = objectValue(agents.veda);\n const capture = objectValue(input.capture);\n const ui = objectValue(input.ui);\n const compaction = objectValue(input.compaction);\n const retention = objectValue(input.retention);\n const mesh = objectValue(input.mesh);\n const memory = objectValue(input.memory);\n const schema = objectValue(input.schema);\n const schemaMode = schemaModeValue(schema.mode, DEFAULT_FABRIC_CONFIG.schema.mode);\n const configuredExecutorRuntime = executorRuntimeValue(\n executor.runtime,\n DEFAULT_FABRIC_CONFIG.executor.runtime,\n );\n const executorRuntime = schemaMode === \"enforce\" ? \"quickjs\" : configuredExecutorRuntime;\n const configuredTools = Array.isArray(agents.defaultTools)\n ? agents.defaultTools.filter(\n (tool): tool is string => typeof tool === \"string\" && Boolean(tool),\n )\n : DEFAULT_FABRIC_CONFIG.agents.defaultTools;\n const approvalModel = stringValue(approvals.model);\n const configPath = stringValue(mcp.configPath);\n const meshRoot = stringValue(mesh.root);\n const memoryIndexDir = stringValue(memory.indexDir);\n const compactionThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.thresholds))\n .filter(([model, threshold]) =>\n model.includes(\"/\")\n && typeof threshold === \"number\"\n && Number.isFinite(threshold),\n )\n .map(([model, threshold]) => [\n model,\n clampCompactionRatioThreshold(threshold as number),\n ]),\n );\n const compactionTokenThresholds = Object.fromEntries(\n Object.entries(objectValue(compaction.tokenThresholds))\n .filter(([model, tokens]) =>\n model.includes(\"/\")\n && typeof tokens === \"number\"\n && Number.isFinite(tokens),\n )\n .map(([model, tokens]) => [\n model,\n clampCompactionTokenThreshold(tokens as number),\n ]),\n );\n const prewalkModel = stringValue(prewalk.model);\n const prewalkThinking = isFabricThinking(prewalk.thinking) ? prewalk.thinking : undefined;\n const agentModel = stringValue(agents.model);\n const claudeBinary = stringValue(claude.binary);\n const claudeModel = stringValue(claude.model);\n const vedaBinary = stringValue(veda.binary);\n const vedaBackend = stringValue(veda.backend);\n const vedaModel = stringValue(veda.model);\n const vedaPersona = stringValue(veda.persona);\n const agentThinking = thinkingValue(agents.thinking, DEFAULT_FABRIC_CONFIG.agents.thinking);\n const configuredComponents: FabricComponentEntry[] = Array.isArray(input.components)\n ? input.components.flatMap((raw) => {\n const componentEntry = objectValue(raw);\n const id = stringValue(componentEntry.id);\n const component = stringValue(componentEntry.component);\n if (!id || !component) return [];\n return [{\n id,\n component,\n ...(Object.prototype.hasOwnProperty.call(componentEntry, \"config\")\n ? { config: componentEntry.config }\n : {}),\n ...(typeof componentEntry.disabled === \"boolean\"\n ? { disabled: componentEntry.disabled }\n : {}),\n }];\n }).slice(0, 256)\n : DEFAULT_FABRIC_CONFIG.components;\n const configuredVisible = Array.isArray(capture.keepVisible)\n ? capture.keepVisible.filter(\n (name): name is string => typeof name === \"string\" && Boolean(name.trim()),\n )\n : DEFAULT_FABRIC_CONFIG.capture.keepVisible;\n const configuredRisks = {\n ...DEFAULT_FABRIC_CONFIG.capture.risks,\n ...objectValue(capture.risks),\n };\n const configuredAdvisory = objectValue(capture.advisory);\n const trustedCommands = Object.fromEntries(\n Object.entries(objectValue(schema.trustedCommands)).flatMap(([name, raw]) => {\n if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(name)) return [];\n const command = objectValue(raw);\n const executable = stringValue(command.command);\n if (!executable) return [];\n const shell = booleanValue(command.shell, false);\n const args = !shell && Array.isArray(command.args)\n ? command.args.filter((arg): arg is string => typeof arg === \"string\").slice(0, 64)\n : [];\n return [[name, {\n command: executable,\n args,\n shell,\n timeoutMs: boundedInteger(command.timeoutMs, 30_000, 1, 300_000),\n } satisfies FabricSchemaTrustedCommand]];\n }),\n );\n const risks = Object.fromEntries(\n Object.entries(configuredRisks)\n .filter(([name]) => Boolean(name.trim()))\n .map(([name, risk]) => [name, riskValue(risk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk)]),\n );\n\n return {\n fullCodeMode: booleanValue(input.fullCodeMode, DEFAULT_FABRIC_CONFIG.fullCodeMode),\n executor: {\n runtime: executorRuntime,\n timeoutMs: boundedInteger(\n executor.timeoutMs,\n DEFAULT_FABRIC_CONFIG.executor.timeoutMs,\n 1_000,\n 900_000,\n ),\n memoryLimitBytes: boundedInteger(\n executor.memoryLimitBytes,\n DEFAULT_FABRIC_CONFIG.executor.memoryLimitBytes,\n 8 * 1024 * 1024,\n maxExecutorMemoryLimitBytes(executorRuntime),\n ),\n maxOutputChars: boundedInteger(\n executor.maxOutputChars,\n DEFAULT_FABRIC_CONFIG.executor.maxOutputChars,\n 1_000,\n 1_000_000,\n ),\n maxNestedResultChars: boundedInteger(\n executor.maxNestedResultChars,\n DEFAULT_FABRIC_CONFIG.executor.maxNestedResultChars,\n 10_000,\n 20_000_000,\n ),\n resultFormat: resultFormatValue(\n executor.resultFormat,\n DEFAULT_FABRIC_CONFIG.executor.resultFormat,\n ),\n },\n approvals: {\n read: approvalMode(approvals.read, DEFAULT_FABRIC_CONFIG.approvals.read),\n write: approvalMode(approvals.write, DEFAULT_FABRIC_CONFIG.approvals.write),\n execute: approvalMode(approvals.execute, DEFAULT_FABRIC_CONFIG.approvals.execute),\n network: approvalMode(approvals.network, DEFAULT_FABRIC_CONFIG.approvals.network),\n agent: approvalMode(approvals.agent, DEFAULT_FABRIC_CONFIG.approvals.agent),\n ...(approvalModel ? { model: approvalModel } : {}),\n },\n mcp: {\n enabled: booleanValue(mcp.enabled, DEFAULT_FABRIC_CONFIG.mcp.enabled),\n ...(configPath ? { configPath } : {}),\n disableOAuth: booleanValue(mcp.disableOAuth, DEFAULT_FABRIC_CONFIG.mcp.disableOAuth),\n allowDynamicServers: booleanValue(\n mcp.allowDynamicServers,\n DEFAULT_FABRIC_CONFIG.mcp.allowDynamicServers,\n ),\n callTimeoutMs: boundedInteger(\n mcp.callTimeoutMs,\n DEFAULT_FABRIC_CONFIG.mcp.callTimeoutMs,\n 1_000,\n 900_000,\n ),\n cache: {\n enabled: booleanValue(mcpCache.enabled, DEFAULT_FABRIC_CONFIG.mcp.cache.enabled),\n revalidate: mcpRevalidatePolicyValue(\n mcpCache.revalidate,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidate,\n ),\n revalidateBudgetMs: boundedInteger(\n mcpCache.revalidateBudgetMs,\n DEFAULT_FABRIC_CONFIG.mcp.cache.revalidateBudgetMs,\n 1_000,\n 600_000,\n ),\n },\n advisory: booleanValue(mcp.advisory, DEFAULT_FABRIC_CONFIG.mcp.advisory),\n },\n prewalk: {\n mode: prewalkModeValue(prewalk.mode, DEFAULT_FABRIC_CONFIG.prewalk.mode),\n ...(prewalkModel ? { model: prewalkModel } : {}),\n ...(prewalkThinking ? { thinking: prewalkThinking } : {}),\n alwaysRearm: booleanValue(\n prewalk.alwaysRearm,\n DEFAULT_FABRIC_CONFIG.prewalk.alwaysRearm,\n ),\n compactOnReturn: booleanValue(\n prewalk.compactOnReturn,\n DEFAULT_FABRIC_CONFIG.prewalk.compactOnReturn,\n ),\n detectShellWrites: booleanValue(\n prewalk.detectShellWrites,\n DEFAULT_FABRIC_CONFIG.prewalk.detectShellWrites,\n ),\n },\n agents: {\n enabled: booleanValue(agents.enabled, DEFAULT_FABRIC_CONFIG.agents.enabled),\n runner: runnerValue(agents.runner, DEFAULT_FABRIC_CONFIG.agents.runner),\n transport: transportValue(agents.transport, DEFAULT_FABRIC_CONFIG.agents.transport),\n ...(agentModel ? { model: agentModel } : {}),\n claude: {\n binary: claudeBinary ?? DEFAULT_FABRIC_CONFIG.agents.claude.binary,\n ...(claudeModel ? { model: claudeModel } : {}),\n },\n veda: {\n binary: vedaBinary ?? DEFAULT_FABRIC_CONFIG.agents.veda.binary,\n backend: vedaBackend ?? DEFAULT_FABRIC_CONFIG.agents.veda.backend,\n ...(vedaModel ? { model: vedaModel } : {}),\n persona: vedaPersona ?? DEFAULT_FABRIC_CONFIG.agents.veda.persona,\n },\n thinking: agentThinking,\n maxConcurrent: boundedInteger(\n agents.maxConcurrent,\n DEFAULT_FABRIC_CONFIG.agents.maxConcurrent,\n 1,\n 32,\n ),\n maxPerExecution: boundedInteger(\n agents.maxPerExecution,\n DEFAULT_FABRIC_CONFIG.agents.maxPerExecution,\n 1,\n 1_000,\n ),\n maxDepth: boundedInteger(\n agents.maxDepth,\n DEFAULT_FABRIC_CONFIG.agents.maxDepth,\n 0,\n Number.MAX_SAFE_INTEGER,\n ),\n timeoutMs: boundedInteger(\n agents.timeoutMs,\n DEFAULT_FABRIC_CONFIG.agents.timeoutMs,\n MIN_AGENT_TIMEOUT_MS,\n MAX_AGENT_TIMEOUT_MS,\n ),\n extensions: booleanValue(agents.extensions, DEFAULT_FABRIC_CONFIG.agents.extensions),\n defaultTools: configuredTools,\n retainRuns: booleanValue(agents.retainRuns, DEFAULT_FABRIC_CONFIG.agents.retainRuns),\n notifyOnComplete: booleanValue(\n agents.notifyOnComplete,\n DEFAULT_FABRIC_CONFIG.agents.notifyOnComplete,\n ),\n budgetUsd: boundedFloat(\n agents.budgetUsd,\n DEFAULT_FABRIC_CONFIG.agents.budgetUsd,\n 0,\n 1_000_000,\n ),\n maxTokensPerChild: boundedInteger(\n agents.maxTokensPerChild,\n DEFAULT_FABRIC_CONFIG.agents.maxTokensPerChild,\n 0,\n 100_000_000,\n ),\n sessionExport: booleanValue(\n agents.sessionExport,\n DEFAULT_FABRIC_CONFIG.agents.sessionExport,\n ),\n sessionExportDir:\n typeof agents.sessionExportDir === \"string\"\n ? agents.sessionExportDir\n : DEFAULT_FABRIC_CONFIG.agents.sessionExportDir,\n },\n components: configuredComponents.map((entry) => structuredClone(entry)),\n capture: {\n enabled: booleanValue(capture.enabled, DEFAULT_FABRIC_CONFIG.capture.enabled),\n hideFromModel: booleanValue(\n capture.hideFromModel,\n DEFAULT_FABRIC_CONFIG.capture.hideFromModel,\n ),\n keepVisible: [...new Set(configuredVisible)],\n defaultRisk: riskValue(capture.defaultRisk, DEFAULT_FABRIC_CONFIG.capture.defaultRisk),\n risks,\n advisory: {\n mode: advisoryModeValue(configuredAdvisory.mode, DEFAULT_FABRIC_CONFIG.capture.advisory.mode),\n threshold: boundedFloat(\n configuredAdvisory.threshold,\n DEFAULT_FABRIC_CONFIG.capture.advisory.threshold,\n 0,\n 1_000,\n ),\n maxPerSession: boundedInteger(\n configuredAdvisory.maxPerSession,\n DEFAULT_FABRIC_CONFIG.capture.advisory.maxPerSession,\n 1,\n 50,\n ),\n budget: boundedInteger(\n configuredAdvisory.budget,\n DEFAULT_FABRIC_CONFIG.capture.advisory.budget,\n 128,\n 8192,\n ),\n },\n },\n ui: {\n enabled: booleanValue(ui.enabled, DEFAULT_FABRIC_CONFIG.ui.enabled),\n widget: widgetModeValue(ui.widget, DEFAULT_FABRIC_CONFIG.ui.widget),\n maxRows: boundedInteger(ui.maxRows, DEFAULT_FABRIC_CONFIG.ui.maxRows, 1, 20),\n refreshMs: boundedInteger(ui.refreshMs, DEFAULT_FABRIC_CONFIG.ui.refreshMs, 100, 10_000),\n eventHistory: boundedInteger(\n ui.eventHistory,\n DEFAULT_FABRIC_CONFIG.ui.eventHistory,\n 1,\n 500,\n ),\n haltOnEscape: booleanValue(ui.haltOnEscape, DEFAULT_FABRIC_CONFIG.ui.haltOnEscape),\n // Renamed from ui.showNestedToolCalls; the v2 migration rewrites persisted\n // files, and this fallback covers configs normalized without migration.\n showAgentToolPreview: booleanValue(\n ui.showAgentToolPreview ?? ui.showNestedToolCalls,\n DEFAULT_FABRIC_CONFIG.ui.showAgentToolPreview,\n ),\n toolDisplay: toolDisplayModeValue(\n ui.toolDisplay,\n DEFAULT_FABRIC_CONFIG.ui.toolDisplay,\n ),\n // Renamed from ui.nestedToolDebounceMs (v3): the window coalesces every\n // live fabric_exec card update \u2014 nested calls, progress, agent previews.\n updateDebounceMs: boundedInteger(\n ui.updateDebounceMs ?? ui.nestedToolDebounceMs,\n DEFAULT_FABRIC_CONFIG.ui.updateDebounceMs,\n 0,\n 2_000,\n ),\n },\n compaction: {\n engine: compactionEngineValue(compaction.engine, DEFAULT_FABRIC_CONFIG.compaction.engine),\n targetContextRatio: boundedFloat(\n compaction.targetContextRatio,\n DEFAULT_FABRIC_CONFIG.compaction.targetContextRatio,\n 0.25,\n 0.85,\n ),\n thresholds: compactionThresholds,\n tokenThresholds: compactionTokenThresholds,\n },\n retention: {\n orphanedTempRunMs: boundedInteger(\n retention.orphanedTempRunMs,\n DEFAULT_FABRIC_CONFIG.retention.orphanedTempRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n oneShotRunMs: boundedInteger(\n retention.oneShotRunMs,\n DEFAULT_FABRIC_CONFIG.retention.oneShotRunMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n actorRunArchiveMs: boundedInteger(\n retention.actorRunArchiveMs,\n DEFAULT_FABRIC_CONFIG.retention.actorRunArchiveMs,\n 60 * 60 * 1_000,\n 365 * 24 * 60 * 60 * 1_000,\n ),\n },\n mesh: {\n enabled: booleanValue(mesh.enabled, DEFAULT_FABRIC_CONFIG.mesh.enabled),\n ...(meshRoot ? { root: meshRoot } : {}),\n actorScope: actorScopeValue(mesh.actorScope, DEFAULT_FABRIC_CONFIG.mesh.actorScope),\n maxEventBytes: boundedInteger(\n mesh.maxEventBytes,\n DEFAULT_FABRIC_CONFIG.mesh.maxEventBytes,\n 1_024,\n 4 * 1024 * 1024,\n ),\n maxReadEvents: boundedInteger(\n mesh.maxReadEvents,\n DEFAULT_FABRIC_CONFIG.mesh.maxReadEvents,\n 1,\n 10_000,\n ),\n actorPollMs: boundedInteger(\n mesh.actorPollMs,\n DEFAULT_FABRIC_CONFIG.mesh.actorPollMs,\n 50,\n 10_000,\n ),\n actorQueueLimit: boundedInteger(\n mesh.actorQueueLimit,\n DEFAULT_FABRIC_CONFIG.mesh.actorQueueLimit,\n 1,\n 1_000,\n ),\n eventContextChars: boundedInteger(\n mesh.eventContextChars,\n DEFAULT_FABRIC_CONFIG.mesh.eventContextChars,\n 1_000,\n 1_000_000,\n ),\n actorContextEntries: boundedInteger(\n mesh.actorContextEntries,\n DEFAULT_FABRIC_CONFIG.mesh.actorContextEntries,\n 1,\n 100,\n ),\n },\n memory: {\n enabled: booleanValue(memory.enabled, DEFAULT_FABRIC_CONFIG.memory.enabled),\n ...(memoryIndexDir ? { indexDir: memoryIndexDir } : {}),\n maxSessions: boundedInteger(\n memory.maxSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSessions,\n 1,\n 100_000,\n ),\n maxEntryChars: boundedInteger(\n memory.maxEntryChars,\n DEFAULT_FABRIC_CONFIG.memory.maxEntryChars,\n 100,\n 1_000_000,\n ),\n indexThinking: booleanValue(\n memory.indexThinking,\n DEFAULT_FABRIC_CONFIG.memory.indexThinking ?? false,\n ),\n indexToolOutput: booleanValue(\n memory.indexToolOutput,\n DEFAULT_FABRIC_CONFIG.memory.indexToolOutput ?? true,\n ),\n hotSessions: boundedInteger(\n memory.hotSessions,\n DEFAULT_FABRIC_CONFIG.memory.hotSessions ?? 50,\n 0,\n 100_000,\n ),\n digestTerms: boundedInteger(\n memory.digestTerms,\n DEFAULT_FABRIC_CONFIG.memory.digestTerms ?? 200,\n 1,\n 10_000,\n ),\n maxColdVocabularyBytes: boundedInteger(\n memory.maxColdVocabularyBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdVocabularyBytes ?? 512 * 1024,\n 2,\n 64 * 1024 * 1024,\n ),\n maxColdCacheBytes: boundedInteger(\n memory.maxColdCacheBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxColdCacheBytes ?? 1024 * 1024,\n 512,\n 128 * 1024 * 1024,\n ),\n maxSyncSessions: boundedInteger(\n memory.maxSyncSessions,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSessions ?? 10_000,\n 1,\n 1_000_000,\n ),\n maxSyncSourceBytes: boundedInteger(\n memory.maxSyncSourceBytes,\n DEFAULT_FABRIC_CONFIG.memory.maxSyncSourceBytes ?? 512 * 1024 * 1024,\n 1_024,\n 8 * 1024 * 1024 * 1024,\n ),\n maxCacheCleanupFiles: boundedInteger(\n memory.maxCacheCleanupFiles,\n DEFAULT_FABRIC_CONFIG.memory.maxCacheCleanupFiles ?? 100_000,\n 1,\n 1_000_000,\n ),\n regexMaxPatternBytes: boundedInteger(\n memory.regexMaxPatternBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxPatternBytes ?? 1_024,\n 1,\n 64 * 1024,\n ),\n regexMaxHaystackTerms: boundedInteger(\n memory.regexMaxHaystackTerms,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackTerms ?? 20_000,\n 1,\n 1_000_000,\n ),\n regexMaxHaystackBytes: boundedInteger(\n memory.regexMaxHaystackBytes,\n DEFAULT_FABRIC_CONFIG.memory.regexMaxHaystackBytes ?? 2 * 1024 * 1024,\n 1_024,\n 128 * 1024 * 1024,\n ),\n regexTimeoutMs: boundedInteger(\n memory.regexTimeoutMs,\n DEFAULT_FABRIC_CONFIG.memory.regexTimeoutMs ?? 250,\n 10,\n 10_000,\n ),\n },\n schema: {\n mode: schemaMode,\n certificateTtlMs: boundedInteger(\n schema.certificateTtlMs,\n DEFAULT_FABRIC_CONFIG.schema.certificateTtlMs,\n 1_000,\n 10 * 60_000,\n ),\n maxFiles: boundedInteger(\n schema.maxFiles,\n DEFAULT_FABRIC_CONFIG.schema.maxFiles,\n 1,\n 1_000,\n ),\n maxBytes: boundedInteger(\n schema.maxBytes,\n DEFAULT_FABRIC_CONFIG.schema.maxBytes,\n 1_024,\n 100 * 1024 * 1024,\n ),\n trustedCommands,\n },\n codePreview: normalizeCodePreviewSettings(input.codePreview),\n };\n};\n\nexport const effectiveToolCaptureConfig = (\n config: Pick<FabricConfig, \"fullCodeMode\" | \"capture\"> & Partial<Pick<FabricConfig, \"schema\">>,\n): FabricToolCaptureConfig =>\n config.schema?.mode === \"enforce\"\n ? {\n ...config.capture,\n enabled: true,\n hideFromModel: true,\n keepVisible: [\"fabric_exec\"],\n risks: { ...config.capture.risks },\n }\n : config.fullCodeMode\n ? {\n ...config.capture,\n keepVisible: config.capture.keepVisible.filter(\n (name) => !PI_CORE_TOOL_NAME_SET.has(name),\n ),\n risks: { ...config.capture.risks },\n }\n : {\n ...config.capture,\n enabled: false,\n hideFromModel: false,\n keepVisible: [...config.capture.keepVisible],\n risks: { ...config.capture.risks },\n };\n\ninterface FabricConfigFilePlan {\n path: string;\n document: Record<string, unknown>;\n source: string;\n changed: boolean;\n}\n\nconst planConfigFile = (filePath: string): FabricConfigFilePlan | undefined => {\n const input = readJsonObjectFile(filePath);\n if (!input) return undefined;\n const migration = migrateFabricConfigDocument(input.document);\n return {\n path: filePath,\n document: migration.document,\n source: input.source,\n changed: migration.changed,\n };\n};\n\nconst writeJsonAtomic = (\n filePath: string,\n document: Record<string, unknown>,\n expectedSource?: string,\n): void => {\n const resolvedPath = fs.existsSync(filePath) ? fs.realpathSync(filePath) : filePath;\n const directory = path.dirname(resolvedPath);\n if (!fs.existsSync(directory)) fs.mkdirSync(directory, { recursive: true });\n const mode = fs.existsSync(resolvedPath) ? fs.statSync(resolvedPath).mode & 0o777 : 0o600;\n const temporaryPath = path.join(\n directory,\n `.${path.basename(resolvedPath)}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`,\n );\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(temporaryPath, \"wx\", mode);\n fs.writeFileSync(descriptor, `${JSON.stringify(document, null, 2)}\\n`, \"utf8\");\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n descriptor = undefined;\n if (expectedSource !== undefined) {\n let currentSource: string;\n try {\n currentSource = fs.readFileSync(resolvedPath, \"utf8\");\n } catch (error) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`, { cause: error });\n }\n if (currentSource !== expectedSource) {\n throw new Error(`Fabric configuration changed while updating ${filePath}`);\n }\n }\n renameAtomic(temporaryPath, resolvedPath);\n try {\n const directoryDescriptor = fs.openSync(directory, \"r\");\n try {\n fs.fsyncSync(directoryDescriptor);\n } finally {\n fs.closeSync(directoryDescriptor);\n }\n } catch (error) {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n if (code !== \"EINVAL\" && code !== \"ENOTSUP\" && code !== \"EISDIR\" && code !== \"EPERM\") throw error;\n }\n } catch (error) {\n if (descriptor !== undefined) fs.closeSync(descriptor);\n fs.rmSync(temporaryPath, { force: true });\n throw error;\n }\n};\n\nconst resolveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n },\n includeProject: boolean,\n): FabricConfig => {\n let merged = structuredClone(DEFAULT_FABRIC_CONFIG) as unknown as Record<string, unknown>;\n const plans = [\n planConfigFile(path.join(options.agentDir, \"fabric.json\")),\n ...(includeProject\n ? [planConfigFile(path.join(options.cwd, \".pi\", \"fabric.json\"))]\n : []),\n ].filter((plan): plan is FabricConfigFilePlan => plan !== undefined);\n for (const plan of plans) {\n if (plan.changed) writeJsonAtomic(plan.path, plan.document, plan.source);\n merged = mergeObjects(merged, plan.document);\n }\n const inheritedFullCodeMode = process.env.PI_FABRIC_FULL_CODE_MODE;\n if (inheritedFullCodeMode === \"true\" || inheritedFullCodeMode === \"false\") {\n merged.fullCodeMode = inheritedFullCodeMode === \"true\";\n }\n return normalizeFabricConfig(merged);\n};\n\nexport const loadFabricConfigForScope = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n },\n scope: FabricConfigScope,\n): FabricConfig => {\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot load project Fabric configuration for an untrusted project\");\n }\n return resolveFabricConfig(options, scope === \"project\");\n};\n\nexport const loadFabricConfig = (options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n}): FabricConfig => {\n const config = resolveFabricConfig(options, options.projectTrusted);\n if (config.compaction.engine === \"fabric\") {\n process.env.PI_FABRIC_COMPACTION_ENGINE = \"fabric\";\n } else {\n delete process.env.PI_FABRIC_COMPACTION_ENGINE;\n }\n return config;\n};\n\nexport const saveFabricConfig = (\n options: {\n cwd: string;\n agentDir: string;\n projectTrusted: boolean;\n scope?: FabricConfigScope;\n },\n partial: Record<string, unknown>,\n): { scope: FabricConfigScope; path: string } => {\n const scope = options.scope ?? (options.projectTrusted ? \"project\" : \"global\");\n if (scope === \"project\" && !options.projectTrusted) {\n throw new Error(\"Cannot save project Fabric configuration for an untrusted project\");\n }\n const targetPath = scope === \"project\"\n ? path.join(options.cwd, \".pi\", \"fabric.json\")\n : path.join(options.agentDir, \"fabric.json\");\n if (Object.hasOwn(partial, \"configVersion\") || Object.hasOwn(partial, \"subagents\")) {\n throw new Error(\"Fabric configuration updates must use the current schema\");\n }\n const input = readJsonObjectFile(targetPath);\n const existing = migrateFabricConfigDocument(input?.document ?? {}).document;\n const merged = mergeObjects(existing, partial) as Record<string, unknown>;\n // Never stamp down: preserve version markers written by newer builds.\n merged.configVersion = Math.max(\n typeof merged.configVersion === \"number\" ? merged.configVersion : 0,\n CURRENT_FABRIC_CONFIG_VERSION,\n );\n writeJsonAtomic(targetPath, merged, input?.source);\n return { scope, path: targetPath };\n};\n", "export const CURRENT_FABRIC_CONFIG_VERSION = 3;\n\nexport interface FabricConfigMigrationResult {\n document: Record<string, unknown>;\n fromVersion: number;\n toVersion: number;\n appliedVersions: number[];\n changed: boolean;\n // True when the document was written by a newer pi-fabric build. The document\n // is accepted as-is (newer builds only add semantics older builds can safely\n // ignore) and is never rewritten or version-stamped down.\n forwardCompatible: boolean;\n}\n\ninterface FabricConfigMigration {\n from: number;\n to: number;\n migrate(document: Readonly<Record<string, unknown>>): Record<string, unknown>;\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst mergeObjects = (\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const current = merged[key];\n merged[key] = isObject(current) && isObject(value) ? mergeObjects(current, value) : value;\n }\n return merged;\n};\n\nconst migrations: readonly FabricConfigMigration[] = [\n {\n from: 0,\n to: 1,\n migrate(document) {\n const migrated = { ...document };\n const legacy = migrated.subagents;\n const canonical = migrated.agents;\n if (legacy !== undefined) {\n if (canonical !== undefined && isObject(legacy) !== isObject(canonical)) {\n throw new Error(\n \"Fabric configuration cannot merge legacy subagents with a malformed agents section\",\n );\n }\n migrated.agents = isObject(legacy) && isObject(canonical)\n ? mergeObjects(legacy, canonical)\n : canonical ?? legacy;\n }\n delete migrated.subagents;\n return migrated;\n },\n },\n {\n from: 1,\n to: 2,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"showNestedToolCalls\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"showAgentToolPreview\")) {\n renamed.showAgentToolPreview = renamed.showNestedToolCalls;\n }\n delete renamed.showNestedToolCalls;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n {\n from: 2,\n to: 3,\n migrate(document) {\n const migrated = { ...document };\n const ui = migrated.ui;\n if (isObject(ui) && Object.hasOwn(ui, \"nestedToolDebounceMs\")) {\n const renamed = { ...ui };\n if (!Object.hasOwn(renamed, \"updateDebounceMs\")) {\n renamed.updateDebounceMs = renamed.nestedToolDebounceMs;\n }\n delete renamed.nestedToolDebounceMs;\n migrated.ui = renamed;\n }\n return migrated;\n },\n },\n];\n\nconst configVersion = (document: Readonly<Record<string, unknown>>): number => {\n const value = document.configVersion;\n if (value === undefined) return 0;\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n throw new Error(\"Fabric configuration configVersion must be a non-negative integer\");\n }\n return value;\n};\n\nexport const migrateFabricConfigDocument = (\n input: Readonly<Record<string, unknown>>,\n): FabricConfigMigrationResult => {\n const fromVersion = configVersion(input);\n if (fromVersion > CURRENT_FABRIC_CONFIG_VERSION) {\n // Written by a newer build: accept as-is instead of bricking the\n // extension. Legacy-shape checks (e.g. the removed subagents key) apply to\n // supported versions only \u2014 newer semantics are unknown here.\n return {\n document: structuredClone(input) as Record<string, unknown>,\n fromVersion,\n toVersion: fromVersion,\n appliedVersions: [],\n changed: false,\n forwardCompatible: true,\n };\n }\n let version = fromVersion;\n let document = structuredClone(input) as Record<string, unknown>;\n const appliedVersions: number[] = [];\n\n while (version < CURRENT_FABRIC_CONFIG_VERSION) {\n const migration = migrations.find((candidate) => candidate.from === version);\n if (!migration || migration.to !== version + 1) {\n throw new Error(`No Fabric configuration migration exists for version ${version}`);\n }\n document = migration.migrate(document);\n version = migration.to;\n document.configVersion = version;\n appliedVersions.push(version);\n }\n\n if (Object.hasOwn(document, \"subagents\")) {\n throw new Error(\"Current Fabric configuration contains removed key subagents\");\n }\n\n return {\n document,\n fromVersion,\n toVersion: version,\n appliedVersions,\n changed: appliedVersions.length > 0,\n forwardCompatible: false,\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fs", "path", "fs", "mergeObjects", "writeJsonAtomic", "fs", "path"]
|
|
7
7
|
}
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
resolveActorDeliveryPolicy,
|
|
64
64
|
resolveAgentCwd,
|
|
65
65
|
validateAgentCwdRequest
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-5PMNF4ON.js";
|
|
67
67
|
import {
|
|
68
68
|
executeFile,
|
|
69
69
|
processIsAlive,
|
|
@@ -84,7 +84,7 @@ import {
|
|
|
84
84
|
MIN_AGENT_TIMEOUT_MS,
|
|
85
85
|
loadFabricConfig,
|
|
86
86
|
writeJsonAtomic
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-QEP3ZBVZ.js";
|
|
88
88
|
import {
|
|
89
89
|
PI_CORE_TOOL_NAMES
|
|
90
90
|
} from "./chunk-R7ZFQATZ.js";
|
|
@@ -11061,4 +11061,4 @@ var deepAssign = (target, source) => {
|
|
|
11061
11061
|
export {
|
|
11062
11062
|
FabricRuntimeState
|
|
11063
11063
|
};
|
|
11064
|
-
//# sourceMappingURL=fabric-runtime-state-
|
|
11064
|
+
//# sourceMappingURL=fabric-runtime-state-XXAABN22.js.map
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
loadFabricConfigForScope,
|
|
23
23
|
maxExecutorMemoryLimitBytes,
|
|
24
24
|
saveFabricConfig
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-QEP3ZBVZ.js";
|
|
26
26
|
import "./chunk-R7ZFQATZ.js";
|
|
27
27
|
import {
|
|
28
28
|
THINKING_LEVELS,
|
|
@@ -1602,4 +1602,4 @@ export {
|
|
|
1602
1602
|
parseFormattedNumericValue,
|
|
1603
1603
|
populateClaudeModelSource
|
|
1604
1604
|
};
|
|
1605
|
-
//# sourceMappingURL=settings-
|
|
1605
|
+
//# sourceMappingURL=settings-W2242VKH.js.map
|
|
@@ -5,6 +5,7 @@ export interface FabricConfigMigrationResult {
|
|
|
5
5
|
toVersion: number;
|
|
6
6
|
appliedVersions: number[];
|
|
7
7
|
changed: boolean;
|
|
8
|
+
forwardCompatible: boolean;
|
|
8
9
|
}
|
|
9
10
|
export declare const migrateFabricConfigDocument: (input: Readonly<Record<string, unknown>>) => FabricConfigMigrationResult;
|
|
10
11
|
//# sourceMappingURL=config-migrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-migrations.d.ts","sourceRoot":"","sources":["../src/config-migrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config-migrations.d.ts","sourceRoot":"","sources":["../src/config-migrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IAIjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AA0FD,eAAO,MAAM,2BAA2B,GACtC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACvC,2BA0CF,CAAC"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|