pi-fabric 0.96.3 → 0.96.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/chunks/{chunk-4BW7JF2W.js → chunk-QFKHAAZA.js} +4 -4
- package/dist/chunks/chunk-QFKHAAZA.js.map +7 -0
- package/dist/core/shell-jobs.d.ts +9 -0
- package/dist/core/shell-jobs.d.ts.map +1 -1
- package/dist/fabric-runtime-state.js +88 -13
- package/dist/fabric-runtime-state.js.map +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/jev.js +1 -1
- package/dist/providers/jev-provider.d.ts +1 -1
- package/dist/providers/jev-provider.d.ts.map +1 -1
- package/dist/providers/jev-provider.js +1 -1
- package/dist/providers/tasks-provider.d.ts +2 -2
- package/dist/providers/tasks-provider.d.ts.map +1 -1
- package/docs/background-tasks.md +18 -0
- package/docs/components.md +1 -1
- package/docs/configuration.md +1 -1
- package/docs/harnesses.md +82 -109
- package/docs/jev.md +51 -46
- package/docs/skills.md +1 -1
- package/package.json +1 -1
- package/skillsets/python/fabric-jev/SKILL.md +11 -11
- package/skillsets/typescript/fabric-jev/SKILL.md +11 -11
- package/dist/chunks/chunk-4BW7JF2W.js.map +0 -7
package/README.md
CHANGED
|
@@ -146,8 +146,8 @@ See the [interface & commands reference](docs/interface.md) for every view, keyb
|
|
|
146
146
|
- [Interface & commands](docs/interface.md): dashboard, settings, keybindings, slash commands, and headless runs.
|
|
147
147
|
- [Agents, actors & mesh](docs/agents.md): model handoff, `/fabric prewalk`, runners, transports, actors, councils, recursive queries, and durable coordination.
|
|
148
148
|
- [Durable residency through Pi](docs/residency-runtime.md): background host lifecycle and the Pi-runtime launcher boundary.
|
|
149
|
-
- [
|
|
150
|
-
- [Jev
|
|
149
|
+
- [Harness CLI composition](docs/harnesses.md): use browser/macOS tools through their existing CLIs, without Fabric-specific bridges or component configuration.
|
|
150
|
+
- [Jev shell orchestration](docs/jev.md): bounded process supervision, event-driven task wait/watch, optional explicit typed judgments, and foreground/background budgets.
|
|
151
151
|
- [Components & committed capabilities](docs/components.md): supervised effects, exact requirements, external per-model guidance and execution-profile replacement, rolling provider generations, actor commitments, and both formal calculi.
|
|
152
152
|
- [External providers](docs/providers.md): the versioned provider protocol for extensions.
|
|
153
153
|
- [Architecture & security](docs/architecture.md): the host bridge, sandboxing, tool-call robustness, and limits.
|
|
@@ -355,7 +355,7 @@ var jevLaunchSchema = Type.Object({
|
|
|
355
355
|
requires: Type.Array(Type.String({ minLength: 3, maxLength: 256 }), { maxItems: 64, uniqueItems: true }),
|
|
356
356
|
limits: Type.Optional(Type.Object({
|
|
357
357
|
timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
358
|
-
maxEvaluations: Type.Optional(Type.Integer({ minimum:
|
|
358
|
+
maxEvaluations: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
359
359
|
maxToolCalls: Type.Optional(Type.Integer({ minimum: 1 })),
|
|
360
360
|
maxTokens: Type.Optional(Type.Integer({ minimum: 1 }))
|
|
361
361
|
}, { additionalProperties: false }))
|
|
@@ -375,7 +375,7 @@ var jevAdviceSchema = Type.Object({
|
|
|
375
375
|
}, { additionalProperties: false });
|
|
376
376
|
var JEV_ACTION_DESCRIPTORS = [
|
|
377
377
|
{ name: "evaluate", description: "Ask Jev typed Choice, Noul (probability of yes), and Score questions over shared state. No generated text. Batch independent questions. Sends state to TypeSafe and consumes API credits; no automatic retries.", inputSchema: jevRequestSchema, risk: "network", effect: { kind: "emission", resources: ["typesafe:inference"], ordering: "unknown" } },
|
|
378
|
-
{ name: "run", description: "Run
|
|
378
|
+
{ name: "run", description: "Run a bounded TypeScript shell orchestrator or typed-decision program in the foreground. Returns a terminal run envelope with schema-validated result or error. Globals: input, jev.evaluate, program.sleep(ms), program.emit(value), and Fabric tools restricted to exact requires. Use granted pi.bash and tasks.wait/watch for shell orchestration; maxEvaluations:0 disables program inference. No automatic judgments, host imports or secrets.", inputSchema: jevLaunchSchema, risk: "execute" },
|
|
379
379
|
{ name: "spawn", description: "Launch a session-owned background Jev program. Optional observe requires read approval and subscribes to Main lifecycle events; program.nextEvent waits without polling and shares only explicitly selected bounded context. program.advise needs observe.delivery and requires jev.advise. Use status, wait/join, and stop; not restart-durable.", inputSchema: jevLaunchSchema, risk: "execute" },
|
|
380
380
|
{ name: "status", description: "Without id: credential configuration status (never retrieves secrets) and run summaries. With id: state, usage, bounded events after sequence, logs, result/error. Retains at most 64 events; nextSequence allows detecting gaps.", inputSchema: statusSchema, risk: "read" },
|
|
381
381
|
{ name: "wait", description: "Wait for a background Jev program's terminal run envelope. Cancelling the wait does not cancel the program.", inputSchema: idSchema, risk: "read" },
|
|
@@ -385,7 +385,7 @@ var JEV_ACTION_DESCRIPTORS = [
|
|
|
385
385
|
];
|
|
386
386
|
var JevProvider = class {
|
|
387
387
|
name = "jev";
|
|
388
|
-
description = "
|
|
388
|
+
description = "Shell-first TypeScript orchestration with explicit typed Jev decisions";
|
|
389
389
|
manager;
|
|
390
390
|
client;
|
|
391
391
|
route;
|
|
@@ -448,4 +448,4 @@ export {
|
|
|
448
448
|
JEV_ACTION_DESCRIPTORS,
|
|
449
449
|
JevProvider
|
|
450
450
|
};
|
|
451
|
-
//# sourceMappingURL=chunk-
|
|
451
|
+
//# sourceMappingURL=chunk-QFKHAAZA.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/providers/jev-provider.ts", "../../src/jev/manager.ts"],
|
|
4
|
+
"sourcesContent": ["import { Type } from \"typebox\";\nimport { validationMessage } from \"../core/action-arguments.js\";\nimport type { FabricActionDescriptor, FabricInvocationContext, FabricProvider, FabricProviderListRequest } from \"../protocol.js\";\nimport { JevClient, JevCredentials, type JevCredentialSource } from \"../jev/client.js\";\nimport { JevProgramManager, type JevManagerOptions } from \"../jev/manager.js\";\nimport { resolveJevModelRoute, type JevRoute } from \"../jev/routes.js\";\nimport type { JevLaunch, JevRequest } from \"../jev/types.js\";\nimport { jevObserveSchema } from \"../jev/observation.js\";\n\nconst description = Type.Union([Type.String(), Type.Array(Type.Unknown()), Type.Record(Type.String(), Type.Unknown())]);\nconst question = Type.Union([\n Type.Object({ type: Type.Literal(\"noul\"), instructions: description, criteria: Type.Optional(Type.Object({ true: Type.Optional(description), false: Type.Optional(description) }, { additionalProperties: false })) }, { additionalProperties: false }),\n Type.Object({ type: Type.Literal(\"choice\"), instructions: description, criteria: Type.Record(Type.String(), Type.Union([description, Type.Null()]), { minProperties: 1, maxProperties: 255 }) }, { additionalProperties: false }),\n Type.Object({ type: Type.Literal(\"score\"), instructions: description, criteria: Type.Array(description, { minItems: 2, maxItems: 10 }) }, { additionalProperties: false }),\n]);\nexport const jevRequestSchema = Type.Object({\n state: description,\n questions: Type.Record(Type.String(), question, { minProperties: 1, maxProperties: 128 }),\n model: Type.Optional(Type.String({ minLength: 1, maxLength: 128 })),\n}, { additionalProperties: false });\nexport const jevLaunchSchema = Type.Object({\n program: Type.Object({\n name: Type.String({ minLength: 1, maxLength: 128 }),\n code: Type.String({ minLength: 1, maxLength: 65_536 }),\n inputSchema: Type.Record(Type.String(), Type.Unknown()),\n outputSchema: Type.Record(Type.String(), Type.Unknown()),\n requires: Type.Array(Type.String({ minLength: 3, maxLength: 256 }), { maxItems: 64, uniqueItems: true }),\n limits: Type.Optional(Type.Object({\n timeoutMs: Type.Optional(Type.Integer({ minimum: 1 })),\n maxEvaluations: Type.Optional(Type.Integer({ minimum: 0 })),\n maxToolCalls: Type.Optional(Type.Integer({ minimum: 1 })),\n maxTokens: Type.Optional(Type.Integer({ minimum: 1 })),\n }, { additionalProperties: false })),\n }, { additionalProperties: false }),\n input: Type.Unknown(),\n observe: Type.Optional(jevObserveSchema),\n}, { additionalProperties: false });\nconst idSchema = Type.Object({ id: Type.String({ minLength: 1, maxLength: 128 }) }, { additionalProperties: false });\nconst statusSchema = Type.Object({\n id: Type.Optional(Type.String({ minLength: 1, maxLength: 128 })),\n after: Type.Optional(Type.Integer({ minimum: 0 })),\n}, { additionalProperties: false });\nexport const jevAdviceSchema = Type.Object({\n id: Type.String({ minLength: 1, maxLength: 128 }),\n eventId: Type.String({ minLength: 1, maxLength: 256 }),\n message: Type.String({ minLength: 1, maxLength: 2000 }),\n}, { additionalProperties: false });\nexport const JEV_ACTION_DESCRIPTORS: FabricActionDescriptor[] = [\n { name: \"evaluate\", description: \"Ask Jev typed Choice, Noul (probability of yes), and Score questions over shared state. No generated text. Batch independent questions. Sends state to TypeSafe and consumes API credits; no automatic retries.\", inputSchema: jevRequestSchema as unknown as Record<string, unknown>, risk: \"network\", effect: { kind: \"emission\", resources: [\"typesafe:inference\"], ordering: \"unknown\" } },\n { name: \"run\", description: \"Run a bounded TypeScript shell orchestrator or typed-decision program in the foreground. Returns a terminal run envelope with schema-validated result or error. Globals: input, jev.evaluate, program.sleep(ms), program.emit(value), and Fabric tools restricted to exact requires. Use granted pi.bash and tasks.wait/watch for shell orchestration; maxEvaluations:0 disables program inference. No automatic judgments, host imports or secrets.\", inputSchema: jevLaunchSchema as unknown as Record<string, unknown>, risk: \"execute\" },\n { name: \"spawn\", description: \"Launch a session-owned background Jev program. Optional observe requires read approval and subscribes to Main lifecycle events; program.nextEvent waits without polling and shares only explicitly selected bounded context. program.advise needs observe.delivery and requires jev.advise. Use status, wait/join, and stop; not restart-durable.\", inputSchema: jevLaunchSchema as unknown as Record<string, unknown>, risk: \"execute\" },\n { name: \"status\", description: \"Without id: credential configuration status (never retrieves secrets) and run summaries. With id: state, usage, bounded events after sequence, logs, result/error. Retains at most 64 events; nextSequence allows detecting gaps.\", inputSchema: statusSchema as unknown as Record<string, unknown>, risk: \"read\" },\n { name: \"wait\", description: \"Wait for a background Jev program's terminal run envelope. Cancelling the wait does not cancel the program.\", inputSchema: idSchema as unknown as Record<string, unknown>, risk: \"read\" },\n { name: \"join\", description: \"Alias for jev.wait: wait for a background Jev program's terminal run envelope without cancelling the program when the wait is cancelled.\", inputSchema: idSchema as unknown as Record<string, unknown>, risk: \"read\" },\n { name: \"advise\", description: \"Deliver bounded advice from an observing Jev run to Main. Requires its current consumed eventId, explicit observe.delivery, freshness, message budget, and the per-input feedback gate. The program helper program.advise supplies its own id. Subject to agent approvals; returns delivered and an optional suppression reason.\", inputSchema: jevAdviceSchema as unknown as Record<string, unknown>, risk: \"agent\", effect: { kind: \"emission\", resources: [\"main:messages\"], ordering: \"ordered\" } },\n { name: \"stop\", description: \"Cancel a Jev program and await sandbox cleanup. Idempotent for retained terminal runs; already-issued external effects cannot be undone.\", inputSchema: idSchema as unknown as Record<string, unknown>, risk: \"execute\" },\n];\n\nexport class JevProvider implements FabricProvider {\n readonly name = \"jev\";\n readonly description = \"Shell-first TypeScript orchestration with explicit typed Jev decisions\";\n readonly manager: JevProgramManager;\n readonly client: JevClient;\n readonly route: JevRoute;\n constructor(options: JevManagerOptions & { credentialSource?: JevCredentialSource }, client?: JevClient) {\n this.manager = new JevProgramManager(options);\n this.route = resolveJevModelRoute(options.config.jev.model).route;\n this.client = client ?? new JevClient(options.config.jev, undefined,\n new JevCredentials(options.config.jev.credentialCommand, process.env, options.credentialSource, this.route.envKeys), this.route);\n }\n async list(request: FabricProviderListRequest): Promise<FabricActionDescriptor[]> {\n const query = request.query?.toLowerCase();\n return JEV_ACTION_DESCRIPTORS.filter(d => !query || `${d.name} ${d.description}`.toLowerCase().includes(query));\n }\n async describe(name: string): Promise<FabricActionDescriptor | undefined> { return JEV_ACTION_DESCRIPTORS.find(d => d.name === name); }\n async invoke(name: string, args: Record<string, unknown>, context: FabricInvocationContext): Promise<unknown> {\n const descriptor = await this.describe(name);\n if (!descriptor) throw new Error(`Unknown Jev action: ${name}`);\n const invalid = validationMessage(descriptor.inputSchema, args);\n if (invalid) throw new Error(`Invalid jev.${name} arguments: ${invalid}`);\n switch (name) {\n case \"evaluate\": return this.client.evaluate(args as unknown as JevRequest, context.signal ?? new AbortController().signal);\n case \"run\": return this.manager.launch(args as unknown as JevLaunch, context, false);\n case \"spawn\": return this.manager.launch(args as unknown as JevLaunch, context, true);\n case \"status\": return typeof args.id === \"string\" ? this.manager.status(args.id, args.after as number | undefined) : {\n credentials: this.client.credentials.status(), model: this.client.config.model, route: this.route.id, runs: this.manager.list(),\n };\n case \"join\":\n case \"wait\": return this.manager.wait(args.id as string, context.signal);\n case \"advise\": return this.manager.advise(args.id as string, args.eventId as string, args.message as string);\n case \"stop\": return this.manager.stop(args.id as string);\n }\n }\n async close(): Promise<void> { await this.manager.close(); this.client.close(); }\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { runAbortable } from \"../async-settlement.js\";\nimport type { ActionRegistry, FabricCapabilityViewLease, FabricCallAudit } from \"../core/action-registry.js\";\nimport { ApprovalController, FabricSessionApprovals } from \"../core/approval-controller.js\";\nimport { FabricAutoApprovalClassifier } from \"../core/auto-approval-classifier.js\";\nimport type { FabricConfig } from \"../config.js\";\nimport type { FabricInvocationContext } from \"../protocol.js\";\nimport type { JevLaunch, JevRunInfo, JevJson, JevResponse } from \"./types.js\";\nimport { checkSchema, checkValue, jsonText, object } from \"./validation.js\";\nimport { checkObserve, type JevObservationHost, type JevSubscription } from \"./observation.js\";\n\ninterface Run {\n info: JevRunInfo;\n controller: AbortController;\n done: Promise<JevRunInfo>;\n observation: JevSubscription | undefined;\n}\nexport interface JevManagerOptions {\n registry: ActionRegistry;\n config: FabricConfig;\n observationHost?: JevObservationHost | undefined;\n authorize?(ref: string, parentToolCallId: string): Promise<void>;\n}\nconst prelude = `const input = JSON.parse(\u03C0.__jevInput);\nconst program = Object.freeze({\n sleep: (ms: number): Promise<unknown> => tools.call({ ref: \"jev.$sleep\", args: { ms } }),\n emit: (value: unknown): Promise<unknown> => tools.call({ ref: \"jev.$emit\", args: { value } }),\n nextEvent: (): Promise<FabricJevHostEvent> => tools.call({ ref: \"jev.$nextEvent\" }) as Promise<FabricJevHostEvent>,\n advise: (args: {eventId: string; message: string}): Promise<FabricJevAdviceResult> => tools.call({ ref: \"jev.advise\", args: {...args, id: \u03C0.__jevRunId} }) as Promise<FabricJevAdviceResult>,\n});\\n`;\n\nexport class JevProgramManager {\n readonly #runs = new Map<string, Run>();\n readonly #approvals = new FabricSessionApprovals();\n #closed = false;\n #starting = 0;\n constructor(readonly options: JevManagerOptions) {}\n list() {\n return [...this.#runs.values()].map(({ info }) => ({\n id: info.id, name: info.name, state: info.state, background: info.background,\n startedAt: info.startedAt, evaluations: info.evaluations, toolCalls: info.toolCalls,\n ...(info.observation ? { observation: structuredClone(info.observation) } : {}),\n }));\n }\n #get(id: string): Run {\n const run = this.#runs.get(id);\n if (!run) throw new Error(\"Unknown or expired Jev run ID\");\n return run;\n }\n status(id: string, after = 0): JevRunInfo {\n const info = this.#get(id).info;\n return structuredClone({ ...info, events: info.events.filter(e => e.sequence > after) });\n }\n async wait(id: string, signal?: AbortSignal): Promise<JevRunInfo> {\n return structuredClone(await runAbortable(signal, () => this.#get(id).done));\n }\n /** Alias for wait. */\n join(id: string, signal?: AbortSignal): Promise<JevRunInfo> {\n return this.wait(id, signal);\n }\n async stop(id: string): Promise<JevRunInfo> {\n const run = this.#get(id);\n if (run.info.state === \"running\") run.controller.abort(new Error(\"Jev run stopped\"));\n return structuredClone(await run.done);\n }\n advise(id: string, eventId: string, message: string) {\n if (typeof message !== \"string\" || !message.trim() || message.length > 2000 || typeof eventId !== \"string\" || eventId.length > 256)\n throw new Error(\"Advice requires a current eventId and 1\u20132000 message characters\");\n const run = this.#get(id);\n if (!run.observation) throw new Error(\"Jev run has no observation subscription\");\n return run.observation.advise(eventId, message);\n }\n async launch(request: JevLaunch, context: FabricInvocationContext, background: boolean): Promise<JevRunInfo> {\n const { config, registry } = this.options;\n if (this.#closed) throw new Error(\"Jev program manager is closed\");\n if (this.#starting + [...this.#runs.values()].filter(r => r.info.state === \"running\").length >= config.jev.maxConcurrentRuns)\n throw new Error(\"Jev concurrent run limit reached\");\n context.signal?.throwIfAborted();\n this.#starting++;\n let lease: FabricCapabilityViewLease | undefined;\n let starting = true;\n try {\n const { program: definition, input, observe } = structuredClone(request);\n const observationHost = this.options.observationHost;\n const observationRevision = observationHost?.revision;\n if (observe !== undefined) {\n checkObserve(observe);\n if (!background) throw new Error(\"Observation requires jev.spawn; foreground runs cannot wait for their own turn to end\");\n if (!observationHost) throw new Error(\"Main lifecycle observation is unavailable in this host\");\n if (context.extensionContext.sessionManager?.getSessionId() !== observationHost.sessionId)\n throw new Error(\"Jev observation is scoped to its owning Main session\");\n }\n checkSchema(definition.inputSchema);\n checkSchema(definition.outputSchema);\n checkValue(definition.inputSchema, input, \"Program input\");\n const requires = [...new Set(definition.requires)];\n for (const ref of requires) {\n if (!/^[a-z][a-z0-9_-]*\\.[a-zA-Z0-9_.$-]+$/.test(ref) || (ref.startsWith(\"jev.\") && ref !== \"jev.evaluate\" && ref !== \"jev.advise\"))\n throw new Error(\"Programs require exact action refs; recursive Jev lifecycle calls are not allowed\");\n if (context.capabilityView && !Object.hasOwn(context.capabilityView.bindings, ref))\n throw new Error(`Jev program cannot widen its caller's capabilities: ${ref}`);\n if (!config.fullCodeMode && (ref.startsWith(\"pi.\") || ref.startsWith(\"extensions.\")))\n throw new Error(\"Full-code tool access is disabled\");\n }\n lease = await registry.acquireCapabilityView(requires, context);\n if (!lease.satisfied || !lease.view) throw new Error(`Missing Jev program capabilities: ${lease.missing.join(\", \")}`);\n if (context.capabilityView) for (const ref of requires) {\n const before = context.capabilityView.bindings[ref]!;\n const after = lease.view.bindings[ref]!;\n if (before.providerBindingId !== after.providerBindingId || before.descriptorHash !== after.descriptorHash)\n throw new Error(\"Caller capability generation changed; relaunch with a fresh commitment\");\n }\n const { TypeScriptKernelRuntime } = await import(\"../runtime/typescript-kernel.js\");\n const runtime = new TypeScriptKernelRuntime(\"quickjs\");\n const sources = await registry.guestTypeSources({ ...context, capabilityView: lease.view });\n const { code, checked } = runtime.prepare(prelude + definition.code, true, [], sources, [], true);\n if (checked.errors.length) throw new Error(`Jev program typecheck failed: ${checked.errors.map(e => e.message).join(\"; \").slice(0, 2000)}`);\n const approval = new ApprovalController(config.approvals, context.extensionContext, this.#approvals, new FabricAutoApprovalClassifier(() => config.jev));\n if (observe) await approval.approve({\n ref: \"jev.spawn\", provider: \"jev\", name: \"spawn\",\n description: \"Observe future Main lifecycle events and explicitly selected content for a bounded Jev program\",\n inputSchema: {}, risk: \"read\",\n }, { observe });\n if (this.#closed) throw new Error(\"Jev program manager is closed\");\n context.signal?.throwIfAborted();\n if (observe && observationHost!.revision !== observationRevision)\n throw new Error(\"Main lifecycle changed while preparing the observer; relaunch explicitly with current context\");\n const limits = definition.limits ?? {};\n const bounded = (value: number | undefined, fallback: number, ceiling: number) => Math.min(value ?? fallback, ceiling);\n const timeoutMs = bounded(limits.timeoutMs, 60_000, config.jev.maxDurationMs);\n const maxEvaluations = bounded(limits.maxEvaluations, 100, config.jev.maxEvaluations);\n const maxToolCalls = bounded(limits.maxToolCalls, 1000, config.jev.maxToolCalls);\n const maxTokens = bounded(limits.maxTokens, 100_000, config.jev.maxTokens);\n const id = randomUUID();\n const controller = new AbortController();\n const info: JevRunInfo = {\n id, name: definition.name, state: \"running\", background, startedAt: Date.now(),\n evaluations: 0, toolCalls: 0, usage: { input_tokens: 0, output_tokens: 0 },\n events: [], nextSequence: 1, logs: [],\n };\n let budgetFailure: string | undefined;\n const failBudget = (message: string): never => {\n budgetFailure = message;\n queueMicrotask(() => controller.abort(new Error(message)));\n throw new Error(message);\n };\n const observation = observe ? observationHost!.subscribe(observe, { id, name: definition.name }, controller) : undefined;\n if (observation) info.observation = observation.stats;\n const runLease = lease;\n lease = undefined;\n const abort = () => controller.abort(new Error(\"Foreground caller cancelled\"));\n if (!background) context.signal?.addEventListener(\"abort\", abort, { once: true });\n let timedOut = false;\n const timer = setTimeout(() => { timedOut = true; controller.abort(new Error(\"Jev deadline exceeded\")); }, timeoutMs);\n let evaluating = false;\n const audits: FabricCallAudit[] = [];\n const emit = (value: unknown) => {\n jsonText(value, 4096, \"Program event\");\n info.events.push({ sequence: info.nextSequence++, at: Date.now(), value: value as JevJson });\n if (info.events.length > 64) info.events.shift();\n };\n const run: Run = { info, controller, observation, done: undefined! };\n this.#runs.set(id, run);\n this.#starting--;\n starting = false;\n this.#prune();\n // Yield before execution so spawn returns without running a controller tick inline.\n run.done = (async () => {\n try {\n await delay(0, undefined, { signal: controller.signal });\n const result = await runtime.execute(code, async (rawRef, rawArgs, signal) => {\n signal.throwIfAborted();\n controller.signal.throwIfAborted();\n if (budgetFailure) throw new Error(budgetFailure);\n if (++info.toolCalls > maxToolCalls) return failBudget(\"Jev tool-call budget exhausted\");\n const ref = rawRef === \"fabric.$call\" ? rawArgs.ref : rawRef;\n const args = rawRef === \"fabric.$call\" ? rawArgs.args ?? {} : rawArgs;\n if (typeof ref !== \"string\" || !object(args)) throw new Error(\"Invalid Jev program tool call\");\n if (ref === \"jev.$sleep\") {\n if (typeof args.ms !== \"number\" || !Number.isFinite(args.ms) || args.ms < 0 || args.ms > timeoutMs) throw new Error(\"Invalid program.sleep duration\");\n await delay(args.ms, undefined, { signal });\n return null;\n }\n if (ref === \"jev.$emit\") { emit(args.value); return null; }\n if (ref === \"jev.$nextEvent\") {\n if (!observation) throw new Error(\"program.nextEvent requires observe on jev.spawn\");\n return observation.next();\n }\n if (ref === \"jev.advise\" && args.id !== id) throw new Error(\"A Jev program can only advise through its own run\");\n if (!Object.hasOwn(runLease.view!.bindings, ref)) throw new Error(`Capability not granted to Jev program: ${ref}`);\n if (ref === \"jev.evaluate\") {\n if (evaluating) throw new Error(\"One Jev evaluation may be in flight per program; batch independent questions in one request\");\n if (info.evaluations >= maxEvaluations || info.usage.input_tokens + info.usage.output_tokens >= maxTokens)\n return failBudget(\"Jev inference budget exhausted\");\n info.evaluations++;\n evaluating = true;\n }\n try {\n const value = await registry.invoke(ref, args, {\n cwd: context.cwd, extensionContext: context.extensionContext, signal, capabilityView: runLease.view!,\n ...(context.effectPolicy ? { effectPolicy: context.effectPolicy } : {}),\n parentToolCallId: `jev:${id}`, nestedToolCallId: `jev:${id}:${info.toolCalls}`,\n update() {}, activity() {}, attachMedia() {}, attachPreview() {},\n authorize: async action => { await this.options.authorize?.(action.ref, `jev:${id}`); },\n approve: async (action, prepared) => {\n if (action.ref === \"schema.commit\") {\n await approval.approve({ ...action, risk: \"write\" }, prepared);\n await approval.approve({ ...action, risk: \"execute\" }, prepared);\n } else await approval.approve(action, prepared);\n },\n audits, maxResultChars: ref === \"jev.evaluate\" ? 1_048_576 : config.executor.maxNestedResultChars,\n });\n if (ref === \"jev.evaluate\") {\n const response = value as JevResponse;\n info.usage.input_tokens += response.usage.input_tokens;\n info.usage.output_tokens += response.usage.output_tokens;\n if (info.usage.input_tokens + info.usage.output_tokens > maxTokens)\n return failBudget(\"Jev reported-token budget exhausted\");\n }\n return value;\n } finally {\n if (ref === \"jev.evaluate\") evaluating = false;\n // Keep audit retention bounded even in a long-lived loop.\n if (audits.length > 64) audits.splice(0, audits.length - 64);\n }\n }, {\n timeoutMs, memoryLimitBytes: Math.min(config.executor.memoryLimitBytes, 64 * 1024 * 1024),\n maxCpuSliceMs: 100, maxPendingTimers: 128, maxLogChars: 4096, strings: { __jevInput: JSON.stringify(input), __jevRunId: id }, signal: controller.signal,\n });\n info.logs = result.logs;\n if (budgetFailure) { info.state = \"failed\"; info.error = budgetFailure; }\n else if (timedOut || result.terminationReason === \"timed_out\") { info.state = \"timed_out\"; info.error = result.error ?? \"Jev deadline exceeded\"; }\n else if (controller.signal.aborted || result.terminationReason === \"aborted\") { info.state = \"cancelled\"; }\n else if (result.terminationReason !== \"completed\") { info.state = \"failed\"; info.error = result.error ?? \"Jev program failed\"; }\n else {\n checkValue(definition.outputSchema, result.value, \"Program output\");\n info.result = result.value;\n info.state = \"completed\";\n }\n } catch (error) {\n info.state = budgetFailure ? \"failed\" : timedOut ? \"timed_out\" : controller.signal.aborted ? \"cancelled\" : \"failed\";\n info.error = (budgetFailure ?? (error instanceof Error ? error.message : \"Jev program failed\")).slice(0, 2000);\n } finally {\n clearTimeout(timer);\n observation?.close();\n context.signal?.removeEventListener(\"abort\", abort);\n await runLease.release();\n info.endedAt = Date.now();\n this.#prune();\n }\n return info;\n })();\n return background ? this.status(id) : structuredClone(await run.done);\n } finally {\n if (starting) this.#starting--;\n await lease?.release();\n }\n }\n #prune(): void {\n for (const [id, run] of this.#runs) {\n if (this.#runs.size <= this.options.config.jev.maxRetainedRuns) break;\n if (run.info.state !== \"running\") this.#runs.delete(id);\n }\n }\n stopAll(): void {\n for (const run of this.#runs.values()) if (run.info.state === \"running\") run.controller.abort(new Error(\"Jev provider closed\"));\n }\n async close(): Promise<void> {\n this.#closed = true;\n // Terminal runs are already out of QuickJS and may be releasing the last\n // provider lease right now. Waiting for those here would self-deadlock.\n const running = [...this.#runs.values()].filter(r => r.info.state === \"running\");\n this.stopAll();\n await Promise.all(running.map(r => r.done));\n this.#runs.clear();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -112,6 +112,15 @@ export declare class FabricShellJobStore {
|
|
|
112
112
|
subscribe(listener: (event: FabricShellJobEvent) => void): () => void;
|
|
113
113
|
constructor(tempRoot?: string);
|
|
114
114
|
begin(tool: PiShellToolName, command: string, options?: FabricShellJobOptions): FabricShellJob;
|
|
115
|
+
/** Event-driven, bounded observation. Timeout/cancellation never stops the job. */
|
|
116
|
+
waitFor(id: string, options: {
|
|
117
|
+
after?: number;
|
|
118
|
+
timeoutMs: number;
|
|
119
|
+
signal?: AbortSignal | undefined;
|
|
120
|
+
}): Promise<{
|
|
121
|
+
task: FabricShellJobInfo;
|
|
122
|
+
timedOut: boolean;
|
|
123
|
+
}>;
|
|
115
124
|
stop(id: string): boolean;
|
|
116
125
|
acknowledge(id: string): void;
|
|
117
126
|
get(id: string): FabricShellJob | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-jobs.d.ts","sourceRoot":"","sources":["../../src/core/shell-jobs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shell-jobs.d.ts","sourceRoot":"","sources":["../../src/core/shell-jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -646,6 +646,7 @@ var FabricShellJobStore = class {
|
|
|
646
646
|
#jobs = /* @__PURE__ */ new Map();
|
|
647
647
|
#listeners = /* @__PURE__ */ new Set();
|
|
648
648
|
#closed = false;
|
|
649
|
+
#closing = new AbortController();
|
|
649
650
|
subscribe(listener) {
|
|
650
651
|
this.#listeners.add(listener);
|
|
651
652
|
return () => {
|
|
@@ -662,7 +663,7 @@ var FabricShellJobStore = class {
|
|
|
662
663
|
}
|
|
663
664
|
}
|
|
664
665
|
#prune() {
|
|
665
|
-
const completed = [...this.#jobs.values()].filter((job) => job.
|
|
666
|
+
const completed = [...this.#jobs.values()].filter((job) => job.finishedAt !== void 0);
|
|
666
667
|
completed.sort((a, b) => (a.finishedAt ?? 0) - (b.finishedAt ?? 0));
|
|
667
668
|
for (const [index, job] of completed.entries()) {
|
|
668
669
|
if (index < completed.length - SHELL_COMPLETED_HANDLES || Date.now() - (job.finishedAt ?? 0) >= SHELL_COMPLETED_MAX_AGE_MS) this.#jobs.delete(job.id);
|
|
@@ -679,6 +680,50 @@ var FabricShellJobStore = class {
|
|
|
679
680
|
this.#emit({ type: "started", job: job.info() });
|
|
680
681
|
return job;
|
|
681
682
|
}
|
|
683
|
+
/** Event-driven, bounded observation. Timeout/cancellation never stops the job. */
|
|
684
|
+
waitFor(id, options) {
|
|
685
|
+
options.signal?.throwIfAborted();
|
|
686
|
+
this.#closing.signal.throwIfAborted();
|
|
687
|
+
const job = this.get(id);
|
|
688
|
+
if (!job) throw new Error(`Unknown shell task: ${id}`);
|
|
689
|
+
if (!Number.isInteger(options.timeoutMs) || options.timeoutMs < 1 || options.timeoutMs > 3e5)
|
|
690
|
+
throw new Error("Task observation timeoutMs must be an integer from 1 to 300000");
|
|
691
|
+
if (options.after !== void 0 && (!Number.isSafeInteger(options.after) || options.after < 0 || options.after > job.eventCount))
|
|
692
|
+
throw new Error("Task observation after must be an existing event cursor");
|
|
693
|
+
return new Promise((resolve2, reject) => {
|
|
694
|
+
let timer;
|
|
695
|
+
let unsubscribe = () => {
|
|
696
|
+
};
|
|
697
|
+
const cleanup = () => {
|
|
698
|
+
if (timer) clearTimeout(timer);
|
|
699
|
+
unsubscribe();
|
|
700
|
+
options.signal?.removeEventListener("abort", abort);
|
|
701
|
+
this.#closing.signal.removeEventListener("abort", closing);
|
|
702
|
+
};
|
|
703
|
+
const abort = () => {
|
|
704
|
+
cleanup();
|
|
705
|
+
reject(options.signal?.reason ?? new Error("Task observation cancelled"));
|
|
706
|
+
};
|
|
707
|
+
const closing = () => {
|
|
708
|
+
cleanup();
|
|
709
|
+
reject(new Error("Shell job store is closed"));
|
|
710
|
+
};
|
|
711
|
+
const complete = (timedOut) => {
|
|
712
|
+
cleanup();
|
|
713
|
+
resolve2({ task: job.info(), timedOut });
|
|
714
|
+
};
|
|
715
|
+
const check = () => {
|
|
716
|
+
if (job.info().finishedAt !== void 0 || options.after !== void 0 && job.eventCount > options.after) complete(false);
|
|
717
|
+
};
|
|
718
|
+
unsubscribe = this.subscribe((event) => {
|
|
719
|
+
if (event.job.id === id) check();
|
|
720
|
+
});
|
|
721
|
+
options.signal?.addEventListener("abort", abort, { once: true });
|
|
722
|
+
this.#closing.signal.addEventListener("abort", closing, { once: true });
|
|
723
|
+
timer = setTimeout(() => complete(true), options.timeoutMs);
|
|
724
|
+
check();
|
|
725
|
+
});
|
|
726
|
+
}
|
|
682
727
|
stop(id) {
|
|
683
728
|
const job = this.get(id);
|
|
684
729
|
if (!job) throw new Error(`Unknown shell task: ${id}`);
|
|
@@ -715,6 +760,7 @@ var FabricShellJobStore = class {
|
|
|
715
760
|
}
|
|
716
761
|
async close() {
|
|
717
762
|
this.#closed = true;
|
|
763
|
+
this.#closing.abort(new Error("Shell job store is closed"));
|
|
718
764
|
this.#listeners.clear();
|
|
719
765
|
const live = this.live();
|
|
720
766
|
for (const job of live) {
|
|
@@ -8723,7 +8769,7 @@ var closedPiInputSchema = (name, source) => {
|
|
|
8723
8769
|
properties.monitor = shellMonitorSchema;
|
|
8724
8770
|
properties.background = {
|
|
8725
8771
|
type: "boolean",
|
|
8726
|
-
description: "Detach immediately: returns ok:true with taskId, pid and a bounded live log. Completion notifies the owning agent. Inspect/stop with tools.call tasks.get/tasks.stop. monitor also detaches, requires explicit ui/wake delivery and has a finite deadline. Do not poll."
|
|
8772
|
+
description: "Detach immediately: returns ok:true with taskId, pid and a bounded live log. Completion notifies the owning agent. Inspect/stop with tools.call tasks.get/tasks.stop; bounded controllers can await tasks.wait/tasks.watch without polling. monitor also detaches, requires explicit ui/wake delivery and has a finite deadline. Do not poll."
|
|
8727
8773
|
};
|
|
8728
8774
|
}
|
|
8729
8775
|
if (name === "edit") {
|
|
@@ -9336,9 +9382,19 @@ var PiToolsProvider = class {
|
|
|
9336
9382
|
|
|
9337
9383
|
// src/providers/tasks-provider.ts
|
|
9338
9384
|
var idSchema = { type: "object", properties: { id: { type: "string", minLength: 1 } }, required: ["id"], additionalProperties: false };
|
|
9385
|
+
var waitSchema = { ...idSchema, properties: {
|
|
9386
|
+
...idSchema.properties,
|
|
9387
|
+
timeoutMs: { type: "integer", minimum: 1, maximum: 3e5, description: "Observation ceiling in milliseconds, not a delay or process deadline. Timeout never cancels the task." }
|
|
9388
|
+
} };
|
|
9389
|
+
var watchSchema = { ...waitSchema, properties: {
|
|
9390
|
+
...waitSchema.properties,
|
|
9391
|
+
after: { type: "integer", minimum: 0, maximum: Number.MAX_SAFE_INTEGER, description: "Previously returned nextCursor; default 0. Missing retained events are disclosed as omitted." }
|
|
9392
|
+
} };
|
|
9339
9393
|
var descriptors5 = [
|
|
9340
9394
|
{ name: "list", description: "List this session's tracked shell tasks and monitors, with IDs, command, cwd, state, timestamps, and bounded monitor events. No output polling is needed: detached completions notify the owning agent.", inputSchema: { type: "object", properties: {}, additionalProperties: false }, risk: "read", effect: { kind: "none", ordering: "commutative" } },
|
|
9341
9395
|
{ name: "get", description: "Inspect one shell task by ID, returning metadata and a bounded output tail. Acknowledges its pending notification after a successful read. Full retained output is at logPath (bounded, not an archive).", inputSchema: idSchema, risk: "read", effect: { kind: "emission", ordering: "ordered" } },
|
|
9396
|
+
{ name: "wait", description: "Wait without polling for a session-owned shell task to finish, default 30 seconds. Returns task metadata, a bounded output tail and timedOut. Inspect status and exitCode; an exited task is not goal verification. Timeout or cancellation stops only this wait.", inputSchema: waitSchema, risk: "read", effect: { kind: "emission", ordering: "ordered" } },
|
|
9397
|
+
{ name: "watch", description: "Wait without polling for the next bounded monitor batch, task exit, or timeout (default 5 seconds). Start pi.bash with monitor.delivery ui and an optional literal monitor.match first. Returns reason, lines, omitted, nextCursor and task metadata; pass nextCursor as after. No inference, wakeup, renewal or cancellation of the task. Previews are not a lossless RPC stream.", inputSchema: watchSchema, risk: "read", effect: { kind: "none", ordering: "commutative" } },
|
|
9342
9398
|
{ name: "stop", description: "Stop one session-owned shell task or monitor by ID using its existing abort controller, not an arbitrary PID. Cancellation does not wake the owning agent.", inputSchema: idSchema, risk: "execute", effect: { kind: "emission", ordering: "ordered" } }
|
|
9343
9399
|
];
|
|
9344
9400
|
var TasksProvider = class {
|
|
@@ -9346,7 +9402,7 @@ var TasksProvider = class {
|
|
|
9346
9402
|
this.jobs = jobs;
|
|
9347
9403
|
}
|
|
9348
9404
|
name = "tasks";
|
|
9349
|
-
description = "Session-owned
|
|
9405
|
+
description = "Session-owned shell orchestration with bounded wait/watch and explicit stop";
|
|
9350
9406
|
async list(request) {
|
|
9351
9407
|
const query = request.query?.toLowerCase();
|
|
9352
9408
|
return query ? descriptors5.filter((d) => `${d.name} ${d.description}`.toLowerCase().includes(query)) : descriptors5;
|
|
@@ -9354,18 +9410,37 @@ var TasksProvider = class {
|
|
|
9354
9410
|
async describe(name) {
|
|
9355
9411
|
return descriptors5.find((d) => d.name === name);
|
|
9356
9412
|
}
|
|
9357
|
-
async invoke(name, args,
|
|
9413
|
+
async invoke(name, args, context) {
|
|
9414
|
+
const descriptor = await this.describe(name);
|
|
9415
|
+
if (!descriptor) throw new Error(`Unknown tasks action: ${name}`);
|
|
9416
|
+
const invalid = validationMessage(descriptor.inputSchema, args);
|
|
9417
|
+
if (invalid) throw new Error(`Invalid tasks.${name} arguments: ${invalid}`);
|
|
9358
9418
|
if (name === "list") return this.jobs.list();
|
|
9359
|
-
|
|
9360
|
-
|
|
9361
|
-
|
|
9362
|
-
if (
|
|
9363
|
-
if (name === "
|
|
9419
|
+
const id = args.id;
|
|
9420
|
+
const job = this.jobs.get(id);
|
|
9421
|
+
if (!job) throw new Error(`Unknown shell task: ${id}`);
|
|
9422
|
+
if (name === "stop") return { stopped: this.jobs.stop(id), task: job.info() };
|
|
9423
|
+
if (name === "watch") {
|
|
9424
|
+
if (!job.options.monitor) throw new Error("tasks.watch requires a task started with monitor; use tasks.wait for ordinary tasks");
|
|
9425
|
+
const after2 = args.after ?? 0;
|
|
9426
|
+
const { task, timedOut } = await this.jobs.waitFor(id, { after: after2, timeoutMs: args.timeoutMs ?? 5e3, signal: context.signal });
|
|
9427
|
+
const count = task.eventCount - after2;
|
|
9428
|
+
const retained = task.lastEvent?.lines ?? [];
|
|
9429
|
+
const lines = count > 0 ? retained.slice(-Math.min(count, retained.length)) : [];
|
|
9430
|
+
return {
|
|
9431
|
+
task,
|
|
9432
|
+
reason: count > 0 ? "event" : timedOut ? "timeout" : "finished",
|
|
9433
|
+
lines,
|
|
9434
|
+
omitted: Math.max(0, count - lines.length),
|
|
9435
|
+
nextCursor: task.eventCount
|
|
9436
|
+
};
|
|
9437
|
+
}
|
|
9438
|
+
const waited = name === "wait" ? await this.jobs.waitFor(id, { timeoutMs: args.timeoutMs ?? 3e4, signal: context.signal }) : void 0;
|
|
9364
9439
|
const before = job.info();
|
|
9365
9440
|
const output = await job.outputText();
|
|
9366
9441
|
const after = job.info();
|
|
9367
|
-
if (before.eventCount === after.eventCount && before.finishedAt === after.finishedAt) this.jobs.acknowledge(
|
|
9368
|
-
return { task: job.info(), output };
|
|
9442
|
+
if (!waited?.timedOut && before.eventCount === after.eventCount && before.finishedAt === after.finishedAt) this.jobs.acknowledge(id);
|
|
9443
|
+
return { task: job.info(), output, ...waited ? { timedOut: waited.timedOut } : {} };
|
|
9369
9444
|
}
|
|
9370
9445
|
};
|
|
9371
9446
|
|
|
@@ -13424,13 +13499,13 @@ ${escapeXmlText(text)}
|
|
|
13424
13499
|
const { JevObservationHost } = await import("./jev/observation.js");
|
|
13425
13500
|
await builtins.install(createProviderComponent({
|
|
13426
13501
|
provider: "jev",
|
|
13427
|
-
description: "
|
|
13502
|
+
description: "Shell orchestration and explicit typed Jev decisions",
|
|
13428
13503
|
create: (component) => {
|
|
13429
13504
|
component.guide({
|
|
13430
13505
|
label: "jev-programs",
|
|
13431
13506
|
models: ["*/*"],
|
|
13432
13507
|
targets: ["main", "participant"],
|
|
13433
|
-
content: "Jev supplies typed Choice, Noul, and Score judgments, not generated text. Use jev.evaluate for batched questions; jev.run/spawn for isolated TypeScript programs that may loop using input, program.sleep, program.emit, and exact requires capabilities. run/wait return terminal envelopes (join aliases wait for both agents and Jev); inspect state and result/error.
|
|
13508
|
+
content: "Jev supplies typed Choice, Noul, and Score judgments, not generated text. Prefer shell-first orchestration: granted pi.bash runs existing CLIs; tasks.wait/watch await bounded receipts/monitor batches without polling or inference. Use UI-only monitors to avoid Main wakeups. Browser/macOS tools need no Fabric bridge. Code owns commands; never execute a model answer as shell source. Omit jev.evaluate and set maxEvaluations:0 for deterministic programs (host auto approvals remain independent). Use jev.evaluate only for explicit authorized batched questions; jev.run/spawn for isolated TypeScript programs that may loop using input, program.sleep, program.emit, and exact requires capabilities. run/wait return terminal envelopes (join aliases wait for both agents and Jev); inspect state and result/error. Programs and detached tasks are session-owned, not restart-durable. jev.status/stop control programs; tasks.stop separately stops their detached tasks. Observation timeout/cancellation never cancels the task; keep task IDs and finite process deadlines. For Main-turn advisors, spawn with observe, await program.nextEvent without polling, and opt into bounded context fields. program.advise requires jev.advise and explicit delivery; default is record-only. Return the observer ID without waiting in Main; Escape/Main abort cancels observers. Use /login jev, TYPESAFE_API_KEY, /login openrouter, OPENROUTER_API_KEY, /login vercel-ai-gateway, AI_GATEWAY_API_KEY, or a trusted credentialCommand. Credentials stay host-side; status never retrieves a key. See docs/jev.md for schemas, budgets, and shell/CLI composition."
|
|
13434
13509
|
});
|
|
13435
13510
|
const observationHost = identity.kind === "main" ? new JevObservationHost(context.sessionManager.getSessionId(), (advice) => {
|
|
13436
13511
|
this.pi.sendMessage({
|