pi-fabric 0.86.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.
Files changed (60) hide show
  1. package/README.md +2 -2
  2. package/dist/chunks/{chunk-PPIWZJ4M.js → chunk-MBUOWFDL.js} +12 -2
  3. package/dist/chunks/chunk-MBUOWFDL.js.map +7 -0
  4. package/dist/commands/fabric.d.ts.map +1 -1
  5. package/dist/core/kernel-skills.d.ts +3 -0
  6. package/dist/core/kernel-skills.d.ts.map +1 -0
  7. package/dist/core/skill-prompt.d.ts +1 -1
  8. package/dist/core/skill-prompt.d.ts.map +1 -1
  9. package/dist/core/system-guidance.d.ts.map +1 -1
  10. package/dist/fabric-state.d.ts +1 -0
  11. package/dist/fabric-state.d.ts.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +46 -31
  14. package/dist/index.js.map +4 -4
  15. package/dist/runtime/cpython-child-source.d.ts.map +1 -1
  16. package/dist/runtime/cpython-runtime.d.ts.map +1 -1
  17. package/dist/runtime/cpython-runtime.js +101 -21
  18. package/dist/runtime/cpython-runtime.js.map +2 -2
  19. package/dist/ui/settings.d.ts +1 -0
  20. package/dist/ui/settings.d.ts.map +1 -1
  21. package/dist/ui/settings.js +10 -2
  22. package/dist/ui/settings.js.map +2 -2
  23. package/docs/agents.md +8 -6
  24. package/docs/configuration.md +1 -1
  25. package/docs/kernels.md +14 -0
  26. package/docs/skills.md +4 -3
  27. package/package.json +3 -5
  28. package/skillsets/python/fabric-advisor/SKILL.md +29 -0
  29. package/skillsets/python/fabric-ambient/references/setup.md +67 -0
  30. package/skillsets/python/fabric-council/SKILL.md +54 -0
  31. package/skillsets/python/fabric-exec/SKILL.md +64 -0
  32. package/skillsets/python/fabric-exec/references/agents.md +63 -0
  33. package/skillsets/python/fabric-exec/references/mcp.md +23 -0
  34. package/skillsets/python/fabric-exec/references/mesh.md +27 -0
  35. package/skillsets/python/fabric-fusion/SKILL.md +112 -0
  36. package/skillsets/python/fabric-rlm/SKILL.md +120 -0
  37. package/skillsets/python/fabric-schema/SKILL.md +55 -0
  38. package/skillsets/python/fabric-spec/SKILL.md +42 -0
  39. package/skillsets/python/fabric-supervisor/SKILL.md +37 -0
  40. package/skillsets/python/fabric-swarm/SKILL.md +40 -0
  41. package/skillsets/python/fabric-workflow/SKILL.md +62 -0
  42. package/skillsets/typescript/fabric-ambient/SKILL.md +44 -0
  43. package/{skills → skillsets/typescript}/fabric-exec/SKILL.md +3 -31
  44. package/{skills → skillsets/typescript}/fabric-exec/references/agents.md +1 -1
  45. package/skillsets/typescript/fabric-guide/SKILL.md +28 -0
  46. package/{skills → skillsets/typescript}/fabric-schema/SKILL.md +1 -1
  47. package/dist/chunks/chunk-PPIWZJ4M.js.map +0 -7
  48. /package/{skills → skillsets/python}/fabric-ambient/SKILL.md +0 -0
  49. /package/{skills → skillsets/python}/fabric-guide/SKILL.md +0 -0
  50. /package/{skills → skillsets/typescript}/fabric-advisor/SKILL.md +0 -0
  51. /package/{skills → skillsets/typescript}/fabric-ambient/references/setup.md +0 -0
  52. /package/{skills → skillsets/typescript}/fabric-council/SKILL.md +0 -0
  53. /package/{skills → skillsets/typescript}/fabric-exec/references/mcp.md +0 -0
  54. /package/{skills → skillsets/typescript}/fabric-exec/references/mesh.md +0 -0
  55. /package/{skills → skillsets/typescript}/fabric-fusion/SKILL.md +0 -0
  56. /package/{skills → skillsets/typescript}/fabric-rlm/SKILL.md +0 -0
  57. /package/{skills → skillsets/typescript}/fabric-spec/SKILL.md +0 -0
  58. /package/{skills → skillsets/typescript}/fabric-supervisor/SKILL.md +0 -0
  59. /package/{skills → skillsets/typescript}/fabric-swarm/SKILL.md +0 -0
  60. /package/{skills → skillsets/typescript}/fabric-workflow/SKILL.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. An ordinary coding task keeps Pi on the core `fabric-exec` path.
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
- The foundation is the `fabric-exec` reference skill: the model loads it before its first `fabric_exec` call and again when a call errors on argument shape.
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
- this.#config = loadFabricConfig({
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-PPIWZJ4M.js.map
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
+ }
@@ -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,CAm+BrF"}
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"}
@@ -0,0 +1,3 @@
1
+ import type { FabricKernel } from "../runtime/kernel.js";
2
+ export declare const fabricSkillPaths: (root: string, kernel: FabricKernel) => string[];
3
+ //# sourceMappingURL=kernel-skills.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -1,3 +1,3 @@
1
1
  import type { Skill } from "@earendil-works/pi-coding-agent";
