pi-fabric 0.87.0 → 0.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/chunks/{chunk-7RPCSGQM.js → chunk-MBUOWFDL.js} +12 -2
- package/dist/chunks/chunk-MBUOWFDL.js.map +7 -0
- package/dist/chunks/{chunk-GRA2PF4H.js → chunk-Z3AEX7SQ.js} +1 -2
- package/dist/commands/fabric.d.ts.map +1 -1
- package/dist/core/kernel-skills.d.ts +1 -8
- package/dist/core/kernel-skills.d.ts.map +1 -1
- package/dist/fabric-runtime-state.js +1 -1
- package/dist/fabric-state.d.ts +1 -0
- package/dist/fabric-state.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -72
- package/dist/index.js.map +3 -3
- package/dist/ui/settings.d.ts +1 -0
- package/dist/ui/settings.d.ts.map +1 -1
- package/dist/ui/settings.js +10 -2
- package/dist/ui/settings.js.map +2 -2
- package/docs/agents.md +8 -6
- package/docs/configuration.md +1 -1
- package/docs/kernels.md +6 -9
- package/docs/skills.md +3 -3
- package/package.json +3 -5
- package/skillsets/python/fabric-advisor/SKILL.md +29 -0
- package/{skills → skillsets/python}/fabric-ambient/SKILL.md +0 -2
- package/skillsets/python/fabric-ambient/references/setup.md +67 -0
- package/skillsets/python/fabric-council/SKILL.md +54 -0
- package/{skills/fabric-exec-python → skillsets/python/fabric-exec}/SKILL.md +3 -5
- package/skillsets/python/fabric-exec/references/agents.md +63 -0
- package/skillsets/python/fabric-exec/references/mcp.md +23 -0
- package/skillsets/python/fabric-exec/references/mesh.md +27 -0
- package/skillsets/python/fabric-fusion/SKILL.md +112 -0
- package/{skills → skillsets/python}/fabric-guide/SKILL.md +0 -2
- package/skillsets/python/fabric-rlm/SKILL.md +120 -0
- package/skillsets/python/fabric-schema/SKILL.md +55 -0
- package/skillsets/python/fabric-spec/SKILL.md +42 -0
- package/skillsets/python/fabric-supervisor/SKILL.md +37 -0
- package/skillsets/python/fabric-swarm/SKILL.md +40 -0
- package/skillsets/python/fabric-workflow/SKILL.md +62 -0
- package/{skills → skillsets/typescript}/fabric-advisor/SKILL.md +0 -2
- package/skillsets/typescript/fabric-ambient/SKILL.md +44 -0
- package/{skills → skillsets/typescript}/fabric-council/SKILL.md +0 -2
- package/{skills → skillsets/typescript}/fabric-exec/SKILL.md +3 -5
- package/{skills → skillsets/typescript}/fabric-exec/references/agents.md +1 -1
- package/{skills → skillsets/typescript}/fabric-fusion/SKILL.md +0 -2
- package/skillsets/typescript/fabric-guide/SKILL.md +28 -0
- package/{skills → skillsets/typescript}/fabric-rlm/SKILL.md +0 -2
- package/{skills → skillsets/typescript}/fabric-schema/SKILL.md +1 -3
- package/{skills → skillsets/typescript}/fabric-spec/SKILL.md +0 -2
- package/{skills → skillsets/typescript}/fabric-supervisor/SKILL.md +0 -2
- package/{skills → skillsets/typescript}/fabric-swarm/SKILL.md +0 -2
- package/{skills → skillsets/typescript}/fabric-workflow/SKILL.md +0 -2
- package/dist/chunks/chunk-7RPCSGQM.js.map +0 -7
- /package/dist/chunks/{chunk-GRA2PF4H.js.map → chunk-Z3AEX7SQ.js.map} +0 -0
- /package/{skills → skillsets/typescript}/fabric-ambient/references/setup.md +0 -0
- /package/{skills → skillsets/typescript}/fabric-exec/references/mcp.md +0 -0
- /package/{skills → skillsets/typescript}/fabric-exec/references/mesh.md +0 -0
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ pi -e /absolute/path/to/pi-fabric
|
|
|
102
102
|
|
|
103
103
|
## What you can ask for
|
|
104
104
|
|
|
105
|
-
Pi loads advanced patterns after direct user invocation. Run `/skill:fabric-guide` for one recommendation, or invoke the exact `/skill:<name>` yourself.
|
|
105
|
+
Pi loads advanced patterns after direct user invocation. Run `/skill:fabric-guide` for one recommendation, or invoke the exact `/skill:<name>` yourself. The same skill names work in both kernels: Fabric loads one complete TypeScript or Python skill/reference tree. An ordinary coding task uses the core `fabric-exec` reference.
|
|
106
106
|
|
|
107
107
|
| You want | Run |
|
|
108
108
|
| -------- | --- |
|
|
@@ -118,7 +118,7 @@ Pi loads advanced patterns after direct user invocation. Run `/skill:fabric-guid
|
|
|
118
118
|
| A durable team coordinating through versioned tasks | `/skill:fabric-swarm Coordinate this migration across owned task partitions.` |
|
|
119
119
|
| Evidence-gated edits with postconditions | `/skill:fabric-schema Make this parser change only if focused tests stay green.` |
|
|
120
120
|
|
|
121
|
-
Execution references stay progressive: the model loads the selected kernel's skill after argument-shape errors or when exact advanced contracts are needed.
|
|
121
|
+
Execution references stay progressive: the model loads the selected kernel's skill after argument-shape errors or when exact advanced contracts are needed. Kernel changes reload Pi so execution and the selected physical skill tree switch together; see [kernel-specific skills](docs/kernels.md#kernel-specific-skills-and-guidance).
|
|
122
122
|
|
|
123
123
|
## Agent conversations
|
|
124
124
|
|
|
@@ -29,6 +29,7 @@ var FabricState = class {
|
|
|
29
29
|
#activation;
|
|
30
30
|
#activationGeneration;
|
|
31
31
|
#config;
|
|
32
|
+
#kernelReloadRequired = false;
|
|
32
33
|
#cwd;
|
|
33
34
|
#generation = 0;
|
|
34
35
|
#everActivated = false;
|
|
@@ -42,6 +43,9 @@ var FabricState = class {
|
|
|
42
43
|
prewalkDrift = new PrewalkDriftTracker();
|
|
43
44
|
sessionApprovals = new FabricSessionApprovals();
|
|
44
45
|
#widgetDismissedAt = 0;
|
|
46
|
+
get kernelReloadRequired() {
|
|
47
|
+
return this.#kernelReloadRequired;
|
|
48
|
+
}
|
|
45
49
|
get initialized() {
|
|
46
50
|
return this.#current()?.initialized === true;
|
|
47
51
|
}
|
|
@@ -119,6 +123,7 @@ var FabricState = class {
|
|
|
119
123
|
projectTrusted: context.isProjectTrusted()
|
|
120
124
|
});
|
|
121
125
|
this.#config = config;
|
|
126
|
+
this.#kernelReloadRequired = false;
|
|
122
127
|
this.prewalk.cancel();
|
|
123
128
|
this.prewalkDrift.clear();
|
|
124
129
|
this.activity.reset();
|
|
@@ -134,11 +139,14 @@ var FabricState = class {
|
|
|
134
139
|
if (!this.#config || this.#cwd !== context.cwd) {
|
|
135
140
|
await this.bootstrap(context);
|
|
136
141
|
} else {
|
|
137
|
-
|
|
142
|
+
const next = loadFabricConfig({
|
|
138
143
|
cwd: context.cwd,
|
|
139
144
|
agentDir: resolveAgentDir(),
|
|
140
145
|
projectTrusted: context.isProjectTrusted()
|
|
141
146
|
});
|
|
147
|
+
this.#kernelReloadRequired = next.executor.kernel !== this.#config.executor.kernel;
|
|
148
|
+
next.executor.kernel = this.#config.executor.kernel;
|
|
149
|
+
this.#config = next;
|
|
142
150
|
}
|
|
143
151
|
await this.#activate(context, true);
|
|
144
152
|
}
|
|
@@ -240,6 +248,8 @@ var FabricState = class {
|
|
|
240
248
|
projectTrusted: context.isProjectTrusted()
|
|
241
249
|
});
|
|
242
250
|
if (this.#config) {
|
|
251
|
+
this.#kernelReloadRequired = next.executor.kernel !== this.#config.executor.kernel;
|
|
252
|
+
next.executor.kernel = this.#config.executor.kernel;
|
|
243
253
|
next.schema.mode = this.#config.schema.mode;
|
|
244
254
|
if (next.schema.mode === "enforce" && next.executor.kernel === "typescript") {
|
|
245
255
|
next.executor.runtime = "quickjs";
|
|
@@ -398,4 +408,4 @@ var FabricState = class {
|
|
|
398
408
|
export {
|
|
399
409
|
FabricState
|
|
400
410
|
};
|
|
401
|
-
//# sourceMappingURL=chunk-
|
|
411
|
+
//# sourceMappingURL=chunk-MBUOWFDL.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/fabric-state.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { resolveAgentDir } from \"./core/agent-dir.js\";\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { FabricActivityStore } from \"./activity/store.js\";\nimport { CapturedToolCatalog } from \"./capture/catalog.js\";\nimport {\n FABRIC_COMPONENT_PROVIDER_NAMES,\n FABRIC_PROVIDER_COMPONENT_PREFIX,\n} from \"./components/provider-component.js\";\nimport type { FabricOwnedModelGuidance } from \"./components/model-guidance.js\";\nimport type { FabricComponentGraph } from \"./components/types.js\";\nimport {\n loadFabricConfig,\n loadFabricConfigForScope,\n type FabricConfig,\n type FabricResultFormat,\n type FabricSchemaMode,\n} from \"./config.js\";\nimport { FabricSessionApprovals } from \"./core/approval-controller.js\";\nimport { PrewalkController } from \"./prewalk/controller.js\";\nimport { PrewalkDriftTracker } from \"./prewalk/fs-drift.js\";\nimport type { PendingFabricHandoff } from \"./prewalk/handoff.js\";\nimport type { AgentToolResultMessage } from \"./agents/types.js\";\nimport type { FabricExecutionResult } from \"./execution-service.js\";\nimport type {\n FabricParticipantInfo,\n FabricParticipantListOptions,\n FabricPeerInfo,\n} from \"./topology/types.js\";\nimport {\n resolveFabricIdentity,\n type FabricAgentMessageDelivery,\n type FabricAgentMessageResult,\n type FabricMainAgentInfo,\n} from \"./main-agent.js\";\nimport type { FabricActorHostEvent } from \"./actors/types.js\";\nimport type { FabricLifecycleEventType } from \"./lifecycle/types.js\";\nimport type {\n FabricActionDescriptor,\n FabricComponentDefinition,\n FabricProvider,\n} from \"./protocol.js\";\nimport type { FabricRuntimeState } from \"./fabric-runtime-state.js\";\nimport type { FabricRuntimePaths } from \"./runtime-paths.js\";\n\nexport interface FabricStateOptions {\n paths?: FabricRuntimePaths;\n runtimeLoader?: () => Promise<typeof import(\"./fabric-runtime-state.js\")>;\n}\n\ntype ActivationHook = (context: ExtensionContext) => void | Promise<void>;\ntype ActivationFailureHook = () => void | Promise<void>;\n\nexport class FabricState {\n #runtime: FabricRuntimeState | undefined;\n #activatingRuntime: FabricRuntimeState | undefined;\n #activation: Promise<FabricRuntimeState> | undefined;\n #activationGeneration: number | undefined;\n #config: FabricConfig | undefined;\n #kernelReloadRequired = false;\n\n #cwd: string | undefined;\n #generation = 0;\n #everActivated = false;\n #activationHook: ActivationHook | undefined;\n #activationFailureHook: ActivationFailureHook | undefined;\n readonly #externalProviders = new Map<string, FabricProvider>();\n readonly #externalComponents = new Map<string, FabricComponentDefinition>();\n readonly #options: FabricStateOptions;\n readonly activity = new FabricActivityStore();\n readonly prewalk = new PrewalkController();\n readonly prewalkDrift = new PrewalkDriftTracker();\n readonly sessionApprovals = new FabricSessionApprovals();\n #widgetDismissedAt = 0;\n\n constructor(\n readonly pi: ExtensionAPI,\n readonly capturedTools: CapturedToolCatalog,\n options: FabricStateOptions = {},\n ) {\n this.#options = options;\n }\n\n get kernelReloadRequired(): boolean {\n return this.#kernelReloadRequired;\n }\n\n get initialized(): boolean {\n return this.#current()?.initialized === true;\n }\n\n // Lightweight bootstrap seam: true once configuration is loaded, with no\n // dependency on the heavyweight runtime. Rendering reads this instead of\n // initialized so a resumed session honors bootstrapped presentation\n // preferences while the runtime is intentionally inactive.\n get bootstrapped(): boolean {\n return this.#config !== undefined;\n }\n\n get activated(): boolean {\n return this.#everActivated;\n }\n\n get config(): FabricConfig {\n if (!this.#config) throw new Error(\"Pi Fabric has not bootstrapped\");\n return this.#config;\n }\n\n get cwd(): string | undefined {\n return this.#cwd;\n }\n\n get widgetDismissedAt(): number {\n return this.#current()?.widgetDismissedAt ?? this.#widgetDismissedAt;\n }\n\n set widgetDismissedAt(value: number) {\n this.#widgetDismissedAt = value;\n const runtime = this.#current();\n if (runtime) runtime.widgetDismissedAt = value;\n }\n\n get registry(): FabricRuntimeState[\"registry\"] { return this.#required().registry; }\n get execution(): FabricRuntimeState[\"execution\"] { return this.#required().execution; }\n\n /** Speculative-PTC stream tap; undefined pre-init or when speculation is disabled. */\n get speculationTap(): FabricRuntimeState[\"speculationTap\"] { return this.#runtime?.speculationTap; }\n\n /** Turn-boundary backstop for the speculation store; safe before initialization. */\n resetSpeculation(): void { this.#runtime?.resetSpeculation(); }\n get agents(): FabricRuntimeState[\"agents\"] { return this.#required().agents; }\n get actors(): FabricRuntimeState[\"actors\"] { return this.#required().actors; }\n get globalActors(): FabricRuntimeState[\"globalActors\"] { return this.#required().globalActors; }\n get mesh(): FabricRuntimeState[\"mesh\"] { return this.#required().mesh; }\n get compact(): FabricRuntimeState[\"compact\"] { return this.#required().compact; }\n get repairs(): FabricRuntimeState[\"repairs\"] { return this.#required().repairs; }\n get components(): FabricRuntimeState[\"components\"] { return this.#required().components; }\n\n setActivationHook(hook: ActivationHook, onFailure?: ActivationFailureHook): void {\n this.#activationHook = hook;\n this.#activationFailureHook = onFailure;\n }\n\n async bootstrap(context: ExtensionContext): Promise<void> {\n const generation = ++this.#generation;\n this.#cwd = context.cwd;\n // A failed config load must not leak the previous session's configuration\n // into this one: clear before the read so bootstrapped stays false and\n // presentation falls back to the safe default until a load succeeds.\n this.#config = undefined;\n const config = loadFabricConfig({\n cwd: context.cwd,\n agentDir: resolveAgentDir(),\n projectTrusted: context.isProjectTrusted(),\n });\n this.#config = config;\n this.#kernelReloadRequired = false;\n this.prewalk.cancel();\n this.prewalkDrift.clear();\n this.activity.reset();\n this.sessionApprovals.approvedRisks.clear();\n this.#widgetDismissedAt = 0;\n context.ui.setStatus(\"fabric-prewalk\", undefined);\n\n const pending = this.#activation;\n if (pending) await pending.catch(() => undefined);\n if (generation !== this.#generation) return;\n if (this.#everActivated) await this.#activate(context, true);\n }\n\n async initialize(context: ExtensionContext): Promise<void> {\n if (!this.#config || this.#cwd !== context.cwd) {\n await this.bootstrap(context);\n } else {\n const next = loadFabricConfig({\n cwd: context.cwd,\n agentDir: resolveAgentDir(),\n projectTrusted: context.isProjectTrusted(),\n });\n this.#kernelReloadRequired = next.executor.kernel !== this.#config.executor.kernel;\n next.executor.kernel = this.#config.executor.kernel;\n this.#config = next;\n }\n await this.#activate(context, true);\n }\n\n async ensure(context: ExtensionContext): Promise<void> {\n if (!this.#config || this.#cwd !== context.cwd) await this.bootstrap(context);\n await this.#activate(context, false);\n }\n\n shouldEagerlyActivate(context: ExtensionContext): boolean {\n if (\n process.env.PI_FABRIC_CAPABILITY_REQUIREMENTS !== undefined &&\n Boolean(process.env.PI_FABRIC_CAPABILITY_DIGEST)\n ) return true;\n if (this.config.prewalk.alwaysRearm) return true;\n if (this.config.components.some((component) => component.disabled !== true)) return true;\n if (!context.isProjectTrusted() || !this.config.mesh.enabled || this.config.schema.mode === \"enforce\") {\n return false;\n }\n const sessionId = context.sessionManager.getSessionId();\n if (resolveFabricIdentity(sessionId).identity.kind !== \"main\") return false;\n const projectRoot = process.env.PI_FABRIC_PROJECT_ROOT ?? context.cwd;\n const meshRoot = process.env.PI_FABRIC_MESH_ROOT ??\n (this.config.mesh.root\n ? path.resolve(projectRoot, this.config.mesh.root)\n : path.join(projectRoot, \".pi\", \"fabric\", \"mesh\"));\n const fabricSessionId = process.env.PI_FABRIC_SESSION_ID?.trim() || sessionId;\n const actorRoots = [\n path.join(meshRoot, \"actors\"),\n path.join(meshRoot, \"actors\", fabricSessionId),\n ];\n return actorRoots.some((actorRoot) => {\n try {\n const registry = JSON.parse(fs.readFileSync(path.join(actorRoot, \"actors.json\"), \"utf8\")) as unknown;\n if (typeof registry !== \"object\" || registry === null || Array.isArray(registry)) return false;\n const actors = (registry as { actors?: unknown }).actors;\n return Array.isArray(actors) && actors.some((value) => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const actor = value as Record<string, unknown>;\n return typeof actor.id === \"string\" && /^[a-f0-9]{32}$/.test(actor.id) &&\n typeof actor.name === \"string\" && /^[a-zA-Z0-9][a-zA-Z0-9 _.-]{0,59}$/.test(actor.name) &&\n typeof actor.instructions === \"string\" &&\n Buffer.byteLength(actor.instructions, \"utf8\") <= this.config.mesh.maxEventBytes &&\n typeof actor.createdAt === \"number\" && Number.isFinite(actor.createdAt);\n });\n } catch {\n return false;\n }\n });\n }\n\n mainAgentInfo(context?: ExtensionContext): FabricMainAgentInfo { return this.#required().mainAgentInfo(context); }\n peerInfos(): FabricPeerInfo[] { return this.#current()?.peerInfos() ?? []; }\n componentGraph(): FabricComponentGraph {\n return this.#current()?.componentGraph() ?? { components: [], edges: [], cycles: [] };\n }\n modelGuidance(): FabricOwnedModelGuidance[] { return this.#current()?.modelGuidance() ?? []; }\n participantInfos(options: FabricParticipantListOptions = {}): FabricParticipantInfo[] {\n return this.#current()?.participantInfos(options) ?? [];\n }\n queueUserMessage(targetId: string, message: string, delivery: FabricAgentMessageDelivery): Promise<FabricAgentMessageResult> {\n return this.#required().queueUserMessage(targetId, message, delivery);\n }\n stopParticipant(targetId: string): Promise<unknown> { return this.#required().stopParticipant(targetId); }\n claimHandoff(execution: FabricExecutionResult, sessionId: string, resultFormat: FabricResultFormat, outerToolCallId: string): Promise<PendingFabricHandoff | undefined> {\n return this.#required().claimHandoff(execution, sessionId, resultFormat, outerToolCallId);\n }\n runHandoffAtBoundary(pending: PendingFabricHandoff, result: AgentToolResultMessage, context: ExtensionContext): Promise<Record<string, unknown>> {\n return this.#required().runHandoffAtBoundary(pending, result, context);\n }\n noteMainActivity(context: ExtensionContext): void { this.#current()?.noteMainActivity(context); }\n dispatchHostEvent(event: FabricActorHostEvent, payload: unknown, context: ExtensionContext): number {\n return this.#current()?.dispatchHostEvent(event, payload, context) ?? 0;\n }\n publishHostLifecycle(event: FabricLifecycleEventType, payload: unknown): Promise<void> {\n return this.#current()?.publishHostLifecycle(event, payload) ?? Promise.resolve();\n }\n\n registerExternal(provider: FabricProvider, options: { overwrite?: boolean } = {}): void {\n if (\n provider.name === \"fabric\" ||\n provider.name === \"components\" ||\n FABRIC_COMPONENT_PROVIDER_NAMES.some((name) => name === provider.name)\n ) {\n throw new Error(`Reserved Fabric provider name: ${provider.name}`);\n }\n if (this.#externalProviders.has(provider.name) && !options.overwrite) {\n throw new Error(`Fabric provider already registered: ${provider.name}`);\n }\n this.#externalProviders.set(provider.name, provider);\n this.#current()?.registerExternal(provider, options);\n }\n\n registerExternalComponent(\n component: FabricComponentDefinition,\n options: { overwrite?: boolean } = {},\n ): void {\n if (component.name.startsWith(FABRIC_PROVIDER_COMPONENT_PREFIX)) {\n throw new Error(`Reserved Fabric component name: ${component.name}`);\n }\n if (this.#externalComponents.has(component.name) && !options.overwrite) {\n throw new Error(`Fabric component already registered: ${component.name}`);\n }\n this.#externalComponents.set(component.name, component);\n this.#current()?.registerExternalComponent(component, options);\n }\n\n reloadConfig(context: ExtensionContext): void {\n const next = loadFabricConfig({\n cwd: context.cwd,\n agentDir: resolveAgentDir(),\n projectTrusted: context.isProjectTrusted(),\n });\n if (this.#config) {\n // Pi skill discovery is additive. Keep execution aligned with the loaded\n // skill tree until Pi reload creates a fresh extension/resource runtime.\n this.#kernelReloadRequired = next.executor.kernel !== this.#config.executor.kernel;\n next.executor.kernel = this.#config.executor.kernel;\n next.schema.mode = this.#config.schema.mode;\n // Isolate the selected language, including when a live schema override\n // differs from disk. CPython selects its OS sandbox at execution time.\n if (next.schema.mode === \"enforce\" && next.executor.kernel === \"typescript\") {\n next.executor.runtime = \"quickjs\";\n }\n }\n this.#config = next;\n this.#runtime?.reloadConfig(context, next);\n }\n\n // Ephemeral, session-only schema mode: mutates the live config (guidance,\n // resolved-action gate, and executor runtime all read it per call) without\n // touching fabric.json, so the next session starts from the configured mode.\n // reloadConfig preserves the override like the startup mode does.\n setSchemaMode(context: ExtensionContext, mode: FabricSchemaMode): void {\n if (!this.#config) throw new Error(\"Fabric is not initialized\");\n const previous = this.#config.schema.mode;\n if (mode === \"enforce\" && previous !== \"enforce\" && !this.#config.fullCodeMode) {\n throw new Error(\n \"Schema enforce requires full code mode; enable fullCodeMode or start a session with schema.mode=enforce\",\n );\n }\n this.#config.schema.mode = mode;\n if (mode === \"enforce\") {\n if (this.#config.executor.kernel === \"typescript\") this.#config.executor.runtime = \"quickjs\";\n } else if (previous === \"enforce\") {\n this.#config.executor.runtime = this.#diskConfig(context).executor.runtime;\n }\n this.#runtime?.setSchemaMode(mode, this.#config.executor.runtime);\n }\n\n schemaStatus(context: ExtensionContext): {\n mode: FabricSchemaMode;\n source: \"config\" | \"session override\";\n executorRuntime: string;\n } {\n const disk = this.#diskConfig(context);\n const mode = this.#config?.schema.mode ?? disk.schema.mode;\n return {\n mode,\n source: this.#config && this.#config.schema.mode !== disk.schema.mode\n ? \"session override\"\n : \"config\",\n executorRuntime: (this.#config ?? disk).executor.kernel === \"python\"\n ? (this.#config ?? disk).executor.pythonRuntime\n : this.#config?.executor.runtime ?? disk.executor.runtime,\n };\n }\n\n #diskConfig(context: ExtensionContext): FabricConfig {\n const projectTrusted = context.isProjectTrusted();\n return loadFabricConfigForScope(\n { cwd: context.cwd, agentDir: resolveAgentDir(), projectTrusted },\n projectTrusted ? \"project\" : \"global\",\n );\n }\n\n async shutdown(): Promise<void> {\n const generation = ++this.#generation;\n const activation = this.#activation;\n if (activation) await activation.catch(() => undefined);\n if (generation !== this.#generation) return;\n\n const runtime = this.#runtime;\n this.#runtime = undefined;\n try {\n await runtime?.shutdown();\n } finally {\n if (generation === this.#generation) {\n this.#config = undefined;\n this.#cwd = undefined;\n this.#externalProviders.clear();\n this.#externalComponents.clear();\n this.#everActivated = false;\n this.activity.reset();\n this.prewalk.cancel();\n this.prewalkDrift.clear();\n }\n }\n }\n\n async #activate(context: ExtensionContext, reinitialize: boolean): Promise<FabricRuntimeState> {\n if (this.#activation) {\n if (this.#activationGeneration === this.#generation) return this.#activation;\n await this.#activation.catch(() => undefined);\n return this.#activate(context, reinitialize);\n }\n if (this.#runtime?.initialized && !reinitialize) return this.#runtime;\n\n const generation = this.#generation;\n const config = this.config;\n const existing = this.#runtime;\n const reusable = existing?.initialized ? existing : undefined;\n const orphan = existing && !existing.initialized ? existing : undefined;\n this.#runtime = undefined;\n let candidate: FabricRuntimeState | undefined;\n const assertCurrent = (): void => {\n if (generation !== this.#generation) {\n throw new Error(\"Pi Fabric activation was superseded by a session change\");\n }\n };\n const activation = (async () => {\n try {\n await orphan?.shutdown().catch(() => undefined);\n assertCurrent();\n candidate = reusable ?? await this.#createRuntime();\n if (!reusable) {\n for (const component of this.#externalComponents.values()) {\n candidate.registerExternalComponent(component, { overwrite: true });\n }\n }\n await candidate.initialize(context, config);\n assertCurrent();\n for (const provider of this.#externalProviders.values()) {\n candidate.registerExternal(provider, { overwrite: true });\n }\n await candidate.settleComponents?.();\n assertCurrent();\n this.#activatingRuntime = candidate;\n candidate.widgetDismissedAt = this.#widgetDismissedAt;\n await this.#activationHook?.(context);\n assertCurrent();\n this.#runtime = candidate;\n this.#activatingRuntime = undefined;\n this.#everActivated = true;\n return candidate;\n } catch (error) {\n try {\n await this.#activationFailureHook?.();\n } catch {\n // Cleanup is best-effort; preserve the activation failure.\n }\n if (this.#activatingRuntime === candidate) this.#activatingRuntime = undefined;\n if (candidate) await candidate.shutdown().catch(() => undefined);\n if (this.#runtime === candidate) this.#runtime = undefined;\n throw error;\n }\n })();\n this.#activation = activation;\n this.#activationGeneration = generation;\n void activation.finally(() => {\n if (this.#activation === activation) {\n this.#activation = undefined;\n this.#activationGeneration = undefined;\n }\n }).catch(() => undefined);\n return activation;\n }\n\n async #createRuntime(): Promise<FabricRuntimeState> {\n const module = await (this.#options.runtimeLoader?.() ?? import(\"./fabric-runtime-state.js\"));\n return new module.FabricRuntimeState(\n this.pi,\n this.capturedTools,\n {\n activity: this.activity,\n prewalk: this.prewalk,\n prewalkDrift: this.prewalkDrift,\n sessionApprovals: this.sessionApprovals,\n ...(this.#options.paths ? { paths: this.#options.paths } : {}),\n },\n );\n }\n\n #current(): FabricRuntimeState | undefined {\n return this.#runtime ?? this.#activatingRuntime;\n }\n\n #required(): FabricRuntimeState {\n const runtime = this.#current();\n if (!runtime?.initialized) throw new Error(\"Pi Fabric has not activated\");\n return runtime;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -568,8 +568,7 @@ export {
|
|
|
568
568
|
settleInPlacePrewalk,
|
|
569
569
|
runFabricHandoffAtBoundary,
|
|
570
570
|
formatSkillsForPrompt,
|
|
571
|
-
parseSkillBlock,
|
|
572
571
|
expandSkillDirMarkersInSkillBlock,
|
|
573
572
|
expandSkillDirMarkersForRead
|
|
574
573
|
};
|
|
575
|
-
//# sourceMappingURL=chunk-
|
|
574
|
+
//# sourceMappingURL=chunk-Z3AEX7SQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fabric.d.ts","sourceRoot":"","sources":["../../src/commands/fabric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA8C9D,UAAU,iBAAiB;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,0BAA0B,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AA6HD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"fabric.d.ts","sourceRoot":"","sources":["../../src/commands/fabric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA8C9D,UAAU,iBAAiB;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,0BAA0B,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AA6HD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAw+BrF"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import type { Skill } from "@earendil-works/pi-coding-agent";
|
|
2
1
|
import type { FabricKernel } from "../runtime/kernel.js";
|
|
3
|
-
export declare
|
|
4
|
-
private readonly cache;
|
|
5
|
-
private declaration;
|
|
6
|
-
select(skills: readonly Skill[], kernel: FabricKernel): Skill[];
|
|
7
|
-
private compatible;
|
|
8
|
-
filterInvocation(text: string, kernel: FabricKernel): string;
|
|
9
|
-
}
|
|
2
|
+
export declare const fabricSkillPaths: (root: string, kernel: FabricKernel) => string[];
|
|
10
3
|
//# sourceMappingURL=kernel-skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel-skills.d.ts","sourceRoot":"","sources":["../../src/core/kernel-skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kernel-skills.d.ts","sourceRoot":"","sources":["../../src/core/kernel-skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,YAAY,KAAG,MAAM,EAM3E,CAAC"}
|
package/dist/fabric-state.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export declare class FabricState {
|
|
|
33
33
|
readonly prewalkDrift: PrewalkDriftTracker;
|
|
34
34
|
readonly sessionApprovals: FabricSessionApprovals;
|
|
35
35
|
constructor(pi: ExtensionAPI, capturedTools: CapturedToolCatalog, options?: FabricStateOptions);
|
|
36
|
+
get kernelReloadRequired(): boolean;
|
|
36
37
|
get initialized(): boolean;
|
|
37
38
|
get bootstrapped(): boolean;
|
|
38
39
|
get activated(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fabric-state.d.ts","sourceRoot":"","sources":["../src/fabric-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAK3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAEV,yBAAyB,EACzB,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,2BAA2B,CAAC,CAAC,CAAC;CAC3E;AAED,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1E,KAAK,qBAAqB,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,qBAAa,WAAW;;
|
|
1
|
+
{"version":3,"file":"fabric-state.d.ts","sourceRoot":"","sources":["../src/fabric-state.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,iCAAiC,CAAC;AA4JzC,wBAA8B,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgvBtE;AAED,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FabricState
|
|
3
|
-
} from "./chunks/chunk-
|
|
3
|
+
} from "./chunks/chunk-MBUOWFDL.js";
|
|
4
4
|
import {
|
|
5
5
|
arcItemStyled,
|
|
6
6
|
captureFabricAgentPreviews,
|
|
@@ -57,11 +57,10 @@ import {
|
|
|
57
57
|
filterPrewalkContinuationMessages,
|
|
58
58
|
formatSkillsForPrompt,
|
|
59
59
|
hasPrewalkArmedPrompt,
|
|
60
|
-
parseSkillBlock,
|
|
61
60
|
prewalkArmedPrompt,
|
|
62
61
|
settleInPlacePrewalk,
|
|
63
62
|
withTrajectoryRearmDirective
|
|
64
|
-
} from "./chunks/chunk-
|
|
63
|
+
} from "./chunks/chunk-Z3AEX7SQ.js";
|
|
65
64
|
import {
|
|
66
65
|
ApprovalController,
|
|
67
66
|
CapturedToolCatalog,
|
|
@@ -1058,6 +1057,10 @@ ${top}` : "fingerprints: (none this session)"
|
|
|
1058
1057
|
suspendToolCapture();
|
|
1059
1058
|
throw error;
|
|
1060
1059
|
}
|
|
1060
|
+
if (state.kernelReloadRequired) {
|
|
1061
|
+
await context.reload();
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1061
1064
|
context.ui.notify("Pi Fabric reloaded", "info");
|
|
1062
1065
|
deps.refreshToolDisplay?.();
|
|
1063
1066
|
return;
|
|
@@ -1065,6 +1068,7 @@ ${top}` : "fingerprints: (none this session)"
|
|
|
1065
1068
|
if (command === "settings") {
|
|
1066
1069
|
const { openFabricSettings } = await import("./ui/settings.js");
|
|
1067
1070
|
await openFabricSettings(context, {
|
|
1071
|
+
reloadResources: () => context.reload(),
|
|
1068
1072
|
state,
|
|
1069
1073
|
applyFabricMode,
|
|
1070
1074
|
capturedTools,
|
|
@@ -2056,47 +2060,14 @@ var restoreSkillsForFullCodePrompt = (systemPrompt, skills, fullCodeMode = true)
|
|
|
2056
2060
|
};
|
|
2057
2061
|
|
|
2058
2062
|
// src/core/kernel-skills.ts
|
|
2059
|
-
import {
|
|
2060
|
-
import
|
|
2061
|
-
var
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
const stat = statSync(filePath);
|
|
2066
|
-
const stamp = `${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
|
|
2067
|
-
const cached = this.cache.get(filePath);
|
|
2068
|
-
if (cached?.stamp === stamp) return cached.kernel;
|
|
2069
|
-
const text = readFileSync3(filePath, "utf8");
|
|
2070
|
-
const frontmatter = /^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(text)?.[1];
|
|
2071
|
-
let kernel = "shared";
|
|
2072
|
-
if (frontmatter) {
|
|
2073
|
-
try {
|
|
2074
|
-
const value = parse(frontmatter)?.metadata?.["fabric-kernel"];
|
|
2075
|
-
kernel = value === void 0 ? "shared" : value === "typescript" || value === "python" ? value : "invalid";
|
|
2076
|
-
} catch {
|
|
2077
|
-
kernel = "invalid";
|
|
2078
|
-
}
|
|
2079
|
-
}
|
|
2080
|
-
this.cache.set(filePath, { stamp, kernel });
|
|
2081
|
-
return kernel;
|
|
2082
|
-
} catch {
|
|
2083
|
-
return this.cache.get(filePath)?.kernel ?? "shared";
|
|
2084
|
-
}
|
|
2085
|
-
}
|
|
2086
|
-
select(skills, kernel) {
|
|
2087
|
-
return skills.filter((skill) => this.compatible(skill.filePath, kernel));
|
|
2088
|
-
}
|
|
2089
|
-
compatible(filePath, kernel) {
|
|
2090
|
-
const declared = this.declaration(filePath);
|
|
2091
|
-
return declared === "shared" || declared === kernel;
|
|
2092
|
-
}
|
|
2093
|
-
filterInvocation(text, kernel) {
|
|
2094
|
-
const block = parseSkillBlock(text);
|
|
2095
|
-
if (!block || this.compatible(block.location, kernel)) return text;
|
|
2096
|
-
return `Skill ${block.name} is unavailable for the configured ${kernel} kernel. Do not execute its instructions or switch interpreters to run it. Use a compatible skill or the current kernel's host APIs.${block.userMessage ? `
|
|
2097
|
-
|
|
2098
|
-
${block.userMessage}` : ""}`;
|
|
2063
|
+
import { statSync } from "node:fs";
|
|
2064
|
+
import path5 from "node:path";
|
|
2065
|
+
var fabricSkillPaths = (root, kernel) => {
|
|
2066
|
+
const selected = path5.join(root, kernel);
|
|
2067
|
+
if (!statSync(selected, { throwIfNoEntry: false })?.isDirectory()) {
|
|
2068
|
+
throw new Error(`Missing Fabric ${kernel} skill tree: ${selected}. Reinstall Fabric; no other-kernel fallback is available.`);
|
|
2099
2069
|
}
|
|
2070
|
+
return [selected];
|
|
2100
2071
|
};
|
|
2101
2072
|
|
|
2102
2073
|
// src/core/proxy-contract.ts
|
|
@@ -2284,8 +2255,8 @@ var formatFailureProgress = (trace) => {
|
|
|
2284
2255
|
);
|
|
2285
2256
|
if (completed.length === 0) return void 0;
|
|
2286
2257
|
const summaries = completed.slice(0, MAX_COMPLETED_CALLS).map((operation) => {
|
|
2287
|
-
const
|
|
2288
|
-
return typeof
|
|
2258
|
+
const path10 = operation.args.path;
|
|
2259
|
+
return typeof path10 === "string" ? `${operation.ref}(${compactPath(path10)})` : operation.ref;
|
|
2289
2260
|
});
|
|
2290
2261
|
const omitted = completed.length - summaries.length;
|
|
2291
2262
|
return [
|
|
@@ -2618,12 +2589,12 @@ var PartialResultObserver = class {
|
|
|
2618
2589
|
// src/output-budget.ts
|
|
2619
2590
|
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
2620
2591
|
import { tmpdir } from "node:os";
|
|
2621
|
-
import
|
|
2592
|
+
import path6 from "node:path";
|
|
2622
2593
|
var MAX_FAILURE_MODEL_OUTPUT_CHARS = 2e4;
|
|
2623
2594
|
var modelOutputBudget = (configuredMaxChars, success) => success ? configuredMaxChars : Math.min(configuredMaxChars, MAX_FAILURE_MODEL_OUTPUT_CHARS);
|
|
2624
2595
|
var writeOutputArtifact = async (content) => {
|
|
2625
|
-
const directory = await mkdtemp(
|
|
2626
|
-
const artifactPath =
|
|
2596
|
+
const directory = await mkdtemp(path6.join(tmpdir(), "pi-fabric-output-"));
|
|
2597
|
+
const artifactPath = path6.join(directory, "output.txt");
|
|
2627
2598
|
await writeFile(artifactPath, content, { encoding: "utf8", mode: 384 });
|
|
2628
2599
|
return artifactPath;
|
|
2629
2600
|
};
|
|
@@ -3555,8 +3526,8 @@ var classifyToolResult = (input) => {
|
|
|
3555
3526
|
};
|
|
3556
3527
|
|
|
3557
3528
|
// src/host-compatibility.ts
|
|
3558
|
-
import { existsSync as existsSync3, readFileSync as
|
|
3559
|
-
import
|
|
3529
|
+
import { existsSync as existsSync3, readFileSync as readFileSync3, realpathSync as realpathSync2 } from "node:fs";
|
|
3530
|
+
import path7 from "node:path";
|
|
3560
3531
|
var MINIMUM_PI_HOST_VERSION = "0.80.6";
|
|
3561
3532
|
var PI_HOST_PACKAGE_NAMES = /* @__PURE__ */ new Set([
|
|
3562
3533
|
"@earendil-works/pi-coding-agent",
|
|
@@ -3587,22 +3558,22 @@ var detectPiHostVersion = (cliPath = process.argv[1]) => {
|
|
|
3587
3558
|
if (!cliPath) return void 0;
|
|
3588
3559
|
let directory;
|
|
3589
3560
|
try {
|
|
3590
|
-
directory =
|
|
3561
|
+
directory = path7.dirname(realpathSync2(cliPath));
|
|
3591
3562
|
} catch {
|
|
3592
3563
|
return void 0;
|
|
3593
3564
|
}
|
|
3594
3565
|
while (true) {
|
|
3595
|
-
const manifestPath =
|
|
3566
|
+
const manifestPath = path7.join(directory, "package.json");
|
|
3596
3567
|
if (existsSync3(manifestPath)) {
|
|
3597
3568
|
try {
|
|
3598
|
-
const manifest = JSON.parse(
|
|
3569
|
+
const manifest = JSON.parse(readFileSync3(manifestPath, "utf8"));
|
|
3599
3570
|
if (typeof manifest.name === "string" && PI_HOST_PACKAGE_NAMES.has(manifest.name) && typeof manifest.version === "string") {
|
|
3600
3571
|
return manifest.version;
|
|
3601
3572
|
}
|
|
3602
3573
|
} catch {
|
|
3603
3574
|
}
|
|
3604
3575
|
}
|
|
3605
|
-
const parent =
|
|
3576
|
+
const parent = path7.dirname(directory);
|
|
3606
3577
|
if (parent === directory) return void 0;
|
|
3607
3578
|
directory = parent;
|
|
3608
3579
|
}
|
|
@@ -3615,7 +3586,7 @@ var piHostCompatibilityWarning = (version = detectPiHostVersion()) => {
|
|
|
3615
3586
|
};
|
|
3616
3587
|
|
|
3617
3588
|
// src/ui/controller.ts
|
|
3618
|
-
import
|
|
3589
|
+
import path8 from "node:path";
|
|
3619
3590
|
|
|
3620
3591
|
// src/ui/snapshot.ts
|
|
3621
3592
|
import { isDeepStrictEqual } from "node:util";
|
|
@@ -4567,7 +4538,7 @@ var FabricUiController = class {
|
|
|
4567
4538
|
logFile: actor.worker.logFile
|
|
4568
4539
|
};
|
|
4569
4540
|
}
|
|
4570
|
-
const retained = actor.lastRunId && actor.logDir ?
|
|
4541
|
+
const retained = actor.lastRunId && actor.logDir ? path8.join(actor.logDir, actor.lastRunId, "events.jsonl") : void 0;
|
|
4571
4542
|
if (retained) return { id: actor.id, status: actor.status, logFile: retained };
|
|
4572
4543
|
if (actor.sessionFile) {
|
|
4573
4544
|
return { id: actor.id, status: actor.status, logFile: actor.sessionFile };
|
|
@@ -4745,16 +4716,15 @@ var registerHandoffCompletionRenderer = (extension) => {
|
|
|
4745
4716
|
};
|
|
4746
4717
|
|
|
4747
4718
|
// src/index.ts
|
|
4748
|
-
import
|
|
4749
|
-
import path8 from "node:path";
|
|
4719
|
+
import path9 from "node:path";
|
|
4750
4720
|
import { fileURLToPath } from "node:url";
|
|
4751
|
-
var FABRIC_EXTENSION_ENTRY_PATH =
|
|
4752
|
-
var FABRIC_ENTRY_DIR =
|
|
4721
|
+
var FABRIC_EXTENSION_ENTRY_PATH = path9.resolve(fileURLToPath(import.meta.url));
|
|
4722
|
+
var FABRIC_ENTRY_DIR = path9.dirname(FABRIC_EXTENSION_ENTRY_PATH);
|
|
4753
4723
|
var FABRIC_RUNTIME_PATHS = {
|
|
4754
4724
|
extension: FABRIC_EXTENSION_ENTRY_PATH,
|
|
4755
|
-
worker:
|
|
4756
|
-
residentHost:
|
|
4757
|
-
skills:
|
|
4725
|
+
worker: path9.join(FABRIC_ENTRY_DIR, "worker.js"),
|
|
4726
|
+
residentHost: path9.join(FABRIC_ENTRY_DIR, "residency", "launcher.js"),
|
|
4727
|
+
skills: path9.resolve(FABRIC_ENTRY_DIR, "..", "skillsets")
|
|
4758
4728
|
};
|
|
4759
4729
|
var FABRIC_SKILLS_DIR = FABRIC_RUNTIME_PATHS.skills;
|
|
4760
4730
|
var componentRegistrationFrom = (value) => {
|
|
@@ -4841,10 +4811,9 @@ async function piFabric(pi) {
|
|
|
4841
4811
|
);
|
|
4842
4812
|
}
|
|
4843
4813
|
);
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
return {};
|
|
4814
|
+
pi.on("resources_discover", async (_event, context) => {
|
|
4815
|
+
if (!state.bootstrapped) await state.bootstrap(context);
|
|
4816
|
+
return { skillPaths: fabricSkillPaths(FABRIC_SKILLS_DIR, state.config.executor.kernel) };
|
|
4848
4817
|
});
|
|
4849
4818
|
const fabricTool = createFabricExecTool(
|
|
4850
4819
|
state,
|
|
@@ -5222,13 +5191,11 @@ async function piFabric(pi) {
|
|
|
5222
5191
|
event.messages,
|
|
5223
5192
|
(continuationId) => state.initialized && state.prewalk.acceptContinuation(sessionId, continuationId)
|
|
5224
5193
|
);
|
|
5225
|
-
const kernel = (state.bootstrapped ? state.config : DEFAULT_FABRIC_CONFIG).executor.kernel;
|
|
5226
|
-
const filterSkill = (text) => pi.getActiveTools().includes("fabric_exec") ? kernelSkills.filterInvocation(text, kernel) : text;
|
|
5227
5194
|
let changed = continuation.changed;
|
|
5228
5195
|
const messages = continuation.messages.map((message) => {
|
|
5229
5196
|
if (message.role !== "user") return message;
|
|
5230
5197
|
if (typeof message.content === "string") {
|
|
5231
|
-
const content2 = expandSkillDirMarkersInSkillBlock(
|
|
5198
|
+
const content2 = expandSkillDirMarkersInSkillBlock(message.content);
|
|
5232
5199
|
if (content2 === message.content) return message;
|
|
5233
5200
|
changed = true;
|
|
5234
5201
|
return { ...message, content: content2 };
|
|
@@ -5236,7 +5203,7 @@ async function piFabric(pi) {
|
|
|
5236
5203
|
let messageChanged = false;
|
|
5237
5204
|
const content = message.content.map((part) => {
|
|
5238
5205
|
if (part.type !== "text") return part;
|
|
5239
|
-
const text = expandSkillDirMarkersInSkillBlock(
|
|
5206
|
+
const text = expandSkillDirMarkersInSkillBlock(part.text);
|
|
5240
5207
|
if (text === part.text) return part;
|
|
5241
5208
|
changed = true;
|
|
5242
5209
|
messageChanged = true;
|
|
@@ -5252,7 +5219,7 @@ async function piFabric(pi) {
|
|
|
5252
5219
|
const schemaMode = config.schema.mode;
|
|
5253
5220
|
const effectiveFullCodeMode = fullCodeMode || schemaMode === "enforce";
|
|
5254
5221
|
if (!pi.getActiveTools().includes("fabric_exec")) return;
|
|
5255
|
-
const skills =
|
|
5222
|
+
const skills = event.systemPromptOptions.skills ?? [];
|
|
5256
5223
|
const captureSnapshot = state.bootstrapped ? capturePolicy() : void 0;
|
|
5257
5224
|
const systemPrompt = restoreSkillsForFullCodePrompt(event.systemPrompt, skills, effectiveFullCodeMode);
|
|
5258
5225
|
const skillReferenceGuidance = effectiveFullCodeMode ? buildSkillReferenceGuidance(event.prompt, skills) : void 0;
|