@forgeax/engine-tool-runtime 0.1.31 → 0.1.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +15 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -648,14 +648,27 @@ function createToolRuntime(contributions) {
|
|
|
648
648
|
} else if (hasOkField(produced)) {
|
|
649
649
|
if (produced.ok === false) {
|
|
650
650
|
const error = Reflect.get(produced, "error");
|
|
651
|
+
const failureArtifacts = Reflect.get(produced, "artifacts") ?? [];
|
|
652
|
+
if (!validateArtifactRefs(failureArtifacts)) {
|
|
653
|
+
await settle({
|
|
654
|
+
outcome: "failed",
|
|
655
|
+
failure: domainFailureError(
|
|
656
|
+
"artifact-ref-invalid",
|
|
657
|
+
"failure artifact refs to be serializable ArtifactRef values",
|
|
658
|
+
"Return refs created by createArtifactRef."
|
|
659
|
+
),
|
|
660
|
+
artifacts: []
|
|
661
|
+
});
|
|
662
|
+
return;
|
|
663
|
+
}
|
|
651
664
|
if (isToolRuntimeError(error)) {
|
|
652
|
-
await settle({ outcome: "failed", failure: error, artifacts:
|
|
665
|
+
await settle({ outcome: "failed", failure: error, artifacts: failureArtifacts });
|
|
653
666
|
return;
|
|
654
667
|
}
|
|
655
668
|
await settle({
|
|
656
669
|
outcome: "failed",
|
|
657
670
|
failure: domainError(error),
|
|
658
|
-
artifacts:
|
|
671
|
+
artifacts: failureArtifacts
|
|
659
672
|
});
|
|
660
673
|
return;
|
|
661
674
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/artifacts.ts","../src/lease.ts","../src/timing.ts","../src/runtime.ts","../src/api.ts","../src/capability.ts","../src/carrier.ts","../src/command-tree.ts","../src/json-schema.ts","../src/migration.ts","../src/snapshot.ts","../src/transport.ts"],"names":["pathKey","record","run","performance","token"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { JsonValue, ToolEvidenceKind, ToolRealm, ToolRuntimeError } from './types.js';\n\nexport function invalidArgsError(message: string, value: JsonValue): ToolRuntimeError {\n return {\n code: 'tool-invalid-args',\n expected: 'arguments accepted by the contribution argsSchema',\n hint: 'Read the descriptor schema and retry with typed arguments.',\n detail: { message, value },\n };\n}\n\nexport function capabilityUnavailableError(capability: string, realm: ToolRealm): ToolRuntimeError {\n return {\n code: 'tool-capability-unavailable',\n expected: `capability ${capability} in realm ${realm}`,\n hint: 'Inspect the capability matrix and select an available realm or path.',\n detail: { capability, realm },\n };\n}\n\nexport function snapshotStaleError(expectedDigest: string, actualDigest: string): ToolRuntimeError {\n return {\n code: 'tool-snapshot-stale',\n expected: 'the supplied snapshot to match the current authority',\n hint: 'Refresh the authority snapshot and retry the write.',\n detail: { expectedDigest, actualDigest },\n };\n}\n\nexport function domainFailureError(\n code: string,\n expected = 'the producer operation to succeed',\n hint = 'Inspect detail and repair the owning producer before retrying.',\n payload?: JsonValue,\n): ToolRuntimeError {\n return {\n code: 'tool-domain-failed',\n expected,\n hint,\n detail: { code, ...(payload === undefined ? {} : { payload }) },\n };\n}\n\nexport function artifactIncompleteError(\n missing: readonly ToolEvidenceKind[],\n runId: string,\n): ToolRuntimeError {\n return {\n code: 'tool-artifact-incomplete',\n expected: 'the requested evidence artifacts to be produced by their owners',\n hint: 'Request only supported evidence and inspect the artifact manifest before retrying.',\n detail: { missing: [...missing], runId },\n };\n}\n\nexport function cancellationError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-run-cancelled',\n expected: 'the tool run not to be cancelled',\n hint: 'Retry the command after resolving the cancellation source.',\n detail: { reason },\n };\n}\n\nexport function timeoutError(deadlineMs: number): ToolRuntimeError {\n return {\n code: 'tool-run-timeout',\n expected: `the tool run to complete within ${deadlineMs}ms`,\n hint: 'Increase the deadline only when the operation is expected to be bounded.',\n detail: { deadlineMs },\n };\n}\n\nexport function disconnectedError(transport: string): ToolRuntimeError {\n return {\n code: 'tool-run-disconnected',\n expected: 'the tool transport to remain connected',\n hint: 'Reconnect the transport and retry from the last serialized snapshot.',\n detail: { transport },\n };\n}\n\nexport function terminalError(runId: string, outcome: 'succeeded' | 'failed'): ToolRuntimeError {\n return {\n code: 'tool-run-terminal',\n expected: 'a non-terminal ToolRun',\n hint: 'Use the existing terminal and do not attach another executor.',\n detail: { runId, outcome },\n };\n}\n\nexport function cleanupError(runId: string, message: string): ToolRuntimeError {\n return {\n code: 'tool-cleanup-failed',\n expected: 'all ToolRun cleanup callbacks to complete',\n hint: 'Inspect the cleanup detail and release the owning resource.',\n detail: { runId, message },\n };\n}\n\nexport function artifactManifestError(\n expected: string,\n hint: string,\n detail: { readonly reason: string; readonly runId?: string },\n): ToolRuntimeError {\n return { code: 'tool-artifact-manifest-invalid', expected, hint, detail };\n}\n\nexport function timingError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-timing-invalid',\n expected: 'exclusive timing phases to be opened and closed once without overlap',\n hint: 'close the current phase before starting the next phase and finish only after all phases close',\n detail: { reason },\n };\n}\n","import { artifactManifestError } from './errors.js';\nimport type { ArtifactRef, JsonValue, SnapshotRef, ToolEvidenceKind } from './types.js';\n\nexport type PreviewArtifactRole =\n | 'report'\n | 'rhi-tape'\n | 'capture'\n | 'fresh-replay'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport type PreviewArtifactKind =\n | 'report'\n | 'rhi-tape'\n | 'png'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport interface PreviewArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly subjectDigest: string;\n readonly presentationDigest: string;\n readonly captureId: string;\n readonly frameId: number;\n}\n\nexport interface PreviewArtifactManifestEntry {\n readonly owner: string;\n readonly kind: PreviewArtifactKind;\n readonly role: PreviewArtifactRole;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType: string;\n readonly derivedFrom: readonly string[];\n}\n\nexport interface PreviewArtifactManifest {\n readonly schemaVersion: '2.0.0';\n readonly identity: PreviewArtifactIdentity;\n readonly artifacts: readonly PreviewArtifactManifestEntry[];\n}\n\nexport type PreviewArtifactManifestValidation =\n | { readonly ok: true; readonly value: PreviewArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport interface ToolArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly stepId: string;\n readonly frameId: number;\n readonly captureId: string;\n}\n\nexport interface ToolArtifactManifestEntry {\n readonly owner: string;\n readonly kind: ToolEvidenceKind;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType?: string;\n readonly derivedFrom?: readonly string[];\n}\n\nexport interface ToolArtifactManifest {\n readonly schemaVersion: '1.0.0';\n readonly identity: ToolArtifactIdentity;\n readonly artifacts: readonly ToolArtifactManifestEntry[];\n}\n\nexport type ArtifactManifestValidation =\n | { readonly ok: true; readonly value: ToolArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport function createArtifactManifest(manifest: ToolArtifactManifest): ToolArtifactManifest {\n const result = validateArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('artifact manifest is invalid');\n return {\n schemaVersion: '1.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({ ...artifact })),\n };\n}\n\nexport function validateArtifactManifest(\n manifest: ToolArtifactManifest,\n required: readonly ToolEvidenceKind[],\n): ArtifactManifestValidation {\n const fail = (reason: string, expected: string): ArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n expected,\n 'regenerate the complete manifest from the owning producers',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '1.0.0')\n return fail('unsupported schemaVersion', 'schemaVersion === \"1.0.0\"');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n identity.runId.length === 0 ||\n identity.snapshotDigest.length === 0 ||\n identity.stepId.length === 0 ||\n identity.captureId.length === 0 ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n )\n return fail(\n 'identity is incomplete',\n 'runId/snapshotDigest/stepId/captureId and non-negative frameId',\n );\n const seen = new Set<ToolEvidenceKind>();\n for (const artifact of manifest.artifacts) {\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0\n )\n return fail(\n `invalid ${artifact.kind} artifact entry`,\n 'owner/uri/digest and byteLength are complete',\n );\n if (seen.has(artifact.kind))\n return fail(\n `duplicate artifact kind '${artifact.kind}'`,\n 'one owner entry per evidence kind',\n );\n seen.add(artifact.kind);\n }\n for (const kind of required)\n if (!seen.has(kind))\n return fail(\n `missing artifact kind '${kind}'`,\n `manifest includes requested '${kind}' evidence`,\n );\n return { ok: true, value: manifest };\n}\n\nconst PREVIEW_ROLE_KINDS: Readonly<Record<PreviewArtifactRole, PreviewArtifactKind>> = {\n report: 'report',\n 'rhi-tape': 'rhi-tape',\n capture: 'png',\n 'fresh-replay': 'png',\n 'profile-capture': 'profile-capture',\n 'contact-sheet': 'contact-sheet',\n};\n\nexport function createPreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n): PreviewArtifactManifest {\n const result = validatePreviewArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('preview artifact manifest is invalid');\n return {\n schemaVersion: '2.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({\n ...artifact,\n derivedFrom: [...artifact.derivedFrom],\n })),\n };\n}\n\nexport function validatePreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n requiredRoles: readonly PreviewArtifactRole[],\n): PreviewArtifactManifestValidation {\n const fail = (reason: string): PreviewArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n 'schemaVersion 2.0.0 with one complete identity and role per artifact',\n 'regenerate the staged report and evidence from one lexical ToolRun',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '2.0.0') return fail('v1 manifest or unsupported schemaVersion');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n [\n identity.runId,\n identity.snapshotDigest,\n identity.subjectDigest,\n identity.presentationDigest,\n identity.captureId,\n ].some((value) => typeof value !== 'string' || value.length === 0) ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n ) {\n return fail('identity is incomplete or stale');\n }\n const seenRoles = new Set<PreviewArtifactRole>();\n const digests = new Set<string>();\n for (const artifact of manifest.artifacts) {\n if (seenRoles.has(artifact.role)) return fail(`duplicate role '${artifact.role}'`);\n if (PREVIEW_ROLE_KINDS[artifact.role] !== artifact.kind) {\n return fail(`role '${artifact.role}' does not match kind '${artifact.kind}'`);\n }\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n artifact.mediaType.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0 ||\n artifact.derivedFrom.some((digest) => digest.length === 0)\n ) {\n return fail(`incomplete '${artifact.role}' artifact`);\n }\n seenRoles.add(artifact.role);\n digests.add(artifact.digest);\n }\n for (const artifact of manifest.artifacts) {\n if (artifact.derivedFrom.some((digest) => !digests.has(digest))) {\n return fail(`'${artifact.role}' derivedFrom references an unpublished artifact`);\n }\n }\n for (const role of requiredRoles) {\n if (!seenRoles.has(role)) return fail(`missing required role '${role}'`);\n }\n return { ok: true, value: manifest };\n}\n\nexport function isSerializableValue(value: unknown, seen = new Set<object>()): value is JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object') return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.every((entry) => isSerializableValue(entry, seen));\n if (Object.getPrototypeOf(value) !== Object.prototype) return false;\n return Object.entries(value).every(\n ([key, entry]) => typeof key === 'string' && isSerializableValue(entry, seen),\n );\n}\n\nexport function createArtifactRef(input: {\n readonly kind: ToolEvidenceKind | 'tool-result' | 'receipt';\n readonly digest: string;\n readonly uri?: string;\n readonly mediaType?: string;\n readonly sizeBytes?: number;\n}): ArtifactRef {\n if (input.digest.length === 0) throw new TypeError('ArtifactRef digest must not be empty');\n if (\n input.sizeBytes !== undefined &&\n (!Number.isSafeInteger(input.sizeBytes) || input.sizeBytes < 0)\n ) {\n throw new TypeError('ArtifactRef sizeBytes must be a non-negative safe integer');\n }\n return { ...input };\n}\n\nexport function createSnapshotRef(input: SnapshotRef): SnapshotRef {\n if (!Number.isSafeInteger(input.revision) || input.revision < 0) {\n throw new TypeError('SnapshotRef revision must be a non-negative safe integer');\n }\n if (input.digest.length === 0) throw new TypeError('SnapshotRef digest must not be empty');\n return { revision: input.revision, digest: input.digest };\n}\n\nexport function validateArtifactRefs(value: unknown): value is readonly ArtifactRef[] {\n return (\n Array.isArray(value) &&\n value.every(\n (entry) =>\n typeof entry === 'object' &&\n entry !== null &&\n typeof Reflect.get(entry, 'kind') === 'string' &&\n typeof Reflect.get(entry, 'digest') === 'string' &&\n (Reflect.get(entry, 'uri') === undefined || typeof Reflect.get(entry, 'uri') === 'string'),\n )\n );\n}\n","export type LeaseTerminationReason =\n | 'terminal'\n | 'cancel'\n | 'timeout'\n | 'disconnect'\n | 'provider-exit';\n\nexport interface LeaseCleanupFailure {\n readonly owner: string;\n readonly message: string;\n}\n\nexport interface LeaseTermination {\n readonly terminalId: string;\n readonly reason: LeaseTerminationReason;\n readonly failures: readonly LeaseCleanupFailure[];\n}\n\nexport interface LexicalLease {\n readonly state: 'active' | 'terminating' | 'terminated';\n readonly register: (owner: string, cleanup: () => void | Promise<void>) => boolean;\n readonly terminate: (reason: LeaseTerminationReason) => Promise<LeaseTermination>;\n}\n\nexport function createLexicalLease(runId: string): LexicalLease {\n const cleanups: Array<{ readonly owner: string; readonly cleanup: () => void | Promise<void> }> =\n [];\n let state: LexicalLease['state'] = 'active';\n let terminalId: string | undefined;\n let termination: Promise<LeaseTermination> | undefined;\n\n const terminate = (reason: LeaseTerminationReason): Promise<LeaseTermination> => {\n if (termination !== undefined) return termination;\n terminalId = `${runId}:terminal:${crypto.randomUUID()}`;\n state = 'terminating';\n termination = (async () => {\n const failures: LeaseCleanupFailure[] = [];\n for (let index = cleanups.length - 1; index >= 0; index -= 1) {\n const entry = cleanups[index];\n if (entry === undefined) continue;\n try {\n await entry.cleanup();\n } catch (cause) {\n failures.push({\n owner: entry.owner,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n }\n }\n state = 'terminated';\n return { terminalId: terminalId as string, reason, failures };\n })();\n return termination;\n };\n\n return {\n get state() {\n return state;\n },\n register(owner, cleanup) {\n if (state !== 'active') return false;\n cleanups.push({ owner, cleanup });\n return true;\n },\n terminate,\n };\n}\n","import type { ToolPhaseObservation, ToolTiming, ToolTimingPhase } from './types.js';\n\nexport interface ExclusiveTimingResult {\n readonly startedAtMs: number;\n readonly endedAtMs: number;\n readonly totalMs: number;\n readonly phases: Readonly<Record<ToolTimingPhase, ToolPhaseObservation>>;\n}\n\nexport interface ExclusiveTiming {\n begin(phase: ToolTimingPhase): void;\n end(phase: ToolTimingPhase): void;\n record(phase: ToolTimingPhase, durationMs: number): void;\n finish(): ExclusiveTimingResult;\n}\n\nconst PHASES: readonly ToolTimingPhase[] = [\n 'lookup',\n 'lease',\n 'transport',\n 'execute',\n 'capture',\n 'finalize',\n 'analyze',\n];\n\nexport function createExclusiveTiming(\n now: () => number = () => performance.now(),\n): ExclusiveTiming {\n const phases = Object.fromEntries(\n PHASES.map((phase) => [phase, { status: 'not-applicable' }]),\n ) as Record<ToolTimingPhase, ToolPhaseObservation>;\n const closed = new Set<ToolTimingPhase>();\n let active: { phase: ToolTimingPhase; startedAtMs: number } | undefined;\n let startedAtMs: number | undefined;\n let endedAtMs: number | undefined;\n return {\n begin(phase) {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at;\n active = { phase, startedAtMs: at };\n },\n end(phase) {\n if (active?.phase !== phase) throw new TypeError(`phase '${phase}' is not the active phase`);\n const at = now();\n phases[phase] = { status: 'observed', durationMs: Math.max(0, at - active.startedAtMs) };\n closed.add(phase);\n active = undefined;\n endedAtMs = at;\n },\n record(phase, durationMs) {\n if (!Number.isFinite(durationMs) || durationMs < 0)\n throw new TypeError('phase duration must be finite and non-negative');\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at - durationMs;\n phases[phase] = { status: 'observed', durationMs };\n closed.add(phase);\n endedAtMs = at;\n },\n finish() {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n const start = startedAtMs ?? now();\n const end = endedAtMs ?? start;\n return {\n startedAtMs: start,\n endedAtMs: end,\n totalMs: Math.max(0, end - start),\n phases: { ...phases },\n };\n },\n };\n}\n\nexport function startToolTiming(): number {\n return performance.now();\n}\n\nexport function finishToolTiming(\n startedAtMs: number,\n operationTiming?: ExclusiveTiming,\n): ToolTiming {\n const endedAtMs = performance.now();\n const result = operationTiming?.finish();\n const durationMs = Math.max(0, endedAtMs - startedAtMs);\n const attributedMs =\n result === undefined\n ? 0\n : Object.values(result.phases).reduce(\n (sum, observation) =>\n observation.status === 'observed' ? sum + observation.durationMs : sum,\n 0,\n );\n return {\n startedAtMs,\n endedAtMs,\n durationMs,\n ...(result === undefined\n ? {}\n : { phases: result.phases, unattributedMs: Math.max(0, durationMs - attributedMs) }),\n };\n}\n","import { isSerializableValue, validateArtifactRefs } from './artifacts.js';\nimport {\n artifactIncompleteError,\n cancellationError,\n capabilityUnavailableError,\n cleanupError,\n disconnectedError,\n domainFailureError,\n invalidArgsError,\n terminalError,\n timeoutError,\n} from './errors.js';\nimport { createLexicalLease, type LeaseTerminationReason } from './lease.js';\nimport { createExclusiveTiming, finishToolTiming, startToolTiming } from './timing.js';\nimport type {\n JsonValue,\n ToolCapability,\n ToolCleanupReport,\n ToolContribution,\n ToolDescriptor,\n ToolDomainFailure,\n ToolExecutionContext,\n ToolExecutor,\n ToolRun,\n ToolRunEvent,\n ToolRunOptions,\n ToolRuntimeError,\n ToolSchema,\n ToolTerminal,\n} from './types.js';\n\nexport interface ToolRuntime {\n readonly list: () => readonly ToolDescriptor[];\n readonly describe: (id: string) => ToolDescriptor | undefined;\n readonly get: (id: string) => ToolContribution<unknown, unknown> | undefined;\n readonly run: <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n ) => ToolRun<TResult>;\n}\n\nexport function defineTool<TArgs, TResult>(\n descriptor: ToolDescriptor<TArgs, TResult>,\n execute: ToolExecutor<TArgs, TResult>,\n): ToolContribution<TArgs, TResult> {\n if (!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(descriptor.id)) {\n throw new TypeError(`Tool id must use a stable lower-case path: ${descriptor.id}`);\n }\n if (descriptor.title.trim().length === 0 || descriptor.summary.trim().length === 0) {\n throw new TypeError('Tool title and summary must not be empty');\n }\n if (!Array.isArray(descriptor.evidence)) throw new TypeError('Tool evidence must be an array');\n if (descriptor.preview !== undefined && descriptor.preview.realm !== descriptor.realm) {\n throw new TypeError(\n `Tool ${descriptor.id} preview contract declares ${descriptor.preview.realm} but descriptor declares ${descriptor.realm}`,\n );\n }\n const argsSchema: ToolSchema<TArgs> = descriptor.argsSchema;\n const resultSchema: ToolSchema<TResult> = descriptor.resultSchema;\n return {\n descriptor: { ...descriptor, argsSchema, resultSchema, evidence: [...descriptor.evidence] },\n execute,\n };\n}\n\nfunction eventChannel(): {\n readonly emit: (event: ToolRunEvent) => void;\n readonly close: () => void;\n readonly events: AsyncIterable<ToolRunEvent>;\n} {\n const queue: ToolRunEvent[] = [];\n const waiters: Array<(result: IteratorResult<ToolRunEvent>) => void> = [];\n let closed = false;\n const emit = (event: ToolRunEvent): void => {\n const waiter = waiters.shift();\n if (waiter !== undefined) waiter({ done: false, value: event });\n else queue.push(event);\n };\n const close = (): void => {\n closed = true;\n while (waiters.length > 0) waiters.shift()?.({ done: true, value: undefined });\n };\n const events: AsyncIterable<ToolRunEvent> = {\n [Symbol.asyncIterator](): AsyncIterator<ToolRunEvent> {\n return {\n next: async (): Promise<IteratorResult<ToolRunEvent>> => {\n const event = queue.shift();\n if (event !== undefined) return { done: false, value: event };\n if (closed) return { done: true, value: undefined };\n return new Promise((resolve) => waiters.push(resolve));\n },\n };\n },\n };\n return { emit, close, events };\n}\n\nfunction isTerminal<TResult>(value: unknown): value is ToolTerminal<TResult> {\n if (typeof value !== 'object' || value === null) return false;\n const outcome = Reflect.get(value, 'outcome');\n return outcome === 'succeeded' || outcome === 'failed';\n}\n\nfunction serializablePreview(value: unknown): JsonValue {\n return isSerializableValue(value) ? value : null;\n}\n\nfunction domainError(error: ToolDomainFailure): ToolRuntimeError {\n return domainFailureError(\n error.code,\n error.expected ?? 'the producer operation to succeed',\n error.hint ?? 'Inspect detail and repair the owning producer before retrying.',\n error.detail,\n );\n}\n\nfunction hasOkField(value: unknown): value is { readonly ok: boolean } {\n return (\n typeof value === 'object' && value !== null && typeof Reflect.get(value, 'ok') === 'boolean'\n );\n}\n\nfunction isToolRuntimeError(value: unknown): value is ToolRuntimeError {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof Reflect.get(value, 'code') === 'string' &&\n Reflect.get(value, 'code').startsWith('tool-')\n );\n}\n\nexport function createToolRuntime<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime {\n const byId = new Map<string, ToolContribution<unknown, unknown>>();\n for (const candidate of contributions) {\n if (typeof candidate !== 'object' || candidate === null) {\n throw new TypeError('Tool contributions must be objects');\n }\n const contribution = candidate as ToolContribution<unknown, unknown>;\n if (typeof contribution.execute !== 'function') {\n throw new TypeError('Tool contributions must provide an executor');\n }\n const id = contribution.descriptor.id;\n if (byId.has(id)) throw new TypeError(`Duplicate tool contribution id: ${id}`);\n byId.set(id, contribution);\n }\n\n const list = (): readonly ToolDescriptor[] =>\n [...byId.values()].map((contribution) => contribution.descriptor);\n\n const run = <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options: ToolRunOptions = {},\n ): ToolRun<TResult> => {\n const runId = `${contribution.descriptor.id}:${crypto.randomUUID()}`;\n const channel = eventChannel();\n const controller = new AbortController();\n const startedAtMs = startToolTiming();\n const operationTiming = createExclusiveTiming();\n const lookupStartedAtMs = startToolTiming();\n operationTiming.record('lookup', Math.max(0, startToolTiming() - lookupStartedAtMs));\n const lease = createLexicalLease(runId);\n const leaseStartedAtMs = startToolTiming();\n operationTiming.record('lease', Math.max(0, startToolTiming() - leaseStartedAtMs));\n let terminalStarted = false;\n let cleanupReport: ToolCleanupReport = {\n census: { worlds: 0, renderers: 0, canvases: 0, leases: 0 },\n failures: [],\n };\n let cancelReason = 'cancelled by caller';\n let resolveTerminal!: (terminal: ToolTerminal<TResult>) => void;\n const terminal = new Promise<ToolTerminal<TResult>>((resolve) => {\n resolveTerminal = resolve;\n });\n let resolveExecutorExited!: () => void;\n const executorExited = new Promise<void>((resolve) => {\n resolveExecutorExited = resolve;\n });\n\n const settle = async (\n candidate: ToolTerminal<TResult>,\n reason: LeaseTerminationReason = 'terminal',\n ): Promise<void> => {\n if (terminalStarted) return;\n terminalStarted = true;\n controller.abort();\n const finalizeStartedAtMs = startToolTiming();\n const cleanupResult = await lease.terminate(reason);\n const cleanupFailure = cleanupResult.failures[0];\n const liveResources = Object.entries(cleanupReport.census).filter(([, count]) => count !== 0);\n const reportFailure =\n cleanupReport.failures[0] ??\n (liveResources.length === 0\n ? undefined\n : `live resources remain: ${liveResources.map(([kind, count]) => `${kind}=${count}`).join(', ')}`);\n operationTiming.record('finalize', Math.max(0, startToolTiming() - finalizeStartedAtMs));\n const finalTerminal: ToolTerminal<TResult> =\n cleanupFailure || (candidate.outcome === 'succeeded' && reportFailure !== undefined)\n ? {\n outcome: 'failed',\n failure: cleanupError(\n runId,\n cleanupFailure === undefined\n ? (reportFailure as string)\n : `${cleanupFailure.owner}: ${cleanupFailure.message}`,\n ),\n artifacts: candidate.artifacts,\n cleanup: cleanupReport,\n ...(candidate.snapshotAfter === undefined\n ? {}\n : { snapshotAfter: candidate.snapshotAfter }),\n timing: finishToolTiming(startedAtMs, operationTiming),\n }\n : {\n ...candidate,\n cleanup: cleanupReport,\n timing: finishToolTiming(startedAtMs, operationTiming),\n };\n resolveTerminal(finalTerminal);\n channel.emit({\n kind: 'terminal',\n runId,\n outcome: finalTerminal.outcome,\n atMs: performance.now(),\n });\n channel.close();\n };\n\n const context: ToolExecutionContext = {\n runId,\n signal: controller.signal,\n ...(options.owner === undefined ? {} : { owner: options.owner }),\n ...(options.caller === undefined ? {} : { caller: options.caller }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n emit: (event) => {\n if (!terminalStarted) channel.emit({ ...event, runId });\n },\n addCleanup: (cleanup) => {\n if (!lease.register(`cleanup:${lease.state}`, cleanup)) void cleanup();\n },\n setCleanupReport: (report) => {\n cleanupReport = {\n census: { ...report.census },\n failures: [...report.failures],\n };\n },\n require: <T>(capability: ToolCapability<T>) => {\n if (terminalStarted) {\n return { ok: false as const, error: terminalError(runId, 'succeeded') };\n }\n const resolved = options.capabilityResolver?.(capability);\n if (resolved !== undefined) return resolved;\n return {\n ok: false as const,\n error: capabilityUnavailableError(capability.id, contribution.descriptor.realm),\n };\n },\n runChild: async (childContribution, childArgs, childOptions = {}) => {\n if (terminalStarted) {\n return {\n outcome: 'failed',\n failure: terminalError(runId, 'failed'),\n artifacts: [],\n };\n }\n const childRun = runtime.run(childContribution, childArgs, {\n ...childOptions,\n signal: controller.signal,\n ...(childOptions.capabilityResolver === undefined &&\n options.capabilityResolver !== undefined\n ? { capabilityResolver: options.capabilityResolver }\n : {}),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n });\n channel.emit({\n kind: 'child-started',\n runId,\n childRunId: childRun.id,\n atMs: performance.now(),\n });\n lease.register(`child:${childRun.id}`, () => {\n childRun.cancel('parent terminal');\n });\n return childRun.terminal;\n },\n };\n\n const fail = (failure: ToolRuntimeError): void => {\n void settle({ outcome: 'failed', failure, artifacts: [] });\n };\n\n const cancel = (reason = 'cancelled by caller'): void => {\n cancelReason = reason;\n void settle(\n { outcome: 'failed', failure: cancellationError(reason), artifacts: [] },\n 'cancel',\n );\n };\n\n const disconnect = (transport = 'tool transport'): void => {\n void settle(\n { outcome: 'failed', failure: disconnectedError(transport), artifacts: [] },\n 'disconnect',\n );\n };\n\n const providerExit = (provider = 'provider'): void => {\n void settle(\n {\n outcome: 'failed',\n failure: domainFailureError(\n 'provider-exit',\n 'the provider to remain alive until terminal',\n 'Restart the provider and retry from the serialized snapshot.',\n provider,\n ),\n artifacts: [],\n },\n 'provider-exit',\n );\n };\n\n const timeout =\n options.deadlineMs === undefined\n ? undefined\n : setTimeout(\n () =>\n void settle(\n {\n outcome: 'failed',\n failure: timeoutError(options.deadlineMs as number),\n artifacts: [],\n },\n 'timeout',\n ),\n options.deadlineMs,\n );\n\n channel.emit({ kind: 'started', runId, atMs: performance.now() });\n void (async () => {\n try {\n let parsedArgs: ReturnType<typeof contribution.descriptor.argsSchema.parse>;\n try {\n parsedArgs = contribution.descriptor.argsSchema.parse(args);\n } catch (cause) {\n await settle({\n outcome: 'failed',\n failure: invalidArgsError(\n cause instanceof Error ? cause.message : String(cause),\n serializablePreview(args),\n ),\n artifacts: [],\n });\n return;\n }\n if (!parsedArgs.ok) {\n fail(invalidArgsError(parsedArgs.error, serializablePreview(args)));\n return;\n }\n if (options.signal?.aborted) {\n cancelReason = 'aborted by caller';\n fail(cancellationError(cancelReason));\n return;\n }\n const onAbort = (): void => cancel('aborted by caller');\n options.signal?.addEventListener('abort', onAbort, { once: true });\n let produced: unknown;\n const executeStartedAtMs = startToolTiming();\n try {\n produced = await contribution.execute(parsedArgs.value, context);\n } finally {\n operationTiming.record('execute', Math.max(0, startToolTiming() - executeStartedAtMs));\n options.signal?.removeEventListener('abort', onAbort);\n }\n if (terminalStarted) return;\n if (controller.signal.aborted) {\n fail(cancellationError(cancelReason));\n return;\n }\n let result: unknown = produced;\n let snapshotAfter = options.snapshot;\n let artifacts: readonly import('./types.js').ArtifactRef[] = [];\n if (isTerminal<TResult>(produced)) {\n if (produced.outcome === 'failed') {\n await settle(produced);\n return;\n }\n result = produced.result;\n snapshotAfter = produced.snapshotAfter;\n artifacts = produced.artifacts;\n cleanupReport = produced.cleanup ?? cleanupReport;\n } else if (hasOkField(produced)) {\n if (produced.ok === false) {\n const error = Reflect.get(produced, 'error');\n if (isToolRuntimeError(error)) {\n await settle({ outcome: 'failed', failure: error, artifacts: [] });\n return;\n }\n await settle({\n outcome: 'failed',\n failure: domainError(error as ToolDomainFailure),\n artifacts: [],\n });\n return;\n }\n result = Reflect.get(produced, 'value');\n snapshotAfter = Reflect.get(produced, 'snapshotAfter');\n artifacts = Reflect.get(produced, 'artifacts') ?? [];\n }\n if (!isSerializableValue(result)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'terminal-not-serializable',\n 'the result to be JSON serializable',\n 'Return plain JSON data and ArtifactRef values instead of live handles.',\n ),\n artifacts: [],\n });\n return;\n }\n const parsedResult = contribution.descriptor.resultSchema.parse(result);\n if (!parsedResult.ok) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'result-schema-invalid',\n 'the result to satisfy resultSchema',\n parsedResult.error,\n ),\n artifacts: [],\n });\n return;\n }\n if (!validateArtifactRefs(artifacts)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'artifact-ref-invalid',\n 'artifact refs to be serializable ArtifactRef values',\n 'Return refs created by createArtifactRef.',\n ),\n artifacts: [],\n });\n return;\n }\n const requiredEvidence = [\n ...new Set([...(contribution.descriptor.evidence ?? []), ...(options.evidence ?? [])]),\n ];\n const missingEvidence = requiredEvidence.filter(\n (kind) => !artifacts.some((artifact) => artifact.kind === kind),\n );\n if (missingEvidence.length > 0) {\n await settle({\n outcome: 'failed',\n failure: artifactIncompleteError(missingEvidence, runId),\n artifacts,\n });\n return;\n }\n await settle({\n outcome: 'succeeded',\n result: parsedResult.value,\n artifacts,\n ...(snapshotAfter === undefined ? {} : { snapshotAfter }),\n });\n } catch (cause) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'executor-threw',\n 'the contribution executor to return a result',\n cause instanceof Error ? cause.message : String(cause),\n ),\n artifacts: [],\n });\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n resolveExecutorExited();\n }\n })();\n\n const runtimeRun: ToolRun<TResult> = {\n id: runId,\n events: channel.events,\n terminal,\n executorExited,\n cancel,\n disconnect,\n providerExit,\n };\n return runtimeRun;\n };\n\n const runtime: ToolRuntime = {\n list,\n describe: (id) => byId.get(id)?.descriptor,\n get: (id) => byId.get(id),\n run,\n };\n return runtime;\n}\n","import { domainFailureError } from './errors.js';\nimport { createToolRuntime } from './runtime.js';\nimport type {\n JsonValue,\n ToolCallerIdentity,\n ToolContribution,\n ToolDescriptor,\n ToolExecutionOwner,\n ToolRealm,\n ToolRun,\n ToolRunOptions,\n ToolRuntimeError,\n ToolTerminal,\n} from './types.js';\n\nexport type ToolApiProviderState = 'pending' | 'active' | 'revoking' | 'revoked' | 'failed';\n\nexport interface ToolApiProviderInput {\n /** Stable provider identity within one source. */\n readonly providerId: string;\n /** Host/source identity. Different sources may expose the same operation id. */\n readonly sourceId: string;\n readonly realm: ToolRealm;\n readonly generation?: number;\n readonly fiberId?: string | number;\n readonly module?: string;\n readonly fiberState?: string;\n /** Async plugin activation stays non-callable until explicitly activated. */\n readonly initialState?: 'pending' | 'active';\n readonly tools: readonly ToolContribution[];\n /** Domain authorization remains owned by the provider. */\n readonly authorize?: (\n caller: ToolCallerIdentity | undefined,\n operation: ToolDescriptor,\n ) => boolean;\n}\n\nexport interface ToolApiProviderSnapshot {\n readonly owner: ToolExecutionOwner;\n readonly state: ToolApiProviderState;\n readonly fiberState?: string;\n readonly callable: boolean;\n readonly operationIds: readonly string[];\n}\n\nexport interface ToolApiRecord {\n readonly descriptor: ToolDescriptor;\n readonly owner: ToolExecutionOwner;\n readonly providerState: ToolApiProviderState;\n readonly declared: true;\n readonly callable: boolean;\n readonly fiberState?: string;\n}\n\nexport interface ToolApiSnapshot {\n readonly providers: readonly ToolApiProviderSnapshot[];\n readonly operations: readonly ToolApiRecord[];\n}\n\nexport interface ToolApiProviderHandle {\n readonly owner: ToolExecutionOwner;\n readonly snapshot: () => ToolApiProviderSnapshot;\n /** Mark a pending provider callable after its domain apply succeeds. */\n readonly activate: (fiberState?: string) => void;\n /** Mark a pending/active provider failed without making it callable. */\n readonly fail: (reason?: string, fiberState?: string) => void;\n /** Withdraw admission and wait for every executor to actually exit. */\n readonly revoke: (reason?: string) => Promise<void>;\n}\n\nexport interface ToolApiRunOptions extends Omit<ToolRunOptions, 'owner'> {\n /** Explicit provider route. Required when multiple sources expose an id. */\n readonly providerId?: string;\n readonly sourceId?: string;\n /** Provider generation observed by the caller. */\n readonly generation?: number;\n}\n\nexport interface ToolApi {\n readonly snapshot: () => ToolApiSnapshot;\n readonly list: () => readonly ToolApiRecord[];\n readonly describe: (id: string, sourceId?: string) => readonly ToolApiRecord[];\n readonly registerProvider: (input: ToolApiProviderInput) => ToolApiProviderHandle;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolApiRunOptions,\n ) => ToolRun<TResult>;\n readonly subscribe: (listener: (snapshot: ToolApiSnapshot) => void) => () => void;\n /** Revoke all providers and wait for their executors to exit. */\n readonly dispose: () => Promise<void>;\n}\n\ninterface ProviderRecord {\n readonly input: ToolApiProviderInput;\n readonly owner: ToolExecutionOwner;\n readonly runtime: ReturnType<typeof createToolRuntime>;\n readonly runs: Set<ToolRun<unknown>>;\n state: ToolApiProviderState;\n fiberState?: string;\n reason?: string;\n}\n\nfunction assertName(value: string, label: string): void {\n if (typeof value !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9._:/-]*$/.test(value)) {\n throw new TypeError(`${label} must be a stable non-empty identity`);\n }\n}\n\nfunction operationPath(descriptor: ToolDescriptor): string {\n return (descriptor.path ?? descriptor.id.split('.')).join(' ');\n}\n\nfunction providerKey(sourceId: string, providerId: string): string {\n return `${sourceId}\\u0000${providerId}`;\n}\n\nfunction apiFailure(\n code: string,\n expected: string,\n hint: string,\n detail: JsonValue,\n): ToolRuntimeError {\n return domainFailureError(code, expected, hint, detail);\n}\n\nfunction failedRun<TResult>(failure: ToolRuntimeError): ToolRun<TResult> {\n const id = `api:${crypto.randomUUID()}`;\n const terminal: Promise<ToolTerminal<TResult>> = Promise.resolve({\n outcome: 'failed',\n failure,\n artifacts: [],\n });\n const events: AsyncIterable<import('./types.js').ToolRunEvent> = {\n async *[Symbol.asyncIterator]() {\n yield { kind: 'started', runId: id, atMs: performance.now() };\n yield { kind: 'terminal', runId: id, outcome: 'failed', atMs: performance.now() };\n },\n };\n return {\n id,\n events,\n terminal,\n executorExited: Promise.resolve(),\n cancel() {},\n disconnect() {},\n providerExit() {},\n };\n}\n\nfunction validateProvider(input: ToolApiProviderInput): void {\n assertName(input.providerId, 'providerId');\n assertName(input.sourceId, 'sourceId');\n if (!['build', 'host', 'engine'].includes(input.realm))\n throw new TypeError(`unsupported Tool API realm ${String(input.realm)}`);\n if (!Array.isArray(input.tools) || input.tools.length === 0)\n throw new TypeError('Tool API providers must publish at least one contribution');\n const ids = new Set<string>();\n const paths = new Set<string>();\n if (\n input.initialState !== undefined &&\n input.initialState !== 'pending' &&\n input.initialState !== 'active'\n )\n throw new TypeError('Tool API provider initialState must be pending or active');\n for (const contribution of input.tools) {\n if (contribution === null || typeof contribution !== 'object')\n throw new TypeError('Tool API contributions must be objects');\n if (typeof contribution.execute !== 'function')\n throw new TypeError(\n `Tool API contribution ${String(contribution.descriptor?.id)} needs an executor`,\n );\n const descriptor = contribution.descriptor;\n if (descriptor.realm !== input.realm)\n throw new TypeError(\n `Tool API ${descriptor.id} declares ${descriptor.realm} but provider is ${input.realm}`,\n );\n if (ids.has(descriptor.id))\n throw new TypeError(`duplicate Tool API operation id ${descriptor.id}`);\n ids.add(descriptor.id);\n const path = operationPath(descriptor);\n if (paths.has(path)) throw new TypeError(`duplicate Tool API command path ${path}`);\n paths.add(path);\n }\n}\n\n/**\n * Create the one effective Tool API capability for a Context/owner.\n *\n * Declarations are retained for inspection, while calls are admitted only\n * through an active provider binding. The command tree and clients may cache\n * the returned projection, but they never own executors or provider state.\n */\nexport function createToolApi(): ToolApi {\n const providers = new Map<string, ProviderRecord>();\n const listeners = new Set<(snapshot: ToolApiSnapshot) => void>();\n let providerGeneration = 0;\n let disposed = false;\n\n const notify = (): void => {\n const value = api.snapshot();\n for (const listener of listeners) {\n try {\n listener(value);\n } catch {\n // Observation must not affect admission or executor cleanup.\n }\n }\n };\n\n const snapshot = (): ToolApiSnapshot => {\n const providerSnapshots: ToolApiProviderSnapshot[] = [];\n const operations: ToolApiRecord[] = [];\n for (const record of providers.values()) {\n providerSnapshots.push({\n owner: record.owner,\n state: record.state,\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n callable: record.state === 'active',\n operationIds: record.input.tools.map(({ descriptor }) => descriptor.id),\n });\n for (const contribution of record.input.tools) {\n operations.push({\n descriptor: contribution.descriptor,\n owner: record.owner,\n providerState: record.state,\n declared: true,\n callable: record.state === 'active',\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n });\n }\n }\n providerSnapshots.sort((left, right) =>\n providerKey(left.owner.sourceId, left.owner.providerId).localeCompare(\n providerKey(right.owner.sourceId, right.owner.providerId),\n ),\n );\n operations.sort((left, right) => {\n const source = left.owner.sourceId.localeCompare(right.owner.sourceId);\n return source !== 0 ? source : left.descriptor.id.localeCompare(right.descriptor.id);\n });\n return { providers: providerSnapshots, operations };\n };\n\n const registerProvider = (input: ToolApiProviderInput): ToolApiProviderHandle => {\n if (disposed) throw new Error('Tool API is disposed');\n validateProvider(input);\n const key = providerKey(input.sourceId, input.providerId);\n if (providers.get(key)?.state === 'active' || providers.get(key)?.state === 'revoking') {\n throw new TypeError(\n `Tool API provider ${input.sourceId}/${input.providerId} is already registered`,\n );\n }\n const operationKeys = new Set<string>();\n for (const contribution of input.tools) {\n const operationKey = `${input.sourceId}\\u0000${contribution.descriptor.id}`;\n const pathKey = `${input.sourceId}\\u0000${operationPath(contribution.descriptor)}`;\n if (operationKeys.has(operationKey) || operationKeys.has(pathKey))\n throw new TypeError(`Tool API contribution conflict for ${contribution.descriptor.id}`);\n operationKeys.add(operationKey);\n operationKeys.add(pathKey);\n for (const record of providers.values()) {\n if (\n !['pending', 'active', 'revoking'].includes(record.state) ||\n record.owner.sourceId !== input.sourceId\n )\n continue;\n if (\n record.input.tools.some(({ descriptor }) => descriptor.id === contribution.descriptor.id)\n ) {\n throw new TypeError(\n `Tool API operation ${contribution.descriptor.id} already exists for source ${input.sourceId}`,\n );\n }\n if (\n record.input.tools.some(\n ({ descriptor }) =>\n operationPath(descriptor) === operationPath(contribution.descriptor),\n )\n ) {\n throw new TypeError(\n `Tool API command path ${operationPath(contribution.descriptor)} already exists for source ${input.sourceId}`,\n );\n }\n }\n }\n const generation = input.generation ?? ++providerGeneration;\n if (!Number.isSafeInteger(generation) || generation <= 0)\n throw new TypeError('Tool API provider generation must be a positive integer');\n providerGeneration = Math.max(providerGeneration, generation);\n const owner: ToolExecutionOwner = {\n providerId: input.providerId,\n sourceId: input.sourceId,\n generation,\n realm: input.realm,\n ...(input.fiberId === undefined ? {} : { fiberId: input.fiberId }),\n ...(input.module === undefined ? {} : { module: input.module }),\n };\n const runtime = createToolRuntime(input.tools);\n const record: ProviderRecord = {\n input: { ...input, tools: [...input.tools] },\n owner,\n runtime,\n runs: new Set(),\n state: input.initialState ?? 'active',\n ...(input.fiberState === undefined ? {} : { fiberState: input.fiberState }),\n };\n providers.set(key, record);\n notify();\n\n const activate = (fiberState = 'active'): void => {\n if (record.state !== 'pending') return;\n record.state = 'active';\n record.fiberState = fiberState;\n notify();\n };\n const fail = (reason = 'provider failed', fiberState = 'failed'): void => {\n if (record.state !== 'pending' && record.state !== 'active') return;\n record.state = 'failed';\n record.reason = reason;\n record.fiberState = fiberState;\n for (const run of record.runs) run.cancel(reason);\n notify();\n };\n const revoke = async (reason = 'provider revoked'): Promise<void> => {\n if (record.state === 'revoked') return;\n if (record.state === 'active' || record.state === 'pending') {\n record.state = 'revoking';\n record.reason = reason;\n record.fiberState = 'unloading';\n notify();\n for (const run of record.runs) run.cancel(reason);\n }\n await Promise.all([...record.runs].map((run) => run.executorExited));\n if (record.state !== 'failed') {\n record.state = 'revoked';\n record.fiberState = 'disposed';\n }\n notify();\n };\n return Object.freeze({\n owner,\n activate,\n fail,\n snapshot: () => ({\n owner,\n state: record.state,\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n callable: record.state === 'active',\n operationIds: record.input.tools.map(({ descriptor }) => descriptor.id),\n }),\n revoke,\n });\n };\n\n const findRecords = (id: string, sourceId?: string): ProviderRecord[] =>\n [...providers.values()].filter(\n (record) =>\n (sourceId === undefined || record.owner.sourceId === sourceId) &&\n record.input.tools.some(({ descriptor }) => descriptor.id === id),\n );\n\n const run = <TResult = unknown>(\n id: string,\n args: unknown,\n options: ToolApiRunOptions = {},\n ): ToolRun<TResult> => {\n if (disposed) {\n return failedRun<TResult>(\n apiFailure(\n 'api-disposed',\n 'the Tool API owner to remain available',\n 'Create a fresh owner and retry the operation.',\n { operation: id },\n ),\n );\n }\n if (options.providerId !== undefined && options.sourceId === undefined) {\n return failedRun<TResult>(\n apiFailure(\n 'api-source-required',\n `operation ${id} to include its explicit sourceId with providerId`,\n 'Refresh Tool API sources and pass both sourceId and providerId from one snapshot.',\n { operation: id, providerId: options.providerId },\n ),\n );\n }\n const matches = findRecords(id, options.sourceId);\n const active = matches.filter((record) => record.state === 'active');\n const selected =\n options.providerId === undefined\n ? active.length === 1\n ? active[0]\n : undefined\n : active.find((record) => record.owner.providerId === options.providerId);\n if (selected === undefined) {\n const code =\n matches.length === 0 || active.length === 0\n ? 'api-operation-unavailable'\n : 'api-provider-route-required';\n return failedRun<TResult>(\n apiFailure(\n code,\n `operation ${id} to have one active, explicitly routable provider`,\n 'Refresh Tool API sources and select the providerId/sourceId returned by discovery.',\n {\n operation: id,\n ...(options.providerId === undefined ? {} : { providerId: options.providerId }),\n providers: matches.map((record) => record.owner.providerId),\n },\n ),\n );\n }\n if (options.generation !== undefined && options.generation !== selected.owner.generation) {\n return failedRun<TResult>(\n apiFailure(\n 'api-stale-generation',\n `provider ${selected.owner.providerId} generation ${options.generation} to match ${selected.owner.generation}`,\n 'Refresh the source snapshot before retrying the operation.',\n {\n operation: id,\n providerId: selected.owner.providerId,\n expectedGeneration: selected.owner.generation,\n actualGeneration: options.generation,\n },\n ),\n );\n }\n const contribution = selected.input.tools.find(({ descriptor }) => descriptor.id === id);\n if (contribution === undefined) {\n return failedRun<TResult>(\n apiFailure(\n 'api-operation-unavailable',\n `operation ${id} to remain published by its provider`,\n 'Refresh Tool API sources before retrying.',\n { operation: id },\n ),\n );\n }\n if (selected.input.authorize?.(options.caller, contribution.descriptor) === false) {\n return failedRun<TResult>(\n apiFailure(\n 'api-unauthorized',\n `caller to be authorized for operation ${id}`,\n 'Use the authenticated Host connection and the capability it was granted.',\n { operation: id, providerId: selected.owner.providerId },\n ),\n );\n }\n const runOptions: ToolRunOptions = {\n ...options,\n owner: selected.owner,\n ...(options.caller === undefined ? {} : { caller: options.caller }),\n };\n const activeRun = selected.runtime.run(contribution, args, runOptions);\n selected.runs.add(activeRun as ToolRun<unknown>);\n void activeRun.executorExited.finally(() =>\n selected.runs.delete(activeRun as ToolRun<unknown>),\n );\n return activeRun as ToolRun<TResult>;\n };\n\n const api: ToolApi = {\n snapshot,\n list: () => snapshot().operations,\n describe: (id, sourceId) =>\n findRecords(id, sourceId).flatMap((record) => {\n const contribution = record.input.tools.find(({ descriptor }) => descriptor.id === id);\n return contribution === undefined\n ? []\n : [\n {\n descriptor: contribution.descriptor,\n owner: record.owner,\n providerState: record.state,\n declared: true as const,\n callable: record.state === 'active',\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n },\n ];\n }),\n registerProvider,\n run,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n async dispose() {\n if (disposed) return;\n disposed = true;\n const pending = [...providers.values()].map((record) => {\n if (record.state === 'active' || record.state === 'pending') {\n record.state = 'revoking';\n record.fiberState = 'unloading';\n for (const run of record.runs) run.cancel('Tool API owner disposed');\n }\n return Promise.all([...record.runs].map((run) => run.executorExited)).then(() => {\n if (record.state !== 'failed') {\n record.state = 'revoked';\n record.fiberState = 'disposed';\n }\n });\n });\n await Promise.all(pending);\n notify();\n listeners.clear();\n },\n };\n return api;\n}\n","import type {\n ToolCapability,\n ToolCapabilityResolver,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nconst capabilityIdPattern = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;\n\n/** A static service identity. The value and its lifecycle remain Fiber-local. */\nexport function defineToolCapability<T>(id: string): ToolCapability<T> {\n if (!capabilityIdPattern.test(id)) {\n throw new TypeError(`Tool capability id must use a stable lower-case path: ${id}`);\n }\n return Object.freeze({ id }) as ToolCapability<T>;\n}\n\nexport function createCapabilityResolver(\n resolve: <T>(capability: ToolCapability<T>) => T | undefined,\n): ToolCapabilityResolver {\n return <T>(capability: ToolCapability<T>) => {\n const value = resolve(capability);\n return value === undefined ? undefined : { ok: true as const, value };\n };\n}\n\nexport interface ServiceAdmissionRef {\n readonly schema: 'forgeax.tool-service-admission-ref.v1';\n readonly reportDigest: string;\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n readonly frameCount: number;\n readonly samples: {\n readonly privateCold: number;\n readonly privateWarm: number;\n readonly serviceCold: number;\n readonly serviceWarm: number;\n };\n readonly correctness: {\n readonly terminalEquivalent: boolean;\n readonly artifactIntegrity: boolean;\n readonly freshReplay: boolean;\n readonly hiddenParity: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n readonly performance: {\n readonly privateMedianMs: number;\n readonly privateP95Ms: number;\n readonly privateMaxMs: number;\n readonly privateRssBytes: number;\n readonly serviceMedianMs: number;\n readonly serviceP95Ms: number;\n readonly serviceMaxMs: number;\n readonly serviceRssBytes: number;\n };\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n}\n\nexport interface ServiceAdmissionExpectation {\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n}\n\nexport type ServiceCapability =\n | { readonly available: true; readonly reportDigest?: string }\n | {\n readonly available: false;\n readonly code: 'tool-service-capability-absent';\n readonly expected: 'an admitted acceleration service';\n readonly hint: 'Use the private executor and rerun benchmark admission before enabling service.';\n readonly detail: { readonly reason: string };\n };\n\nfunction admissionFailure(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): string | undefined {\n if (admission === undefined) return 'no workload-scoped admission report was supplied';\n if (\n admission.schema !== 'forgeax.tool-service-admission-ref.v1' ||\n !/^sha256:[0-9a-f]{64}$/.test(admission.reportDigest)\n ) {\n return 'admission report identity is invalid';\n }\n for (const key of [\n 'toolId',\n 'descriptorDigest',\n 'recipeDigest',\n 'workloadClass',\n 'codeDigest',\n 'browserVersion',\n 'backend',\n ] as const) {\n if (admission[key] !== expected[key]) return `admission ${key} does not match this run`;\n }\n if (admission.frameCount < 300) return 'admission workload ran fewer than 300 frames';\n if (Object.values(admission.samples).some((count) => count < 30)) {\n return 'admission sample set is incomplete';\n }\n if (\n !admission.correctness.terminalEquivalent ||\n !admission.correctness.artifactIntegrity ||\n !admission.correctness.freshReplay ||\n !admission.correctness.hiddenParity ||\n admission.correctness.drawCalls <= 0 ||\n admission.correctness.nonBlackPixels <= 0\n ) {\n return 'admission correctness gate failed';\n }\n const performance = admission.performance;\n if (\n Object.values(performance).some((value) => !Number.isFinite(value) || value <= 0) ||\n performance.serviceMedianMs > performance.privateMedianMs * 0.8 ||\n performance.serviceP95Ms > performance.privateP95Ms * 0.9 ||\n performance.serviceMaxMs > performance.privateMaxMs * 1.1 ||\n performance.serviceRssBytes > performance.privateRssBytes * 1.25\n ) {\n return 'admission performance threshold failed';\n }\n if (!admission.cleanupPassed) return 'admission cleanup gate failed';\n if (!admission.evictionPassed) return 'admission eviction gate failed';\n return undefined;\n}\n\nexport function createServiceCapability(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): ServiceCapability {\n const reason = admissionFailure(admission, expected);\n if (reason === undefined && admission !== undefined) {\n return { available: true, reportDigest: admission.reportDigest };\n }\n return {\n available: false,\n code: 'tool-service-capability-absent',\n expected: 'an admitted acceleration service',\n hint: 'Use the private executor and rerun benchmark admission before enabling service.',\n detail: { reason: reason ?? 'benchmark admission did not pass' },\n };\n}\n\nexport interface RealmCapability {\n readonly realm: ToolRealm;\n readonly supported: boolean;\n readonly reason?: 'realm-capability-unavailable';\n}\n\nexport interface RealmCapabilityMatrix {\n readonly catalogDigest: string;\n readonly realms: Readonly<Record<ToolRealm, RealmCapability>>;\n}\n\nexport interface RealmCapabilityInput {\n readonly catalogDigest: string;\n readonly supported: Readonly<Record<ToolRealm, boolean>>;\n}\n\nexport function createRealmCapabilityMatrix(input: RealmCapabilityInput): RealmCapabilityMatrix {\n const realms = (['build', 'host', 'engine'] as const).reduce(\n (result, realm) => {\n const supported = input.supported[realm];\n result[realm] = supported\n ? { realm, supported: true }\n : { realm, supported: false, reason: 'realm-capability-unavailable' };\n return result;\n },\n {} as Record<ToolRealm, RealmCapability>,\n );\n return { catalogDigest: input.catalogDigest, realms };\n}\n\nexport type RealmBootstrapValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nfunction bootstrapNotCloneSafeError(detail: { readonly message: string }): ToolRuntimeError {\n return {\n code: 'tool-bootstrap-not-clone-safe',\n expected: 'bootstrap input to contain structured-clone-safe data',\n hint: 'Remove live handles, functions, ports, and realm-owned objects from bootstrap input.',\n detail,\n };\n}\n\nexport function validateRealmBootstrapPayload(value: unknown): RealmBootstrapValidation {\n try {\n structuredClone(value);\n return { ok: true };\n } catch (cause) {\n return {\n ok: false,\n error: bootstrapNotCloneSafeError({\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n };\n }\n}\n","export type CarrierPhase = 'offered' | 'leased' | 'started' | 'exited' | 'expired' | 'fallback';\n\nexport type CarrierErrorCode =\n | 'carrier-consumer-mismatch'\n | 'carrier-token-invalid'\n | 'carrier-offer-expired'\n | 'carrier-started'\n | 'carrier-exited'\n | 'carrier-lease-required'\n | 'carrier-payload-live-state'\n | 'carrier-descriptor-mismatch'\n | 'carrier-recipe-mismatch'\n | 'carrier-provider-exit'\n | 'carrier-capture-failed'\n | 'carrier-cleanup-failed';\n\nexport interface CarrierError {\n readonly code: CarrierErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CarrierOffer {\n readonly schemaVersion: '1.0.0';\n readonly projectId: string;\n readonly consumerId: string;\n readonly offerId: string;\n readonly endpoint: string;\n readonly bearerToken: string;\n readonly livenessToken: string;\n readonly expiresAt: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n readonly state: 'offered';\n}\n\nexport interface CarrierLease {\n readonly leaseId: string;\n readonly offerId: string;\n readonly consumerId: string;\n readonly state: 'leased';\n}\n\nexport interface CarrierState {\n readonly state: CarrierPhase;\n readonly leaseId?: string;\n}\n\nexport interface CarrierStateMachine {\n readonly offer: CarrierOffer;\n readonly lease: {\n (request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n (leaseId: string, request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n };\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n readonly fallback: () => CarrierResult<CarrierState>;\n readonly snapshot: () => CarrierState;\n}\n\nexport interface CarrierLeaseRequest {\n readonly consumerId: string;\n readonly bearerToken: string;\n readonly now: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nexport type CarrierResult<T> =\n | { readonly ok: true; readonly value: T; readonly state: CarrierPhase }\n | { readonly ok: false; readonly error: CarrierError };\n\nexport interface CarrierStateMachineOptions {\n readonly projectId: string;\n readonly consumerId: string;\n readonly endpoint: string;\n readonly now: number;\n readonly ttlMs: number;\n readonly payload?: unknown;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nfunction token(): string {\n return crypto.randomUUID().replaceAll('-', '');\n}\n\nfunction carrierError(\n code: CarrierErrorCode,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): CarrierError {\n return { code, expected, hint, detail };\n}\n\nfunction containsLiveKey(value: unknown, seen = new Set<object>()): boolean {\n if (typeof value !== 'object' || value === null) return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.some((entry) => containsLiveKey(entry, seen));\n return Object.entries(value).some(([key, nested]) => {\n if (\n ['world', 'renderer', 'canvas', 'ui', 'profile', 'liveHandle', 'context', 'fiber'].includes(\n key,\n )\n )\n return true;\n return containsLiveKey(nested, seen);\n });\n}\n\nfunction validateOptions(options: CarrierStateMachineOptions): void {\n if (options.projectId.length === 0 || options.consumerId.length === 0) {\n throw new TypeError('carrier projectId and consumerId must not be empty');\n }\n const endpoint = new URL(options.endpoint);\n if (endpoint.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(endpoint.hostname)) {\n throw new TypeError('carrier endpoint must be loopback HTTP');\n }\n if (!Number.isFinite(options.now) || !Number.isFinite(options.ttlMs) || options.ttlMs <= 0) {\n throw new TypeError('carrier clock and ttl must be finite and positive');\n }\n if (containsLiveKey(options.payload)) throw new TypeError('carrier-payload-live-state');\n}\n\nexport function createCarrierStateMachine(\n options: CarrierStateMachineOptions,\n): CarrierStateMachine {\n validateOptions(options);\n const offer: CarrierOffer = {\n schemaVersion: '1.0.0',\n projectId: options.projectId,\n consumerId: options.consumerId,\n offerId: `offer:${token()}`,\n endpoint: options.endpoint,\n bearerToken: token(),\n livenessToken: token(),\n expiresAt: options.now + options.ttlMs,\n ...(options.descriptorDigest === undefined\n ? {}\n : { descriptorDigest: options.descriptorDigest }),\n ...(options.recipeDigest === undefined ? {} : { recipeDigest: options.recipeDigest }),\n state: 'offered',\n };\n let state: CarrierState = { state: 'offered' };\n let lease: CarrierLease | undefined;\n\n const leaseOffer = (\n requestOrId: CarrierLeaseRequest | string,\n maybeRequest?: CarrierLeaseRequest,\n ): CarrierResult<CarrierLease> => {\n const request = typeof requestOrId === 'string' ? maybeRequest : requestOrId;\n const requestedLeaseId = typeof requestOrId === 'string' ? requestOrId : undefined;\n if (request === undefined) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'a complete lease request',\n 'Provide consumer identity, bearer token, and current time.',\n {},\n ),\n };\n }\n if (state.state === 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'a started carrier not to be retried',\n 'Report one terminal failure and clean up the existing started lease.',\n {},\n ),\n };\n }\n if (state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-exited',\n 'an exited carrier not to be retried',\n 'Re-run the operation from a serialized snapshot instead of migrating live state.',\n {},\n ),\n };\n }\n if (request.consumerId !== offer.consumerId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-consumer-mismatch',\n 'the offer consumer identity to match',\n 'Use the consumer identity that was authenticated for this project offer.',\n { expected: offer.consumerId, actual: request.consumerId },\n ),\n };\n }\n if (request.bearerToken !== offer.bearerToken) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the bearer token to match the ephemeral offer',\n 'Request a fresh visible offer; never persist or guess bearer tokens.',\n {},\n ),\n };\n }\n if (\n offer.descriptorDigest !== undefined &&\n request.descriptorDigest !== offer.descriptorDigest\n ) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-descriptor-mismatch',\n 'the descriptor digest to match the authenticated offer',\n 'Refresh the descriptor and request a new visible offer before retrying.',\n { expected: offer.descriptorDigest, actual: request.descriptorDigest },\n ),\n };\n }\n if (offer.recipeDigest !== undefined && request.recipeDigest !== offer.recipeDigest) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-recipe-mismatch',\n 'the recipe digest to match the authenticated offer',\n 'Serialize the current snapshot and request a fresh visible offer before retrying.',\n { expected: offer.recipeDigest, actual: request.recipeDigest },\n ),\n };\n }\n if (request.now >= offer.expiresAt) {\n state = { state: 'expired' };\n return {\n ok: false,\n error: carrierError(\n 'carrier-offer-expired',\n 'the offer to be within its expiry window',\n 'Fall back to the ordinary visible carrier before retrying.',\n { expiresAt: offer.expiresAt, now: request.now },\n ),\n };\n }\n if (requestedLeaseId !== undefined && requestedLeaseId !== lease?.leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the lease id to match the authenticated offer',\n 'Use the lease id returned by the first successful lease.',\n {},\n ),\n };\n }\n lease = {\n leaseId: `lease:${token()}`,\n offerId: offer.offerId,\n consumerId: request.consumerId,\n state: 'leased',\n };\n state = { state: 'leased', leaseId: lease.leaseId };\n return { ok: true, value: lease, state: 'leased' };\n };\n\n const started = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a valid lease before started',\n 'Lease the authenticated offer before reporting provider started.',\n {},\n ),\n };\n }\n state = { state: 'started', leaseId };\n return { ok: true, value: state, state: 'started' };\n };\n\n const exit = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId || state.state !== 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a started lease before provider exit',\n 'Provider exit is terminal only after started has been acknowledged.',\n {},\n ),\n };\n }\n state = { state: 'exited', leaseId };\n return { ok: true, value: state, state: 'exited' };\n };\n\n const fallback = (): CarrierResult<CarrierState> => {\n if (state.state === 'started' || state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'fallback to happen before provider started',\n 'Do not retry or migrate a carrier after started; return its terminal failure.',\n { state: state.state },\n ),\n };\n }\n state = { state: 'fallback' };\n return { ok: true, value: state, state: 'fallback' };\n };\n\n return {\n offer,\n lease: leaseOffer,\n started,\n exit,\n fallback,\n snapshot: () => state,\n };\n}\n","import { createToolRuntime } from './runtime.js';\nimport type {\n JsonValue,\n ToolContribution,\n ToolDescriptor,\n ToolExecutor,\n ToolRun,\n ToolRunOptions,\n} from './types.js';\n\nexport type ToolCommandPath = readonly string[];\n\nexport interface ToolCommandDescriptor<TArgs = unknown, TResult = unknown>\n extends ToolDescriptor<TArgs, TResult> {\n readonly path: ToolCommandPath;\n}\n\nexport interface ToolCommandNode {\n readonly name: string;\n readonly path: string;\n readonly summary: string;\n readonly children?: readonly ToolCommandNode[];\n readonly leaf?: {\n readonly title: string;\n readonly realm: ToolDescriptor['realm'];\n readonly inputSchema?: JsonValue;\n readonly outputSchema?: JsonValue;\n readonly inputDescription?: string;\n readonly outputDescription?: string;\n readonly capabilities: readonly string[];\n readonly errors: readonly string[];\n readonly example?: JsonValue;\n };\n}\n\nexport interface ToolCommandHelp {\n readonly path: string;\n readonly summary?: string;\n readonly nodes: readonly ToolCommandNode[];\n readonly leaf?: ToolCommandNode['leaf'];\n}\n\nexport type ToolCommandErrorCode =\n | 'tool-command-invalid-path'\n | 'tool-command-conflict'\n | 'tool-command-not-found';\n\nexport class ToolCommandError extends Error {\n readonly code: ToolCommandErrorCode;\n readonly path: string;\n readonly detail: Readonly<Record<string, unknown>>;\n\n constructor(\n code: ToolCommandErrorCode,\n path: string,\n message: string,\n detail: Readonly<Record<string, unknown>> = {},\n ) {\n super(`${code}: ${message}`);\n this.name = 'ToolCommandError';\n this.code = code;\n this.path = path;\n this.detail = detail;\n }\n}\n\nexport interface ToolCommandRegistry {\n readonly contributions: readonly ToolContribution[];\n readonly list: (path?: ToolCommandPath) => readonly ToolCommandNode[];\n readonly tree: (path?: ToolCommandPath | string) => readonly ToolCommandNode[];\n readonly describe: (path: ToolCommandPath | string) => ToolCommandDescriptor | undefined;\n readonly help: (path?: ToolCommandPath | string, tree?: boolean) => ToolCommandHelp;\n readonly get: (path: ToolCommandPath | string) => ToolContribution | undefined;\n readonly run: <TResult = unknown>(\n path: ToolCommandPath | string,\n args: unknown,\n options?: ToolRunOptions,\n ) => ToolRun<TResult> | undefined;\n}\n\nfunction normalizePath(path: ToolCommandPath | string): string[] {\n const segments = typeof path === 'string' ? path.split(/\\s+/).filter(Boolean) : [...path];\n if (\n (segments.length === 0 && typeof path === 'string') ||\n segments.some((segment) => !/^[a-z][a-z0-9-]*$/.test(segment))\n ) {\n throw new ToolCommandError(\n 'tool-command-invalid-path',\n typeof path === 'string' ? path : segments.join(' '),\n 'command paths must contain lower-case name segments',\n );\n }\n return segments;\n}\n\nfunction descriptorPath(descriptor: ToolDescriptor): string[] {\n const path = normalizePath(descriptor.path ?? descriptor.id.split('.'));\n if (path.length === 0) {\n throw new ToolCommandError(\n 'tool-command-invalid-path',\n '',\n 'command declarations must contain at least one name segment',\n );\n }\n return path;\n}\n\nfunction pathKey(path: ToolCommandPath): string {\n return path.join(' ');\n}\n\nfunction schemaValue(describe: string | undefined): JsonValue | undefined {\n if (describe === undefined) return undefined;\n try {\n const value = JSON.parse(describe) as unknown;\n return value !== null && typeof value === 'object' ? (value as JsonValue) : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction nodeForDescriptor(\n descriptor: ToolDescriptor,\n path: ToolCommandPath,\n includeLeaf = true,\n): ToolCommandNode {\n const inputSchema = descriptor.inputSchema ?? schemaValue(descriptor.argsSchema.describe);\n const outputSchema = descriptor.outputSchema ?? schemaValue(descriptor.resultSchema.describe);\n const node: ToolCommandNode = {\n name: path[path.length - 1] as string,\n path: pathKey(path),\n summary: descriptor.summary,\n };\n if (includeLeaf) {\n return {\n ...node,\n leaf: {\n title: descriptor.title,\n realm: descriptor.realm,\n ...(inputSchema === undefined\n ? descriptor.argsSchema.describe === undefined\n ? {}\n : { inputDescription: descriptor.argsSchema.describe }\n : { inputSchema }),\n ...(outputSchema === undefined\n ? descriptor.resultSchema.describe === undefined\n ? {}\n : { outputDescription: descriptor.resultSchema.describe }\n : { outputSchema }),\n capabilities: [...(descriptor.capabilities ?? [])],\n errors: [...(descriptor.errors ?? [])],\n ...(descriptor.example === undefined ? {} : { example: descriptor.example }),\n },\n };\n }\n return node;\n}\n\ninterface Registered {\n readonly path: readonly string[];\n readonly contribution: ToolContribution;\n}\n\nfunction compareRegistered(left: Registered, right: Registered): number {\n return pathKey(left.path).localeCompare(pathKey(right.path));\n}\n\nfunction hasPrefix(left: ToolCommandPath, right: ToolCommandPath): boolean {\n return left.length < right.length && left.every((segment, index) => segment === right[index]);\n}\n\nfunction findNode(\n registered: readonly Registered[],\n path: ToolCommandPath,\n): Registered | undefined {\n return registered.find(\n (candidate) =>\n candidate.path.length === path.length &&\n candidate.path.every((segment, index) => segment === path[index]),\n );\n}\n\nfunction descendants(registered: readonly Registered[], path: ToolCommandPath): Registered[] {\n return registered.filter((candidate) => hasPrefix(path, candidate.path));\n}\n\nfunction projectNodes(\n registered: readonly Registered[],\n path: ToolCommandPath,\n recursive: boolean,\n): ToolCommandNode[] {\n const children = new Map<string, Registered | undefined>();\n for (const candidate of registered) {\n if (\n candidate.path.length <= path.length ||\n !path.every((segment, index) => candidate.path[index] === segment)\n )\n continue;\n const next = candidate.path[path.length] as string;\n const existing = children.get(next);\n if (\n existing === undefined ||\n candidate.path.length < (existing?.path.length ?? Number.MAX_SAFE_INTEGER)\n )\n children.set(next, candidate.path.length === path.length + 1 ? candidate : undefined);\n }\n return [...children.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([name, exact]) => {\n const childPath = [...path, name];\n if (exact !== undefined)\n return nodeForDescriptor(exact.contribution.descriptor, childPath, false);\n const node: ToolCommandNode = {\n name,\n path: pathKey(childPath),\n summary: descendants(registered, childPath)[0]?.contribution.descriptor.summary ?? '',\n };\n if (recursive) return { ...node, children: projectNodes(registered, childPath, true) };\n return node;\n });\n}\n\nexport function commandPath(descriptor: ToolDescriptor): ToolCommandPath {\n return descriptorPath(descriptor);\n}\n\nexport function defineCommand<TArgs, TResult>(\n descriptor: Omit<ToolCommandDescriptor<TArgs, TResult>, 'id'> & { readonly id?: string },\n execute: ToolExecutor<TArgs, TResult>,\n): ToolContribution<TArgs, TResult> {\n const path = descriptorPath(descriptor as ToolDescriptor);\n return {\n descriptor: {\n ...descriptor,\n id: descriptor.id ?? path.join('.'),\n path,\n },\n execute,\n } as ToolContribution<TArgs, TResult>;\n}\n\nexport function createToolCommandRegistry(\n contributions: readonly ToolContribution[],\n): ToolCommandRegistry {\n const registered: Registered[] = [];\n const byPath = new Map<string, ToolContribution>();\n for (const contribution of contributions) {\n const path = descriptorPath(contribution.descriptor);\n const key = pathKey(path);\n if (\n byPath.has(key) ||\n registered.some(\n (candidate) => hasPrefix(candidate.path, path) || hasPrefix(path, candidate.path),\n )\n ) {\n throw new ToolCommandError(\n 'tool-command-conflict',\n key,\n 'command paths cannot collide with a leaf or its descendants',\n { path: key },\n );\n }\n byPath.set(key, contribution);\n registered.push({ path, contribution });\n }\n registered.sort(compareRegistered);\n const runtime = createToolRuntime(registered.map((entry) => entry.contribution));\n const find = (pathInput: ToolCommandPath | string): Registered | undefined => {\n const path = normalizePath(pathInput);\n return findNode(registered, path);\n };\n const help = (pathInput?: ToolCommandPath | string, recursive = false): ToolCommandHelp => {\n const path = pathInput === undefined ? [] : normalizePath(pathInput);\n const exact = path.length === 0 ? undefined : findNode(registered, path);\n const descendant = path.length === 0 ? registered : descendants(registered, path);\n if (path.length > 0 && exact === undefined && descendant.length === 0) {\n let parent = path.slice(0, -1);\n while (parent.length > 0 && descendants(registered, parent).length === 0)\n parent = parent.slice(0, -1);\n throw new ToolCommandError(\n 'tool-command-not-found',\n pathKey(path),\n 'command path was not found',\n {\n parent: pathKey(parent),\n candidates: projectNodes(registered, parent, false).map((node) => node.name),\n },\n );\n }\n const leaf =\n exact === undefined ? undefined : nodeForDescriptor(exact.contribution.descriptor, path).leaf;\n const summary = exact?.contribution.descriptor.summary;\n return {\n path: pathKey(path),\n ...(summary === undefined ? {} : { summary }),\n nodes: projectNodes(registered, path, recursive || exact !== undefined),\n ...(leaf === undefined ? {} : { leaf }),\n };\n };\n return {\n contributions: registered.map((entry) => entry.contribution),\n list: (path = []) => projectNodes(registered, path, false),\n tree: (path: ToolCommandPath | string = []) =>\n projectNodes(registered, normalizePath(path), true),\n describe: (pathInput) =>\n find(pathInput)?.contribution.descriptor as ToolCommandDescriptor | undefined,\n help,\n get: (pathInput) => find(pathInput)?.contribution,\n run: <TResult = unknown>(\n pathInput: ToolCommandPath | string,\n args: unknown,\n options?: ToolRunOptions,\n ): ToolRun<TResult> | undefined => {\n const contribution = find(pathInput)?.contribution;\n if (contribution === undefined) return undefined;\n return runtime.run(contribution, args, options) as ToolRun<TResult>;\n },\n };\n}\n","import type { JsonValue, ToolSchema, ToolSchemaResult } from './types.js';\n\n/** The small JSON Schema vocabulary shared by command contracts. */\nexport interface ToolJsonSchema {\n readonly type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n readonly properties?: Readonly<Record<string, ToolJsonSchema>>;\n readonly required?: readonly string[];\n readonly additionalProperties?: boolean;\n readonly items?: ToolJsonSchema;\n readonly enum?: readonly JsonValue[];\n readonly const?: JsonValue;\n readonly minLength?: number;\n readonly minItems?: number;\n readonly minimum?: number;\n readonly maximum?: number;\n readonly description?: string;\n}\n\nexport interface ToolSchemaFailure {\n readonly path: string;\n readonly message: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction typeMatches(type: ToolJsonSchema['type'], value: unknown): boolean {\n switch (type) {\n case undefined:\n return true;\n case 'null':\n return value === null;\n case 'array':\n return Array.isArray(value);\n case 'object':\n return isRecord(value);\n case 'string':\n return typeof value === 'string';\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n case 'integer':\n return typeof value === 'number' && Number.isSafeInteger(value);\n case 'boolean':\n return typeof value === 'boolean';\n }\n}\n\nfunction validate(\n value: unknown,\n schema: ToolJsonSchema,\n path: string,\n): ToolSchemaFailure | undefined {\n if (!typeMatches(schema.type, value))\n return { path, message: `expected ${schema.type ?? 'a value'}` };\n if (schema.enum !== undefined && !schema.enum.some((candidate) => sameJson(candidate, value))) {\n return { path, message: 'expected one of the declared enum values' };\n }\n if (schema.const !== undefined && !sameJson(schema.const, value)) {\n return { path, message: 'expected the declared constant value' };\n }\n if (\n typeof value === 'string' &&\n schema.minLength !== undefined &&\n value.length < schema.minLength\n ) {\n return { path, message: `must contain at least ${schema.minLength} characters` };\n }\n if (typeof value === 'number') {\n if (schema.minimum !== undefined && value < schema.minimum)\n return { path, message: `must be at least ${schema.minimum}` };\n if (schema.maximum !== undefined && value > schema.maximum)\n return { path, message: `must be at most ${schema.maximum}` };\n }\n if (Array.isArray(value)) {\n if (schema.minItems !== undefined && value.length < schema.minItems)\n return { path, message: `must contain at least ${schema.minItems} items` };\n if (schema.items !== undefined) {\n for (let index = 0; index < value.length; index += 1) {\n const failure = validate(value[index], schema.items, `${path}[${index}]`);\n if (failure !== undefined) return failure;\n }\n }\n }\n if (isRecord(value)) {\n const properties = schema.properties ?? {};\n for (const key of schema.required ?? []) {\n if (!(key in value)) return { path: `${path}.${key}`, message: 'is required' };\n }\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(value)) {\n if (!(key in properties)) return { path: `${path}.${key}`, message: 'is not declared' };\n }\n }\n for (const [key, child] of Object.entries(properties)) {\n if (!(key in value)) continue;\n const failure = validate(value[key], child, `${path}.${key}`);\n if (failure !== undefined) return failure;\n }\n }\n return undefined;\n}\n\nexport function parseToolJsonSchema<T = unknown>(\n value: unknown,\n schema: ToolJsonSchema,\n): ToolSchemaResult<T> {\n const failure = validate(value, schema, '$');\n return failure === undefined\n ? { ok: true, value: value as T }\n : { ok: false, error: `${failure.path}: ${failure.message}` };\n}\n\nexport function toolJsonSchema<T = unknown>(schema: ToolJsonSchema): ToolSchema<T> {\n return {\n parse: (value) => parseToolJsonSchema<T>(value, schema),\n describe: JSON.stringify(schema),\n };\n}\n","import { isSerializableValue } from './artifacts.js';\nimport { capabilityUnavailableError } from './errors.js';\nimport type {\n ArtifactRef,\n JsonValue,\n SnapshotRef,\n ToolEvidenceKind,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nexport type MigrationOperation =\n | 'project.build'\n | 'author.plugin-install'\n | 'preview.run'\n | 'project.preview'\n | 'material.preview'\n | 'mesh.preview'\n | 'vfx.preview'\n | 'texture.preview';\n\nexport interface MigrationCapabilityProbe {\n readonly realm: ToolRealm;\n readonly catalogDigest: string;\n readonly rhiBackend: 'webgpu' | 'null' | 'unknown';\n readonly evidence: readonly ToolEvidenceKind[];\n readonly carrier: boolean;\n readonly service: boolean;\n}\n\nexport interface CapabilityToken {\n readonly kind: 'forgeax-tool-capability';\n readonly version: '1.0.0';\n readonly operation: MigrationOperation;\n readonly source: MigrationCapabilityProbe;\n readonly target: MigrationCapabilityProbe;\n}\n\nexport interface MigrationRecipe {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts: readonly ArtifactRef[];\n}\n\nexport type MigrationPayloadValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nconst liveStateKeys = new Set([\n 'world',\n 'renderer',\n 'canvas',\n 'context',\n 'fiber',\n 'page',\n 'carrier',\n 'ui',\n 'selection',\n 'draft',\n 'undo',\n 'session',\n]);\n\nfunction liveStateError(path: string, key: string): ToolRuntimeError {\n return {\n code: 'tool-migration-live-state',\n expected: 'migration payload to contain only recipe, snapshot, and artifact references',\n hint: 'Recreate the operation from serializable authority facts; do not migrate live state.',\n detail: { path, key },\n };\n}\n\nexport function createCapabilityToken(\n operation: MigrationOperation,\n source: MigrationCapabilityProbe,\n version: '1.0.0',\n target: MigrationCapabilityProbe,\n): CapabilityToken {\n if (source.catalogDigest.length === 0 || target.catalogDigest.length === 0)\n throw new TypeError('capability probe catalogDigest must not be empty');\n return {\n kind: 'forgeax-tool-capability',\n version,\n operation,\n source: { ...source, evidence: [...source.evidence] },\n target: { ...target, evidence: [...target.evidence] },\n };\n}\n\nexport function probeMigrationTarget(\n token: CapabilityToken,\n target: MigrationCapabilityProbe,\n):\n | { readonly ok: true; readonly value: MigrationCapabilityProbe }\n | {\n readonly ok: false;\n readonly error: ToolRuntimeError;\n } {\n const sameEvidence = token.target.evidence.every((kind) => target.evidence.includes(kind));\n const matches =\n token.target.realm === target.realm &&\n token.target.catalogDigest === target.catalogDigest &&\n token.target.rhiBackend === target.rhiBackend &&\n sameEvidence;\n if (!matches) {\n return {\n ok: false,\n error: capabilityUnavailableError(`migration:${token.operation}`, target.realm),\n };\n }\n return { ok: true, value: { ...target, evidence: [...target.evidence] } };\n}\n\nexport function createMigrationRecipe(input: {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts?: readonly ArtifactRef[];\n}): MigrationRecipe {\n const recipe: MigrationRecipe = {\n operation: input.operation,\n args: input.args,\n ...(input.snapshot === undefined ? {} : { snapshot: { ...input.snapshot } }),\n artifacts: (input.artifacts ?? []).map((artifact) => ({ ...artifact })),\n };\n const validation = validateMigrationPayload(recipe);\n if (!validation.ok) {\n const path =\n validation.error.code === 'tool-migration-live-state' ? validation.error.detail.path : '$';\n throw new TypeError(path);\n }\n return recipe;\n}\n\nexport function validateMigrationPayload(value: unknown): MigrationPayloadValidation {\n const visit = (candidate: unknown, path: string): MigrationPayloadValidation => {\n if (!isSerializableValue(candidate)) {\n return { ok: false, error: liveStateError(path, path.split('.').at(-1) ?? '<root>') };\n }\n if (candidate === null || typeof candidate !== 'object') return { ok: true };\n if (Array.isArray(candidate)) {\n for (const [index, child] of candidate.entries()) {\n const result = visit(child, `${path}[${index}]`);\n if (!result.ok) return result;\n }\n return { ok: true };\n }\n for (const [key, child] of Object.entries(candidate)) {\n const normalized = key.replaceAll('_', '').replaceAll('-', '').toLowerCase();\n if (liveStateKeys.has(normalized)) return { ok: false, error: liveStateError(path, key) };\n const result = visit(child, `${path}.${key}`);\n if (!result.ok) return result;\n }\n return { ok: true };\n };\n return visit(value, '$');\n}\n","import type { SnapshotRef, ToolTerminal } from './types.js';\n\nexport function terminalSnapshot<TResult>(\n terminal: ToolTerminal<TResult>,\n): SnapshotRef | undefined {\n return terminal.snapshotAfter;\n}\n\nexport function isSnapshotRef(value: unknown): value is SnapshotRef {\n return (\n typeof value === 'object' &&\n value !== null &&\n Number.isSafeInteger(Reflect.get(value, 'revision')) &&\n Reflect.get(value, 'revision') >= 0 &&\n typeof Reflect.get(value, 'digest') === 'string' &&\n Reflect.get(value, 'digest').length > 0\n );\n}\n","import { validateRealmBootstrapPayload } from './capability.js';\nimport type {\n CarrierLease,\n CarrierLeaseRequest,\n CarrierPhase,\n CarrierResult,\n CarrierState,\n} from './carrier.js';\nimport type { JsonValue, ToolTerminal } from './types.js';\n\nexport interface CarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly send: (payload: unknown) => boolean;\n readonly close: () => void;\n}\n\nexport interface CarrierExecutionRequest {\n readonly leaseId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: unknown;\n}\n\nexport interface AuthenticatedCarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly lease: (request: CarrierLeaseRequest) => Promise<CarrierResult<CarrierLease>>;\n readonly started: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly execute: (request: CarrierExecutionRequest) => Promise<{\n readonly ok: true;\n readonly value: ToolTerminal<unknown>;\n readonly state: CarrierPhase;\n }>;\n readonly exit: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedCarrierTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport class CarrierTransportError extends Error {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n\n constructor(error: {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n }) {\n super(error.code);\n this.name = 'CarrierTransportError';\n this.code = error.code;\n if (error.expected !== undefined) this.expected = error.expected;\n if (error.hint !== undefined) this.hint = error.hint;\n if (error.detail !== undefined) this.detail = error.detail;\n }\n}\n\nexport function createAuthenticatedCarrierTransport(\n options: AuthenticatedCarrierTransportOptions,\n): AuthenticatedCarrierTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname))\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n if (options.bearerToken.length < 8) throw new TypeError('carrier bearer token is too short');\n let connected = true;\n async function request<T>(path: string, payload: unknown): Promise<T> {\n if (!connected)\n throw new CarrierTransportError({\n code: 'carrier-exited',\n expected: 'a connected carrier transport',\n hint: 'Request a fresh visible offer after provider exit.',\n });\n let response: Response;\n try {\n response = await fetch(`${options.endpoint}${path}`, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${options.bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n } catch (cause) {\n throw new CarrierTransportError({\n code: 'carrier-provider-exit',\n expected: 'the carrier provider to remain reachable',\n hint: 'Offer a fresh carrier; do not fallback after started.',\n detail: { cause: cause instanceof Error ? cause.message : String(cause) },\n });\n }\n const value: unknown = await response.json().catch(() => ({}));\n if (\n !response.ok ||\n typeof value !== 'object' ||\n value === null ||\n !('ok' in value) ||\n value.ok !== true\n ) {\n const error =\n typeof value === 'object' &&\n value !== null &&\n 'error' in value &&\n typeof value.error === 'object' &&\n value.error !== null\n ? (value.error as Record<string, unknown>)\n : {\n code: 'carrier-provider-exit',\n expected: 'a successful carrier response',\n hint: 'Offer a fresh carrier and retry from a serialized snapshot.',\n };\n const normalized = {\n code: typeof error.code === 'string' ? error.code : 'carrier-provider-exit',\n ...(typeof error.expected === 'string' ? { expected: error.expected } : {}),\n ...(typeof error.hint === 'string' ? { hint: error.hint } : {}),\n ...(typeof error.detail === 'object' && error.detail !== null\n ? { detail: error.detail as Readonly<Record<string, unknown>> }\n : {}),\n };\n throw new CarrierTransportError(normalized);\n }\n return value as T;\n }\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n lease: (payload) => request('/lease', payload),\n started: (payload) => request('/start', payload),\n execute: (payload) => request('/execute', payload),\n exit: (payload) => request('/exit', payload),\n close() {\n connected = false;\n },\n };\n}\n\n/** Minimal loopback transport seam; it carries POD only and owns no operation state. */\nexport function createLoopbackTransport(endpoint: string): CarrierTransport {\n const url = new URL(endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n }\n let connected = true;\n return {\n endpoint,\n get connected() {\n return connected;\n },\n send(payload) {\n if (!connected || !validateRealmBootstrapPayload(payload).ok) return false;\n return true;\n },\n close() {\n connected = false;\n },\n };\n}\n\nexport interface ServiceWireRequest {\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: JsonValue;\n}\n\nexport type ServiceWireHandler = (\n request: ServiceWireRequest,\n) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;\n\nexport interface AuthenticatedLoopbackTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly request: (\n request: ServiceWireRequest,\n bearerToken: string,\n options?: { readonly signal?: AbortSignal },\n ) => Promise<ToolTerminal<unknown>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedLoopbackTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport function createAuthenticatedLoopbackTransport(\n options: AuthenticatedLoopbackTransportOptions,\n): AuthenticatedLoopbackTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('service transport endpoint must be loopback HTTP');\n }\n if (options.bearerToken.length < 8) throw new TypeError('service bearer token is too short');\n let connected = true;\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n async request(request, bearerToken, requestOptions = {}) {\n if (!connected) throw new Error('service transport is disconnected');\n if (bearerToken !== options.bearerToken) throw new Error('service bearer token rejected');\n if (!validateRealmBootstrapPayload(request).ok) {\n throw new Error('service request is not structured-clone safe');\n }\n const response = await fetch(options.endpoint, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(request),\n ...(requestOptions.signal === undefined ? {} : { signal: requestOptions.signal }),\n });\n const payload: unknown = await response.json();\n if (!response.ok) {\n const detail =\n typeof payload === 'object' && payload !== null && 'error' in payload\n ? String(payload.error)\n : `HTTP ${response.status}`;\n throw new Error(`service request failed: ${detail}`);\n }\n return payload as ToolTerminal<unknown>;\n },\n close() {\n connected = false;\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/artifacts.ts","../src/lease.ts","../src/timing.ts","../src/runtime.ts","../src/api.ts","../src/capability.ts","../src/carrier.ts","../src/command-tree.ts","../src/json-schema.ts","../src/migration.ts","../src/snapshot.ts","../src/transport.ts"],"names":["pathKey","record","run","performance","token"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { JsonValue, ToolEvidenceKind, ToolRealm, ToolRuntimeError } from './types.js';\n\nexport function invalidArgsError(message: string, value: JsonValue): ToolRuntimeError {\n return {\n code: 'tool-invalid-args',\n expected: 'arguments accepted by the contribution argsSchema',\n hint: 'Read the descriptor schema and retry with typed arguments.',\n detail: { message, value },\n };\n}\n\nexport function capabilityUnavailableError(capability: string, realm: ToolRealm): ToolRuntimeError {\n return {\n code: 'tool-capability-unavailable',\n expected: `capability ${capability} in realm ${realm}`,\n hint: 'Inspect the capability matrix and select an available realm or path.',\n detail: { capability, realm },\n };\n}\n\nexport function snapshotStaleError(expectedDigest: string, actualDigest: string): ToolRuntimeError {\n return {\n code: 'tool-snapshot-stale',\n expected: 'the supplied snapshot to match the current authority',\n hint: 'Refresh the authority snapshot and retry the write.',\n detail: { expectedDigest, actualDigest },\n };\n}\n\nexport function domainFailureError(\n code: string,\n expected = 'the producer operation to succeed',\n hint = 'Inspect detail and repair the owning producer before retrying.',\n payload?: JsonValue,\n): ToolRuntimeError {\n return {\n code: 'tool-domain-failed',\n expected,\n hint,\n detail: { code, ...(payload === undefined ? {} : { payload }) },\n };\n}\n\nexport function artifactIncompleteError(\n missing: readonly ToolEvidenceKind[],\n runId: string,\n): ToolRuntimeError {\n return {\n code: 'tool-artifact-incomplete',\n expected: 'the requested evidence artifacts to be produced by their owners',\n hint: 'Request only supported evidence and inspect the artifact manifest before retrying.',\n detail: { missing: [...missing], runId },\n };\n}\n\nexport function cancellationError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-run-cancelled',\n expected: 'the tool run not to be cancelled',\n hint: 'Retry the command after resolving the cancellation source.',\n detail: { reason },\n };\n}\n\nexport function timeoutError(deadlineMs: number): ToolRuntimeError {\n return {\n code: 'tool-run-timeout',\n expected: `the tool run to complete within ${deadlineMs}ms`,\n hint: 'Increase the deadline only when the operation is expected to be bounded.',\n detail: { deadlineMs },\n };\n}\n\nexport function disconnectedError(transport: string): ToolRuntimeError {\n return {\n code: 'tool-run-disconnected',\n expected: 'the tool transport to remain connected',\n hint: 'Reconnect the transport and retry from the last serialized snapshot.',\n detail: { transport },\n };\n}\n\nexport function terminalError(runId: string, outcome: 'succeeded' | 'failed'): ToolRuntimeError {\n return {\n code: 'tool-run-terminal',\n expected: 'a non-terminal ToolRun',\n hint: 'Use the existing terminal and do not attach another executor.',\n detail: { runId, outcome },\n };\n}\n\nexport function cleanupError(runId: string, message: string): ToolRuntimeError {\n return {\n code: 'tool-cleanup-failed',\n expected: 'all ToolRun cleanup callbacks to complete',\n hint: 'Inspect the cleanup detail and release the owning resource.',\n detail: { runId, message },\n };\n}\n\nexport function artifactManifestError(\n expected: string,\n hint: string,\n detail: { readonly reason: string; readonly runId?: string },\n): ToolRuntimeError {\n return { code: 'tool-artifact-manifest-invalid', expected, hint, detail };\n}\n\nexport function timingError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-timing-invalid',\n expected: 'exclusive timing phases to be opened and closed once without overlap',\n hint: 'close the current phase before starting the next phase and finish only after all phases close',\n detail: { reason },\n };\n}\n","import { artifactManifestError } from './errors.js';\nimport type { ArtifactRef, JsonValue, SnapshotRef, ToolEvidenceKind } from './types.js';\n\nexport type PreviewArtifactRole =\n | 'report'\n | 'rhi-tape'\n | 'capture'\n | 'fresh-replay'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport type PreviewArtifactKind =\n | 'report'\n | 'rhi-tape'\n | 'png'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport interface PreviewArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly subjectDigest: string;\n readonly presentationDigest: string;\n readonly captureId: string;\n readonly frameId: number;\n}\n\nexport interface PreviewArtifactManifestEntry {\n readonly owner: string;\n readonly kind: PreviewArtifactKind;\n readonly role: PreviewArtifactRole;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType: string;\n readonly derivedFrom: readonly string[];\n}\n\nexport interface PreviewArtifactManifest {\n readonly schemaVersion: '2.0.0';\n readonly identity: PreviewArtifactIdentity;\n readonly artifacts: readonly PreviewArtifactManifestEntry[];\n}\n\nexport type PreviewArtifactManifestValidation =\n | { readonly ok: true; readonly value: PreviewArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport interface ToolArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly stepId: string;\n readonly frameId: number;\n readonly captureId: string;\n}\n\nexport interface ToolArtifactManifestEntry {\n readonly owner: string;\n readonly kind: ToolEvidenceKind;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType?: string;\n readonly derivedFrom?: readonly string[];\n}\n\nexport interface ToolArtifactManifest {\n readonly schemaVersion: '1.0.0';\n readonly identity: ToolArtifactIdentity;\n readonly artifacts: readonly ToolArtifactManifestEntry[];\n}\n\nexport type ArtifactManifestValidation =\n | { readonly ok: true; readonly value: ToolArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport function createArtifactManifest(manifest: ToolArtifactManifest): ToolArtifactManifest {\n const result = validateArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('artifact manifest is invalid');\n return {\n schemaVersion: '1.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({ ...artifact })),\n };\n}\n\nexport function validateArtifactManifest(\n manifest: ToolArtifactManifest,\n required: readonly ToolEvidenceKind[],\n): ArtifactManifestValidation {\n const fail = (reason: string, expected: string): ArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n expected,\n 'regenerate the complete manifest from the owning producers',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '1.0.0')\n return fail('unsupported schemaVersion', 'schemaVersion === \"1.0.0\"');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n identity.runId.length === 0 ||\n identity.snapshotDigest.length === 0 ||\n identity.stepId.length === 0 ||\n identity.captureId.length === 0 ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n )\n return fail(\n 'identity is incomplete',\n 'runId/snapshotDigest/stepId/captureId and non-negative frameId',\n );\n const seen = new Set<ToolEvidenceKind>();\n for (const artifact of manifest.artifacts) {\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0\n )\n return fail(\n `invalid ${artifact.kind} artifact entry`,\n 'owner/uri/digest and byteLength are complete',\n );\n if (seen.has(artifact.kind))\n return fail(\n `duplicate artifact kind '${artifact.kind}'`,\n 'one owner entry per evidence kind',\n );\n seen.add(artifact.kind);\n }\n for (const kind of required)\n if (!seen.has(kind))\n return fail(\n `missing artifact kind '${kind}'`,\n `manifest includes requested '${kind}' evidence`,\n );\n return { ok: true, value: manifest };\n}\n\nconst PREVIEW_ROLE_KINDS: Readonly<Record<PreviewArtifactRole, PreviewArtifactKind>> = {\n report: 'report',\n 'rhi-tape': 'rhi-tape',\n capture: 'png',\n 'fresh-replay': 'png',\n 'profile-capture': 'profile-capture',\n 'contact-sheet': 'contact-sheet',\n};\n\nexport function createPreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n): PreviewArtifactManifest {\n const result = validatePreviewArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('preview artifact manifest is invalid');\n return {\n schemaVersion: '2.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({\n ...artifact,\n derivedFrom: [...artifact.derivedFrom],\n })),\n };\n}\n\nexport function validatePreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n requiredRoles: readonly PreviewArtifactRole[],\n): PreviewArtifactManifestValidation {\n const fail = (reason: string): PreviewArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n 'schemaVersion 2.0.0 with one complete identity and role per artifact',\n 'regenerate the staged report and evidence from one lexical ToolRun',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '2.0.0') return fail('v1 manifest or unsupported schemaVersion');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n [\n identity.runId,\n identity.snapshotDigest,\n identity.subjectDigest,\n identity.presentationDigest,\n identity.captureId,\n ].some((value) => typeof value !== 'string' || value.length === 0) ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n ) {\n return fail('identity is incomplete or stale');\n }\n const seenRoles = new Set<PreviewArtifactRole>();\n const digests = new Set<string>();\n for (const artifact of manifest.artifacts) {\n if (seenRoles.has(artifact.role)) return fail(`duplicate role '${artifact.role}'`);\n if (PREVIEW_ROLE_KINDS[artifact.role] !== artifact.kind) {\n return fail(`role '${artifact.role}' does not match kind '${artifact.kind}'`);\n }\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n artifact.mediaType.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0 ||\n artifact.derivedFrom.some((digest) => digest.length === 0)\n ) {\n return fail(`incomplete '${artifact.role}' artifact`);\n }\n seenRoles.add(artifact.role);\n digests.add(artifact.digest);\n }\n for (const artifact of manifest.artifacts) {\n if (artifact.derivedFrom.some((digest) => !digests.has(digest))) {\n return fail(`'${artifact.role}' derivedFrom references an unpublished artifact`);\n }\n }\n for (const role of requiredRoles) {\n if (!seenRoles.has(role)) return fail(`missing required role '${role}'`);\n }\n return { ok: true, value: manifest };\n}\n\nexport function isSerializableValue(value: unknown, seen = new Set<object>()): value is JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object') return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.every((entry) => isSerializableValue(entry, seen));\n if (Object.getPrototypeOf(value) !== Object.prototype) return false;\n return Object.entries(value).every(\n ([key, entry]) => typeof key === 'string' && isSerializableValue(entry, seen),\n );\n}\n\nexport function createArtifactRef(input: {\n readonly kind: ToolEvidenceKind | 'tool-result' | 'receipt';\n readonly digest: string;\n readonly uri?: string;\n readonly mediaType?: string;\n readonly sizeBytes?: number;\n}): ArtifactRef {\n if (input.digest.length === 0) throw new TypeError('ArtifactRef digest must not be empty');\n if (\n input.sizeBytes !== undefined &&\n (!Number.isSafeInteger(input.sizeBytes) || input.sizeBytes < 0)\n ) {\n throw new TypeError('ArtifactRef sizeBytes must be a non-negative safe integer');\n }\n return { ...input };\n}\n\nexport function createSnapshotRef(input: SnapshotRef): SnapshotRef {\n if (!Number.isSafeInteger(input.revision) || input.revision < 0) {\n throw new TypeError('SnapshotRef revision must be a non-negative safe integer');\n }\n if (input.digest.length === 0) throw new TypeError('SnapshotRef digest must not be empty');\n return { revision: input.revision, digest: input.digest };\n}\n\nexport function validateArtifactRefs(value: unknown): value is readonly ArtifactRef[] {\n return (\n Array.isArray(value) &&\n value.every(\n (entry) =>\n typeof entry === 'object' &&\n entry !== null &&\n typeof Reflect.get(entry, 'kind') === 'string' &&\n typeof Reflect.get(entry, 'digest') === 'string' &&\n (Reflect.get(entry, 'uri') === undefined || typeof Reflect.get(entry, 'uri') === 'string'),\n )\n );\n}\n","export type LeaseTerminationReason =\n | 'terminal'\n | 'cancel'\n | 'timeout'\n | 'disconnect'\n | 'provider-exit';\n\nexport interface LeaseCleanupFailure {\n readonly owner: string;\n readonly message: string;\n}\n\nexport interface LeaseTermination {\n readonly terminalId: string;\n readonly reason: LeaseTerminationReason;\n readonly failures: readonly LeaseCleanupFailure[];\n}\n\nexport interface LexicalLease {\n readonly state: 'active' | 'terminating' | 'terminated';\n readonly register: (owner: string, cleanup: () => void | Promise<void>) => boolean;\n readonly terminate: (reason: LeaseTerminationReason) => Promise<LeaseTermination>;\n}\n\nexport function createLexicalLease(runId: string): LexicalLease {\n const cleanups: Array<{ readonly owner: string; readonly cleanup: () => void | Promise<void> }> =\n [];\n let state: LexicalLease['state'] = 'active';\n let terminalId: string | undefined;\n let termination: Promise<LeaseTermination> | undefined;\n\n const terminate = (reason: LeaseTerminationReason): Promise<LeaseTermination> => {\n if (termination !== undefined) return termination;\n terminalId = `${runId}:terminal:${crypto.randomUUID()}`;\n state = 'terminating';\n termination = (async () => {\n const failures: LeaseCleanupFailure[] = [];\n for (let index = cleanups.length - 1; index >= 0; index -= 1) {\n const entry = cleanups[index];\n if (entry === undefined) continue;\n try {\n await entry.cleanup();\n } catch (cause) {\n failures.push({\n owner: entry.owner,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n }\n }\n state = 'terminated';\n return { terminalId: terminalId as string, reason, failures };\n })();\n return termination;\n };\n\n return {\n get state() {\n return state;\n },\n register(owner, cleanup) {\n if (state !== 'active') return false;\n cleanups.push({ owner, cleanup });\n return true;\n },\n terminate,\n };\n}\n","import type { ToolPhaseObservation, ToolTiming, ToolTimingPhase } from './types.js';\n\nexport interface ExclusiveTimingResult {\n readonly startedAtMs: number;\n readonly endedAtMs: number;\n readonly totalMs: number;\n readonly phases: Readonly<Record<ToolTimingPhase, ToolPhaseObservation>>;\n}\n\nexport interface ExclusiveTiming {\n begin(phase: ToolTimingPhase): void;\n end(phase: ToolTimingPhase): void;\n record(phase: ToolTimingPhase, durationMs: number): void;\n finish(): ExclusiveTimingResult;\n}\n\nconst PHASES: readonly ToolTimingPhase[] = [\n 'lookup',\n 'lease',\n 'transport',\n 'execute',\n 'capture',\n 'finalize',\n 'analyze',\n];\n\nexport function createExclusiveTiming(\n now: () => number = () => performance.now(),\n): ExclusiveTiming {\n const phases = Object.fromEntries(\n PHASES.map((phase) => [phase, { status: 'not-applicable' }]),\n ) as Record<ToolTimingPhase, ToolPhaseObservation>;\n const closed = new Set<ToolTimingPhase>();\n let active: { phase: ToolTimingPhase; startedAtMs: number } | undefined;\n let startedAtMs: number | undefined;\n let endedAtMs: number | undefined;\n return {\n begin(phase) {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at;\n active = { phase, startedAtMs: at };\n },\n end(phase) {\n if (active?.phase !== phase) throw new TypeError(`phase '${phase}' is not the active phase`);\n const at = now();\n phases[phase] = { status: 'observed', durationMs: Math.max(0, at - active.startedAtMs) };\n closed.add(phase);\n active = undefined;\n endedAtMs = at;\n },\n record(phase, durationMs) {\n if (!Number.isFinite(durationMs) || durationMs < 0)\n throw new TypeError('phase duration must be finite and non-negative');\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at - durationMs;\n phases[phase] = { status: 'observed', durationMs };\n closed.add(phase);\n endedAtMs = at;\n },\n finish() {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n const start = startedAtMs ?? now();\n const end = endedAtMs ?? start;\n return {\n startedAtMs: start,\n endedAtMs: end,\n totalMs: Math.max(0, end - start),\n phases: { ...phases },\n };\n },\n };\n}\n\nexport function startToolTiming(): number {\n return performance.now();\n}\n\nexport function finishToolTiming(\n startedAtMs: number,\n operationTiming?: ExclusiveTiming,\n): ToolTiming {\n const endedAtMs = performance.now();\n const result = operationTiming?.finish();\n const durationMs = Math.max(0, endedAtMs - startedAtMs);\n const attributedMs =\n result === undefined\n ? 0\n : Object.values(result.phases).reduce(\n (sum, observation) =>\n observation.status === 'observed' ? sum + observation.durationMs : sum,\n 0,\n );\n return {\n startedAtMs,\n endedAtMs,\n durationMs,\n ...(result === undefined\n ? {}\n : { phases: result.phases, unattributedMs: Math.max(0, durationMs - attributedMs) }),\n };\n}\n","import { isSerializableValue, validateArtifactRefs } from './artifacts.js';\nimport {\n artifactIncompleteError,\n cancellationError,\n capabilityUnavailableError,\n cleanupError,\n disconnectedError,\n domainFailureError,\n invalidArgsError,\n terminalError,\n timeoutError,\n} from './errors.js';\nimport { createLexicalLease, type LeaseTerminationReason } from './lease.js';\nimport { createExclusiveTiming, finishToolTiming, startToolTiming } from './timing.js';\nimport type {\n JsonValue,\n ToolCapability,\n ToolCleanupReport,\n ToolContribution,\n ToolDescriptor,\n ToolDomainFailure,\n ToolExecutionContext,\n ToolExecutor,\n ToolRun,\n ToolRunEvent,\n ToolRunOptions,\n ToolRuntimeError,\n ToolSchema,\n ToolTerminal,\n} from './types.js';\n\nexport interface ToolRuntime {\n readonly list: () => readonly ToolDescriptor[];\n readonly describe: (id: string) => ToolDescriptor | undefined;\n readonly get: (id: string) => ToolContribution<unknown, unknown> | undefined;\n readonly run: <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n ) => ToolRun<TResult>;\n}\n\nexport function defineTool<TArgs, TResult>(\n descriptor: ToolDescriptor<TArgs, TResult>,\n execute: ToolExecutor<TArgs, TResult>,\n): ToolContribution<TArgs, TResult> {\n if (!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(descriptor.id)) {\n throw new TypeError(`Tool id must use a stable lower-case path: ${descriptor.id}`);\n }\n if (descriptor.title.trim().length === 0 || descriptor.summary.trim().length === 0) {\n throw new TypeError('Tool title and summary must not be empty');\n }\n if (!Array.isArray(descriptor.evidence)) throw new TypeError('Tool evidence must be an array');\n if (descriptor.preview !== undefined && descriptor.preview.realm !== descriptor.realm) {\n throw new TypeError(\n `Tool ${descriptor.id} preview contract declares ${descriptor.preview.realm} but descriptor declares ${descriptor.realm}`,\n );\n }\n const argsSchema: ToolSchema<TArgs> = descriptor.argsSchema;\n const resultSchema: ToolSchema<TResult> = descriptor.resultSchema;\n return {\n descriptor: { ...descriptor, argsSchema, resultSchema, evidence: [...descriptor.evidence] },\n execute,\n };\n}\n\nfunction eventChannel(): {\n readonly emit: (event: ToolRunEvent) => void;\n readonly close: () => void;\n readonly events: AsyncIterable<ToolRunEvent>;\n} {\n const queue: ToolRunEvent[] = [];\n const waiters: Array<(result: IteratorResult<ToolRunEvent>) => void> = [];\n let closed = false;\n const emit = (event: ToolRunEvent): void => {\n const waiter = waiters.shift();\n if (waiter !== undefined) waiter({ done: false, value: event });\n else queue.push(event);\n };\n const close = (): void => {\n closed = true;\n while (waiters.length > 0) waiters.shift()?.({ done: true, value: undefined });\n };\n const events: AsyncIterable<ToolRunEvent> = {\n [Symbol.asyncIterator](): AsyncIterator<ToolRunEvent> {\n return {\n next: async (): Promise<IteratorResult<ToolRunEvent>> => {\n const event = queue.shift();\n if (event !== undefined) return { done: false, value: event };\n if (closed) return { done: true, value: undefined };\n return new Promise((resolve) => waiters.push(resolve));\n },\n };\n },\n };\n return { emit, close, events };\n}\n\nfunction isTerminal<TResult>(value: unknown): value is ToolTerminal<TResult> {\n if (typeof value !== 'object' || value === null) return false;\n const outcome = Reflect.get(value, 'outcome');\n return outcome === 'succeeded' || outcome === 'failed';\n}\n\nfunction serializablePreview(value: unknown): JsonValue {\n return isSerializableValue(value) ? value : null;\n}\n\nfunction domainError(error: ToolDomainFailure): ToolRuntimeError {\n return domainFailureError(\n error.code,\n error.expected ?? 'the producer operation to succeed',\n error.hint ?? 'Inspect detail and repair the owning producer before retrying.',\n error.detail,\n );\n}\n\nfunction hasOkField(value: unknown): value is { readonly ok: boolean } {\n return (\n typeof value === 'object' && value !== null && typeof Reflect.get(value, 'ok') === 'boolean'\n );\n}\n\nfunction isToolRuntimeError(value: unknown): value is ToolRuntimeError {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof Reflect.get(value, 'code') === 'string' &&\n Reflect.get(value, 'code').startsWith('tool-')\n );\n}\n\nexport function createToolRuntime<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime {\n const byId = new Map<string, ToolContribution<unknown, unknown>>();\n for (const candidate of contributions) {\n if (typeof candidate !== 'object' || candidate === null) {\n throw new TypeError('Tool contributions must be objects');\n }\n const contribution = candidate as ToolContribution<unknown, unknown>;\n if (typeof contribution.execute !== 'function') {\n throw new TypeError('Tool contributions must provide an executor');\n }\n const id = contribution.descriptor.id;\n if (byId.has(id)) throw new TypeError(`Duplicate tool contribution id: ${id}`);\n byId.set(id, contribution);\n }\n\n const list = (): readonly ToolDescriptor[] =>\n [...byId.values()].map((contribution) => contribution.descriptor);\n\n const run = <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options: ToolRunOptions = {},\n ): ToolRun<TResult> => {\n const runId = `${contribution.descriptor.id}:${crypto.randomUUID()}`;\n const channel = eventChannel();\n const controller = new AbortController();\n const startedAtMs = startToolTiming();\n const operationTiming = createExclusiveTiming();\n const lookupStartedAtMs = startToolTiming();\n operationTiming.record('lookup', Math.max(0, startToolTiming() - lookupStartedAtMs));\n const lease = createLexicalLease(runId);\n const leaseStartedAtMs = startToolTiming();\n operationTiming.record('lease', Math.max(0, startToolTiming() - leaseStartedAtMs));\n let terminalStarted = false;\n let cleanupReport: ToolCleanupReport = {\n census: { worlds: 0, renderers: 0, canvases: 0, leases: 0 },\n failures: [],\n };\n let cancelReason = 'cancelled by caller';\n let resolveTerminal!: (terminal: ToolTerminal<TResult>) => void;\n const terminal = new Promise<ToolTerminal<TResult>>((resolve) => {\n resolveTerminal = resolve;\n });\n let resolveExecutorExited!: () => void;\n const executorExited = new Promise<void>((resolve) => {\n resolveExecutorExited = resolve;\n });\n\n const settle = async (\n candidate: ToolTerminal<TResult>,\n reason: LeaseTerminationReason = 'terminal',\n ): Promise<void> => {\n if (terminalStarted) return;\n terminalStarted = true;\n controller.abort();\n const finalizeStartedAtMs = startToolTiming();\n const cleanupResult = await lease.terminate(reason);\n const cleanupFailure = cleanupResult.failures[0];\n const liveResources = Object.entries(cleanupReport.census).filter(([, count]) => count !== 0);\n const reportFailure =\n cleanupReport.failures[0] ??\n (liveResources.length === 0\n ? undefined\n : `live resources remain: ${liveResources.map(([kind, count]) => `${kind}=${count}`).join(', ')}`);\n operationTiming.record('finalize', Math.max(0, startToolTiming() - finalizeStartedAtMs));\n const finalTerminal: ToolTerminal<TResult> =\n cleanupFailure || (candidate.outcome === 'succeeded' && reportFailure !== undefined)\n ? {\n outcome: 'failed',\n failure: cleanupError(\n runId,\n cleanupFailure === undefined\n ? (reportFailure as string)\n : `${cleanupFailure.owner}: ${cleanupFailure.message}`,\n ),\n artifacts: candidate.artifacts,\n cleanup: cleanupReport,\n ...(candidate.snapshotAfter === undefined\n ? {}\n : { snapshotAfter: candidate.snapshotAfter }),\n timing: finishToolTiming(startedAtMs, operationTiming),\n }\n : {\n ...candidate,\n cleanup: cleanupReport,\n timing: finishToolTiming(startedAtMs, operationTiming),\n };\n resolveTerminal(finalTerminal);\n channel.emit({\n kind: 'terminal',\n runId,\n outcome: finalTerminal.outcome,\n atMs: performance.now(),\n });\n channel.close();\n };\n\n const context: ToolExecutionContext = {\n runId,\n signal: controller.signal,\n ...(options.owner === undefined ? {} : { owner: options.owner }),\n ...(options.caller === undefined ? {} : { caller: options.caller }),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n emit: (event) => {\n if (!terminalStarted) channel.emit({ ...event, runId });\n },\n addCleanup: (cleanup) => {\n if (!lease.register(`cleanup:${lease.state}`, cleanup)) void cleanup();\n },\n setCleanupReport: (report) => {\n cleanupReport = {\n census: { ...report.census },\n failures: [...report.failures],\n };\n },\n require: <T>(capability: ToolCapability<T>) => {\n if (terminalStarted) {\n return { ok: false as const, error: terminalError(runId, 'succeeded') };\n }\n const resolved = options.capabilityResolver?.(capability);\n if (resolved !== undefined) return resolved;\n return {\n ok: false as const,\n error: capabilityUnavailableError(capability.id, contribution.descriptor.realm),\n };\n },\n runChild: async (childContribution, childArgs, childOptions = {}) => {\n if (terminalStarted) {\n return {\n outcome: 'failed',\n failure: terminalError(runId, 'failed'),\n artifacts: [],\n };\n }\n const childRun = runtime.run(childContribution, childArgs, {\n ...childOptions,\n signal: controller.signal,\n ...(childOptions.capabilityResolver === undefined &&\n options.capabilityResolver !== undefined\n ? { capabilityResolver: options.capabilityResolver }\n : {}),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n });\n channel.emit({\n kind: 'child-started',\n runId,\n childRunId: childRun.id,\n atMs: performance.now(),\n });\n lease.register(`child:${childRun.id}`, () => {\n childRun.cancel('parent terminal');\n });\n return childRun.terminal;\n },\n };\n\n const fail = (failure: ToolRuntimeError): void => {\n void settle({ outcome: 'failed', failure, artifacts: [] });\n };\n\n const cancel = (reason = 'cancelled by caller'): void => {\n cancelReason = reason;\n void settle(\n { outcome: 'failed', failure: cancellationError(reason), artifacts: [] },\n 'cancel',\n );\n };\n\n const disconnect = (transport = 'tool transport'): void => {\n void settle(\n { outcome: 'failed', failure: disconnectedError(transport), artifacts: [] },\n 'disconnect',\n );\n };\n\n const providerExit = (provider = 'provider'): void => {\n void settle(\n {\n outcome: 'failed',\n failure: domainFailureError(\n 'provider-exit',\n 'the provider to remain alive until terminal',\n 'Restart the provider and retry from the serialized snapshot.',\n provider,\n ),\n artifacts: [],\n },\n 'provider-exit',\n );\n };\n\n const timeout =\n options.deadlineMs === undefined\n ? undefined\n : setTimeout(\n () =>\n void settle(\n {\n outcome: 'failed',\n failure: timeoutError(options.deadlineMs as number),\n artifacts: [],\n },\n 'timeout',\n ),\n options.deadlineMs,\n );\n\n channel.emit({ kind: 'started', runId, atMs: performance.now() });\n void (async () => {\n try {\n let parsedArgs: ReturnType<typeof contribution.descriptor.argsSchema.parse>;\n try {\n parsedArgs = contribution.descriptor.argsSchema.parse(args);\n } catch (cause) {\n await settle({\n outcome: 'failed',\n failure: invalidArgsError(\n cause instanceof Error ? cause.message : String(cause),\n serializablePreview(args),\n ),\n artifacts: [],\n });\n return;\n }\n if (!parsedArgs.ok) {\n fail(invalidArgsError(parsedArgs.error, serializablePreview(args)));\n return;\n }\n if (options.signal?.aborted) {\n cancelReason = 'aborted by caller';\n fail(cancellationError(cancelReason));\n return;\n }\n const onAbort = (): void => cancel('aborted by caller');\n options.signal?.addEventListener('abort', onAbort, { once: true });\n let produced: unknown;\n const executeStartedAtMs = startToolTiming();\n try {\n produced = await contribution.execute(parsedArgs.value, context);\n } finally {\n operationTiming.record('execute', Math.max(0, startToolTiming() - executeStartedAtMs));\n options.signal?.removeEventListener('abort', onAbort);\n }\n if (terminalStarted) return;\n if (controller.signal.aborted) {\n fail(cancellationError(cancelReason));\n return;\n }\n let result: unknown = produced;\n let snapshotAfter = options.snapshot;\n let artifacts: readonly import('./types.js').ArtifactRef[] = [];\n if (isTerminal<TResult>(produced)) {\n if (produced.outcome === 'failed') {\n await settle(produced);\n return;\n }\n result = produced.result;\n snapshotAfter = produced.snapshotAfter;\n artifacts = produced.artifacts;\n cleanupReport = produced.cleanup ?? cleanupReport;\n } else if (hasOkField(produced)) {\n if (produced.ok === false) {\n const error = Reflect.get(produced, 'error');\n const failureArtifacts = Reflect.get(produced, 'artifacts') ?? [];\n if (!validateArtifactRefs(failureArtifacts)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'artifact-ref-invalid',\n 'failure artifact refs to be serializable ArtifactRef values',\n 'Return refs created by createArtifactRef.',\n ),\n artifacts: [],\n });\n return;\n }\n if (isToolRuntimeError(error)) {\n await settle({ outcome: 'failed', failure: error, artifacts: failureArtifacts });\n return;\n }\n await settle({\n outcome: 'failed',\n failure: domainError(error as ToolDomainFailure),\n artifacts: failureArtifacts,\n });\n return;\n }\n result = Reflect.get(produced, 'value');\n snapshotAfter = Reflect.get(produced, 'snapshotAfter');\n artifacts = Reflect.get(produced, 'artifacts') ?? [];\n }\n if (!isSerializableValue(result)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'terminal-not-serializable',\n 'the result to be JSON serializable',\n 'Return plain JSON data and ArtifactRef values instead of live handles.',\n ),\n artifacts: [],\n });\n return;\n }\n const parsedResult = contribution.descriptor.resultSchema.parse(result);\n if (!parsedResult.ok) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'result-schema-invalid',\n 'the result to satisfy resultSchema',\n parsedResult.error,\n ),\n artifacts: [],\n });\n return;\n }\n if (!validateArtifactRefs(artifacts)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'artifact-ref-invalid',\n 'artifact refs to be serializable ArtifactRef values',\n 'Return refs created by createArtifactRef.',\n ),\n artifacts: [],\n });\n return;\n }\n const requiredEvidence = [\n ...new Set([...(contribution.descriptor.evidence ?? []), ...(options.evidence ?? [])]),\n ];\n const missingEvidence = requiredEvidence.filter(\n (kind) => !artifacts.some((artifact) => artifact.kind === kind),\n );\n if (missingEvidence.length > 0) {\n await settle({\n outcome: 'failed',\n failure: artifactIncompleteError(missingEvidence, runId),\n artifacts,\n });\n return;\n }\n await settle({\n outcome: 'succeeded',\n result: parsedResult.value,\n artifacts,\n ...(snapshotAfter === undefined ? {} : { snapshotAfter }),\n });\n } catch (cause) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'executor-threw',\n 'the contribution executor to return a result',\n cause instanceof Error ? cause.message : String(cause),\n ),\n artifacts: [],\n });\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n resolveExecutorExited();\n }\n })();\n\n const runtimeRun: ToolRun<TResult> = {\n id: runId,\n events: channel.events,\n terminal,\n executorExited,\n cancel,\n disconnect,\n providerExit,\n };\n return runtimeRun;\n };\n\n const runtime: ToolRuntime = {\n list,\n describe: (id) => byId.get(id)?.descriptor,\n get: (id) => byId.get(id),\n run,\n };\n return runtime;\n}\n","import { domainFailureError } from './errors.js';\nimport { createToolRuntime } from './runtime.js';\nimport type {\n JsonValue,\n ToolCallerIdentity,\n ToolContribution,\n ToolDescriptor,\n ToolExecutionOwner,\n ToolRealm,\n ToolRun,\n ToolRunOptions,\n ToolRuntimeError,\n ToolTerminal,\n} from './types.js';\n\nexport type ToolApiProviderState = 'pending' | 'active' | 'revoking' | 'revoked' | 'failed';\n\nexport interface ToolApiProviderInput {\n /** Stable provider identity within one source. */\n readonly providerId: string;\n /** Host/source identity. Different sources may expose the same operation id. */\n readonly sourceId: string;\n readonly realm: ToolRealm;\n readonly generation?: number;\n readonly fiberId?: string | number;\n readonly module?: string;\n readonly fiberState?: string;\n /** Async plugin activation stays non-callable until explicitly activated. */\n readonly initialState?: 'pending' | 'active';\n readonly tools: readonly ToolContribution[];\n /** Domain authorization remains owned by the provider. */\n readonly authorize?: (\n caller: ToolCallerIdentity | undefined,\n operation: ToolDescriptor,\n ) => boolean;\n}\n\nexport interface ToolApiProviderSnapshot {\n readonly owner: ToolExecutionOwner;\n readonly state: ToolApiProviderState;\n readonly fiberState?: string;\n readonly callable: boolean;\n readonly operationIds: readonly string[];\n}\n\nexport interface ToolApiRecord {\n readonly descriptor: ToolDescriptor;\n readonly owner: ToolExecutionOwner;\n readonly providerState: ToolApiProviderState;\n readonly declared: true;\n readonly callable: boolean;\n readonly fiberState?: string;\n}\n\nexport interface ToolApiSnapshot {\n readonly providers: readonly ToolApiProviderSnapshot[];\n readonly operations: readonly ToolApiRecord[];\n}\n\nexport interface ToolApiProviderHandle {\n readonly owner: ToolExecutionOwner;\n readonly snapshot: () => ToolApiProviderSnapshot;\n /** Mark a pending provider callable after its domain apply succeeds. */\n readonly activate: (fiberState?: string) => void;\n /** Mark a pending/active provider failed without making it callable. */\n readonly fail: (reason?: string, fiberState?: string) => void;\n /** Withdraw admission and wait for every executor to actually exit. */\n readonly revoke: (reason?: string) => Promise<void>;\n}\n\nexport interface ToolApiRunOptions extends Omit<ToolRunOptions, 'owner'> {\n /** Explicit provider route. Required when multiple sources expose an id. */\n readonly providerId?: string;\n readonly sourceId?: string;\n /** Provider generation observed by the caller. */\n readonly generation?: number;\n}\n\nexport interface ToolApi {\n readonly snapshot: () => ToolApiSnapshot;\n readonly list: () => readonly ToolApiRecord[];\n readonly describe: (id: string, sourceId?: string) => readonly ToolApiRecord[];\n readonly registerProvider: (input: ToolApiProviderInput) => ToolApiProviderHandle;\n readonly run: <TResult = unknown>(\n id: string,\n args: unknown,\n options?: ToolApiRunOptions,\n ) => ToolRun<TResult>;\n readonly subscribe: (listener: (snapshot: ToolApiSnapshot) => void) => () => void;\n /** Revoke all providers and wait for their executors to exit. */\n readonly dispose: () => Promise<void>;\n}\n\ninterface ProviderRecord {\n readonly input: ToolApiProviderInput;\n readonly owner: ToolExecutionOwner;\n readonly runtime: ReturnType<typeof createToolRuntime>;\n readonly runs: Set<ToolRun<unknown>>;\n state: ToolApiProviderState;\n fiberState?: string;\n reason?: string;\n}\n\nfunction assertName(value: string, label: string): void {\n if (typeof value !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9._:/-]*$/.test(value)) {\n throw new TypeError(`${label} must be a stable non-empty identity`);\n }\n}\n\nfunction operationPath(descriptor: ToolDescriptor): string {\n return (descriptor.path ?? descriptor.id.split('.')).join(' ');\n}\n\nfunction providerKey(sourceId: string, providerId: string): string {\n return `${sourceId}\\u0000${providerId}`;\n}\n\nfunction apiFailure(\n code: string,\n expected: string,\n hint: string,\n detail: JsonValue,\n): ToolRuntimeError {\n return domainFailureError(code, expected, hint, detail);\n}\n\nfunction failedRun<TResult>(failure: ToolRuntimeError): ToolRun<TResult> {\n const id = `api:${crypto.randomUUID()}`;\n const terminal: Promise<ToolTerminal<TResult>> = Promise.resolve({\n outcome: 'failed',\n failure,\n artifacts: [],\n });\n const events: AsyncIterable<import('./types.js').ToolRunEvent> = {\n async *[Symbol.asyncIterator]() {\n yield { kind: 'started', runId: id, atMs: performance.now() };\n yield { kind: 'terminal', runId: id, outcome: 'failed', atMs: performance.now() };\n },\n };\n return {\n id,\n events,\n terminal,\n executorExited: Promise.resolve(),\n cancel() {},\n disconnect() {},\n providerExit() {},\n };\n}\n\nfunction validateProvider(input: ToolApiProviderInput): void {\n assertName(input.providerId, 'providerId');\n assertName(input.sourceId, 'sourceId');\n if (!['build', 'host', 'engine'].includes(input.realm))\n throw new TypeError(`unsupported Tool API realm ${String(input.realm)}`);\n if (!Array.isArray(input.tools) || input.tools.length === 0)\n throw new TypeError('Tool API providers must publish at least one contribution');\n const ids = new Set<string>();\n const paths = new Set<string>();\n if (\n input.initialState !== undefined &&\n input.initialState !== 'pending' &&\n input.initialState !== 'active'\n )\n throw new TypeError('Tool API provider initialState must be pending or active');\n for (const contribution of input.tools) {\n if (contribution === null || typeof contribution !== 'object')\n throw new TypeError('Tool API contributions must be objects');\n if (typeof contribution.execute !== 'function')\n throw new TypeError(\n `Tool API contribution ${String(contribution.descriptor?.id)} needs an executor`,\n );\n const descriptor = contribution.descriptor;\n if (descriptor.realm !== input.realm)\n throw new TypeError(\n `Tool API ${descriptor.id} declares ${descriptor.realm} but provider is ${input.realm}`,\n );\n if (ids.has(descriptor.id))\n throw new TypeError(`duplicate Tool API operation id ${descriptor.id}`);\n ids.add(descriptor.id);\n const path = operationPath(descriptor);\n if (paths.has(path)) throw new TypeError(`duplicate Tool API command path ${path}`);\n paths.add(path);\n }\n}\n\n/**\n * Create the one effective Tool API capability for a Context/owner.\n *\n * Declarations are retained for inspection, while calls are admitted only\n * through an active provider binding. The command tree and clients may cache\n * the returned projection, but they never own executors or provider state.\n */\nexport function createToolApi(): ToolApi {\n const providers = new Map<string, ProviderRecord>();\n const listeners = new Set<(snapshot: ToolApiSnapshot) => void>();\n let providerGeneration = 0;\n let disposed = false;\n\n const notify = (): void => {\n const value = api.snapshot();\n for (const listener of listeners) {\n try {\n listener(value);\n } catch {\n // Observation must not affect admission or executor cleanup.\n }\n }\n };\n\n const snapshot = (): ToolApiSnapshot => {\n const providerSnapshots: ToolApiProviderSnapshot[] = [];\n const operations: ToolApiRecord[] = [];\n for (const record of providers.values()) {\n providerSnapshots.push({\n owner: record.owner,\n state: record.state,\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n callable: record.state === 'active',\n operationIds: record.input.tools.map(({ descriptor }) => descriptor.id),\n });\n for (const contribution of record.input.tools) {\n operations.push({\n descriptor: contribution.descriptor,\n owner: record.owner,\n providerState: record.state,\n declared: true,\n callable: record.state === 'active',\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n });\n }\n }\n providerSnapshots.sort((left, right) =>\n providerKey(left.owner.sourceId, left.owner.providerId).localeCompare(\n providerKey(right.owner.sourceId, right.owner.providerId),\n ),\n );\n operations.sort((left, right) => {\n const source = left.owner.sourceId.localeCompare(right.owner.sourceId);\n return source !== 0 ? source : left.descriptor.id.localeCompare(right.descriptor.id);\n });\n return { providers: providerSnapshots, operations };\n };\n\n const registerProvider = (input: ToolApiProviderInput): ToolApiProviderHandle => {\n if (disposed) throw new Error('Tool API is disposed');\n validateProvider(input);\n const key = providerKey(input.sourceId, input.providerId);\n if (providers.get(key)?.state === 'active' || providers.get(key)?.state === 'revoking') {\n throw new TypeError(\n `Tool API provider ${input.sourceId}/${input.providerId} is already registered`,\n );\n }\n const operationKeys = new Set<string>();\n for (const contribution of input.tools) {\n const operationKey = `${input.sourceId}\\u0000${contribution.descriptor.id}`;\n const pathKey = `${input.sourceId}\\u0000${operationPath(contribution.descriptor)}`;\n if (operationKeys.has(operationKey) || operationKeys.has(pathKey))\n throw new TypeError(`Tool API contribution conflict for ${contribution.descriptor.id}`);\n operationKeys.add(operationKey);\n operationKeys.add(pathKey);\n for (const record of providers.values()) {\n if (\n !['pending', 'active', 'revoking'].includes(record.state) ||\n record.owner.sourceId !== input.sourceId\n )\n continue;\n if (\n record.input.tools.some(({ descriptor }) => descriptor.id === contribution.descriptor.id)\n ) {\n throw new TypeError(\n `Tool API operation ${contribution.descriptor.id} already exists for source ${input.sourceId}`,\n );\n }\n if (\n record.input.tools.some(\n ({ descriptor }) =>\n operationPath(descriptor) === operationPath(contribution.descriptor),\n )\n ) {\n throw new TypeError(\n `Tool API command path ${operationPath(contribution.descriptor)} already exists for source ${input.sourceId}`,\n );\n }\n }\n }\n const generation = input.generation ?? ++providerGeneration;\n if (!Number.isSafeInteger(generation) || generation <= 0)\n throw new TypeError('Tool API provider generation must be a positive integer');\n providerGeneration = Math.max(providerGeneration, generation);\n const owner: ToolExecutionOwner = {\n providerId: input.providerId,\n sourceId: input.sourceId,\n generation,\n realm: input.realm,\n ...(input.fiberId === undefined ? {} : { fiberId: input.fiberId }),\n ...(input.module === undefined ? {} : { module: input.module }),\n };\n const runtime = createToolRuntime(input.tools);\n const record: ProviderRecord = {\n input: { ...input, tools: [...input.tools] },\n owner,\n runtime,\n runs: new Set(),\n state: input.initialState ?? 'active',\n ...(input.fiberState === undefined ? {} : { fiberState: input.fiberState }),\n };\n providers.set(key, record);\n notify();\n\n const activate = (fiberState = 'active'): void => {\n if (record.state !== 'pending') return;\n record.state = 'active';\n record.fiberState = fiberState;\n notify();\n };\n const fail = (reason = 'provider failed', fiberState = 'failed'): void => {\n if (record.state !== 'pending' && record.state !== 'active') return;\n record.state = 'failed';\n record.reason = reason;\n record.fiberState = fiberState;\n for (const run of record.runs) run.cancel(reason);\n notify();\n };\n const revoke = async (reason = 'provider revoked'): Promise<void> => {\n if (record.state === 'revoked') return;\n if (record.state === 'active' || record.state === 'pending') {\n record.state = 'revoking';\n record.reason = reason;\n record.fiberState = 'unloading';\n notify();\n for (const run of record.runs) run.cancel(reason);\n }\n await Promise.all([...record.runs].map((run) => run.executorExited));\n if (record.state !== 'failed') {\n record.state = 'revoked';\n record.fiberState = 'disposed';\n }\n notify();\n };\n return Object.freeze({\n owner,\n activate,\n fail,\n snapshot: () => ({\n owner,\n state: record.state,\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n callable: record.state === 'active',\n operationIds: record.input.tools.map(({ descriptor }) => descriptor.id),\n }),\n revoke,\n });\n };\n\n const findRecords = (id: string, sourceId?: string): ProviderRecord[] =>\n [...providers.values()].filter(\n (record) =>\n (sourceId === undefined || record.owner.sourceId === sourceId) &&\n record.input.tools.some(({ descriptor }) => descriptor.id === id),\n );\n\n const run = <TResult = unknown>(\n id: string,\n args: unknown,\n options: ToolApiRunOptions = {},\n ): ToolRun<TResult> => {\n if (disposed) {\n return failedRun<TResult>(\n apiFailure(\n 'api-disposed',\n 'the Tool API owner to remain available',\n 'Create a fresh owner and retry the operation.',\n { operation: id },\n ),\n );\n }\n if (options.providerId !== undefined && options.sourceId === undefined) {\n return failedRun<TResult>(\n apiFailure(\n 'api-source-required',\n `operation ${id} to include its explicit sourceId with providerId`,\n 'Refresh Tool API sources and pass both sourceId and providerId from one snapshot.',\n { operation: id, providerId: options.providerId },\n ),\n );\n }\n const matches = findRecords(id, options.sourceId);\n const active = matches.filter((record) => record.state === 'active');\n const selected =\n options.providerId === undefined\n ? active.length === 1\n ? active[0]\n : undefined\n : active.find((record) => record.owner.providerId === options.providerId);\n if (selected === undefined) {\n const code =\n matches.length === 0 || active.length === 0\n ? 'api-operation-unavailable'\n : 'api-provider-route-required';\n return failedRun<TResult>(\n apiFailure(\n code,\n `operation ${id} to have one active, explicitly routable provider`,\n 'Refresh Tool API sources and select the providerId/sourceId returned by discovery.',\n {\n operation: id,\n ...(options.providerId === undefined ? {} : { providerId: options.providerId }),\n providers: matches.map((record) => record.owner.providerId),\n },\n ),\n );\n }\n if (options.generation !== undefined && options.generation !== selected.owner.generation) {\n return failedRun<TResult>(\n apiFailure(\n 'api-stale-generation',\n `provider ${selected.owner.providerId} generation ${options.generation} to match ${selected.owner.generation}`,\n 'Refresh the source snapshot before retrying the operation.',\n {\n operation: id,\n providerId: selected.owner.providerId,\n expectedGeneration: selected.owner.generation,\n actualGeneration: options.generation,\n },\n ),\n );\n }\n const contribution = selected.input.tools.find(({ descriptor }) => descriptor.id === id);\n if (contribution === undefined) {\n return failedRun<TResult>(\n apiFailure(\n 'api-operation-unavailable',\n `operation ${id} to remain published by its provider`,\n 'Refresh Tool API sources before retrying.',\n { operation: id },\n ),\n );\n }\n if (selected.input.authorize?.(options.caller, contribution.descriptor) === false) {\n return failedRun<TResult>(\n apiFailure(\n 'api-unauthorized',\n `caller to be authorized for operation ${id}`,\n 'Use the authenticated Host connection and the capability it was granted.',\n { operation: id, providerId: selected.owner.providerId },\n ),\n );\n }\n const runOptions: ToolRunOptions = {\n ...options,\n owner: selected.owner,\n ...(options.caller === undefined ? {} : { caller: options.caller }),\n };\n const activeRun = selected.runtime.run(contribution, args, runOptions);\n selected.runs.add(activeRun as ToolRun<unknown>);\n void activeRun.executorExited.finally(() =>\n selected.runs.delete(activeRun as ToolRun<unknown>),\n );\n return activeRun as ToolRun<TResult>;\n };\n\n const api: ToolApi = {\n snapshot,\n list: () => snapshot().operations,\n describe: (id, sourceId) =>\n findRecords(id, sourceId).flatMap((record) => {\n const contribution = record.input.tools.find(({ descriptor }) => descriptor.id === id);\n return contribution === undefined\n ? []\n : [\n {\n descriptor: contribution.descriptor,\n owner: record.owner,\n providerState: record.state,\n declared: true as const,\n callable: record.state === 'active',\n ...(record.fiberState === undefined ? {} : { fiberState: record.fiberState }),\n },\n ];\n }),\n registerProvider,\n run,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n async dispose() {\n if (disposed) return;\n disposed = true;\n const pending = [...providers.values()].map((record) => {\n if (record.state === 'active' || record.state === 'pending') {\n record.state = 'revoking';\n record.fiberState = 'unloading';\n for (const run of record.runs) run.cancel('Tool API owner disposed');\n }\n return Promise.all([...record.runs].map((run) => run.executorExited)).then(() => {\n if (record.state !== 'failed') {\n record.state = 'revoked';\n record.fiberState = 'disposed';\n }\n });\n });\n await Promise.all(pending);\n notify();\n listeners.clear();\n },\n };\n return api;\n}\n","import type {\n ToolCapability,\n ToolCapabilityResolver,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nconst capabilityIdPattern = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;\n\n/** A static service identity. The value and its lifecycle remain Fiber-local. */\nexport function defineToolCapability<T>(id: string): ToolCapability<T> {\n if (!capabilityIdPattern.test(id)) {\n throw new TypeError(`Tool capability id must use a stable lower-case path: ${id}`);\n }\n return Object.freeze({ id }) as ToolCapability<T>;\n}\n\nexport function createCapabilityResolver(\n resolve: <T>(capability: ToolCapability<T>) => T | undefined,\n): ToolCapabilityResolver {\n return <T>(capability: ToolCapability<T>) => {\n const value = resolve(capability);\n return value === undefined ? undefined : { ok: true as const, value };\n };\n}\n\nexport interface ServiceAdmissionRef {\n readonly schema: 'forgeax.tool-service-admission-ref.v1';\n readonly reportDigest: string;\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n readonly frameCount: number;\n readonly samples: {\n readonly privateCold: number;\n readonly privateWarm: number;\n readonly serviceCold: number;\n readonly serviceWarm: number;\n };\n readonly correctness: {\n readonly terminalEquivalent: boolean;\n readonly artifactIntegrity: boolean;\n readonly freshReplay: boolean;\n readonly hiddenParity: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n readonly performance: {\n readonly privateMedianMs: number;\n readonly privateP95Ms: number;\n readonly privateMaxMs: number;\n readonly privateRssBytes: number;\n readonly serviceMedianMs: number;\n readonly serviceP95Ms: number;\n readonly serviceMaxMs: number;\n readonly serviceRssBytes: number;\n };\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n}\n\nexport interface ServiceAdmissionExpectation {\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n}\n\nexport type ServiceCapability =\n | { readonly available: true; readonly reportDigest?: string }\n | {\n readonly available: false;\n readonly code: 'tool-service-capability-absent';\n readonly expected: 'an admitted acceleration service';\n readonly hint: 'Use the private executor and rerun benchmark admission before enabling service.';\n readonly detail: { readonly reason: string };\n };\n\nfunction admissionFailure(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): string | undefined {\n if (admission === undefined) return 'no workload-scoped admission report was supplied';\n if (\n admission.schema !== 'forgeax.tool-service-admission-ref.v1' ||\n !/^sha256:[0-9a-f]{64}$/.test(admission.reportDigest)\n ) {\n return 'admission report identity is invalid';\n }\n for (const key of [\n 'toolId',\n 'descriptorDigest',\n 'recipeDigest',\n 'workloadClass',\n 'codeDigest',\n 'browserVersion',\n 'backend',\n ] as const) {\n if (admission[key] !== expected[key]) return `admission ${key} does not match this run`;\n }\n if (admission.frameCount < 300) return 'admission workload ran fewer than 300 frames';\n if (Object.values(admission.samples).some((count) => count < 30)) {\n return 'admission sample set is incomplete';\n }\n if (\n !admission.correctness.terminalEquivalent ||\n !admission.correctness.artifactIntegrity ||\n !admission.correctness.freshReplay ||\n !admission.correctness.hiddenParity ||\n admission.correctness.drawCalls <= 0 ||\n admission.correctness.nonBlackPixels <= 0\n ) {\n return 'admission correctness gate failed';\n }\n const performance = admission.performance;\n if (\n Object.values(performance).some((value) => !Number.isFinite(value) || value <= 0) ||\n performance.serviceMedianMs > performance.privateMedianMs * 0.8 ||\n performance.serviceP95Ms > performance.privateP95Ms * 0.9 ||\n performance.serviceMaxMs > performance.privateMaxMs * 1.1 ||\n performance.serviceRssBytes > performance.privateRssBytes * 1.25\n ) {\n return 'admission performance threshold failed';\n }\n if (!admission.cleanupPassed) return 'admission cleanup gate failed';\n if (!admission.evictionPassed) return 'admission eviction gate failed';\n return undefined;\n}\n\nexport function createServiceCapability(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): ServiceCapability {\n const reason = admissionFailure(admission, expected);\n if (reason === undefined && admission !== undefined) {\n return { available: true, reportDigest: admission.reportDigest };\n }\n return {\n available: false,\n code: 'tool-service-capability-absent',\n expected: 'an admitted acceleration service',\n hint: 'Use the private executor and rerun benchmark admission before enabling service.',\n detail: { reason: reason ?? 'benchmark admission did not pass' },\n };\n}\n\nexport interface RealmCapability {\n readonly realm: ToolRealm;\n readonly supported: boolean;\n readonly reason?: 'realm-capability-unavailable';\n}\n\nexport interface RealmCapabilityMatrix {\n readonly catalogDigest: string;\n readonly realms: Readonly<Record<ToolRealm, RealmCapability>>;\n}\n\nexport interface RealmCapabilityInput {\n readonly catalogDigest: string;\n readonly supported: Readonly<Record<ToolRealm, boolean>>;\n}\n\nexport function createRealmCapabilityMatrix(input: RealmCapabilityInput): RealmCapabilityMatrix {\n const realms = (['build', 'host', 'engine'] as const).reduce(\n (result, realm) => {\n const supported = input.supported[realm];\n result[realm] = supported\n ? { realm, supported: true }\n : { realm, supported: false, reason: 'realm-capability-unavailable' };\n return result;\n },\n {} as Record<ToolRealm, RealmCapability>,\n );\n return { catalogDigest: input.catalogDigest, realms };\n}\n\nexport type RealmBootstrapValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nfunction bootstrapNotCloneSafeError(detail: { readonly message: string }): ToolRuntimeError {\n return {\n code: 'tool-bootstrap-not-clone-safe',\n expected: 'bootstrap input to contain structured-clone-safe data',\n hint: 'Remove live handles, functions, ports, and realm-owned objects from bootstrap input.',\n detail,\n };\n}\n\nexport function validateRealmBootstrapPayload(value: unknown): RealmBootstrapValidation {\n try {\n structuredClone(value);\n return { ok: true };\n } catch (cause) {\n return {\n ok: false,\n error: bootstrapNotCloneSafeError({\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n };\n }\n}\n","export type CarrierPhase = 'offered' | 'leased' | 'started' | 'exited' | 'expired' | 'fallback';\n\nexport type CarrierErrorCode =\n | 'carrier-consumer-mismatch'\n | 'carrier-token-invalid'\n | 'carrier-offer-expired'\n | 'carrier-started'\n | 'carrier-exited'\n | 'carrier-lease-required'\n | 'carrier-payload-live-state'\n | 'carrier-descriptor-mismatch'\n | 'carrier-recipe-mismatch'\n | 'carrier-provider-exit'\n | 'carrier-capture-failed'\n | 'carrier-cleanup-failed';\n\nexport interface CarrierError {\n readonly code: CarrierErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CarrierOffer {\n readonly schemaVersion: '1.0.0';\n readonly projectId: string;\n readonly consumerId: string;\n readonly offerId: string;\n readonly endpoint: string;\n readonly bearerToken: string;\n readonly livenessToken: string;\n readonly expiresAt: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n readonly state: 'offered';\n}\n\nexport interface CarrierLease {\n readonly leaseId: string;\n readonly offerId: string;\n readonly consumerId: string;\n readonly state: 'leased';\n}\n\nexport interface CarrierState {\n readonly state: CarrierPhase;\n readonly leaseId?: string;\n}\n\nexport interface CarrierStateMachine {\n readonly offer: CarrierOffer;\n readonly lease: {\n (request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n (leaseId: string, request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n };\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n readonly fallback: () => CarrierResult<CarrierState>;\n readonly snapshot: () => CarrierState;\n}\n\nexport interface CarrierLeaseRequest {\n readonly consumerId: string;\n readonly bearerToken: string;\n readonly now: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nexport type CarrierResult<T> =\n | { readonly ok: true; readonly value: T; readonly state: CarrierPhase }\n | { readonly ok: false; readonly error: CarrierError };\n\nexport interface CarrierStateMachineOptions {\n readonly projectId: string;\n readonly consumerId: string;\n readonly endpoint: string;\n readonly now: number;\n readonly ttlMs: number;\n readonly payload?: unknown;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nfunction token(): string {\n return crypto.randomUUID().replaceAll('-', '');\n}\n\nfunction carrierError(\n code: CarrierErrorCode,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): CarrierError {\n return { code, expected, hint, detail };\n}\n\nfunction containsLiveKey(value: unknown, seen = new Set<object>()): boolean {\n if (typeof value !== 'object' || value === null) return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.some((entry) => containsLiveKey(entry, seen));\n return Object.entries(value).some(([key, nested]) => {\n if (\n ['world', 'renderer', 'canvas', 'ui', 'profile', 'liveHandle', 'context', 'fiber'].includes(\n key,\n )\n )\n return true;\n return containsLiveKey(nested, seen);\n });\n}\n\nfunction validateOptions(options: CarrierStateMachineOptions): void {\n if (options.projectId.length === 0 || options.consumerId.length === 0) {\n throw new TypeError('carrier projectId and consumerId must not be empty');\n }\n const endpoint = new URL(options.endpoint);\n if (endpoint.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(endpoint.hostname)) {\n throw new TypeError('carrier endpoint must be loopback HTTP');\n }\n if (!Number.isFinite(options.now) || !Number.isFinite(options.ttlMs) || options.ttlMs <= 0) {\n throw new TypeError('carrier clock and ttl must be finite and positive');\n }\n if (containsLiveKey(options.payload)) throw new TypeError('carrier-payload-live-state');\n}\n\nexport function createCarrierStateMachine(\n options: CarrierStateMachineOptions,\n): CarrierStateMachine {\n validateOptions(options);\n const offer: CarrierOffer = {\n schemaVersion: '1.0.0',\n projectId: options.projectId,\n consumerId: options.consumerId,\n offerId: `offer:${token()}`,\n endpoint: options.endpoint,\n bearerToken: token(),\n livenessToken: token(),\n expiresAt: options.now + options.ttlMs,\n ...(options.descriptorDigest === undefined\n ? {}\n : { descriptorDigest: options.descriptorDigest }),\n ...(options.recipeDigest === undefined ? {} : { recipeDigest: options.recipeDigest }),\n state: 'offered',\n };\n let state: CarrierState = { state: 'offered' };\n let lease: CarrierLease | undefined;\n\n const leaseOffer = (\n requestOrId: CarrierLeaseRequest | string,\n maybeRequest?: CarrierLeaseRequest,\n ): CarrierResult<CarrierLease> => {\n const request = typeof requestOrId === 'string' ? maybeRequest : requestOrId;\n const requestedLeaseId = typeof requestOrId === 'string' ? requestOrId : undefined;\n if (request === undefined) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'a complete lease request',\n 'Provide consumer identity, bearer token, and current time.',\n {},\n ),\n };\n }\n if (state.state === 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'a started carrier not to be retried',\n 'Report one terminal failure and clean up the existing started lease.',\n {},\n ),\n };\n }\n if (state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-exited',\n 'an exited carrier not to be retried',\n 'Re-run the operation from a serialized snapshot instead of migrating live state.',\n {},\n ),\n };\n }\n if (request.consumerId !== offer.consumerId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-consumer-mismatch',\n 'the offer consumer identity to match',\n 'Use the consumer identity that was authenticated for this project offer.',\n { expected: offer.consumerId, actual: request.consumerId },\n ),\n };\n }\n if (request.bearerToken !== offer.bearerToken) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the bearer token to match the ephemeral offer',\n 'Request a fresh visible offer; never persist or guess bearer tokens.',\n {},\n ),\n };\n }\n if (\n offer.descriptorDigest !== undefined &&\n request.descriptorDigest !== offer.descriptorDigest\n ) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-descriptor-mismatch',\n 'the descriptor digest to match the authenticated offer',\n 'Refresh the descriptor and request a new visible offer before retrying.',\n { expected: offer.descriptorDigest, actual: request.descriptorDigest },\n ),\n };\n }\n if (offer.recipeDigest !== undefined && request.recipeDigest !== offer.recipeDigest) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-recipe-mismatch',\n 'the recipe digest to match the authenticated offer',\n 'Serialize the current snapshot and request a fresh visible offer before retrying.',\n { expected: offer.recipeDigest, actual: request.recipeDigest },\n ),\n };\n }\n if (request.now >= offer.expiresAt) {\n state = { state: 'expired' };\n return {\n ok: false,\n error: carrierError(\n 'carrier-offer-expired',\n 'the offer to be within its expiry window',\n 'Fall back to the ordinary visible carrier before retrying.',\n { expiresAt: offer.expiresAt, now: request.now },\n ),\n };\n }\n if (requestedLeaseId !== undefined && requestedLeaseId !== lease?.leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the lease id to match the authenticated offer',\n 'Use the lease id returned by the first successful lease.',\n {},\n ),\n };\n }\n lease = {\n leaseId: `lease:${token()}`,\n offerId: offer.offerId,\n consumerId: request.consumerId,\n state: 'leased',\n };\n state = { state: 'leased', leaseId: lease.leaseId };\n return { ok: true, value: lease, state: 'leased' };\n };\n\n const started = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a valid lease before started',\n 'Lease the authenticated offer before reporting provider started.',\n {},\n ),\n };\n }\n state = { state: 'started', leaseId };\n return { ok: true, value: state, state: 'started' };\n };\n\n const exit = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId || state.state !== 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a started lease before provider exit',\n 'Provider exit is terminal only after started has been acknowledged.',\n {},\n ),\n };\n }\n state = { state: 'exited', leaseId };\n return { ok: true, value: state, state: 'exited' };\n };\n\n const fallback = (): CarrierResult<CarrierState> => {\n if (state.state === 'started' || state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'fallback to happen before provider started',\n 'Do not retry or migrate a carrier after started; return its terminal failure.',\n { state: state.state },\n ),\n };\n }\n state = { state: 'fallback' };\n return { ok: true, value: state, state: 'fallback' };\n };\n\n return {\n offer,\n lease: leaseOffer,\n started,\n exit,\n fallback,\n snapshot: () => state,\n };\n}\n","import { createToolRuntime } from './runtime.js';\nimport type {\n JsonValue,\n ToolContribution,\n ToolDescriptor,\n ToolExecutor,\n ToolRun,\n ToolRunOptions,\n} from './types.js';\n\nexport type ToolCommandPath = readonly string[];\n\nexport interface ToolCommandDescriptor<TArgs = unknown, TResult = unknown>\n extends ToolDescriptor<TArgs, TResult> {\n readonly path: ToolCommandPath;\n}\n\nexport interface ToolCommandNode {\n readonly name: string;\n readonly path: string;\n readonly summary: string;\n readonly children?: readonly ToolCommandNode[];\n readonly leaf?: {\n readonly title: string;\n readonly realm: ToolDescriptor['realm'];\n readonly inputSchema?: JsonValue;\n readonly outputSchema?: JsonValue;\n readonly inputDescription?: string;\n readonly outputDescription?: string;\n readonly capabilities: readonly string[];\n readonly errors: readonly string[];\n readonly example?: JsonValue;\n };\n}\n\nexport interface ToolCommandHelp {\n readonly path: string;\n readonly summary?: string;\n readonly nodes: readonly ToolCommandNode[];\n readonly leaf?: ToolCommandNode['leaf'];\n}\n\nexport type ToolCommandErrorCode =\n | 'tool-command-invalid-path'\n | 'tool-command-conflict'\n | 'tool-command-not-found';\n\nexport class ToolCommandError extends Error {\n readonly code: ToolCommandErrorCode;\n readonly path: string;\n readonly detail: Readonly<Record<string, unknown>>;\n\n constructor(\n code: ToolCommandErrorCode,\n path: string,\n message: string,\n detail: Readonly<Record<string, unknown>> = {},\n ) {\n super(`${code}: ${message}`);\n this.name = 'ToolCommandError';\n this.code = code;\n this.path = path;\n this.detail = detail;\n }\n}\n\nexport interface ToolCommandRegistry {\n readonly contributions: readonly ToolContribution[];\n readonly list: (path?: ToolCommandPath) => readonly ToolCommandNode[];\n readonly tree: (path?: ToolCommandPath | string) => readonly ToolCommandNode[];\n readonly describe: (path: ToolCommandPath | string) => ToolCommandDescriptor | undefined;\n readonly help: (path?: ToolCommandPath | string, tree?: boolean) => ToolCommandHelp;\n readonly get: (path: ToolCommandPath | string) => ToolContribution | undefined;\n readonly run: <TResult = unknown>(\n path: ToolCommandPath | string,\n args: unknown,\n options?: ToolRunOptions,\n ) => ToolRun<TResult> | undefined;\n}\n\nfunction normalizePath(path: ToolCommandPath | string): string[] {\n const segments = typeof path === 'string' ? path.split(/\\s+/).filter(Boolean) : [...path];\n if (\n (segments.length === 0 && typeof path === 'string') ||\n segments.some((segment) => !/^[a-z][a-z0-9-]*$/.test(segment))\n ) {\n throw new ToolCommandError(\n 'tool-command-invalid-path',\n typeof path === 'string' ? path : segments.join(' '),\n 'command paths must contain lower-case name segments',\n );\n }\n return segments;\n}\n\nfunction descriptorPath(descriptor: ToolDescriptor): string[] {\n const path = normalizePath(descriptor.path ?? descriptor.id.split('.'));\n if (path.length === 0) {\n throw new ToolCommandError(\n 'tool-command-invalid-path',\n '',\n 'command declarations must contain at least one name segment',\n );\n }\n return path;\n}\n\nfunction pathKey(path: ToolCommandPath): string {\n return path.join(' ');\n}\n\nfunction schemaValue(describe: string | undefined): JsonValue | undefined {\n if (describe === undefined) return undefined;\n try {\n const value = JSON.parse(describe) as unknown;\n return value !== null && typeof value === 'object' ? (value as JsonValue) : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction nodeForDescriptor(\n descriptor: ToolDescriptor,\n path: ToolCommandPath,\n includeLeaf = true,\n): ToolCommandNode {\n const inputSchema = descriptor.inputSchema ?? schemaValue(descriptor.argsSchema.describe);\n const outputSchema = descriptor.outputSchema ?? schemaValue(descriptor.resultSchema.describe);\n const node: ToolCommandNode = {\n name: path[path.length - 1] as string,\n path: pathKey(path),\n summary: descriptor.summary,\n };\n if (includeLeaf) {\n return {\n ...node,\n leaf: {\n title: descriptor.title,\n realm: descriptor.realm,\n ...(inputSchema === undefined\n ? descriptor.argsSchema.describe === undefined\n ? {}\n : { inputDescription: descriptor.argsSchema.describe }\n : { inputSchema }),\n ...(outputSchema === undefined\n ? descriptor.resultSchema.describe === undefined\n ? {}\n : { outputDescription: descriptor.resultSchema.describe }\n : { outputSchema }),\n capabilities: [...(descriptor.capabilities ?? [])],\n errors: [...(descriptor.errors ?? [])],\n ...(descriptor.example === undefined ? {} : { example: descriptor.example }),\n },\n };\n }\n return node;\n}\n\ninterface Registered {\n readonly path: readonly string[];\n readonly contribution: ToolContribution;\n}\n\nfunction compareRegistered(left: Registered, right: Registered): number {\n return pathKey(left.path).localeCompare(pathKey(right.path));\n}\n\nfunction hasPrefix(left: ToolCommandPath, right: ToolCommandPath): boolean {\n return left.length < right.length && left.every((segment, index) => segment === right[index]);\n}\n\nfunction findNode(\n registered: readonly Registered[],\n path: ToolCommandPath,\n): Registered | undefined {\n return registered.find(\n (candidate) =>\n candidate.path.length === path.length &&\n candidate.path.every((segment, index) => segment === path[index]),\n );\n}\n\nfunction descendants(registered: readonly Registered[], path: ToolCommandPath): Registered[] {\n return registered.filter((candidate) => hasPrefix(path, candidate.path));\n}\n\nfunction projectNodes(\n registered: readonly Registered[],\n path: ToolCommandPath,\n recursive: boolean,\n): ToolCommandNode[] {\n const children = new Map<string, Registered | undefined>();\n for (const candidate of registered) {\n if (\n candidate.path.length <= path.length ||\n !path.every((segment, index) => candidate.path[index] === segment)\n )\n continue;\n const next = candidate.path[path.length] as string;\n const existing = children.get(next);\n if (\n existing === undefined ||\n candidate.path.length < (existing?.path.length ?? Number.MAX_SAFE_INTEGER)\n )\n children.set(next, candidate.path.length === path.length + 1 ? candidate : undefined);\n }\n return [...children.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([name, exact]) => {\n const childPath = [...path, name];\n if (exact !== undefined)\n return nodeForDescriptor(exact.contribution.descriptor, childPath, false);\n const node: ToolCommandNode = {\n name,\n path: pathKey(childPath),\n summary: descendants(registered, childPath)[0]?.contribution.descriptor.summary ?? '',\n };\n if (recursive) return { ...node, children: projectNodes(registered, childPath, true) };\n return node;\n });\n}\n\nexport function commandPath(descriptor: ToolDescriptor): ToolCommandPath {\n return descriptorPath(descriptor);\n}\n\nexport function defineCommand<TArgs, TResult>(\n descriptor: Omit<ToolCommandDescriptor<TArgs, TResult>, 'id'> & { readonly id?: string },\n execute: ToolExecutor<TArgs, TResult>,\n): ToolContribution<TArgs, TResult> {\n const path = descriptorPath(descriptor as ToolDescriptor);\n return {\n descriptor: {\n ...descriptor,\n id: descriptor.id ?? path.join('.'),\n path,\n },\n execute,\n } as ToolContribution<TArgs, TResult>;\n}\n\nexport function createToolCommandRegistry(\n contributions: readonly ToolContribution[],\n): ToolCommandRegistry {\n const registered: Registered[] = [];\n const byPath = new Map<string, ToolContribution>();\n for (const contribution of contributions) {\n const path = descriptorPath(contribution.descriptor);\n const key = pathKey(path);\n if (\n byPath.has(key) ||\n registered.some(\n (candidate) => hasPrefix(candidate.path, path) || hasPrefix(path, candidate.path),\n )\n ) {\n throw new ToolCommandError(\n 'tool-command-conflict',\n key,\n 'command paths cannot collide with a leaf or its descendants',\n { path: key },\n );\n }\n byPath.set(key, contribution);\n registered.push({ path, contribution });\n }\n registered.sort(compareRegistered);\n const runtime = createToolRuntime(registered.map((entry) => entry.contribution));\n const find = (pathInput: ToolCommandPath | string): Registered | undefined => {\n const path = normalizePath(pathInput);\n return findNode(registered, path);\n };\n const help = (pathInput?: ToolCommandPath | string, recursive = false): ToolCommandHelp => {\n const path = pathInput === undefined ? [] : normalizePath(pathInput);\n const exact = path.length === 0 ? undefined : findNode(registered, path);\n const descendant = path.length === 0 ? registered : descendants(registered, path);\n if (path.length > 0 && exact === undefined && descendant.length === 0) {\n let parent = path.slice(0, -1);\n while (parent.length > 0 && descendants(registered, parent).length === 0)\n parent = parent.slice(0, -1);\n throw new ToolCommandError(\n 'tool-command-not-found',\n pathKey(path),\n 'command path was not found',\n {\n parent: pathKey(parent),\n candidates: projectNodes(registered, parent, false).map((node) => node.name),\n },\n );\n }\n const leaf =\n exact === undefined ? undefined : nodeForDescriptor(exact.contribution.descriptor, path).leaf;\n const summary = exact?.contribution.descriptor.summary;\n return {\n path: pathKey(path),\n ...(summary === undefined ? {} : { summary }),\n nodes: projectNodes(registered, path, recursive || exact !== undefined),\n ...(leaf === undefined ? {} : { leaf }),\n };\n };\n return {\n contributions: registered.map((entry) => entry.contribution),\n list: (path = []) => projectNodes(registered, path, false),\n tree: (path: ToolCommandPath | string = []) =>\n projectNodes(registered, normalizePath(path), true),\n describe: (pathInput) =>\n find(pathInput)?.contribution.descriptor as ToolCommandDescriptor | undefined,\n help,\n get: (pathInput) => find(pathInput)?.contribution,\n run: <TResult = unknown>(\n pathInput: ToolCommandPath | string,\n args: unknown,\n options?: ToolRunOptions,\n ): ToolRun<TResult> | undefined => {\n const contribution = find(pathInput)?.contribution;\n if (contribution === undefined) return undefined;\n return runtime.run(contribution, args, options) as ToolRun<TResult>;\n },\n };\n}\n","import type { JsonValue, ToolSchema, ToolSchemaResult } from './types.js';\n\n/** The small JSON Schema vocabulary shared by command contracts. */\nexport interface ToolJsonSchema {\n readonly type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n readonly properties?: Readonly<Record<string, ToolJsonSchema>>;\n readonly required?: readonly string[];\n readonly additionalProperties?: boolean;\n readonly items?: ToolJsonSchema;\n readonly enum?: readonly JsonValue[];\n readonly const?: JsonValue;\n readonly minLength?: number;\n readonly minItems?: number;\n readonly minimum?: number;\n readonly maximum?: number;\n readonly description?: string;\n}\n\nexport interface ToolSchemaFailure {\n readonly path: string;\n readonly message: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction typeMatches(type: ToolJsonSchema['type'], value: unknown): boolean {\n switch (type) {\n case undefined:\n return true;\n case 'null':\n return value === null;\n case 'array':\n return Array.isArray(value);\n case 'object':\n return isRecord(value);\n case 'string':\n return typeof value === 'string';\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n case 'integer':\n return typeof value === 'number' && Number.isSafeInteger(value);\n case 'boolean':\n return typeof value === 'boolean';\n }\n}\n\nfunction validate(\n value: unknown,\n schema: ToolJsonSchema,\n path: string,\n): ToolSchemaFailure | undefined {\n if (!typeMatches(schema.type, value))\n return { path, message: `expected ${schema.type ?? 'a value'}` };\n if (schema.enum !== undefined && !schema.enum.some((candidate) => sameJson(candidate, value))) {\n return { path, message: 'expected one of the declared enum values' };\n }\n if (schema.const !== undefined && !sameJson(schema.const, value)) {\n return { path, message: 'expected the declared constant value' };\n }\n if (\n typeof value === 'string' &&\n schema.minLength !== undefined &&\n value.length < schema.minLength\n ) {\n return { path, message: `must contain at least ${schema.minLength} characters` };\n }\n if (typeof value === 'number') {\n if (schema.minimum !== undefined && value < schema.minimum)\n return { path, message: `must be at least ${schema.minimum}` };\n if (schema.maximum !== undefined && value > schema.maximum)\n return { path, message: `must be at most ${schema.maximum}` };\n }\n if (Array.isArray(value)) {\n if (schema.minItems !== undefined && value.length < schema.minItems)\n return { path, message: `must contain at least ${schema.minItems} items` };\n if (schema.items !== undefined) {\n for (let index = 0; index < value.length; index += 1) {\n const failure = validate(value[index], schema.items, `${path}[${index}]`);\n if (failure !== undefined) return failure;\n }\n }\n }\n if (isRecord(value)) {\n const properties = schema.properties ?? {};\n for (const key of schema.required ?? []) {\n if (!(key in value)) return { path: `${path}.${key}`, message: 'is required' };\n }\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(value)) {\n if (!(key in properties)) return { path: `${path}.${key}`, message: 'is not declared' };\n }\n }\n for (const [key, child] of Object.entries(properties)) {\n if (!(key in value)) continue;\n const failure = validate(value[key], child, `${path}.${key}`);\n if (failure !== undefined) return failure;\n }\n }\n return undefined;\n}\n\nexport function parseToolJsonSchema<T = unknown>(\n value: unknown,\n schema: ToolJsonSchema,\n): ToolSchemaResult<T> {\n const failure = validate(value, schema, '$');\n return failure === undefined\n ? { ok: true, value: value as T }\n : { ok: false, error: `${failure.path}: ${failure.message}` };\n}\n\nexport function toolJsonSchema<T = unknown>(schema: ToolJsonSchema): ToolSchema<T> {\n return {\n parse: (value) => parseToolJsonSchema<T>(value, schema),\n describe: JSON.stringify(schema),\n };\n}\n","import { isSerializableValue } from './artifacts.js';\nimport { capabilityUnavailableError } from './errors.js';\nimport type {\n ArtifactRef,\n JsonValue,\n SnapshotRef,\n ToolEvidenceKind,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nexport type MigrationOperation =\n | 'project.build'\n | 'author.plugin-install'\n | 'preview.run'\n | 'project.preview'\n | 'material.preview'\n | 'mesh.preview'\n | 'vfx.preview'\n | 'texture.preview';\n\nexport interface MigrationCapabilityProbe {\n readonly realm: ToolRealm;\n readonly catalogDigest: string;\n readonly rhiBackend: 'webgpu' | 'null' | 'unknown';\n readonly evidence: readonly ToolEvidenceKind[];\n readonly carrier: boolean;\n readonly service: boolean;\n}\n\nexport interface CapabilityToken {\n readonly kind: 'forgeax-tool-capability';\n readonly version: '1.0.0';\n readonly operation: MigrationOperation;\n readonly source: MigrationCapabilityProbe;\n readonly target: MigrationCapabilityProbe;\n}\n\nexport interface MigrationRecipe {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts: readonly ArtifactRef[];\n}\n\nexport type MigrationPayloadValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nconst liveStateKeys = new Set([\n 'world',\n 'renderer',\n 'canvas',\n 'context',\n 'fiber',\n 'page',\n 'carrier',\n 'ui',\n 'selection',\n 'draft',\n 'undo',\n 'session',\n]);\n\nfunction liveStateError(path: string, key: string): ToolRuntimeError {\n return {\n code: 'tool-migration-live-state',\n expected: 'migration payload to contain only recipe, snapshot, and artifact references',\n hint: 'Recreate the operation from serializable authority facts; do not migrate live state.',\n detail: { path, key },\n };\n}\n\nexport function createCapabilityToken(\n operation: MigrationOperation,\n source: MigrationCapabilityProbe,\n version: '1.0.0',\n target: MigrationCapabilityProbe,\n): CapabilityToken {\n if (source.catalogDigest.length === 0 || target.catalogDigest.length === 0)\n throw new TypeError('capability probe catalogDigest must not be empty');\n return {\n kind: 'forgeax-tool-capability',\n version,\n operation,\n source: { ...source, evidence: [...source.evidence] },\n target: { ...target, evidence: [...target.evidence] },\n };\n}\n\nexport function probeMigrationTarget(\n token: CapabilityToken,\n target: MigrationCapabilityProbe,\n):\n | { readonly ok: true; readonly value: MigrationCapabilityProbe }\n | {\n readonly ok: false;\n readonly error: ToolRuntimeError;\n } {\n const sameEvidence = token.target.evidence.every((kind) => target.evidence.includes(kind));\n const matches =\n token.target.realm === target.realm &&\n token.target.catalogDigest === target.catalogDigest &&\n token.target.rhiBackend === target.rhiBackend &&\n sameEvidence;\n if (!matches) {\n return {\n ok: false,\n error: capabilityUnavailableError(`migration:${token.operation}`, target.realm),\n };\n }\n return { ok: true, value: { ...target, evidence: [...target.evidence] } };\n}\n\nexport function createMigrationRecipe(input: {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts?: readonly ArtifactRef[];\n}): MigrationRecipe {\n const recipe: MigrationRecipe = {\n operation: input.operation,\n args: input.args,\n ...(input.snapshot === undefined ? {} : { snapshot: { ...input.snapshot } }),\n artifacts: (input.artifacts ?? []).map((artifact) => ({ ...artifact })),\n };\n const validation = validateMigrationPayload(recipe);\n if (!validation.ok) {\n const path =\n validation.error.code === 'tool-migration-live-state' ? validation.error.detail.path : '$';\n throw new TypeError(path);\n }\n return recipe;\n}\n\nexport function validateMigrationPayload(value: unknown): MigrationPayloadValidation {\n const visit = (candidate: unknown, path: string): MigrationPayloadValidation => {\n if (!isSerializableValue(candidate)) {\n return { ok: false, error: liveStateError(path, path.split('.').at(-1) ?? '<root>') };\n }\n if (candidate === null || typeof candidate !== 'object') return { ok: true };\n if (Array.isArray(candidate)) {\n for (const [index, child] of candidate.entries()) {\n const result = visit(child, `${path}[${index}]`);\n if (!result.ok) return result;\n }\n return { ok: true };\n }\n for (const [key, child] of Object.entries(candidate)) {\n const normalized = key.replaceAll('_', '').replaceAll('-', '').toLowerCase();\n if (liveStateKeys.has(normalized)) return { ok: false, error: liveStateError(path, key) };\n const result = visit(child, `${path}.${key}`);\n if (!result.ok) return result;\n }\n return { ok: true };\n };\n return visit(value, '$');\n}\n","import type { SnapshotRef, ToolTerminal } from './types.js';\n\nexport function terminalSnapshot<TResult>(\n terminal: ToolTerminal<TResult>,\n): SnapshotRef | undefined {\n return terminal.snapshotAfter;\n}\n\nexport function isSnapshotRef(value: unknown): value is SnapshotRef {\n return (\n typeof value === 'object' &&\n value !== null &&\n Number.isSafeInteger(Reflect.get(value, 'revision')) &&\n Reflect.get(value, 'revision') >= 0 &&\n typeof Reflect.get(value, 'digest') === 'string' &&\n Reflect.get(value, 'digest').length > 0\n );\n}\n","import { validateRealmBootstrapPayload } from './capability.js';\nimport type {\n CarrierLease,\n CarrierLeaseRequest,\n CarrierPhase,\n CarrierResult,\n CarrierState,\n} from './carrier.js';\nimport type { JsonValue, ToolTerminal } from './types.js';\n\nexport interface CarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly send: (payload: unknown) => boolean;\n readonly close: () => void;\n}\n\nexport interface CarrierExecutionRequest {\n readonly leaseId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: unknown;\n}\n\nexport interface AuthenticatedCarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly lease: (request: CarrierLeaseRequest) => Promise<CarrierResult<CarrierLease>>;\n readonly started: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly execute: (request: CarrierExecutionRequest) => Promise<{\n readonly ok: true;\n readonly value: ToolTerminal<unknown>;\n readonly state: CarrierPhase;\n }>;\n readonly exit: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedCarrierTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport class CarrierTransportError extends Error {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n\n constructor(error: {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n }) {\n super(error.code);\n this.name = 'CarrierTransportError';\n this.code = error.code;\n if (error.expected !== undefined) this.expected = error.expected;\n if (error.hint !== undefined) this.hint = error.hint;\n if (error.detail !== undefined) this.detail = error.detail;\n }\n}\n\nexport function createAuthenticatedCarrierTransport(\n options: AuthenticatedCarrierTransportOptions,\n): AuthenticatedCarrierTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname))\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n if (options.bearerToken.length < 8) throw new TypeError('carrier bearer token is too short');\n let connected = true;\n async function request<T>(path: string, payload: unknown): Promise<T> {\n if (!connected)\n throw new CarrierTransportError({\n code: 'carrier-exited',\n expected: 'a connected carrier transport',\n hint: 'Request a fresh visible offer after provider exit.',\n });\n let response: Response;\n try {\n response = await fetch(`${options.endpoint}${path}`, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${options.bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n } catch (cause) {\n throw new CarrierTransportError({\n code: 'carrier-provider-exit',\n expected: 'the carrier provider to remain reachable',\n hint: 'Offer a fresh carrier; do not fallback after started.',\n detail: { cause: cause instanceof Error ? cause.message : String(cause) },\n });\n }\n const value: unknown = await response.json().catch(() => ({}));\n if (\n !response.ok ||\n typeof value !== 'object' ||\n value === null ||\n !('ok' in value) ||\n value.ok !== true\n ) {\n const error =\n typeof value === 'object' &&\n value !== null &&\n 'error' in value &&\n typeof value.error === 'object' &&\n value.error !== null\n ? (value.error as Record<string, unknown>)\n : {\n code: 'carrier-provider-exit',\n expected: 'a successful carrier response',\n hint: 'Offer a fresh carrier and retry from a serialized snapshot.',\n };\n const normalized = {\n code: typeof error.code === 'string' ? error.code : 'carrier-provider-exit',\n ...(typeof error.expected === 'string' ? { expected: error.expected } : {}),\n ...(typeof error.hint === 'string' ? { hint: error.hint } : {}),\n ...(typeof error.detail === 'object' && error.detail !== null\n ? { detail: error.detail as Readonly<Record<string, unknown>> }\n : {}),\n };\n throw new CarrierTransportError(normalized);\n }\n return value as T;\n }\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n lease: (payload) => request('/lease', payload),\n started: (payload) => request('/start', payload),\n execute: (payload) => request('/execute', payload),\n exit: (payload) => request('/exit', payload),\n close() {\n connected = false;\n },\n };\n}\n\n/** Minimal loopback transport seam; it carries POD only and owns no operation state. */\nexport function createLoopbackTransport(endpoint: string): CarrierTransport {\n const url = new URL(endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n }\n let connected = true;\n return {\n endpoint,\n get connected() {\n return connected;\n },\n send(payload) {\n if (!connected || !validateRealmBootstrapPayload(payload).ok) return false;\n return true;\n },\n close() {\n connected = false;\n },\n };\n}\n\nexport interface ServiceWireRequest {\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: JsonValue;\n}\n\nexport type ServiceWireHandler = (\n request: ServiceWireRequest,\n) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;\n\nexport interface AuthenticatedLoopbackTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly request: (\n request: ServiceWireRequest,\n bearerToken: string,\n options?: { readonly signal?: AbortSignal },\n ) => Promise<ToolTerminal<unknown>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedLoopbackTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport function createAuthenticatedLoopbackTransport(\n options: AuthenticatedLoopbackTransportOptions,\n): AuthenticatedLoopbackTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('service transport endpoint must be loopback HTTP');\n }\n if (options.bearerToken.length < 8) throw new TypeError('service bearer token is too short');\n let connected = true;\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n async request(request, bearerToken, requestOptions = {}) {\n if (!connected) throw new Error('service transport is disconnected');\n if (bearerToken !== options.bearerToken) throw new Error('service bearer token rejected');\n if (!validateRealmBootstrapPayload(request).ok) {\n throw new Error('service request is not structured-clone safe');\n }\n const response = await fetch(options.endpoint, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(request),\n ...(requestOptions.signal === undefined ? {} : { signal: requestOptions.signal }),\n });\n const payload: unknown = await response.json();\n if (!response.ok) {\n const detail =\n typeof payload === 'object' && payload !== null && 'error' in payload\n ? String(payload.error)\n : `HTTP ${response.status}`;\n throw new Error(`service request failed: ${detail}`);\n }\n return payload as ToolTerminal<unknown>;\n },\n close() {\n connected = false;\n },\n };\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -151,6 +151,8 @@ export type ToolExecutorValue<TResult> = TResult | ToolTerminal<TResult> | {
|
|
|
151
151
|
} | {
|
|
152
152
|
readonly ok: false;
|
|
153
153
|
readonly error: ToolDomainFailure;
|
|
154
|
+
/** Evidence produced before a domain failure remains inspectable. */
|
|
155
|
+
readonly artifacts?: readonly ArtifactRef[];
|
|
154
156
|
};
|
|
155
157
|
export type ToolExecutorResult<TResult> = ToolExecutorValue<TResult> | Promise<ToolExecutorValue<TResult>>;
|
|
156
158
|
export interface ToolContribution<TArgs = unknown, TResult = unknown> {
|