2
- export declare const restoreSkillsForFullCodePrompt: (systemPrompt: string, skills: readonly Skill[]) => string;
2
+ export declare const restoreSkillsForFullCodePrompt: (systemPrompt: string, skills: readonly Skill[], fullCodeMode?: boolean) => string;
3
3
  //# sourceMappingURL=skill-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-prompt.d.ts","sourceRoot":"","sources":["../../src/core/skill-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAW7D,eAAO,MAAM,8BAA8B,GACzC,cAAc,MAAM,EACpB,QAAQ,SAAS,KAAK,EAAE,KACvB,MAiBF,CAAC"}
1
+ {"version":3,"file":"skill-prompt.d.ts","sourceRoot":"","sources":["../../src/core/skill-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAW7D,eAAO,MAAM,8BAA8B,GACzC,cAAc,MAAM,EACpB,QAAQ,SAAS,KAAK,EAAE,EACxB,sBAAmB,KAClB,MAkBF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-guidance.d.ts","sourceRoot":"","sources":["../../src/core/system-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,eAAO,MAAM,6BAA6B,GAAI,cAAc,OAAO,EAAE,SAAQ,YAA2B,EAAE,gBAAe,SAAS,GAAG,OAAiB,KAAG,MAY5I,CAAC;AAEd,eAAO,MAAM,8BAA8B,GAAI,cAAc,OAAO,EAAE,SAAQ,YAA2B,EAAE,gBAAe,SAAS,GAAG,OAAiB,KAAG,MAOiL,CAAC;AAG5U,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAqCD,eAAO,MAAM,2BAA2B,GACtC,OAAO,aAAa,CAAC,yBAAyB,CAAC,EAC/C,eAAe,WAAW,CAAC,MAAM,CAAC,KACjC,MAAM,GAAG,SA8BX,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,SAQjF,CAAC"}
1
+ {"version":3,"file":"system-guidance.d.ts","sourceRoot":"","sources":["../../src/core/system-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,eAAO,MAAM,6BAA6B,GAAI,cAAc,OAAO,EAAE,SAAQ,YAA2B,EAAE,gBAAe,SAAS,GAAG,OAAiB,KAAG,MAa5I,CAAC;AAEd,eAAO,MAAM,8BAA8B,GAAI,cAAc,OAAO,EAAE,SAAQ,YAA2B,EAAE,gBAAe,SAAS,GAAG,OAAiB,KAAG,MAOiL,CAAC;AAG5U,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAqCD,eAAO,MAAM,2BAA2B,GACtC,OAAO,aAAa,CAAC,yBAAyB,CAAC,EAC/C,eAAe,WAAW,CAAC,MAAM,CAAC,KACjC,MAAM,GAAG,SA8BX,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,KAAG,MAAM,GAAG,SAQjF,CAAC"}
@@ -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;;IAqBpB,QAAQ,CAAC,EAAE,EAAE,YAAY;IACzB,QAAQ,CAAC,aAAa,EAAE,mBAAmB;IAR7C,QAAQ,CAAC,QAAQ,sBAA6B;IAC9C,QAAQ,CAAC,OAAO,oBAA2B;IAC3C,QAAQ,CAAC,YAAY,sBAA6B;IAClD,QAAQ,CAAC,gBAAgB,yBAAgC;gBAI9C,EAAE,EAAE,YAAY,EAChB,aAAa,EAAE,mBAAmB,EAC3C,OAAO,GAAE,kBAAuB;IAKlC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAMD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,YAAY,CAGzB;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAIlC;IAED,IAAI,QAAQ,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAsC;IACpF,IAAI,SAAS,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAuC;IAEvF,sFAAsF;IACtF,IAAI,cAAc,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,CAA0C;IAEpG,oFAAoF;IACpF,gBAAgB,IAAI,IAAI;IACxB,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAoC;IAC9E,IAAI,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAoC;IAC9E,IAAI,YAAY,IAAI,kBAAkB,CAAC,cAAc,CAAC,CAA0C;IAChG,IAAI,IAAI,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAkC;IACxE,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAqC;IACjF,IAAI,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAqC;IACjF,IAAI,UAAU,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAwC;IAE1F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAK1E,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IA0CzD,aAAa,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,mBAAmB;IAC9D,SAAS,IAAI,cAAc,EAAE;IAC7B,cAAc,IAAI,oBAAoB;IAGtC,aAAa,IAAI,wBAAwB,EAAE;IAC3C,gBAAgB,CAAC,OAAO,GAAE,4BAAiC,GAAG,qBAAqB,EAAE;IAGrF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,0BAA0B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAG5H,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACnD,YAAY,CAAC,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAGvK,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGhJ,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IACjD,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAGnG,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAevF,yBAAyB,CACvB,SAAS,EAAE,yBAAyB,EACpC,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACpC,IAAI;IAWP,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAsB7C,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAiBtE,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG;QACvC,IAAI,EAAE,gBAAgB,CAAC;QACvB,MAAM,EAAE,QAAQ,GAAG,kBAAkB,CAAC;QACtC,eAAe,EAAE,MAAM,CAAC;KACzB;IAsBK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAoHhC"}
1
+ {"version":3,"file":"fabric-state.d.ts","sourceRoot":"","sources":["../src/fabric-state.ts"],"names":[],"mappings":"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"}
@@ -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;AA4JzC,wBAA8B,QAAQ,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkvBtE;AAED,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,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-PPIWZJ4M.js";
3
+ } from "./chunks/chunk-MBUOWFDL.js";
4
4
  import {
5
5
  arcItemStyled,
6
6
  captureFabricAgentPreviews,
@@ -1057,6 +1057,10 @@ ${top}` : "fingerprints: (none this session)"
1057
1057
  suspendToolCapture();
1058
1058
  throw error;
1059
1059
  }
1060
+ if (state.kernelReloadRequired) {
1061
+ await context.reload();
1062
+ return;
1063
+ }
1060
1064
  context.ui.notify("Pi Fabric reloaded", "info");
1061
1065
  deps.refreshToolDisplay?.();
1062
1066
  return;
@@ -1064,6 +1068,7 @@ ${top}` : "fingerprints: (none this session)"
1064
1068
  if (command === "settings") {
1065
1069
  const { openFabricSettings } = await import("./ui/settings.js");
1066
1070
  await openFabricSettings(context, {
1071
+ reloadResources: () => context.reload(),
1067
1072
  state,
1068
1073
  applyFabricMode,
1069
1074
  capturedTools,
@@ -1967,6 +1972,7 @@ import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:f
1967
1972
  import * as path4 from "node:path";
1968
1973
  var fabricExecutionKernelGuidance = (fullCodeMode, kernel = "typescript", pythonRuntime = "monty") => [
1969
1974
  kernel === "python" ? `Configured fabric_exec kernel: Python (${pythonRuntime === "monty" ? "Monty sandboxed subset" : "CPython"}). Write Python only in \`code\`: top-level await/return, dicts, True/False/None, and asyncio.gather. There is no per-call language switch.` : "Configured fabric_exec kernel: TypeScript. Write TypeScript only in `code`; top-level await and return are supported.",
1975
+ "The configured kernel is exclusive for Fabric orchestration, including when skills or earlier messages show another language. Do not invoke another interpreter through shell tools or native subprocesses merely to run Fabric orchestration in a different language. Project builds, tests, and explicitly requested interpreter work remain legitimate shell commands.",
1970
1976
  fullCodeMode ? "Pi Fabric full code mode: `fabric_exec` is the only way to call Pi core tools \u2014 use them as `pi.*` inside `code`." : "Pi Fabric is in orchestration-only mode. Pi core and registered extension tools stay on their native direct execution path; inside fabric_exec, `pi.*` and `extensions.*` are unavailable.",
1971
1977
  // Files the model has not opened (images in particular) must be read before
1972
1978
  // use; this line rides the turn-stable kernel guidance so provider prefix
@@ -2037,23 +2043,33 @@ var SKILL_SECTION_HEADING = "The following skills provide specialized instructio
2037
2043
  var PI_SKILL_LOAD_INSTRUCTION = "Use the read tool to load a skill's file when the task matches its description.";
2038
2044
  var FABRIC_SKILL_LOAD_INSTRUCTION = "Use `pi.read` inside `fabric_exec` to load a skill's file when the task matches its description.";
2039
2045
  var CWD_MARKER = "\nCurrent working directory:";
2040
- var restoreSkillsForFullCodePrompt = (systemPrompt, skills) => {
2046
+ var restoreSkillsForFullCodePrompt = (systemPrompt, skills, fullCodeMode = true) => {
2041
2047
  const section = formatSkillsForPrompt([...skills]).replace(
2042
2048
  PI_SKILL_LOAD_INSTRUCTION,
2043
- FABRIC_SKILL_LOAD_INSTRUCTION
2049
+ fullCodeMode ? FABRIC_SKILL_LOAD_INSTRUCTION : PI_SKILL_LOAD_INSTRUCTION
2044
2050
  );
2045
- if (!section) return systemPrompt;
2046
- if (systemPrompt.includes(SKILL_SECTION_HEADING)) {
2047
- return systemPrompt.replace(
2048
- PI_SKILL_LOAD_INSTRUCTION,
2049
- FABRIC_SKILL_LOAD_INSTRUCTION
2050
- );
2051
+ const start = systemPrompt.indexOf(SKILL_SECTION_HEADING);
2052
+ const end = start < 0 ? -1 : systemPrompt.indexOf("</available_skills>", start);
2053
+ if (start >= 0 && end >= 0) {
2054
+ return systemPrompt.slice(0, start) + section.trimStart() + systemPrompt.slice(end + "</available_skills>".length);
2051
2055
  }
2056
+ if (!section) return systemPrompt;
2052
2057
  const cwdIndex = systemPrompt.lastIndexOf(CWD_MARKER);
2053
2058
  if (cwdIndex < 0) return `${systemPrompt}${section}`;
2054
2059
  return `${systemPrompt.slice(0, cwdIndex)}${section}${systemPrompt.slice(cwdIndex)}`;
2055
2060
  };
2056
2061
 
2062
+ // src/core/kernel-skills.ts
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.`);
2069
+ }
2070
+ return [selected];
2071
+ };
2072
+
2057
2073
  // src/core/proxy-contract.ts
2058
2074
  var PROXY_CONTRACT_CUSTOM_TYPE = "pi-fabric-proxy";
2059
2075
  var FABRIC_EXEC_TOOL = "fabric_exec";
@@ -2239,8 +2255,8 @@ var formatFailureProgress = (trace) => {
2239
2255
  );
2240
2256
  if (completed.length === 0) return void 0;
2241
2257
  const summaries = completed.slice(0, MAX_COMPLETED_CALLS).map((operation) => {
2242
- const path9 = operation.args.path;
2243
- return typeof path9 === "string" ? `${operation.ref}(${compactPath(path9)})` : operation.ref;
2258
+ const path10 = operation.args.path;
2259
+ return typeof path10 === "string" ? `${operation.ref}(${compactPath(path10)})` : operation.ref;
2244
2260
  });
2245
2261
  const omitted = completed.length - summaries.length;
2246
2262
  return [
@@ -2573,12 +2589,12 @@ var PartialResultObserver = class {
2573
2589
  // src/output-budget.ts
2574
2590
  import { mkdtemp, writeFile } from "node:fs/promises";
2575
2591
  import { tmpdir } from "node:os";
2576
- import path5 from "node:path";
2592
+ import path6 from "node:path";
2577
2593
  var MAX_FAILURE_MODEL_OUTPUT_CHARS = 2e4;
2578
2594
  var modelOutputBudget = (configuredMaxChars, success) => success ? configuredMaxChars : Math.min(configuredMaxChars, MAX_FAILURE_MODEL_OUTPUT_CHARS);
2579
2595
  var writeOutputArtifact = async (content) => {
2580
- const directory = await mkdtemp(path5.join(tmpdir(), "pi-fabric-output-"));
2581
- const artifactPath = path5.join(directory, "output.txt");
2596
+ const directory = await mkdtemp(path6.join(tmpdir(), "pi-fabric-output-"));
2597
+ const artifactPath = path6.join(directory, "output.txt");
2582
2598
  await writeFile(artifactPath, content, { encoding: "utf8", mode: 384 });
2583
2599
  return artifactPath;
2584
2600
  };
@@ -3511,7 +3527,7 @@ var classifyToolResult = (input) => {
3511
3527
 
3512
3528
  // src/host-compatibility.ts
3513
3529
  import { existsSync as existsSync3, readFileSync as readFileSync3, realpathSync as realpathSync2 } from "node:fs";
3514
- import path6 from "node:path";
3530
+ import path7 from "node:path";
3515
3531
  var MINIMUM_PI_HOST_VERSION = "0.80.6";
3516
3532
  var PI_HOST_PACKAGE_NAMES = /* @__PURE__ */ new Set([
3517
3533
  "@earendil-works/pi-coding-agent",
@@ -3542,12 +3558,12 @@ var detectPiHostVersion = (cliPath = process.argv[1]) => {
3542
3558
  if (!cliPath) return void 0;
3543
3559
  let directory;
3544
3560
  try {
3545
- directory = path6.dirname(realpathSync2(cliPath));
3561
+ directory = path7.dirname(realpathSync2(cliPath));
3546
3562
  } catch {
3547
3563
  return void 0;
3548
3564
  }
3549
3565
  while (true) {
3550
- const manifestPath = path6.join(directory, "package.json");
3566
+ const manifestPath = path7.join(directory, "package.json");
3551
3567
  if (existsSync3(manifestPath)) {
3552
3568
  try {
3553
3569
  const manifest = JSON.parse(readFileSync3(manifestPath, "utf8"));
@@ -3557,7 +3573,7 @@ var detectPiHostVersion = (cliPath = process.argv[1]) => {
3557
3573
  } catch {
3558
3574
  }
3559
3575
  }
3560
- const parent = path6.dirname(directory);
3576
+ const parent = path7.dirname(directory);
3561
3577
  if (parent === directory) return void 0;
3562
3578
  directory = parent;
3563
3579
  }
@@ -3570,7 +3586,7 @@ var piHostCompatibilityWarning = (version = detectPiHostVersion()) => {
3570
3586
  };
3571
3587
 
3572
3588
  // src/ui/controller.ts
3573
- import path7 from "node:path";
3589
+ import path8 from "node:path";
3574
3590
 
3575
3591
  // src/ui/snapshot.ts
3576
3592
  import { isDeepStrictEqual } from "node:util";
@@ -4522,7 +4538,7 @@ var FabricUiController = class {
4522
4538
  logFile: actor.worker.logFile
4523
4539
  };
4524
4540
  }
4525
- const retained = actor.lastRunId && actor.logDir ? path7.join(actor.logDir, actor.lastRunId, "events.jsonl") : void 0;
4541
+ const retained = actor.lastRunId && actor.logDir ? path8.join(actor.logDir, actor.lastRunId, "events.jsonl") : void 0;
4526
4542
  if (retained) return { id: actor.id, status: actor.status, logFile: retained };
4527
4543
  if (actor.sessionFile) {
4528
4544
  return { id: actor.id, status: actor.status, logFile: actor.sessionFile };
@@ -4700,16 +4716,15 @@ var registerHandoffCompletionRenderer = (extension) => {
4700
4716
  };
4701
4717
 
4702
4718
  // src/index.ts
4703
- import { existsSync as existsSync4 } from "node:fs";
4704
- import path8 from "node:path";
4719
+ import path9 from "node:path";
4705
4720
  import { fileURLToPath } from "node:url";
4706
- var FABRIC_EXTENSION_ENTRY_PATH = path8.resolve(fileURLToPath(import.meta.url));
4707
- var FABRIC_ENTRY_DIR = path8.dirname(FABRIC_EXTENSION_ENTRY_PATH);
4721
+ var FABRIC_EXTENSION_ENTRY_PATH = path9.resolve(fileURLToPath(import.meta.url));
4722
+ var FABRIC_ENTRY_DIR = path9.dirname(FABRIC_EXTENSION_ENTRY_PATH);
4708
4723
  var FABRIC_RUNTIME_PATHS = {
4709
4724
  extension: FABRIC_EXTENSION_ENTRY_PATH,
4710
- worker: path8.join(FABRIC_ENTRY_DIR, "worker.js"),
4711
- residentHost: path8.join(FABRIC_ENTRY_DIR, "residency", "launcher.js"),
4712
- skills: path8.resolve(FABRIC_ENTRY_DIR, "..", "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")
4713
4728
  };
4714
4729
  var FABRIC_SKILLS_DIR = FABRIC_RUNTIME_PATHS.skills;
4715
4730
  var componentRegistrationFrom = (value) => {
@@ -4796,9 +4811,9 @@ async function piFabric(pi) {
4796
4811
  );
4797
4812
  }
4798
4813
  );
4799
- pi.on("resources_discover", async () => {
4800
- if (existsSync4(FABRIC_SKILLS_DIR)) return { skillPaths: [FABRIC_SKILLS_DIR] };
4801
- 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) };
4802
4817
  });
4803
4818
  const fabricTool = createFabricExecTool(
4804
4819
  state,
@@ -5206,7 +5221,7 @@ async function piFabric(pi) {
5206
5221
  if (!pi.getActiveTools().includes("fabric_exec")) return;
5207
5222
  const skills = event.systemPromptOptions.skills ?? [];
5208
5223
  const captureSnapshot = state.bootstrapped ? capturePolicy() : void 0;
5209
- const systemPrompt = effectiveFullCodeMode ? restoreSkillsForFullCodePrompt(event.systemPrompt, skills) : event.systemPrompt;
5224
+ const systemPrompt = restoreSkillsForFullCodePrompt(event.systemPrompt, skills, effectiveFullCodeMode);
5210
5225
  const skillReferenceGuidance = effectiveFullCodeMode ? buildSkillReferenceGuidance(event.prompt, skills) : void 0;
5211
5226
  const currentModel = context.model ? `${context.model.provider}/${context.model.id}` : void 0;
5212
5227
  const resolvedGuidance = resolveFabricModelGuidance(state.modelGuidance(), {