@forgeax/engine-plugin 0.1.27 → 0.1.28

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/browser.d.ts CHANGED
@@ -11,5 +11,6 @@ export * from '@deepseek-ai/cordis';
11
11
  export { createContextCapabilityResolver } from './capability.js';
12
12
  export { definePluginGroup, PluginCompositionError, type PluginCompositionErrorArgs, type PluginCompositionErrorCode, type PluginCompositionErrorDetailByCode, type PluginGroupOptions, type PluginUse, type PluginUseOptions, usePlugin, } from './composition.js';
13
13
  export { type CatalogPluginFiberState, type CatalogPluginInspection, type CatalogPluginInspectionEntry, type CatalogPluginInspectionFailure, inspectCatalogPlugins, } from './inspection.js';
14
+ export { defineToolCommandContract, isToolCommandContract, type ToolCommandContract, type ToolCommandDeclaration, } from './tool-contract.js';
14
15
  export { defineToolPlugin, isToolPlugin, type ToolPlugin, } from './tool-plugin.js';
15
16
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
package/dist/browser.mjs CHANGED
@@ -553,6 +553,16 @@ function inspectCatalogPlugins(loader) {
553
553
  return { live: [...loader.entries()].map((entry) => projectLiveEntry(loader, entry)) };
554
554
  }
555
555
 
556
+ // src/tool-contract.ts
557
+ function defineToolCommandContract(commands) {
558
+ return { schemaVersion: "1.0.0", commands: [...commands] };
559
+ }
560
+ function isToolCommandContract(value) {
561
+ if (value === null || typeof value !== "object") return false;
562
+ const candidate = value;
563
+ return candidate.schemaVersion === "1.0.0" && Array.isArray(candidate.commands);
564
+ }
565
+
556
566
  // src/tool-plugin.ts
557
567
  function defineToolPlugin(plugin, tools) {
558
568
  return { plugin, tools: [...tools] };
@@ -563,6 +573,6 @@ function isToolPlugin(value) {
563
573
  return candidate.plugin !== void 0 && Array.isArray(candidate.tools);
564
574
  }
565
575
 
566
- export { PluginCompositionError, createContextCapabilityResolver, definePluginGroup, defineToolPlugin, inspectCatalogPlugins, isToolPlugin, usePlugin };
576
+ export { PluginCompositionError, createContextCapabilityResolver, definePluginGroup, defineToolCommandContract, defineToolPlugin, inspectCatalogPlugins, isToolCommandContract, isToolPlugin, usePlugin };
567
577
  //# sourceMappingURL=browser.mjs.map
568
578
  //# sourceMappingURL=browser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/capability.ts","../src/composition.ts","../src/inspection.ts","../src/tool-plugin.ts"],"names":[],"mappings":"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","file":"browser.mjs","sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\nimport {\n createCapabilityResolver,\n type ToolCapabilityResolver,\n} from '@forgeax/engine-tool-runtime';\n\n/** Bridge one active Cordis realm into the realm-neutral ToolRuntime seam. */\nexport function createContextCapabilityResolver(ctx: Context): ToolCapabilityResolver {\n return createCapabilityResolver((capability) => Reflect.get(ctx, capability.id));\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\n\nexport type PluginCompositionErrorCode =\n | 'plugin-config-invalid'\n | 'plugin-group-child-failed'\n | 'plugin-group-dependency-cycle'\n | 'plugin-group-key-duplicate'\n | 'plugin-group-key-required'\n | 'plugin-group-provider-missing';\n\nexport interface PluginConfigInvalidDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupChildFailedDetail {\n readonly child: string;\n}\n\nexport interface PluginGroupDependencyCycleDetail {\n readonly path: readonly string[];\n}\n\nexport interface PluginGroupKeyDuplicateDetail {\n readonly key: string;\n}\n\nexport interface PluginGroupKeyRequiredDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupProviderMissingDetail {\n readonly service: string;\n}\n\nexport type PluginCompositionErrorDetailByCode = {\n 'plugin-config-invalid': PluginConfigInvalidDetail;\n 'plugin-group-child-failed': PluginGroupChildFailedDetail;\n 'plugin-group-dependency-cycle': PluginGroupDependencyCycleDetail;\n 'plugin-group-key-duplicate': PluginGroupKeyDuplicateDetail;\n 'plugin-group-key-required': PluginGroupKeyRequiredDetail;\n 'plugin-group-provider-missing': PluginGroupProviderMissingDetail;\n};\n\nexport type PluginCompositionErrorArgs<\n C extends PluginCompositionErrorCode = PluginCompositionErrorCode,\n> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n};\n\nclass PluginCompositionErrorClass extends Error {\n readonly code: PluginCompositionErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[PluginCompositionErrorCode];\n\n constructor(args: PluginCompositionErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'PluginCompositionError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype PluginCompositionErrorVariant<C extends PluginCompositionErrorCode> =\n PluginCompositionErrorClass & {\n readonly code: C;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n };\n\nexport type PluginCompositionError = {\n [C in PluginCompositionErrorCode]: PluginCompositionErrorVariant<C>;\n}[PluginCompositionErrorCode];\n\ninterface PluginCompositionErrorConstructor {\n new <C extends PluginCompositionErrorCode>(\n args: PluginCompositionErrorArgs<C>,\n ): PluginCompositionErrorVariant<C>;\n readonly prototype: PluginCompositionError;\n}\n\nexport const PluginCompositionError: PluginCompositionErrorConstructor =\n PluginCompositionErrorClass as unknown as PluginCompositionErrorConstructor;\n\nexport interface PluginUseOptions {\n readonly key?: string;\n}\n\ntype PluginConfig<P> = P extends (ctx: Context, config: infer C) => unknown\n ? C\n : P extends new (\n ctx: Context,\n config: infer C,\n ) => unknown\n ? C\n : P extends { apply(ctx: Context, config: infer C): unknown }\n ? C\n : unknown;\n\ntype ConfigArgs<P> =\n undefined extends PluginConfig<P> ? [config?: PluginConfig<P>] : [config: PluginConfig<P>];\n\nexport interface PluginUse<P extends Plugin = Plugin> {\n readonly plugin: P;\n readonly config: PluginConfig<P>;\n readonly key?: string;\n}\n\nexport function usePlugin<P extends Plugin>(\n plugin: P,\n ...args: [...ConfigArgs<P>, options?: PluginUseOptions]\n): PluginUse<P> {\n const config = args[0] as PluginConfig<P>;\n const options = args[1] as PluginUseOptions | undefined;\n return {\n plugin,\n config,\n ...(options?.key === undefined ? {} : { key: options.key }),\n };\n}\n\nexport interface PluginGroupOptions<C = unknown> {\n readonly name: string;\n readonly children: (config: C) => readonly PluginUse[];\n}\n\ninterface ChildRecord {\n readonly key: string | object;\n readonly plugin: Plugin;\n config: unknown;\n fiber: Fiber;\n}\n\ninterface GroupState {\n readonly records: Map<string | object, ChildRecord>;\n}\n\nclass ChildOperationFailure extends Error {\n constructor(\n readonly child: PluginUse,\n readonly reason: unknown,\n readonly cleanupFailures: readonly unknown[] = [],\n ) {\n super(`child operation failed: ${pluginName(child.plugin)}`);\n }\n}\n\nconst groupStateKey = Symbol('forgeax.plugin.group.state');\n\nfunction pluginName(plugin: Plugin): string {\n return plugin.name ?? 'anonymous';\n}\n\nfunction dependencyNames(plugin: Plugin): readonly string[] {\n const inject = plugin.inject;\n if (inject === undefined) return [];\n return Array.isArray(inject) ? inject : Object.keys(inject);\n}\n\nfunction providedNames(plugin: Plugin): readonly string[] {\n const provide = plugin.provide;\n if (provide === undefined) return [];\n return Array.isArray(provide) ? provide : [provide];\n}\n\nfunction keyFor(child: PluginUse): string | object {\n if (child.key !== undefined) return child.key;\n return child.plugin;\n}\n\nfunction validateKeys(children: readonly PluginUse[]): void {\n const keys = new Map<string | object, PluginUse>();\n for (const child of children) {\n const key = keyFor(child);\n const previous = keys.get(key);\n if (previous !== undefined) {\n if (child.key === undefined && previous.key === undefined) {\n throw new PluginCompositionError({\n code: 'plugin-group-key-required',\n expected: 'repeated Plugin references to declare a stable child key',\n hint: 'assign a unique key to each repeated child before activation.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n throw new PluginCompositionError({\n code: 'plugin-group-key-duplicate',\n expected: 'stable child key to be unique within its Group',\n hint: 'assign a unique key to each child declaration.',\n detail: { key: String(child.key) },\n });\n }\n keys.set(key, child);\n }\n}\n\nfunction orderedChildren(\n ctx: Context,\n children: readonly PluginUse[],\n groupOwnedServices: ReadonlySet<string>,\n): PluginUse[] {\n const providers = new Map<string, number>();\n children.forEach((child, index) => {\n for (const service of providedNames(child.plugin)) {\n if (!providers.has(service)) providers.set(service, index);\n }\n });\n\n const graph = children.map(() => [] as number[]);\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n if (child === undefined) continue;\n for (const service of dependencyNames(child.plugin)) {\n const provider = providers.get(service);\n const externalServiceAvailable =\n !groupOwnedServices.has(service) && ctx.reflect.get(service, false) !== undefined;\n if (provider === undefined && !externalServiceAvailable) {\n throw new PluginCompositionError({\n code: 'plugin-group-provider-missing',\n expected: 'an inject/provide dependency to be available before the child starts',\n hint: 'provide the service in the Group or install the owning plugin first.',\n detail: { service },\n });\n }\n if (provider !== undefined && provider !== index) graph[index]?.push(provider);\n if (provider === index) graph[index]?.push(index);\n }\n }\n\n const state = children.map(() => 0);\n const sorted: number[] = [];\n const visit = (index: number, path: number[]): void => {\n if (state[index] === 1) {\n const cycleStart = path.indexOf(index);\n const cycle = [...path.slice(cycleStart), index].map((item) => {\n const child = children[item];\n return child === undefined ? 'unknown' : pluginName(child.plugin);\n });\n throw new PluginCompositionError({\n code: 'plugin-group-dependency-cycle',\n expected: 'an acyclic inject/provide dependency graph',\n hint: 'break the dependency cycle before activating the Group.',\n detail: { path: cycle },\n });\n }\n if (state[index] === 2) return;\n state[index] = 1;\n for (const dependency of graph[index] ?? []) visit(dependency, [...path, index]);\n state[index] = 2;\n sorted.push(index);\n };\n for (let index = 0; index < children.length; index += 1) visit(index, []);\n return sorted\n .map((index) => children[index])\n .filter((child): child is PluginUse => child !== undefined);\n}\n\nasync function validateConfig(child: PluginUse): Promise<void> {\n const schema = child.plugin.Config;\n if (schema === undefined) return;\n const result = await schema['~standard'].validate(child.config);\n if ('issues' in result && result.issues) {\n throw new PluginCompositionError({\n code: 'plugin-config-invalid',\n expected: `${pluginName(child.plugin)} Plugin.Config to validate the child config`,\n hint: 'provide a valid config before the child side effect runs.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n}\n\nasync function validateChildren(children: readonly PluginUse[]): Promise<void> {\n const results = await Promise.allSettled(children.map((child) => validateConfig(child)));\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n}\n\nfunction childFailure(child: PluginUse, _reason: unknown): PluginCompositionError {\n return new PluginCompositionError({\n code: 'plugin-group-child-failed',\n expected: `${pluginName(child.plugin)} to activate under its owning Group`,\n hint: 'repair the child and retry the Group update.',\n detail: { child: pluginName(child.plugin) },\n });\n}\n\nfunction sameConfig(left: unknown, right: unknown): boolean {\n return sameDataValue(left, right, new Set());\n}\n\nfunction sameDataValue(left: unknown, right: unknown, active: Set<object>): boolean {\n if (Object.is(left, right)) return true;\n if (left === null || right === null || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n const leftArray = Array.isArray(left);\n if (leftArray !== Array.isArray(right)) return false;\n const leftPrototype = Object.getPrototypeOf(left);\n const rightPrototype = Object.getPrototypeOf(right);\n if (leftArray) {\n if (leftPrototype !== Array.prototype || rightPrototype !== Array.prototype) return false;\n } else if (\n !(\n (leftPrototype === Object.prototype || leftPrototype === null) &&\n (rightPrototype === Object.prototype || rightPrototype === null) &&\n leftPrototype === rightPrototype\n )\n ) {\n return false;\n }\n if (active.has(left)) return false;\n active.add(left);\n try {\n const leftKeys = Reflect.ownKeys(left).filter((key) => !leftArray || key !== 'length');\n const rightKeys = Reflect.ownKeys(right).filter((key) => !leftArray || key !== 'length');\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!Object.hasOwn(right, key)) return false;\n const leftDescriptor = Object.getOwnPropertyDescriptor(left, key);\n const rightDescriptor = Object.getOwnPropertyDescriptor(right, key);\n if (\n leftDescriptor === undefined ||\n rightDescriptor === undefined ||\n !('value' in leftDescriptor) ||\n !('value' in rightDescriptor) ||\n !sameDataValue(leftDescriptor.value, rightDescriptor.value, active)\n ) {\n return false;\n }\n }\n return true;\n } finally {\n active.delete(left);\n }\n}\n\nfunction startChild(ctx: Context, child: PluginUse): ChildRecord {\n let fiber: Fiber | undefined;\n try {\n fiber = ctx.plugin(child.plugin, child.config);\n return { key: keyFor(child), plugin: child.plugin, config: child.config, fiber };\n } catch (reason) {\n if (fiber !== undefined) void fiber.dispose();\n if (reason instanceof PluginCompositionError) throw reason;\n throw childFailure(child, reason);\n }\n}\n\nasync function activateChild(ctx: Context, child: PluginUse): Promise<ChildRecord> {\n const record = startChild(ctx, child);\n await record.fiber.await();\n return record;\n}\n\nfunction recordUse(record: ChildRecord): PluginUse {\n return {\n plugin: record.plugin,\n config: record.config,\n ...(typeof record.key === 'string' ? { key: record.key } : {}),\n };\n}\n\nfunction sharesProvidedService(left: Plugin, right: Plugin): boolean {\n const rightServices = new Set(providedNames(right));\n return providedNames(left).some((service) => rightServices.has(service));\n}\n\nasync function restoreRecord(\n ctx: Context,\n record: ChildRecord,\n config: unknown,\n): Promise<ChildRecord> {\n try {\n await record.fiber.update(config);\n await record.fiber.await();\n return { ...record, config };\n } catch (updateReason) {\n if (record.fiber.uid !== null) await record.fiber.dispose();\n try {\n return await activateChild(ctx, { ...recordUse(record), config });\n } catch (restoreReason) {\n throw restoreReason ?? updateReason;\n }\n }\n}\n\nasync function settleRecords(\n records: readonly ChildRecord[],\n abort: Promise<unknown> | undefined,\n): Promise<void> {\n if (records.length === 0) return;\n const outcomes = records.map((record, index) =>\n record.fiber.await().then(\n () => ({ index, reason: undefined }),\n (reason: unknown) => ({ index, reason }),\n ),\n );\n const pending = new Set(outcomes);\n const abortSignal =\n abort === undefined\n ? undefined\n : abort.then((reason) => ({ index: -1, reason, aborted: true as const }));\n while (pending.size > 0) {\n const outcome = await Promise.race([\n ...pending,\n ...(abortSignal === undefined ? [] : [abortSignal]),\n ]);\n if ('aborted' in outcome) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n if (outcome.reason instanceof ChildOperationFailure) {\n throw new ChildOperationFailure(\n outcome.reason.child,\n outcome.reason.reason,\n cleanupFailures,\n );\n }\n throw outcome.reason;\n }\n const completed = outcomes[outcome.index];\n if (completed !== undefined) pending.delete(completed);\n if (outcome.reason !== undefined) {\n const record = records[outcome.index];\n if (record !== undefined) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n throw new ChildOperationFailure(recordUse(record), outcome.reason, cleanupFailures);\n }\n throw outcome.reason;\n }\n }\n}\n\nasync function disposeRecordsInReverse(records: readonly ChildRecord[]): Promise<unknown[]> {\n const failures: unknown[] = [];\n for (const record of [...records].reverse()) {\n try {\n await record.fiber.dispose();\n } catch (reason) {\n failures.push(reason);\n }\n }\n return failures;\n}\n\nasync function reconcile(\n ctx: Context,\n state: GroupState,\n children: readonly PluginUse[],\n): Promise<void> {\n validateKeys(children);\n const groupOwnedServices = new Set<string>();\n for (const record of state.records.values()) {\n for (const service of providedNames(record.plugin)) groupOwnedServices.add(service);\n }\n const ordered = orderedChildren(ctx, children, groupOwnedServices);\n await validateChildren(ordered);\n const desired = new Map(ordered.map((child) => [keyFor(child), child] as const));\n const removed = [...state.records.values()].filter((record) => !desired.has(record.key));\n const changed: Array<{ record: ChildRecord; child: PluginUse; config: unknown }> = [];\n const candidateChildren: PluginUse[] = [];\n const replacements: Array<{ old: ChildRecord; child: PluginUse }> = [];\n const released: ChildRecord[] = [];\n const retired: ChildRecord[] = [];\n const candidates: ChildRecord[] = [];\n\n for (const child of ordered) {\n const current = state.records.get(keyFor(child));\n if (current === undefined) {\n candidateChildren.push(child);\n } else if (current.plugin !== child.plugin) {\n candidateChildren.push(child);\n replacements.push({ old: current, child });\n } else if (!sameConfig(current.config, child.config)) {\n changed.push({ record: current, child, config: current.config });\n }\n }\n\n const desiredServiceProviders = candidateChildren.filter(\n (child) => providedNames(child.plugin).length > 0,\n );\n for (const record of removed) {\n if (\n desiredServiceProviders.some((child) => sharesProvidedService(record.plugin, child.plugin))\n ) {\n released.push(record);\n }\n }\n for (const { old, child } of replacements) {\n if (sharesProvidedService(old.plugin, child.plugin) && !released.includes(old)) {\n released.push(old);\n }\n }\n\n try {\n const releaseResults = await Promise.allSettled(\n released.map((record) => record.fiber.dispose()),\n );\n const releaseFailureIndex = releaseResults.findIndex(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (releaseFailureIndex !== -1) {\n const releaseFailure = releaseResults[releaseFailureIndex];\n const releasedRecord = released[releaseFailureIndex];\n if (releaseFailure?.status === 'rejected' && releasedRecord !== undefined) {\n throw new ChildOperationFailure(recordUse(releasedRecord), releaseFailure.reason);\n }\n throw releaseFailure;\n }\n\n const updateTasks = changed.map(({ record, child }) => {\n return Promise.resolve()\n .then(() => record.fiber.update(child.config))\n .then(() => record.fiber.await())\n .catch((reason: unknown) => {\n throw new ChildOperationFailure(child, reason);\n });\n });\n for (const child of candidateChildren) candidates.push(startChild(ctx, child));\n const updateFailure =\n updateTasks.length === 0\n ? undefined\n : Promise.race(\n updateTasks.map((task) =>\n task.then(\n () => new Promise<never>(() => {}),\n (reason: unknown) => reason,\n ),\n ),\n );\n const results = await Promise.allSettled([\n settleRecords(candidates, updateFailure),\n ...updateTasks,\n ]);\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n for (const record of removed) {\n if (released.includes(record)) continue;\n retired.push(record);\n try {\n await record.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(record), retirementReason);\n }\n }\n for (const { old } of replacements) {\n if (released.includes(old)) continue;\n retired.push(old);\n try {\n await old.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(old), retirementReason);\n }\n }\n } catch (reason) {\n const operation = reason instanceof ChildOperationFailure ? reason : undefined;\n const primary = operation?.reason ?? reason;\n const rollbackFailures = operation?.cleanupFailures\n ? [...operation.cleanupFailures]\n : await disposeRecordsInReverse(candidates);\n for (const { record, config } of changed.reverse()) {\n try {\n const restored = await restoreRecord(ctx, record, config);\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of released.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of retired.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n const fallback = operation?.child ?? ordered[0];\n const primaryError =\n primary instanceof PluginCompositionError\n ? primary\n : fallback === undefined\n ? primary\n : childFailure(fallback, primary);\n if (rollbackFailures.length > 0) {\n throw new AggregateError(\n [primaryError, ...rollbackFailures],\n 'plugin Group reconciliation and rollback both failed',\n );\n }\n throw primaryError;\n }\n\n for (const record of removed) state.records.delete(record.key);\n for (const { old, child } of replacements) {\n state.records.delete(old.key);\n const next = candidates.find((record) => record.key === keyFor(child));\n if (next !== undefined) state.records.set(next.key, next);\n }\n for (const record of candidates) state.records.set(record.key, record);\n for (const { record, child } of changed) record.config = child.config;\n}\n\nexport function definePluginGroup<C = unknown>(options: PluginGroupOptions<C>): Plugin {\n const group: Plugin.Object = {\n name: options.name,\n async apply(ctx, config) {\n const owner = ctx.fiber as Fiber & { [groupStateKey]?: GroupState };\n let state = owner[groupStateKey];\n if (state === undefined) {\n state = { records: new Map() };\n owner[groupStateKey] = state;\n }\n ctx.effect(\n () => async () => {\n state.records.clear();\n delete owner[groupStateKey];\n },\n 'plugin-group-state',\n );\n ctx.on('internal/update', (nextConfig, _noSave, _next) =>\n reconcile(ctx, state, options.children(nextConfig as C)),\n );\n await reconcile(ctx, state, options.children(config as C));\n },\n };\n return group;\n}\n","import type { CatalogLoader, Entry, EntryOptions } from './loader.js';\n\nexport type CatalogPluginFiberState =\n | 'pending'\n | 'loading'\n | 'active'\n | 'failed'\n | 'disposed'\n | 'unloading'\n | 'disabled'\n | 'missing'\n | 'unavailable';\n\nexport interface CatalogPluginInspectionFailure {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CatalogPluginInspectionEntry extends EntryOptions {\n readonly entryId: string;\n readonly module: string;\n readonly realm: 'host' | 'engine' | 'build';\n readonly desiredState: 'enabled' | 'disabled';\n readonly fiberState: CatalogPluginFiberState;\n readonly parent?: string;\n readonly requiredServices: readonly string[];\n readonly providedServices: readonly string[];\n readonly configDigest: string;\n readonly failure?: CatalogPluginInspectionFailure;\n}\n\nexport interface CatalogPluginInspection {\n readonly live: readonly CatalogPluginInspectionEntry[];\n}\n\nconst FIBER_STATE_BY_CODE: readonly CatalogPluginFiberState[] = [\n 'pending',\n 'loading',\n 'active',\n 'failed',\n 'disposed',\n 'unloading',\n];\n\nfunction canonicalJson(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item)).join(',')}]`;\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`)\n .join(',')}}`;\n}\n\nfunction configDigest(value: unknown): string {\n let hash = 2166136261;\n for (const char of canonicalJson(value)) {\n hash ^= char.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n return `fnv1a:${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\nfunction requiredServices(inject: unknown): readonly string[] {\n if (Array.isArray(inject)) {\n return inject.filter((name): name is string => typeof name === 'string').sort();\n }\n if (inject !== null && typeof inject === 'object') return Object.keys(inject).sort();\n return [];\n}\n\nfunction providedServices(fiber: NonNullable<Entry['fiber']>): readonly string[] {\n const names = new Set<string>();\n const stores = [\n fiber.store,\n (fiber.ctx.reflect as unknown as { readonly store?: Record<PropertyKey, unknown> }).store,\n ];\n for (const store of stores) {\n if (store === undefined) continue;\n for (const key of Reflect.ownKeys(store)) {\n const value = (store as Record<PropertyKey, unknown>)[key];\n if (\n value !== null &&\n typeof value === 'object' &&\n 'fiber' in value &&\n ((value as { readonly fiber?: { readonly uid?: unknown } }).fiber === fiber ||\n (value as { readonly fiber?: { readonly uid?: unknown } }).fiber?.uid === fiber.uid) &&\n 'name' in value &&\n typeof (value as { readonly name?: unknown }).name === 'string'\n ) {\n names.add((value as { readonly name: string }).name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction failureFromFiber(\n fiber: NonNullable<Entry['fiber']>,\n): CatalogPluginInspectionFailure | undefined {\n if (fiber.state !== 3) return undefined;\n const cause = (fiber as unknown as { readonly _error?: unknown })._error;\n if (\n cause !== null &&\n typeof cause === 'object' &&\n typeof (cause as { readonly code?: unknown }).code === 'string' &&\n typeof (cause as { readonly expected?: unknown }).expected === 'string' &&\n typeof (cause as { readonly hint?: unknown }).hint === 'string' &&\n (cause as { readonly detail?: unknown }).detail !== null &&\n typeof (cause as { readonly detail?: unknown }).detail === 'object'\n ) {\n return {\n code: (cause as { readonly code: string }).code,\n expected: (cause as { readonly expected: string }).expected,\n hint: (cause as { readonly hint: string }).hint,\n detail: (cause as { readonly detail: Readonly<Record<string, unknown>> }).detail,\n };\n }\n return {\n code: 'plugin-fiber-failed',\n expected: 'the native Plugin Fiber to settle in an active state',\n hint: 'Read the owning Entry, repair its module/config or required service, then reconcile again.',\n detail: {\n reason: cause instanceof Error ? cause.message : String(cause ?? 'unknown failure'),\n },\n };\n}\n\nfunction projectLiveEntry(loader: CatalogLoader, entry: Entry): CatalogPluginInspectionEntry {\n const options = entry.options;\n const fiber = entry.fiber;\n const disabled = entry.disabled;\n const state = disabled\n ? 'disabled'\n : fiber === undefined\n ? 'missing'\n : (FIBER_STATE_BY_CODE[fiber.state] ?? 'unavailable');\n const parent = entry.parent?.ctx.fiber.entry?.id;\n const failure = fiber === undefined ? undefined : failureFromFiber(fiber);\n return {\n ...options,\n entryId: entry.id,\n module: options.name,\n realm: loader.realm,\n desiredState: disabled ? 'disabled' : 'enabled',\n fiberState: state,\n ...(parent === undefined ? {} : { parent }),\n requiredServices: requiredServices(fiber?.inject ?? options.inject),\n providedServices: fiber === undefined ? [] : providedServices(fiber),\n configDigest: configDigest(options.config),\n ...(failure === undefined ? {} : { failure }),\n };\n}\n\n/** Project the live native Loader tree without introducing another state owner. */\nexport function inspectCatalogPlugins(loader: CatalogLoader): CatalogPluginInspection {\n return { live: [...loader.entries()].map((entry) => projectLiveEntry(loader, entry)) };\n}\n","import type { Plugin } from '@deepseek-ai/cordis';\nimport type { ToolContribution } from '@forgeax/engine-tool-runtime';\n\n/** A native Cordis plugin plus the tool contributions it exposes. */\nexport interface ToolPlugin {\n readonly plugin: Plugin;\n readonly tools: readonly ToolContribution<unknown, unknown>[];\n}\n\nexport function defineToolPlugin(\n plugin: Plugin,\n tools: readonly ToolContribution<unknown, unknown>[],\n): ToolPlugin {\n return { plugin, tools: [...tools] };\n}\n\nexport function isToolPlugin(value: unknown): value is ToolPlugin {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<ToolPlugin>;\n return candidate.plugin !== undefined && Array.isArray(candidate.tools);\n}\n"]}
1
+ {"version":3,"sources":["../src/capability.ts","../src/composition.ts","../src/inspection.ts","../src/tool-contract.ts","../src/tool-plugin.ts"],"names":[],"mappings":"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","file":"browser.mjs","sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\nimport {\n createCapabilityResolver,\n type ToolCapabilityResolver,\n} from '@forgeax/engine-tool-runtime';\n\n/** Bridge one active Cordis realm into the realm-neutral ToolRuntime seam. */\nexport function createContextCapabilityResolver(ctx: Context): ToolCapabilityResolver {\n return createCapabilityResolver((capability) => Reflect.get(ctx, capability.id));\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\n\nexport type PluginCompositionErrorCode =\n | 'plugin-config-invalid'\n | 'plugin-group-child-failed'\n | 'plugin-group-dependency-cycle'\n | 'plugin-group-key-duplicate'\n | 'plugin-group-key-required'\n | 'plugin-group-provider-missing';\n\nexport interface PluginConfigInvalidDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupChildFailedDetail {\n readonly child: string;\n}\n\nexport interface PluginGroupDependencyCycleDetail {\n readonly path: readonly string[];\n}\n\nexport interface PluginGroupKeyDuplicateDetail {\n readonly key: string;\n}\n\nexport interface PluginGroupKeyRequiredDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupProviderMissingDetail {\n readonly service: string;\n}\n\nexport type PluginCompositionErrorDetailByCode = {\n 'plugin-config-invalid': PluginConfigInvalidDetail;\n 'plugin-group-child-failed': PluginGroupChildFailedDetail;\n 'plugin-group-dependency-cycle': PluginGroupDependencyCycleDetail;\n 'plugin-group-key-duplicate': PluginGroupKeyDuplicateDetail;\n 'plugin-group-key-required': PluginGroupKeyRequiredDetail;\n 'plugin-group-provider-missing': PluginGroupProviderMissingDetail;\n};\n\nexport type PluginCompositionErrorArgs<\n C extends PluginCompositionErrorCode = PluginCompositionErrorCode,\n> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n};\n\nclass PluginCompositionErrorClass extends Error {\n readonly code: PluginCompositionErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[PluginCompositionErrorCode];\n\n constructor(args: PluginCompositionErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'PluginCompositionError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype PluginCompositionErrorVariant<C extends PluginCompositionErrorCode> =\n PluginCompositionErrorClass & {\n readonly code: C;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n };\n\nexport type PluginCompositionError = {\n [C in PluginCompositionErrorCode]: PluginCompositionErrorVariant<C>;\n}[PluginCompositionErrorCode];\n\ninterface PluginCompositionErrorConstructor {\n new <C extends PluginCompositionErrorCode>(\n args: PluginCompositionErrorArgs<C>,\n ): PluginCompositionErrorVariant<C>;\n readonly prototype: PluginCompositionError;\n}\n\nexport const PluginCompositionError: PluginCompositionErrorConstructor =\n PluginCompositionErrorClass as unknown as PluginCompositionErrorConstructor;\n\nexport interface PluginUseOptions {\n readonly key?: string;\n}\n\ntype PluginConfig<P> = P extends (ctx: Context, config: infer C) => unknown\n ? C\n : P extends new (\n ctx: Context,\n config: infer C,\n ) => unknown\n ? C\n : P extends { apply(ctx: Context, config: infer C): unknown }\n ? C\n : unknown;\n\ntype ConfigArgs<P> =\n undefined extends PluginConfig<P> ? [config?: PluginConfig<P>] : [config: PluginConfig<P>];\n\nexport interface PluginUse<P extends Plugin = Plugin> {\n readonly plugin: P;\n readonly config: PluginConfig<P>;\n readonly key?: string;\n}\n\nexport function usePlugin<P extends Plugin>(\n plugin: P,\n ...args: [...ConfigArgs<P>, options?: PluginUseOptions]\n): PluginUse<P> {\n const config = args[0] as PluginConfig<P>;\n const options = args[1] as PluginUseOptions | undefined;\n return {\n plugin,\n config,\n ...(options?.key === undefined ? {} : { key: options.key }),\n };\n}\n\nexport interface PluginGroupOptions<C = unknown> {\n readonly name: string;\n readonly children: (config: C) => readonly PluginUse[];\n}\n\ninterface ChildRecord {\n readonly key: string | object;\n readonly plugin: Plugin;\n config: unknown;\n fiber: Fiber;\n}\n\ninterface GroupState {\n readonly records: Map<string | object, ChildRecord>;\n}\n\nclass ChildOperationFailure extends Error {\n constructor(\n readonly child: PluginUse,\n readonly reason: unknown,\n readonly cleanupFailures: readonly unknown[] = [],\n ) {\n super(`child operation failed: ${pluginName(child.plugin)}`);\n }\n}\n\nconst groupStateKey = Symbol('forgeax.plugin.group.state');\n\nfunction pluginName(plugin: Plugin): string {\n return plugin.name ?? 'anonymous';\n}\n\nfunction dependencyNames(plugin: Plugin): readonly string[] {\n const inject = plugin.inject;\n if (inject === undefined) return [];\n return Array.isArray(inject) ? inject : Object.keys(inject);\n}\n\nfunction providedNames(plugin: Plugin): readonly string[] {\n const provide = plugin.provide;\n if (provide === undefined) return [];\n return Array.isArray(provide) ? provide : [provide];\n}\n\nfunction keyFor(child: PluginUse): string | object {\n if (child.key !== undefined) return child.key;\n return child.plugin;\n}\n\nfunction validateKeys(children: readonly PluginUse[]): void {\n const keys = new Map<string | object, PluginUse>();\n for (const child of children) {\n const key = keyFor(child);\n const previous = keys.get(key);\n if (previous !== undefined) {\n if (child.key === undefined && previous.key === undefined) {\n throw new PluginCompositionError({\n code: 'plugin-group-key-required',\n expected: 'repeated Plugin references to declare a stable child key',\n hint: 'assign a unique key to each repeated child before activation.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n throw new PluginCompositionError({\n code: 'plugin-group-key-duplicate',\n expected: 'stable child key to be unique within its Group',\n hint: 'assign a unique key to each child declaration.',\n detail: { key: String(child.key) },\n });\n }\n keys.set(key, child);\n }\n}\n\nfunction orderedChildren(\n ctx: Context,\n children: readonly PluginUse[],\n groupOwnedServices: ReadonlySet<string>,\n): PluginUse[] {\n const providers = new Map<string, number>();\n children.forEach((child, index) => {\n for (const service of providedNames(child.plugin)) {\n if (!providers.has(service)) providers.set(service, index);\n }\n });\n\n const graph = children.map(() => [] as number[]);\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n if (child === undefined) continue;\n for (const service of dependencyNames(child.plugin)) {\n const provider = providers.get(service);\n const externalServiceAvailable =\n !groupOwnedServices.has(service) && ctx.reflect.get(service, false) !== undefined;\n if (provider === undefined && !externalServiceAvailable) {\n throw new PluginCompositionError({\n code: 'plugin-group-provider-missing',\n expected: 'an inject/provide dependency to be available before the child starts',\n hint: 'provide the service in the Group or install the owning plugin first.',\n detail: { service },\n });\n }\n if (provider !== undefined && provider !== index) graph[index]?.push(provider);\n if (provider === index) graph[index]?.push(index);\n }\n }\n\n const state = children.map(() => 0);\n const sorted: number[] = [];\n const visit = (index: number, path: number[]): void => {\n if (state[index] === 1) {\n const cycleStart = path.indexOf(index);\n const cycle = [...path.slice(cycleStart), index].map((item) => {\n const child = children[item];\n return child === undefined ? 'unknown' : pluginName(child.plugin);\n });\n throw new PluginCompositionError({\n code: 'plugin-group-dependency-cycle',\n expected: 'an acyclic inject/provide dependency graph',\n hint: 'break the dependency cycle before activating the Group.',\n detail: { path: cycle },\n });\n }\n if (state[index] === 2) return;\n state[index] = 1;\n for (const dependency of graph[index] ?? []) visit(dependency, [...path, index]);\n state[index] = 2;\n sorted.push(index);\n };\n for (let index = 0; index < children.length; index += 1) visit(index, []);\n return sorted\n .map((index) => children[index])\n .filter((child): child is PluginUse => child !== undefined);\n}\n\nasync function validateConfig(child: PluginUse): Promise<void> {\n const schema = child.plugin.Config;\n if (schema === undefined) return;\n const result = await schema['~standard'].validate(child.config);\n if ('issues' in result && result.issues) {\n throw new PluginCompositionError({\n code: 'plugin-config-invalid',\n expected: `${pluginName(child.plugin)} Plugin.Config to validate the child config`,\n hint: 'provide a valid config before the child side effect runs.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n}\n\nasync function validateChildren(children: readonly PluginUse[]): Promise<void> {\n const results = await Promise.allSettled(children.map((child) => validateConfig(child)));\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n}\n\nfunction childFailure(child: PluginUse, _reason: unknown): PluginCompositionError {\n return new PluginCompositionError({\n code: 'plugin-group-child-failed',\n expected: `${pluginName(child.plugin)} to activate under its owning Group`,\n hint: 'repair the child and retry the Group update.',\n detail: { child: pluginName(child.plugin) },\n });\n}\n\nfunction sameConfig(left: unknown, right: unknown): boolean {\n return sameDataValue(left, right, new Set());\n}\n\nfunction sameDataValue(left: unknown, right: unknown, active: Set<object>): boolean {\n if (Object.is(left, right)) return true;\n if (left === null || right === null || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n const leftArray = Array.isArray(left);\n if (leftArray !== Array.isArray(right)) return false;\n const leftPrototype = Object.getPrototypeOf(left);\n const rightPrototype = Object.getPrototypeOf(right);\n if (leftArray) {\n if (leftPrototype !== Array.prototype || rightPrototype !== Array.prototype) return false;\n } else if (\n !(\n (leftPrototype === Object.prototype || leftPrototype === null) &&\n (rightPrototype === Object.prototype || rightPrototype === null) &&\n leftPrototype === rightPrototype\n )\n ) {\n return false;\n }\n if (active.has(left)) return false;\n active.add(left);\n try {\n const leftKeys = Reflect.ownKeys(left).filter((key) => !leftArray || key !== 'length');\n const rightKeys = Reflect.ownKeys(right).filter((key) => !leftArray || key !== 'length');\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!Object.hasOwn(right, key)) return false;\n const leftDescriptor = Object.getOwnPropertyDescriptor(left, key);\n const rightDescriptor = Object.getOwnPropertyDescriptor(right, key);\n if (\n leftDescriptor === undefined ||\n rightDescriptor === undefined ||\n !('value' in leftDescriptor) ||\n !('value' in rightDescriptor) ||\n !sameDataValue(leftDescriptor.value, rightDescriptor.value, active)\n ) {\n return false;\n }\n }\n return true;\n } finally {\n active.delete(left);\n }\n}\n\nfunction startChild(ctx: Context, child: PluginUse): ChildRecord {\n let fiber: Fiber | undefined;\n try {\n fiber = ctx.plugin(child.plugin, child.config);\n return { key: keyFor(child), plugin: child.plugin, config: child.config, fiber };\n } catch (reason) {\n if (fiber !== undefined) void fiber.dispose();\n if (reason instanceof PluginCompositionError) throw reason;\n throw childFailure(child, reason);\n }\n}\n\nasync function activateChild(ctx: Context, child: PluginUse): Promise<ChildRecord> {\n const record = startChild(ctx, child);\n await record.fiber.await();\n return record;\n}\n\nfunction recordUse(record: ChildRecord): PluginUse {\n return {\n plugin: record.plugin,\n config: record.config,\n ...(typeof record.key === 'string' ? { key: record.key } : {}),\n };\n}\n\nfunction sharesProvidedService(left: Plugin, right: Plugin): boolean {\n const rightServices = new Set(providedNames(right));\n return providedNames(left).some((service) => rightServices.has(service));\n}\n\nasync function restoreRecord(\n ctx: Context,\n record: ChildRecord,\n config: unknown,\n): Promise<ChildRecord> {\n try {\n await record.fiber.update(config);\n await record.fiber.await();\n return { ...record, config };\n } catch (updateReason) {\n if (record.fiber.uid !== null) await record.fiber.dispose();\n try {\n return await activateChild(ctx, { ...recordUse(record), config });\n } catch (restoreReason) {\n throw restoreReason ?? updateReason;\n }\n }\n}\n\nasync function settleRecords(\n records: readonly ChildRecord[],\n abort: Promise<unknown> | undefined,\n): Promise<void> {\n if (records.length === 0) return;\n const outcomes = records.map((record, index) =>\n record.fiber.await().then(\n () => ({ index, reason: undefined }),\n (reason: unknown) => ({ index, reason }),\n ),\n );\n const pending = new Set(outcomes);\n const abortSignal =\n abort === undefined\n ? undefined\n : abort.then((reason) => ({ index: -1, reason, aborted: true as const }));\n while (pending.size > 0) {\n const outcome = await Promise.race([\n ...pending,\n ...(abortSignal === undefined ? [] : [abortSignal]),\n ]);\n if ('aborted' in outcome) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n if (outcome.reason instanceof ChildOperationFailure) {\n throw new ChildOperationFailure(\n outcome.reason.child,\n outcome.reason.reason,\n cleanupFailures,\n );\n }\n throw outcome.reason;\n }\n const completed = outcomes[outcome.index];\n if (completed !== undefined) pending.delete(completed);\n if (outcome.reason !== undefined) {\n const record = records[outcome.index];\n if (record !== undefined) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n throw new ChildOperationFailure(recordUse(record), outcome.reason, cleanupFailures);\n }\n throw outcome.reason;\n }\n }\n}\n\nasync function disposeRecordsInReverse(records: readonly ChildRecord[]): Promise<unknown[]> {\n const failures: unknown[] = [];\n for (const record of [...records].reverse()) {\n try {\n await record.fiber.dispose();\n } catch (reason) {\n failures.push(reason);\n }\n }\n return failures;\n}\n\nasync function reconcile(\n ctx: Context,\n state: GroupState,\n children: readonly PluginUse[],\n): Promise<void> {\n validateKeys(children);\n const groupOwnedServices = new Set<string>();\n for (const record of state.records.values()) {\n for (const service of providedNames(record.plugin)) groupOwnedServices.add(service);\n }\n const ordered = orderedChildren(ctx, children, groupOwnedServices);\n await validateChildren(ordered);\n const desired = new Map(ordered.map((child) => [keyFor(child), child] as const));\n const removed = [...state.records.values()].filter((record) => !desired.has(record.key));\n const changed: Array<{ record: ChildRecord; child: PluginUse; config: unknown }> = [];\n const candidateChildren: PluginUse[] = [];\n const replacements: Array<{ old: ChildRecord; child: PluginUse }> = [];\n const released: ChildRecord[] = [];\n const retired: ChildRecord[] = [];\n const candidates: ChildRecord[] = [];\n\n for (const child of ordered) {\n const current = state.records.get(keyFor(child));\n if (current === undefined) {\n candidateChildren.push(child);\n } else if (current.plugin !== child.plugin) {\n candidateChildren.push(child);\n replacements.push({ old: current, child });\n } else if (!sameConfig(current.config, child.config)) {\n changed.push({ record: current, child, config: current.config });\n }\n }\n\n const desiredServiceProviders = candidateChildren.filter(\n (child) => providedNames(child.plugin).length > 0,\n );\n for (const record of removed) {\n if (\n desiredServiceProviders.some((child) => sharesProvidedService(record.plugin, child.plugin))\n ) {\n released.push(record);\n }\n }\n for (const { old, child } of replacements) {\n if (sharesProvidedService(old.plugin, child.plugin) && !released.includes(old)) {\n released.push(old);\n }\n }\n\n try {\n const releaseResults = await Promise.allSettled(\n released.map((record) => record.fiber.dispose()),\n );\n const releaseFailureIndex = releaseResults.findIndex(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (releaseFailureIndex !== -1) {\n const releaseFailure = releaseResults[releaseFailureIndex];\n const releasedRecord = released[releaseFailureIndex];\n if (releaseFailure?.status === 'rejected' && releasedRecord !== undefined) {\n throw new ChildOperationFailure(recordUse(releasedRecord), releaseFailure.reason);\n }\n throw releaseFailure;\n }\n\n const updateTasks = changed.map(({ record, child }) => {\n return Promise.resolve()\n .then(() => record.fiber.update(child.config))\n .then(() => record.fiber.await())\n .catch((reason: unknown) => {\n throw new ChildOperationFailure(child, reason);\n });\n });\n for (const child of candidateChildren) candidates.push(startChild(ctx, child));\n const updateFailure =\n updateTasks.length === 0\n ? undefined\n : Promise.race(\n updateTasks.map((task) =>\n task.then(\n () => new Promise<never>(() => {}),\n (reason: unknown) => reason,\n ),\n ),\n );\n const results = await Promise.allSettled([\n settleRecords(candidates, updateFailure),\n ...updateTasks,\n ]);\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n for (const record of removed) {\n if (released.includes(record)) continue;\n retired.push(record);\n try {\n await record.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(record), retirementReason);\n }\n }\n for (const { old } of replacements) {\n if (released.includes(old)) continue;\n retired.push(old);\n try {\n await old.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(old), retirementReason);\n }\n }\n } catch (reason) {\n const operation = reason instanceof ChildOperationFailure ? reason : undefined;\n const primary = operation?.reason ?? reason;\n const rollbackFailures = operation?.cleanupFailures\n ? [...operation.cleanupFailures]\n : await disposeRecordsInReverse(candidates);\n for (const { record, config } of changed.reverse()) {\n try {\n const restored = await restoreRecord(ctx, record, config);\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of released.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of retired.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n const fallback = operation?.child ?? ordered[0];\n const primaryError =\n primary instanceof PluginCompositionError\n ? primary\n : fallback === undefined\n ? primary\n : childFailure(fallback, primary);\n if (rollbackFailures.length > 0) {\n throw new AggregateError(\n [primaryError, ...rollbackFailures],\n 'plugin Group reconciliation and rollback both failed',\n );\n }\n throw primaryError;\n }\n\n for (const record of removed) state.records.delete(record.key);\n for (const { old, child } of replacements) {\n state.records.delete(old.key);\n const next = candidates.find((record) => record.key === keyFor(child));\n if (next !== undefined) state.records.set(next.key, next);\n }\n for (const record of candidates) state.records.set(record.key, record);\n for (const { record, child } of changed) record.config = child.config;\n}\n\nexport function definePluginGroup<C = unknown>(options: PluginGroupOptions<C>): Plugin {\n const group: Plugin.Object = {\n name: options.name,\n async apply(ctx, config) {\n const owner = ctx.fiber as Fiber & { [groupStateKey]?: GroupState };\n let state = owner[groupStateKey];\n if (state === undefined) {\n state = { records: new Map() };\n owner[groupStateKey] = state;\n }\n ctx.effect(\n () => async () => {\n state.records.clear();\n delete owner[groupStateKey];\n },\n 'plugin-group-state',\n );\n ctx.on('internal/update', (nextConfig, _noSave, _next) =>\n reconcile(ctx, state, options.children(nextConfig as C)),\n );\n await reconcile(ctx, state, options.children(config as C));\n },\n };\n return group;\n}\n","import type { CatalogLoader, Entry, EntryOptions } from './loader.js';\n\nexport type CatalogPluginFiberState =\n | 'pending'\n | 'loading'\n | 'active'\n | 'failed'\n | 'disposed'\n | 'unloading'\n | 'disabled'\n | 'missing'\n | 'unavailable';\n\nexport interface CatalogPluginInspectionFailure {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CatalogPluginInspectionEntry extends EntryOptions {\n readonly entryId: string;\n readonly module: string;\n readonly realm: 'host' | 'engine' | 'build';\n readonly desiredState: 'enabled' | 'disabled';\n readonly fiberState: CatalogPluginFiberState;\n readonly parent?: string;\n readonly requiredServices: readonly string[];\n readonly providedServices: readonly string[];\n readonly configDigest: string;\n readonly failure?: CatalogPluginInspectionFailure;\n}\n\nexport interface CatalogPluginInspection {\n readonly live: readonly CatalogPluginInspectionEntry[];\n}\n\nconst FIBER_STATE_BY_CODE: readonly CatalogPluginFiberState[] = [\n 'pending',\n 'loading',\n 'active',\n 'failed',\n 'disposed',\n 'unloading',\n];\n\nfunction canonicalJson(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item)).join(',')}]`;\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`)\n .join(',')}}`;\n}\n\nfunction configDigest(value: unknown): string {\n let hash = 2166136261;\n for (const char of canonicalJson(value)) {\n hash ^= char.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n return `fnv1a:${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\nfunction requiredServices(inject: unknown): readonly string[] {\n if (Array.isArray(inject)) {\n return inject.filter((name): name is string => typeof name === 'string').sort();\n }\n if (inject !== null && typeof inject === 'object') return Object.keys(inject).sort();\n return [];\n}\n\nfunction providedServices(fiber: NonNullable<Entry['fiber']>): readonly string[] {\n const names = new Set<string>();\n const stores = [\n fiber.store,\n (fiber.ctx.reflect as unknown as { readonly store?: Record<PropertyKey, unknown> }).store,\n ];\n for (const store of stores) {\n if (store === undefined) continue;\n for (const key of Reflect.ownKeys(store)) {\n const value = (store as Record<PropertyKey, unknown>)[key];\n if (\n value !== null &&\n typeof value === 'object' &&\n 'fiber' in value &&\n ((value as { readonly fiber?: { readonly uid?: unknown } }).fiber === fiber ||\n (value as { readonly fiber?: { readonly uid?: unknown } }).fiber?.uid === fiber.uid) &&\n 'name' in value &&\n typeof (value as { readonly name?: unknown }).name === 'string'\n ) {\n names.add((value as { readonly name: string }).name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction failureFromFiber(\n fiber: NonNullable<Entry['fiber']>,\n): CatalogPluginInspectionFailure | undefined {\n if (fiber.state !== 3) return undefined;\n const cause = (fiber as unknown as { readonly _error?: unknown })._error;\n if (\n cause !== null &&\n typeof cause === 'object' &&\n typeof (cause as { readonly code?: unknown }).code === 'string' &&\n typeof (cause as { readonly expected?: unknown }).expected === 'string' &&\n typeof (cause as { readonly hint?: unknown }).hint === 'string' &&\n (cause as { readonly detail?: unknown }).detail !== null &&\n typeof (cause as { readonly detail?: unknown }).detail === 'object'\n ) {\n return {\n code: (cause as { readonly code: string }).code,\n expected: (cause as { readonly expected: string }).expected,\n hint: (cause as { readonly hint: string }).hint,\n detail: (cause as { readonly detail: Readonly<Record<string, unknown>> }).detail,\n };\n }\n return {\n code: 'plugin-fiber-failed',\n expected: 'the native Plugin Fiber to settle in an active state',\n hint: 'Read the owning Entry, repair its module/config or required service, then reconcile again.',\n detail: {\n reason: cause instanceof Error ? cause.message : String(cause ?? 'unknown failure'),\n },\n };\n}\n\nfunction projectLiveEntry(loader: CatalogLoader, entry: Entry): CatalogPluginInspectionEntry {\n const options = entry.options;\n const fiber = entry.fiber;\n const disabled = entry.disabled;\n const state = disabled\n ? 'disabled'\n : fiber === undefined\n ? 'missing'\n : (FIBER_STATE_BY_CODE[fiber.state] ?? 'unavailable');\n const parent = entry.parent?.ctx.fiber.entry?.id;\n const failure = fiber === undefined ? undefined : failureFromFiber(fiber);\n return {\n ...options,\n entryId: entry.id,\n module: options.name,\n realm: loader.realm,\n desiredState: disabled ? 'disabled' : 'enabled',\n fiberState: state,\n ...(parent === undefined ? {} : { parent }),\n requiredServices: requiredServices(fiber?.inject ?? options.inject),\n providedServices: fiber === undefined ? [] : providedServices(fiber),\n configDigest: configDigest(options.config),\n ...(failure === undefined ? {} : { failure }),\n };\n}\n\n/** Project the live native Loader tree without introducing another state owner. */\nexport function inspectCatalogPlugins(loader: CatalogLoader): CatalogPluginInspection {\n return { live: [...loader.entries()].map((entry) => projectLiveEntry(loader, entry)) };\n}\n","import type { ToolEvidenceKind, ToolRealm } from '@forgeax/engine-tool-runtime';\n\n/**\n * A source-only command declaration. Project discovery may load this contract\n * without importing the executor, DOM, World, or a running Project.\n */\nexport interface ToolCommandDeclaration {\n readonly id: string;\n readonly path?: readonly string[];\n readonly title: string;\n readonly summary: string;\n readonly realm: ToolRealm;\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n readonly evidence?: readonly ToolEvidenceKind[];\n /** Module specifier resolved only when the command is executed. */\n readonly executor?: string;\n readonly exportName?: string;\n}\n\nexport interface ToolCommandContract {\n readonly schemaVersion: '1.0.0';\n readonly commands: readonly ToolCommandDeclaration[];\n}\n\nexport function defineToolCommandContract(\n commands: readonly ToolCommandDeclaration[],\n): ToolCommandContract {\n return { schemaVersion: '1.0.0', commands: [...commands] };\n}\n\nexport function isToolCommandContract(value: unknown): value is ToolCommandContract {\n if (value === null || typeof value !== 'object') return false;\n const candidate = value as Partial<ToolCommandContract>;\n return candidate.schemaVersion === '1.0.0' && Array.isArray(candidate.commands);\n}\n","import type { Plugin } from '@deepseek-ai/cordis';\nimport type { ToolContribution } from '@forgeax/engine-tool-runtime';\n\n/** A native Cordis plugin plus the tool contributions it exposes. */\nexport interface ToolPlugin {\n readonly plugin: Plugin;\n readonly tools: readonly ToolContribution<unknown, unknown>[];\n}\n\nexport function defineToolPlugin(\n plugin: Plugin,\n tools: readonly ToolContribution<unknown, unknown>[],\n): ToolPlugin {\n return { plugin, tools: [...tools] };\n}\n\nexport function isToolPlugin(value: unknown): value is ToolPlugin {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<ToolPlugin>;\n return candidate.plugin !== undefined && Array.isArray(candidate.tools);\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -10,5 +10,6 @@ export { createContextCapabilityResolver } from './capability.js';
10
10
  export { definePluginGroup, PluginCompositionError, type PluginCompositionErrorArgs, type PluginCompositionErrorCode, type PluginCompositionErrorDetailByCode, type PluginGroupOptions, type PluginUse, type PluginUseOptions, usePlugin, } from './composition.js';
11
11
  export { type CatalogPluginFiberState, type CatalogPluginInspection, type CatalogPluginInspectionEntry, type CatalogPluginInspectionFailure, inspectCatalogPlugins, } from './inspection.js';
12
12
  export { bootstrapCatalogLoader, CatalogLoader, type CatalogLoaderBootstrapOptions, type CatalogLoaderBootstrapResult, type CatalogLoaderBootstrapValue, CatalogLoaderError, type CatalogLoaderErrorCode, type GamePluginEntry, installCatalogLoader, type PluginCatalog, type PluginCatalogRecord, type PluginRealm, projectPluginEntries, } from './loader.js';
13
+ export { defineToolCommandContract, isToolCommandContract, type ToolCommandContract, type ToolCommandDeclaration, } from './tool-contract.js';
13
14
  export { defineToolPlugin, isToolPlugin, type ToolPlugin, } from './tool-plugin.js';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,MAAM,WAAW,qBAAqB;CAAG;AAEzC,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAQ,SAAQ,qBAAqB;KAAG;CACnD;AAED,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,MAAM,WAAW,qBAAqB;CAAG;AAEzC,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAQ,SAAQ,qBAAqB;KAAG;CACnD;AAED,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,kCAAkC,EACvC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
package/dist/index.mjs CHANGED
@@ -1537,6 +1537,16 @@ function projectPluginEntries(entries, realm, inheritedRealm = "engine") {
1537
1537
  return projected;
1538
1538
  }
1539
1539
 
1540
- export { CatalogLoader, CatalogLoaderError, PluginCompositionError, bootstrapCatalogLoader, createContextCapabilityResolver, definePluginGroup, defineToolPlugin, inspectCatalogPlugins, installCatalogLoader, isToolPlugin, projectPluginEntries, usePlugin };
1540
+ // src/tool-contract.ts
1541
+ function defineToolCommandContract(commands) {
1542
+ return { schemaVersion: "1.0.0", commands: [...commands] };
1543
+ }
1544
+ function isToolCommandContract(value) {
1545
+ if (value === null || typeof value !== "object") return false;
1546
+ const candidate = value;
1547
+ return candidate.schemaVersion === "1.0.0" && Array.isArray(candidate.commands);
1548
+ }
1549
+
1550
+ export { CatalogLoader, CatalogLoaderError, PluginCompositionError, bootstrapCatalogLoader, createContextCapabilityResolver, definePluginGroup, defineToolCommandContract, defineToolPlugin, inspectCatalogPlugins, installCatalogLoader, isToolCommandContract, isToolPlugin, projectPluginEntries, usePlugin };
1541
1551
  //# sourceMappingURL=index.mjs.map
1542
1552
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/capability.ts","../src/composition.ts","../src/inspection.ts","../../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.2/node_modules/@deepseek-ai/cosmokit/lib/index.js","../../../node_modules/.pnpm/@deepseek-ai+cordis-plugin-loader@1.0.2_patch_hash=6e77a3b82171afbdac249c0e31290cc06386_1a14a168fdebad14b739afc92f305e1c/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js","../src/tool-plugin.ts","../src/loader.ts"],"names":["value","Binary","a","b","Time","template","ModuleLoader","config","EntryTree","Entry","ctx","entry"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\nimport {\n createCapabilityResolver,\n type ToolCapabilityResolver,\n} from '@forgeax/engine-tool-runtime';\n\n/** Bridge one active Cordis realm into the realm-neutral ToolRuntime seam. */\nexport function createContextCapabilityResolver(ctx: Context): ToolCapabilityResolver {\n return createCapabilityResolver((capability) => Reflect.get(ctx, capability.id));\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\n\nexport type PluginCompositionErrorCode =\n | 'plugin-config-invalid'\n | 'plugin-group-child-failed'\n | 'plugin-group-dependency-cycle'\n | 'plugin-group-key-duplicate'\n | 'plugin-group-key-required'\n | 'plugin-group-provider-missing';\n\nexport interface PluginConfigInvalidDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupChildFailedDetail {\n readonly child: string;\n}\n\nexport interface PluginGroupDependencyCycleDetail {\n readonly path: readonly string[];\n}\n\nexport interface PluginGroupKeyDuplicateDetail {\n readonly key: string;\n}\n\nexport interface PluginGroupKeyRequiredDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupProviderMissingDetail {\n readonly service: string;\n}\n\nexport type PluginCompositionErrorDetailByCode = {\n 'plugin-config-invalid': PluginConfigInvalidDetail;\n 'plugin-group-child-failed': PluginGroupChildFailedDetail;\n 'plugin-group-dependency-cycle': PluginGroupDependencyCycleDetail;\n 'plugin-group-key-duplicate': PluginGroupKeyDuplicateDetail;\n 'plugin-group-key-required': PluginGroupKeyRequiredDetail;\n 'plugin-group-provider-missing': PluginGroupProviderMissingDetail;\n};\n\nexport type PluginCompositionErrorArgs<\n C extends PluginCompositionErrorCode = PluginCompositionErrorCode,\n> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n};\n\nclass PluginCompositionErrorClass extends Error {\n readonly code: PluginCompositionErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[PluginCompositionErrorCode];\n\n constructor(args: PluginCompositionErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'PluginCompositionError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype PluginCompositionErrorVariant<C extends PluginCompositionErrorCode> =\n PluginCompositionErrorClass & {\n readonly code: C;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n };\n\nexport type PluginCompositionError = {\n [C in PluginCompositionErrorCode]: PluginCompositionErrorVariant<C>;\n}[PluginCompositionErrorCode];\n\ninterface PluginCompositionErrorConstructor {\n new <C extends PluginCompositionErrorCode>(\n args: PluginCompositionErrorArgs<C>,\n ): PluginCompositionErrorVariant<C>;\n readonly prototype: PluginCompositionError;\n}\n\nexport const PluginCompositionError: PluginCompositionErrorConstructor =\n PluginCompositionErrorClass as unknown as PluginCompositionErrorConstructor;\n\nexport interface PluginUseOptions {\n readonly key?: string;\n}\n\ntype PluginConfig<P> = P extends (ctx: Context, config: infer C) => unknown\n ? C\n : P extends new (\n ctx: Context,\n config: infer C,\n ) => unknown\n ? C\n : P extends { apply(ctx: Context, config: infer C): unknown }\n ? C\n : unknown;\n\ntype ConfigArgs<P> =\n undefined extends PluginConfig<P> ? [config?: PluginConfig<P>] : [config: PluginConfig<P>];\n\nexport interface PluginUse<P extends Plugin = Plugin> {\n readonly plugin: P;\n readonly config: PluginConfig<P>;\n readonly key?: string;\n}\n\nexport function usePlugin<P extends Plugin>(\n plugin: P,\n ...args: [...ConfigArgs<P>, options?: PluginUseOptions]\n): PluginUse<P> {\n const config = args[0] as PluginConfig<P>;\n const options = args[1] as PluginUseOptions | undefined;\n return {\n plugin,\n config,\n ...(options?.key === undefined ? {} : { key: options.key }),\n };\n}\n\nexport interface PluginGroupOptions<C = unknown> {\n readonly name: string;\n readonly children: (config: C) => readonly PluginUse[];\n}\n\ninterface ChildRecord {\n readonly key: string | object;\n readonly plugin: Plugin;\n config: unknown;\n fiber: Fiber;\n}\n\ninterface GroupState {\n readonly records: Map<string | object, ChildRecord>;\n}\n\nclass ChildOperationFailure extends Error {\n constructor(\n readonly child: PluginUse,\n readonly reason: unknown,\n readonly cleanupFailures: readonly unknown[] = [],\n ) {\n super(`child operation failed: ${pluginName(child.plugin)}`);\n }\n}\n\nconst groupStateKey = Symbol('forgeax.plugin.group.state');\n\nfunction pluginName(plugin: Plugin): string {\n return plugin.name ?? 'anonymous';\n}\n\nfunction dependencyNames(plugin: Plugin): readonly string[] {\n const inject = plugin.inject;\n if (inject === undefined) return [];\n return Array.isArray(inject) ? inject : Object.keys(inject);\n}\n\nfunction providedNames(plugin: Plugin): readonly string[] {\n const provide = plugin.provide;\n if (provide === undefined) return [];\n return Array.isArray(provide) ? provide : [provide];\n}\n\nfunction keyFor(child: PluginUse): string | object {\n if (child.key !== undefined) return child.key;\n return child.plugin;\n}\n\nfunction validateKeys(children: readonly PluginUse[]): void {\n const keys = new Map<string | object, PluginUse>();\n for (const child of children) {\n const key = keyFor(child);\n const previous = keys.get(key);\n if (previous !== undefined) {\n if (child.key === undefined && previous.key === undefined) {\n throw new PluginCompositionError({\n code: 'plugin-group-key-required',\n expected: 'repeated Plugin references to declare a stable child key',\n hint: 'assign a unique key to each repeated child before activation.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n throw new PluginCompositionError({\n code: 'plugin-group-key-duplicate',\n expected: 'stable child key to be unique within its Group',\n hint: 'assign a unique key to each child declaration.',\n detail: { key: String(child.key) },\n });\n }\n keys.set(key, child);\n }\n}\n\nfunction orderedChildren(\n ctx: Context,\n children: readonly PluginUse[],\n groupOwnedServices: ReadonlySet<string>,\n): PluginUse[] {\n const providers = new Map<string, number>();\n children.forEach((child, index) => {\n for (const service of providedNames(child.plugin)) {\n if (!providers.has(service)) providers.set(service, index);\n }\n });\n\n const graph = children.map(() => [] as number[]);\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n if (child === undefined) continue;\n for (const service of dependencyNames(child.plugin)) {\n const provider = providers.get(service);\n const externalServiceAvailable =\n !groupOwnedServices.has(service) && ctx.reflect.get(service, false) !== undefined;\n if (provider === undefined && !externalServiceAvailable) {\n throw new PluginCompositionError({\n code: 'plugin-group-provider-missing',\n expected: 'an inject/provide dependency to be available before the child starts',\n hint: 'provide the service in the Group or install the owning plugin first.',\n detail: { service },\n });\n }\n if (provider !== undefined && provider !== index) graph[index]?.push(provider);\n if (provider === index) graph[index]?.push(index);\n }\n }\n\n const state = children.map(() => 0);\n const sorted: number[] = [];\n const visit = (index: number, path: number[]): void => {\n if (state[index] === 1) {\n const cycleStart = path.indexOf(index);\n const cycle = [...path.slice(cycleStart), index].map((item) => {\n const child = children[item];\n return child === undefined ? 'unknown' : pluginName(child.plugin);\n });\n throw new PluginCompositionError({\n code: 'plugin-group-dependency-cycle',\n expected: 'an acyclic inject/provide dependency graph',\n hint: 'break the dependency cycle before activating the Group.',\n detail: { path: cycle },\n });\n }\n if (state[index] === 2) return;\n state[index] = 1;\n for (const dependency of graph[index] ?? []) visit(dependency, [...path, index]);\n state[index] = 2;\n sorted.push(index);\n };\n for (let index = 0; index < children.length; index += 1) visit(index, []);\n return sorted\n .map((index) => children[index])\n .filter((child): child is PluginUse => child !== undefined);\n}\n\nasync function validateConfig(child: PluginUse): Promise<void> {\n const schema = child.plugin.Config;\n if (schema === undefined) return;\n const result = await schema['~standard'].validate(child.config);\n if ('issues' in result && result.issues) {\n throw new PluginCompositionError({\n code: 'plugin-config-invalid',\n expected: `${pluginName(child.plugin)} Plugin.Config to validate the child config`,\n hint: 'provide a valid config before the child side effect runs.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n}\n\nasync function validateChildren(children: readonly PluginUse[]): Promise<void> {\n const results = await Promise.allSettled(children.map((child) => validateConfig(child)));\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n}\n\nfunction childFailure(child: PluginUse, _reason: unknown): PluginCompositionError {\n return new PluginCompositionError({\n code: 'plugin-group-child-failed',\n expected: `${pluginName(child.plugin)} to activate under its owning Group`,\n hint: 'repair the child and retry the Group update.',\n detail: { child: pluginName(child.plugin) },\n });\n}\n\nfunction sameConfig(left: unknown, right: unknown): boolean {\n return sameDataValue(left, right, new Set());\n}\n\nfunction sameDataValue(left: unknown, right: unknown, active: Set<object>): boolean {\n if (Object.is(left, right)) return true;\n if (left === null || right === null || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n const leftArray = Array.isArray(left);\n if (leftArray !== Array.isArray(right)) return false;\n const leftPrototype = Object.getPrototypeOf(left);\n const rightPrototype = Object.getPrototypeOf(right);\n if (leftArray) {\n if (leftPrototype !== Array.prototype || rightPrototype !== Array.prototype) return false;\n } else if (\n !(\n (leftPrototype === Object.prototype || leftPrototype === null) &&\n (rightPrototype === Object.prototype || rightPrototype === null) &&\n leftPrototype === rightPrototype\n )\n ) {\n return false;\n }\n if (active.has(left)) return false;\n active.add(left);\n try {\n const leftKeys = Reflect.ownKeys(left).filter((key) => !leftArray || key !== 'length');\n const rightKeys = Reflect.ownKeys(right).filter((key) => !leftArray || key !== 'length');\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!Object.hasOwn(right, key)) return false;\n const leftDescriptor = Object.getOwnPropertyDescriptor(left, key);\n const rightDescriptor = Object.getOwnPropertyDescriptor(right, key);\n if (\n leftDescriptor === undefined ||\n rightDescriptor === undefined ||\n !('value' in leftDescriptor) ||\n !('value' in rightDescriptor) ||\n !sameDataValue(leftDescriptor.value, rightDescriptor.value, active)\n ) {\n return false;\n }\n }\n return true;\n } finally {\n active.delete(left);\n }\n}\n\nfunction startChild(ctx: Context, child: PluginUse): ChildRecord {\n let fiber: Fiber | undefined;\n try {\n fiber = ctx.plugin(child.plugin, child.config);\n return { key: keyFor(child), plugin: child.plugin, config: child.config, fiber };\n } catch (reason) {\n if (fiber !== undefined) void fiber.dispose();\n if (reason instanceof PluginCompositionError) throw reason;\n throw childFailure(child, reason);\n }\n}\n\nasync function activateChild(ctx: Context, child: PluginUse): Promise<ChildRecord> {\n const record = startChild(ctx, child);\n await record.fiber.await();\n return record;\n}\n\nfunction recordUse(record: ChildRecord): PluginUse {\n return {\n plugin: record.plugin,\n config: record.config,\n ...(typeof record.key === 'string' ? { key: record.key } : {}),\n };\n}\n\nfunction sharesProvidedService(left: Plugin, right: Plugin): boolean {\n const rightServices = new Set(providedNames(right));\n return providedNames(left).some((service) => rightServices.has(service));\n}\n\nasync function restoreRecord(\n ctx: Context,\n record: ChildRecord,\n config: unknown,\n): Promise<ChildRecord> {\n try {\n await record.fiber.update(config);\n await record.fiber.await();\n return { ...record, config };\n } catch (updateReason) {\n if (record.fiber.uid !== null) await record.fiber.dispose();\n try {\n return await activateChild(ctx, { ...recordUse(record), config });\n } catch (restoreReason) {\n throw restoreReason ?? updateReason;\n }\n }\n}\n\nasync function settleRecords(\n records: readonly ChildRecord[],\n abort: Promise<unknown> | undefined,\n): Promise<void> {\n if (records.length === 0) return;\n const outcomes = records.map((record, index) =>\n record.fiber.await().then(\n () => ({ index, reason: undefined }),\n (reason: unknown) => ({ index, reason }),\n ),\n );\n const pending = new Set(outcomes);\n const abortSignal =\n abort === undefined\n ? undefined\n : abort.then((reason) => ({ index: -1, reason, aborted: true as const }));\n while (pending.size > 0) {\n const outcome = await Promise.race([\n ...pending,\n ...(abortSignal === undefined ? [] : [abortSignal]),\n ]);\n if ('aborted' in outcome) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n if (outcome.reason instanceof ChildOperationFailure) {\n throw new ChildOperationFailure(\n outcome.reason.child,\n outcome.reason.reason,\n cleanupFailures,\n );\n }\n throw outcome.reason;\n }\n const completed = outcomes[outcome.index];\n if (completed !== undefined) pending.delete(completed);\n if (outcome.reason !== undefined) {\n const record = records[outcome.index];\n if (record !== undefined) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n throw new ChildOperationFailure(recordUse(record), outcome.reason, cleanupFailures);\n }\n throw outcome.reason;\n }\n }\n}\n\nasync function disposeRecordsInReverse(records: readonly ChildRecord[]): Promise<unknown[]> {\n const failures: unknown[] = [];\n for (const record of [...records].reverse()) {\n try {\n await record.fiber.dispose();\n } catch (reason) {\n failures.push(reason);\n }\n }\n return failures;\n}\n\nasync function reconcile(\n ctx: Context,\n state: GroupState,\n children: readonly PluginUse[],\n): Promise<void> {\n validateKeys(children);\n const groupOwnedServices = new Set<string>();\n for (const record of state.records.values()) {\n for (const service of providedNames(record.plugin)) groupOwnedServices.add(service);\n }\n const ordered = orderedChildren(ctx, children, groupOwnedServices);\n await validateChildren(ordered);\n const desired = new Map(ordered.map((child) => [keyFor(child), child] as const));\n const removed = [...state.records.values()].filter((record) => !desired.has(record.key));\n const changed: Array<{ record: ChildRecord; child: PluginUse; config: unknown }> = [];\n const candidateChildren: PluginUse[] = [];\n const replacements: Array<{ old: ChildRecord; child: PluginUse }> = [];\n const released: ChildRecord[] = [];\n const retired: ChildRecord[] = [];\n const candidates: ChildRecord[] = [];\n\n for (const child of ordered) {\n const current = state.records.get(keyFor(child));\n if (current === undefined) {\n candidateChildren.push(child);\n } else if (current.plugin !== child.plugin) {\n candidateChildren.push(child);\n replacements.push({ old: current, child });\n } else if (!sameConfig(current.config, child.config)) {\n changed.push({ record: current, child, config: current.config });\n }\n }\n\n const desiredServiceProviders = candidateChildren.filter(\n (child) => providedNames(child.plugin).length > 0,\n );\n for (const record of removed) {\n if (\n desiredServiceProviders.some((child) => sharesProvidedService(record.plugin, child.plugin))\n ) {\n released.push(record);\n }\n }\n for (const { old, child } of replacements) {\n if (sharesProvidedService(old.plugin, child.plugin) && !released.includes(old)) {\n released.push(old);\n }\n }\n\n try {\n const releaseResults = await Promise.allSettled(\n released.map((record) => record.fiber.dispose()),\n );\n const releaseFailureIndex = releaseResults.findIndex(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (releaseFailureIndex !== -1) {\n const releaseFailure = releaseResults[releaseFailureIndex];\n const releasedRecord = released[releaseFailureIndex];\n if (releaseFailure?.status === 'rejected' && releasedRecord !== undefined) {\n throw new ChildOperationFailure(recordUse(releasedRecord), releaseFailure.reason);\n }\n throw releaseFailure;\n }\n\n const updateTasks = changed.map(({ record, child }) => {\n return Promise.resolve()\n .then(() => record.fiber.update(child.config))\n .then(() => record.fiber.await())\n .catch((reason: unknown) => {\n throw new ChildOperationFailure(child, reason);\n });\n });\n for (const child of candidateChildren) candidates.push(startChild(ctx, child));\n const updateFailure =\n updateTasks.length === 0\n ? undefined\n : Promise.race(\n updateTasks.map((task) =>\n task.then(\n () => new Promise<never>(() => {}),\n (reason: unknown) => reason,\n ),\n ),\n );\n const results = await Promise.allSettled([\n settleRecords(candidates, updateFailure),\n ...updateTasks,\n ]);\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n for (const record of removed) {\n if (released.includes(record)) continue;\n retired.push(record);\n try {\n await record.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(record), retirementReason);\n }\n }\n for (const { old } of replacements) {\n if (released.includes(old)) continue;\n retired.push(old);\n try {\n await old.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(old), retirementReason);\n }\n }\n } catch (reason) {\n const operation = reason instanceof ChildOperationFailure ? reason : undefined;\n const primary = operation?.reason ?? reason;\n const rollbackFailures = operation?.cleanupFailures\n ? [...operation.cleanupFailures]\n : await disposeRecordsInReverse(candidates);\n for (const { record, config } of changed.reverse()) {\n try {\n const restored = await restoreRecord(ctx, record, config);\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of released.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of retired.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n const fallback = operation?.child ?? ordered[0];\n const primaryError =\n primary instanceof PluginCompositionError\n ? primary\n : fallback === undefined\n ? primary\n : childFailure(fallback, primary);\n if (rollbackFailures.length > 0) {\n throw new AggregateError(\n [primaryError, ...rollbackFailures],\n 'plugin Group reconciliation and rollback both failed',\n );\n }\n throw primaryError;\n }\n\n for (const record of removed) state.records.delete(record.key);\n for (const { old, child } of replacements) {\n state.records.delete(old.key);\n const next = candidates.find((record) => record.key === keyFor(child));\n if (next !== undefined) state.records.set(next.key, next);\n }\n for (const record of candidates) state.records.set(record.key, record);\n for (const { record, child } of changed) record.config = child.config;\n}\n\nexport function definePluginGroup<C = unknown>(options: PluginGroupOptions<C>): Plugin {\n const group: Plugin.Object = {\n name: options.name,\n async apply(ctx, config) {\n const owner = ctx.fiber as Fiber & { [groupStateKey]?: GroupState };\n let state = owner[groupStateKey];\n if (state === undefined) {\n state = { records: new Map() };\n owner[groupStateKey] = state;\n }\n ctx.effect(\n () => async () => {\n state.records.clear();\n delete owner[groupStateKey];\n },\n 'plugin-group-state',\n );\n ctx.on('internal/update', (nextConfig, _noSave, _next) =>\n reconcile(ctx, state, options.children(nextConfig as C)),\n );\n await reconcile(ctx, state, options.children(config as C));\n },\n };\n return group;\n}\n","import type { CatalogLoader, Entry, EntryOptions } from './loader.js';\n\nexport type CatalogPluginFiberState =\n | 'pending'\n | 'loading'\n | 'active'\n | 'failed'\n | 'disposed'\n | 'unloading'\n | 'disabled'\n | 'missing'\n | 'unavailable';\n\nexport interface CatalogPluginInspectionFailure {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CatalogPluginInspectionEntry extends EntryOptions {\n readonly entryId: string;\n readonly module: string;\n readonly realm: 'host' | 'engine' | 'build';\n readonly desiredState: 'enabled' | 'disabled';\n readonly fiberState: CatalogPluginFiberState;\n readonly parent?: string;\n readonly requiredServices: readonly string[];\n readonly providedServices: readonly string[];\n readonly configDigest: string;\n readonly failure?: CatalogPluginInspectionFailure;\n}\n\nexport interface CatalogPluginInspection {\n readonly live: readonly CatalogPluginInspectionEntry[];\n}\n\nconst FIBER_STATE_BY_CODE: readonly CatalogPluginFiberState[] = [\n 'pending',\n 'loading',\n 'active',\n 'failed',\n 'disposed',\n 'unloading',\n];\n\nfunction canonicalJson(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item)).join(',')}]`;\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`)\n .join(',')}}`;\n}\n\nfunction configDigest(value: unknown): string {\n let hash = 2166136261;\n for (const char of canonicalJson(value)) {\n hash ^= char.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n return `fnv1a:${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\nfunction requiredServices(inject: unknown): readonly string[] {\n if (Array.isArray(inject)) {\n return inject.filter((name): name is string => typeof name === 'string').sort();\n }\n if (inject !== null && typeof inject === 'object') return Object.keys(inject).sort();\n return [];\n}\n\nfunction providedServices(fiber: NonNullable<Entry['fiber']>): readonly string[] {\n const names = new Set<string>();\n const stores = [\n fiber.store,\n (fiber.ctx.reflect as unknown as { readonly store?: Record<PropertyKey, unknown> }).store,\n ];\n for (const store of stores) {\n if (store === undefined) continue;\n for (const key of Reflect.ownKeys(store)) {\n const value = (store as Record<PropertyKey, unknown>)[key];\n if (\n value !== null &&\n typeof value === 'object' &&\n 'fiber' in value &&\n ((value as { readonly fiber?: { readonly uid?: unknown } }).fiber === fiber ||\n (value as { readonly fiber?: { readonly uid?: unknown } }).fiber?.uid === fiber.uid) &&\n 'name' in value &&\n typeof (value as { readonly name?: unknown }).name === 'string'\n ) {\n names.add((value as { readonly name: string }).name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction failureFromFiber(\n fiber: NonNullable<Entry['fiber']>,\n): CatalogPluginInspectionFailure | undefined {\n if (fiber.state !== 3) return undefined;\n const cause = (fiber as unknown as { readonly _error?: unknown })._error;\n if (\n cause !== null &&\n typeof cause === 'object' &&\n typeof (cause as { readonly code?: unknown }).code === 'string' &&\n typeof (cause as { readonly expected?: unknown }).expected === 'string' &&\n typeof (cause as { readonly hint?: unknown }).hint === 'string' &&\n (cause as { readonly detail?: unknown }).detail !== null &&\n typeof (cause as { readonly detail?: unknown }).detail === 'object'\n ) {\n return {\n code: (cause as { readonly code: string }).code,\n expected: (cause as { readonly expected: string }).expected,\n hint: (cause as { readonly hint: string }).hint,\n detail: (cause as { readonly detail: Readonly<Record<string, unknown>> }).detail,\n };\n }\n return {\n code: 'plugin-fiber-failed',\n expected: 'the native Plugin Fiber to settle in an active state',\n hint: 'Read the owning Entry, repair its module/config or required service, then reconcile again.',\n detail: {\n reason: cause instanceof Error ? cause.message : String(cause ?? 'unknown failure'),\n },\n };\n}\n\nfunction projectLiveEntry(loader: CatalogLoader, entry: Entry): CatalogPluginInspectionEntry {\n const options = entry.options;\n const fiber = entry.fiber;\n const disabled = entry.disabled;\n const state = disabled\n ? 'disabled'\n : fiber === undefined\n ? 'missing'\n : (FIBER_STATE_BY_CODE[fiber.state] ?? 'unavailable');\n const parent = entry.parent?.ctx.fiber.entry?.id;\n const failure = fiber === undefined ? undefined : failureFromFiber(fiber);\n return {\n ...options,\n entryId: entry.id,\n module: options.name,\n realm: loader.realm,\n desiredState: disabled ? 'disabled' : 'enabled',\n fiberState: state,\n ...(parent === undefined ? {} : { parent }),\n requiredServices: requiredServices(fiber?.inject ?? options.inject),\n providedServices: fiber === undefined ? [] : providedServices(fiber),\n configDigest: configDigest(options.config),\n ...(failure === undefined ? {} : { failure }),\n };\n}\n\n/** Project the live native Loader tree without introducing another state owner. */\nexport function inspectCatalogPlugins(loader: CatalogLoader): CatalogPluginInspection {\n return { live: [...loader.entries()].map((entry) => projectLiveEntry(loader, entry)) };\n}\n","//#region lib/types/misc.js\n/** No-op callback returning `undefined` at runtime and `any` at type level. */\nfunction noop() {}\n/** Return true when a value is `null` or `undefined`. */\nfunction isNullable(value) {\n\treturn value === null || value === void 0;\n}\n/** Return true when a value is neither `null` nor `undefined`. */\nfunction isNonNullable(value) {\n\treturn !isNullable(value);\n}\n/** Return true for non-array object values. */\nfunction isPlainObject(data) {\n\treturn data && typeof data === \"object\" && !Array.isArray(data);\n}\n/** Filter object entries and return a new object. */\nfunction filterKeys(object, filter) {\n\treturn Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value)));\n}\n/** Map object values while preserving the original key set. */\nfunction mapValues(object, transform) {\n\treturn Object.fromEntries(Object.entries(object).map(([key, value]) => [key, transform(value, key)]));\n}\n/** Pick selected keys from an object, optionally including `undefined` values. */\nfunction pick(source, keys, forced) {\n\tif (!keys) return { ...source };\n\tconst result = {};\n\tfor (const key of keys) if (forced || source[key] !== void 0) result[key] = source[key];\n\treturn result;\n}\n/** Omit selected keys from a shallow object copy. */\nfunction omit(source, keys) {\n\tif (!keys) return { ...source };\n\tconst result = { ...source };\n\tfor (const key of keys) Reflect.deleteProperty(result, key);\n\treturn result;\n}\n/** Define a non-enumerable writable property and return the object. */\nfunction defineProperty(object, key, value) {\n\treturn Object.defineProperty(object, key, {\n\t\twritable: true,\n\t\tvalue,\n\t\tenumerable: false\n\t});\n}\n//#endregion\n//#region lib/types/array.js\n/** Return true when every item in `array2` is present in `array1`. */\nfunction contain(array1, array2) {\n\treturn array2.every((item) => array1.includes(item));\n}\n/** Return items that appear in both arrays. */\nfunction intersection(array1, array2) {\n\treturn array1.filter((item) => array2.includes(item));\n}\n/** Return items from `array1` that do not appear in `array2`. */\nfunction difference(array1, array2) {\n\treturn array1.filter((item) => !array2.includes(item));\n}\n/** Return the set-union of two arrays while preserving first occurrence order. */\nfunction union(array1, array2) {\n\treturn Array.from(new Set([...array1, ...array2]));\n}\n/** Remove duplicate values while preserving first occurrence order. */\nfunction deduplicate(array) {\n\treturn [...new Set(array)];\n}\n/** Remove one item from an array and report whether it was found. */\nfunction remove(list, item) {\n\tconst index = list?.indexOf(item);\n\tif (index >= 0) {\n\t\tlist.splice(index, 1);\n\t\treturn true;\n\t} else return false;\n}\n/** Normalize nullish, scalar, or array input to an array. */\nfunction makeArray(source) {\n\treturn Array.isArray(source) ? source : isNullable(source) ? [] : [source];\n}\n//#endregion\n//#region lib/types/types.js\n/** Test values using `instanceof` with a `toStringTag` fallback. */\nfunction is(type, value) {\n\tif (arguments.length === 1) return (value) => is(type, value);\n\treturn type in globalThis && value instanceof globalThis[type] || Object.prototype.toString.call(value).slice(8, -1) === type;\n}\nfunction isArrayBufferLike(value) {\n\treturn is(\"ArrayBuffer\", value) || is(\"SharedArrayBuffer\", value);\n}\nfunction isArrayBufferSource(value) {\n\treturn isArrayBufferLike(value) || ArrayBuffer.isView(value);\n}\n/** Binary source detection and base64/hex conversion helpers. */\nvar Binary;\n(function(Binary) {\n\tBinary.is = isArrayBufferLike;\n\tBinary.isSource = isArrayBufferSource;\n\tfunction fromSource(source) {\n\t\tif (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);\n\t\telse return source;\n\t}\n\tBinary.fromSource = fromSource;\n\tfunction toBase64(source) {\n\t\tsource = fromSource(source);\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(source).toString(\"base64\");\n\t\tlet binary = \"\";\n\t\tconst bytes = new Uint8Array(source);\n\t\tfor (let i = 0; i < bytes.byteLength; i++) binary += String.fromCharCode(bytes[i]);\n\t\treturn btoa(binary);\n\t}\n\tBinary.toBase64 = toBase64;\n\tfunction fromBase64(source) {\n\t\tif (typeof Buffer !== \"undefined\") return fromSource(Buffer.from(source, \"base64\"));\n\t\treturn Uint8Array.from(atob(source), (c) => c.charCodeAt(0));\n\t}\n\tBinary.fromBase64 = fromBase64;\n\tfunction toHex(source) {\n\t\tsource = fromSource(source);\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(source).toString(\"hex\");\n\t\treturn Array.from(new Uint8Array(source), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n\t}\n\tBinary.toHex = toHex;\n\tfunction fromHex(source) {\n\t\tif (typeof Buffer !== \"undefined\") return fromSource(Buffer.from(source, \"hex\"));\n\t\tconst hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1);\n\t\tconst buffer = [];\n\t\tfor (let i = 0; i < hex.length; i += 2) buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16));\n\t\treturn Uint8Array.from(buffer).buffer;\n\t}\n\tBinary.fromHex = fromHex;\n})(Binary || (Binary = {}));\n/** Decode a base64 string into binary data. */\nconst base64ToArrayBuffer = Binary.fromBase64;\n/** Encode binary data as base64. */\nconst arrayBufferToBase64 = Binary.toBase64;\n/** Decode a hex string into binary data. */\nconst hexToArrayBuffer = Binary.fromHex;\n/** Encode binary data as hex. */\nconst arrayBufferToHex = Binary.toHex;\n/** Deep-clone common JavaScript values while preserving prototypes and cycles. */\nfunction clone(source, refs = /* @__PURE__ */ new Map()) {\n\tif (!source || typeof source !== \"object\") return source;\n\tif (is(\"Date\", source)) return new Date(source.valueOf());\n\tif (is(\"RegExp\", source)) return new RegExp(source.source, source.flags);\n\tif (isArrayBufferLike(source)) return source.slice(0);\n\tif (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);\n\tconst cached = refs.get(source);\n\tif (cached) return cached;\n\tif (Array.isArray(source)) {\n\t\tconst result = [];\n\t\trefs.set(source, result);\n\t\tsource.forEach((value, index) => {\n\t\t\tresult[index] = Reflect.apply(clone, null, [value, refs]);\n\t\t});\n\t\treturn result;\n\t}\n\tconst result = Object.create(Object.getPrototypeOf(source));\n\trefs.set(source, result);\n\tfor (const key of Reflect.ownKeys(source)) {\n\t\tconst descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) };\n\t\tif (\"value\" in descriptor) descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs]);\n\t\tReflect.defineProperty(result, key, descriptor);\n\t}\n\treturn result;\n}\n/** Deeply compare arrays, dates, regexps, buffers, and plain object fields. */\nfunction deepEqual(a, b, strict) {\n\tif (a === b) return true;\n\tif (!strict && isNullable(a) && isNullable(b)) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (typeof a !== \"object\") return false;\n\tif (!a || !b) return false;\n\tfunction check(test, then) {\n\t\treturn test(a) ? test(b) ? then(a, b) : false : test(b) ? false : void 0;\n\t}\n\treturn check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index]))) ?? check(is(\"Date\"), (a, b) => a.valueOf() === b.valueOf()) ?? check(is(\"RegExp\"), (a, b) => a.source === b.source && a.flags === b.flags) ?? check(isArrayBufferLike, (a, b) => {\n\t\tif (a.byteLength !== b.byteLength) return false;\n\t\tconst viewA = new Uint8Array(a);\n\t\tconst viewB = new Uint8Array(b);\n\t\tfor (let i = 0; i < viewA.length; i++) if (viewA[i] !== viewB[i]) return false;\n\t\treturn true;\n\t}) ?? Object.keys({\n\t\t...a,\n\t\t...b\n\t}).every((key) => deepEqual(a[key], b[key], strict));\n}\n//#endregion\n//#region lib/types/string.js\n/** Uppercase the first character of a string. */\nfunction capitalize(source) {\n\treturn source.charAt(0).toUpperCase() + source.slice(1);\n}\n/** Lowercase the first character of a string. */\nfunction uncapitalize(source) {\n\treturn source.charAt(0).toLowerCase() + source.slice(1);\n}\n/** Convert dash or underscore delimited text to camelCase. */\nfunction camelCase(source) {\n\treturn source.replace(/[_-][a-z]/g, (str) => str.slice(1).toUpperCase());\n}\nfunction tokenize(source, delimiters, delimiter) {\n\tconst output = [];\n\tlet state = 0;\n\tfor (let i = 0; i < source.length; i++) {\n\t\tconst code = source.charCodeAt(i);\n\t\tif (code >= 65 && code <= 90) {\n\t\t\tif (state === 1) {\n\t\t\t\tconst next = source.charCodeAt(i + 1);\n\t\t\t\tif (next >= 97 && next <= 122) output.push(delimiter);\n\t\t\t\toutput.push(code + 32);\n\t\t\t} else {\n\t\t\t\tif (state !== 0) output.push(delimiter);\n\t\t\t\toutput.push(code + 32);\n\t\t\t}\n\t\t\tstate = 1;\n\t\t} else if (code >= 97 && code <= 122) {\n\t\t\toutput.push(code);\n\t\t\tstate = 2;\n\t\t} else if (delimiters.includes(code)) {\n\t\t\tif (state !== 0) output.push(delimiter);\n\t\t\tstate = 0;\n\t\t} else output.push(code);\n\t}\n\treturn String.fromCharCode(...output);\n}\n/** Convert text to dash-delimited parameter case. */\nfunction paramCase(source) {\n\treturn tokenize(source, [45, 95], 45);\n}\n/** Convert text to underscore-delimited snake case. */\nfunction snakeCase(source) {\n\treturn tokenize(source, [45, 95], 95);\n}\n/** Runtime alias for `camelCase`. */\nconst camelize = camelCase;\n/** Runtime alias for `paramCase`. */\nconst hyphenate = paramCase;\n/** Format a property key as a JavaScript member access suffix. */\nfunction formatProperty(key) {\n\tif (typeof key !== \"string\") return `[${key.toString()}]`;\n\treturn /^[a-z_$][\\w$]*$/i.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`;\n}\n/** Remove one trailing slash from a path string. */\nfunction trimSlash(source) {\n\treturn source.replace(/\\/$/, \"\");\n}\n/** Ensure a path starts with `/` and has no trailing slash. */\nfunction sanitize(source) {\n\tif (!source.startsWith(\"/\")) source = \"/\" + source;\n\treturn trimSlash(source);\n}\n//#endregion\n//#region lib/types/time.js\n/** Time constants plus parsing and formatting helpers. */\nvar Time;\n(function(Time) {\n\tTime.millisecond = 1;\n\tTime.second = 1e3;\n\tTime.minute = Time.second * 60;\n\tTime.hour = Time.minute * 60;\n\tTime.day = Time.hour * 24;\n\tTime.week = Time.day * 7;\n\tlet timezoneOffset = (/* @__PURE__ */ new Date()).getTimezoneOffset();\n\tfunction setTimezoneOffset(offset) {\n\t\ttimezoneOffset = offset;\n\t}\n\tTime.setTimezoneOffset = setTimezoneOffset;\n\tfunction getTimezoneOffset() {\n\t\treturn timezoneOffset;\n\t}\n\tTime.getTimezoneOffset = getTimezoneOffset;\n\tfunction getDateNumber(date = /* @__PURE__ */ new Date(), offset) {\n\t\tif (typeof date === \"number\") date = new Date(date);\n\t\tif (offset === void 0) offset = timezoneOffset;\n\t\treturn Math.floor((date.valueOf() / Time.minute - offset) / 1440);\n\t}\n\tTime.getDateNumber = getDateNumber;\n\tfunction fromDateNumber(value, offset) {\n\t\tconst date = new Date(value * Time.day);\n\t\tif (offset === void 0) offset = timezoneOffset;\n\t\treturn new Date(+date + offset * Time.minute);\n\t}\n\tTime.fromDateNumber = fromDateNumber;\n\tconst numeric = /\\d+(?:\\.\\d+)?/.source;\n\tconst timeRegExp = new RegExp(`^${[\n\t\t\"w(?:eek(?:s)?)?\",\n\t\t\"d(?:ay(?:s)?)?\",\n\t\t\"h(?:our(?:s)?)?\",\n\t\t\"m(?:in(?:ute)?(?:s)?)?\",\n\t\t\"s(?:ec(?:ond)?(?:s)?)?\"\n\t].map((unit) => `(${numeric}${unit})?`).join(\"\")}$`);\n\tfunction parseTime(source) {\n\t\tconst capture = timeRegExp.exec(source);\n\t\tif (!capture) return 0;\n\t\treturn (parseFloat(capture[1]) * Time.week || 0) + (parseFloat(capture[2]) * Time.day || 0) + (parseFloat(capture[3]) * Time.hour || 0) + (parseFloat(capture[4]) * Time.minute || 0) + (parseFloat(capture[5]) * Time.second || 0);\n\t}\n\tTime.parseTime = parseTime;\n\tfunction parseDate(date) {\n\t\tconst parsed = parseTime(date);\n\t\tif (parsed) date = Date.now() + parsed;\n\t\telse if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).toLocaleDateString()}-${date}`;\n\t\telse if (/^\\d{1,2}-\\d{1,2}-\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).getFullYear()}-${date}`;\n\t\treturn date ? new Date(date) : /* @__PURE__ */ new Date();\n\t}\n\tTime.parseDate = parseDate;\n\tfunction format(ms) {\n\t\tconst abs = Math.abs(ms);\n\t\tif (abs >= Time.day - Time.hour / 2) return Math.round(ms / Time.day) + \"d\";\n\t\telse if (abs >= Time.hour - Time.minute / 2) return Math.round(ms / Time.hour) + \"h\";\n\t\telse if (abs >= Time.minute - Time.second / 2) return Math.round(ms / Time.minute) + \"m\";\n\t\telse if (abs >= Time.second) return Math.round(ms / Time.second) + \"s\";\n\t\treturn ms + \"ms\";\n\t}\n\tTime.format = format;\n\tfunction toDigits(source, length = 2) {\n\t\treturn source.toString().padStart(length, \"0\");\n\t}\n\tTime.toDigits = toDigits;\n\tfunction template(template, time = /* @__PURE__ */ new Date()) {\n\t\treturn template.replace(\"yyyy\", time.getFullYear().toString()).replace(\"yy\", time.getFullYear().toString().slice(2)).replace(\"MM\", toDigits(time.getMonth() + 1)).replace(\"dd\", toDigits(time.getDate())).replace(\"hh\", toDigits(time.getHours())).replace(\"mm\", toDigits(time.getMinutes())).replace(\"ss\", toDigits(time.getSeconds())).replace(\"SSS\", toDigits(time.getMilliseconds(), 3));\n\t}\n\tTime.template = template;\n})(Time || (Time = {}));\n//#endregion\nexport { Binary, Time, arrayBufferToBase64, arrayBufferToHex, base64ToArrayBuffer, camelCase, camelize, capitalize, clone, contain, deduplicate, deepEqual, defineProperty, difference, filterKeys, formatProperty, hexToArrayBuffer, hyphenate, intersection, is, isNonNullable, isNullable, isPlainObject, makeArray, mapValues, mapValues as valueMap, noop, omit, paramCase, pick, remove, sanitize, snakeCase, trimSlash, uncapitalize, union };\n","import { Context, Inject, Service, composeError } from \"@deepseek-ai/cordis\";\nimport { deepEqual, defineProperty, isNonNullable, isNullable, valueMap } from \"@deepseek-ai/cosmokit\";\n//#region lib/types/internal.js\n/** Helpers for locating the current Node internal module loader. */\nvar ModuleLoader;\n(function(ModuleLoader) {\n\tlet _cachedLoader;\n\tfunction fromInternal() {\n\t\tif (_cachedLoader) return _cachedLoader;\n\t}\n\tModuleLoader.fromInternal = fromInternal;\n})(ModuleLoader || (ModuleLoader = {}));\n//#endregion\n//#region lib/types/config/group.js\n/** Runtime owner for a list of child loader entries. */\nvar EntryGroup = class {\n\tctx;\n\ttree;\n\tstatic key = Symbol.for(\"cordis.group\");\n\tdata = [];\n\tconstructor(ctx, tree) {\n\t\tthis.ctx = ctx;\n\t\tthis.tree = tree;\n\t\tconst entry = ctx.fiber.entry;\n\t\tif (entry) entry.subgroup = this;\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\tasync create(options) {\n\t\tconst id = this.tree.ensureId(options);\n\t\tconst existing = this.tree.store[id];\n\t\tconst entry = existing ?? (this.tree.store[id] = new Entry(this.ctx.loader));\n\t\tconst previousParent = entry.parent;\n\t\tentry.parent = this;\n\t\ttry {\n\t\t\tawait entry.update(options, true, true);\n\t\t} catch (error) {\n\t\t\tif (existing) entry.parent = previousParent;\n\t\t\telse delete this.tree.store[id];\n\t\t\tthrow error;\n\t\t}\n\t\treturn entry.id;\n\t}\n\tunlink(options) {\n\t\tconst config = this.data;\n\t\tconst index = config.indexOf(options);\n\t\tif (index >= 0) config.splice(index, 1);\n\t}\n\tasync remove(id, isDispose = false) {\n\t\tconst entry = this.tree.store[id];\n\t\tif (!entry) return;\n\t\tawait entry._dispose();\n\t\tif (!isDispose) this.unlink(entry.options);\n\t\tdelete this.tree.store[id];\n\t\tthis.context.emit(\"loader/partial-dispose\", entry, entry.options, false);\n\t}\n\tasync update(config) {\n\t\tconst oldConfig = this.data;\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tfor (const options of config) {\n\t\t\tconst id = this.tree.ensureId(options);\n\t\t\tif (seen.has(id)) throw new TypeError(`duplicate loader entry id: ${id}`);\n\t\t\tseen.add(id);\n\t\t}\n\t\tconst oldMap = Object.fromEntries(oldConfig.map((options) => [options.id, options]));\n\t\tconst newMap = Object.fromEntries(config.map((options) => [options.id, options]));\n\t\ttry {\n\t\t\tconst outcomes = await Promise.allSettled(config.map((options) => this.create(options)));\n\t\t\tif (this.ctx.fiber.uid === null) return;\n\t\t\tconst failures = outcomes.filter((outcome) => outcome.status === \"rejected\").map((outcome) => outcome.reason);\n\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\tif (failures.length > 1) throw new AggregateError(failures, \"loader entries failed to apply\");\n\t\t\tfor (const id of Object.keys(oldMap)) if (!newMap[id]) await this.remove(id, true);\n\t\t\tthis.data = config;\n\t\t} catch (error) {\n\t\t\tconst rollbackErrors = [];\n\t\t\tfor (const id of Object.keys(newMap).reverse()) {\n\t\t\t\tif (oldMap[id]) continue;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.remove(id, true);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\trollbackErrors.push(rollbackError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const options of oldConfig) try {\n\t\t\t\tawait this.create(options);\n\t\t\t} catch (rollbackError) {\n\t\t\t\trollbackErrors.push(rollbackError);\n\t\t\t}\n\t\t\tthis.data = oldConfig;\n\t\t\tif (rollbackErrors.length) throw new AggregateError([error, ...rollbackErrors], \"loader entry rollback failed\");\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync stop() {\n\t\tfor (const options of this.data) await this.remove(options.id, true);\n\t}\n};\n/** Plugin that mounts a nested loader entry group. */\nvar Group = class extends EntryGroup {\n\tctx;\n\tconfig;\n\tstatic initial = [];\n\tstatic [EntryGroup.key] = true;\n\tconstructor(ctx, config) {\n\t\tsuper(ctx, ctx.fiber.entry.parent.tree);\n\t\tthis.ctx = ctx;\n\t\tthis.config = config;\n\t\tctx.on(\"internal/update\", (config) => this.update(config));\n\t}\n\tasync *[Service.init]() {\n\t\tyield () => this.stop();\n\t\tawait this.update(this.config);\n\t}\n};\n//#endregion\n//#region lib/types/config/tree.js\nvar __rewriteRelativeImportExtension = function(path, preserveJsx) {\n\tif (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {\n\t\treturn tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n\t});\n\treturn path;\n};\n/** Mutable tree of loader entries. Persistence is supplied by subclasses. */\nvar EntryTree = class EntryTree {\n\tstatic sep = \":\";\n\tctx;\n\tenableLogs;\n\troot;\n\tstore = Object.create(null);\n\tconstructor(ctx) {\n\t\tthis.ctx = ctx.extend({ baseUrl: ctx.baseUrl });\n\t\tthis.root = new EntryGroup(this.ctx, this);\n\t\tconst entry = this.ctx.fiber.entry;\n\t\tif (entry) entry.subtree = this;\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\t/** Iterate entries in this tree and any nested subtrees. */\n\t*entries() {\n\t\tfor (const entry of Object.values(this.store)) {\n\t\t\tyield entry;\n\t\t\tif (!entry.subtree) continue;\n\t\t\tyield* entry.subtree.entries();\n\t\t}\n\t}\n\t/** Return pending import and lifecycle tasks owned by this tree. */\n\tgetTasks() {\n\t\treturn [...this.entries()].map((entry) => entry._initTask || entry.fiber?.inertia).filter(isNonNullable);\n\t}\n\t/**\n\t* Wait until this tree has no active import or lifecycle tasks.\n\t* @throws a settled fiber failure, or an aggregate when several fibers failed.\n\t*/\n\tasync await() {\n\t\twhile (true) {\n\t\t\tconst tasks = this.getTasks();\n\t\t\tif (tasks.length) {\n\t\t\t\tawait Promise.allSettled(tasks);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst failures = (await Promise.allSettled([...this.entries()].map((entry) => entry._await()))).filter((outcome) => outcome.status === \"rejected\").map((outcome) => outcome.reason);\n\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\tif (failures.length > 1) throw new AggregateError(failures, \"loader fibers failed\");\n\t\t\tthis.ctx.reflect.notify([\"loader\"]);\n\t\t\tif (!this.getTasks().length) return;\n\t\t}\n\t}\n\tensureId(options) {\n\t\tif (!options.id) do\n\t\t\toptions.id = Math.random().toString(16).slice(2, 10);\n\t\twhile (this.store[options.id]);\n\t\treturn options.id;\n\t}\n\t/** Resolve an entry by id, including nested ids separated by `EntryTree.sep`. */\n\tresolve(id) {\n\t\tconst parts = id.split(EntryTree.sep);\n\t\tlet tree = this;\n\t\tconst final = parts.pop();\n\t\tfor (const part of parts) {\n\t\t\ttree = tree.store[part]?.subtree;\n\t\t\tif (!tree) throw new Error(`cannot resolve entry ${id}`);\n\t\t}\n\t\tconst entry = tree.store[final];\n\t\tif (!entry) throw new Error(`cannot resolve entry ${id}`);\n\t\treturn entry;\n\t}\n\tresolveGroup(id) {\n\t\tif (!id) return this.root;\n\t\tconst entry = this.resolve(id);\n\t\tif (!entry.subgroup) throw new Error(`entry ${id} is not a group`);\n\t\treturn entry.subgroup;\n\t}\n\t/** Create an entry in the root group or a nested group. */\n\tasync create(options, parent = null, position = Infinity) {\n\t\tconst group = this.resolveGroup(parent);\n\t\tconst id = await group.create(options);\n\t\tconst entry = this.resolve(id);\n\t\tgroup.data.splice(position, 0, entry.options);\n\t\tgroup.tree.write();\n\t\treturn id;\n\t}\n\t/** Stop and remove an entry from its parent group. */\n\tasync remove(id) {\n\t\tconst entry = this.resolve(id);\n\t\tawait entry.parent.remove(id);\n\t\tentry.parent.tree.write();\n\t}\n\t/** Update an entry and optionally move it to another group. */\n\tasync update(id, options, parent, position) {\n\t\tconst entry = this.resolve(id);\n\t\tconst source = entry.parent;\n\t\tconst sourceIndex = source.data.indexOf(entry.options);\n\t\tlet target = source;\n\t\tif (parent !== void 0) {\n\t\t\ttarget = this.resolveGroup(parent);\n\t\t\tsource.unlink(entry.options);\n\t\t\ttarget.data.splice(position ?? Infinity, 0, entry.options);\n\t\t\tentry.parent = target;\n\t\t}\n\t\ttry {\n\t\t\tawait entry.update(options, false, true);\n\t\t} catch (error) {\n\t\t\tif (parent !== void 0) {\n\t\t\t\ttarget.unlink(entry.options);\n\t\t\t\tsource.data.splice(sourceIndex < 0 ? source.data.length : sourceIndex, 0, entry.options);\n\t\t\t\tentry.parent = source;\n\t\t\t\ttry {\n\t\t\t\t\tawait entry.update({}, false, true);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow new AggregateError([error, rollbackError], `failed to roll back loader entry move ${id}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tsource.tree.write();\n\t\tif (target !== source) target.tree.write();\n\t}\n\t/** Import a plugin module from a specifier or `cordis:` builtin. */\n\timport(name, getOuterStack) {\n\t\tif (name.startsWith(\"cordis:\")) return this.ctx.loader.builtins[name.slice(7)];\n\t\treturn composeError(async (info) => {\n\t\t\tinfo.offset += 3;\n\t\t\tif (this.ctx.loader.internal) return await this.ctx.loader.internal.import(name, this.ctx.baseUrl, {});\n\t\t\telse if (name.startsWith(\".\")) return await import(__rewriteRelativeImportExtension(\n\t\t\t\t/* @vite-ignore */\n\t\t\t\tnew URL(name, this.ctx.baseUrl).href\n\t\t\t));\n\t\t\telse return await import(__rewriteRelativeImportExtension(\n\t\t\t\t/* @vite-ignore */\n\t\t\t\tname\n\t\t\t));\n\t\t}, getOuterStack);\n\t}\n};\n//#endregion\n//#region lib/types/config/utils.js\n/** Evaluate a JavaScript expression against a loader context scope. */\nconst evaluate = new Function(\"ctx\", \"expr\", `\n with (ctx) {\n return eval(expr)\n }\n`);\n/** Recursively replace YAML `!js` expression nodes with evaluated values. */\nfunction interpolate(ctx, value) {\n\tif (isJsExpr(value)) return evaluate(ctx, value.__jsExpr);\n\telse if (!value || typeof value !== \"object\") return value;\n\telse if (Array.isArray(value)) return value.map((item) => interpolate(ctx, item));\n\telse return valueMap(value, (item) => interpolate(ctx, item));\n}\n/** Return true when a value is a serialized loader JavaScript expression. */\nfunction isJsExpr(value) {\n\treturn value instanceof Object && \"__jsExpr\" in value;\n}\n//#endregion\n//#region lib/types/config/entry.js\nfunction updateError(stage, options, cause) {\n\tconst detail = cause instanceof Error ? cause.message : String(cause);\n\treturn new Error(`failed to ${stage} loader entry ${options.id} (${options.name}): ${detail}`, { cause });\n}\nfunction takeEntries(object, keys) {\n\tconst result = [];\n\tfor (const key of keys) {\n\t\tif (!(key in object)) continue;\n\t\tresult.push([key, object[key]]);\n\t\tdelete object[key];\n\t}\n\treturn result;\n}\nfunction sortKeys(object, prepend = [\"id\", \"name\"], append = [\"config\"]) {\n\tconst part1 = takeEntries(object, prepend);\n\tconst part2 = takeEntries(object, append);\n\tconst rest = takeEntries(object, Object.keys(object)).sort(([a], [b]) => a.localeCompare(b));\n\treturn Object.assign(object, Object.fromEntries([\n\t\t...part1,\n\t\t...rest,\n\t\t...part2\n\t]));\n}\nfunction replaceKeys(target, source) {\n\tfor (const key of Object.keys(target)) Reflect.deleteProperty(target, key);\n\treturn Object.assign(target, source);\n}\n/** One configured plugin node inside an `EntryTree`. */\nvar Entry = class Entry {\n\tloader;\n\tstatic key = Symbol.for(\"cordis.entry\");\n\tctx;\n\tfiber;\n\tparent;\n\toptions = {};\n\tsubgroup;\n\tsubtree;\n\t_initTask;\n\t_disposing = 0;\n\tconstructor(loader) {\n\t\tthis.loader = loader;\n\t\tthis.ctx = loader.ctx.extend({ [Entry.key]: this });\n\t\tthis.context.emit(\"loader/entry-init\", this);\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\tget id() {\n\t\tlet id = this.options.id;\n\t\tif (this.parent.tree.ctx.fiber.entry) id = this.parent.tree.ctx.fiber.entry.id + EntryTree.sep + id;\n\t\treturn id;\n\t}\n\t/** True when this entry or any owning parent entry is disabled. */\n\tget disabled() {\n\t\treturn this._disabled(this.options);\n\t}\n\t_disabled(options) {\n\t\tif (options.group) return false;\n\t\tif (this.disabledOf(options)) return true;\n\t\tlet entry = this.parent.ctx.fiber.entry;\n\t\twhile (entry) {\n\t\t\tif (this.disabledOf(entry.options)) return true;\n\t\t\tentry = entry.parent.ctx.fiber.entry;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Effective disabled state: a `!!js` expression evaluates against the loader\n\t* context. The raw node stays in the options, so write-back keeps the form.\n\t*/\n\tdisabledOf(options) {\n\t\treturn isJsExpr(options.disabled) ? Boolean(this.evaluate(options.disabled.__jsExpr)) : Boolean(options.disabled);\n\t}\n\tevaluate(expr) {\n\t\treturn evaluate(this.ctx, expr);\n\t}\n\tasync _patchContext(diff) {\n\t\tawait this.context.waterfall(\"loader/patch-context\", this, async () => {\n\t\t\tObject.setPrototypeOf(this.ctx, this.parent.ctx);\n\t\t\tif (this.fiber?.uid && (diff.includes(\"config\") || this.options.group)) await this.fiber.update(this.options.config, true);\n\t\t});\n\t}\n\tasync refresh() {\n\t\tif (this.fiber) return;\n\t\tif (this.disabled) return;\n\t\tawait this.init();\n\t}\n\tasync _dispose(fiber = this.fiber) {\n\t\tif (!fiber) return;\n\t\tif (this.fiber === fiber) this.fiber = void 0;\n\t\tthis._disposing += 1;\n\t\ttry {\n\t\t\tawait fiber.dispose();\n\t\t} finally {\n\t\t\tthis._disposing -= 1;\n\t\t}\n\t}\n\t/** Merge new options, restart as needed, and persist through the parent tree. */\n\tasync update(options, create = false, force = false) {\n\t\tconst previousOptions = this.options;\n\t\tconst legacy = { ...previousOptions };\n\t\tconst candidate = create ? options : { ...previousOptions };\n\t\tif (!create) for (const [key, value] of Object.entries(options)) if (isNullable(value)) delete candidate[key];\n\t\telse candidate[key] = value;\n\t\tsortKeys(candidate);\n\t\tconst diff = Object.keys({\n\t\t\t...candidate,\n\t\t\t...legacy\n\t\t}).filter((key) => !deepEqual(candidate[key], legacy[key]));\n\t\tif (!diff.length && !force) return;\n\t\tconst commit = () => {\n\t\t\tif (create) return;\n\t\t\tthis.options = replaceKeys(previousOptions, candidate);\n\t\t};\n\t\tconst previous = this.fiber;\n\t\tif (!previous?.uid) {\n\t\t\tthis.fiber = void 0;\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tif (!this._disabled(candidate)) await this.init();\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tcommit();\n\t\t\treturn;\n\t\t}\n\t\tif (this._disabled(candidate)) {\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tawait this._dispose(previous);\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\tthrow updateError(\"dispose\", candidate, error);\n\t\t\t}\n\t\t\tcommit();\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t\t\treturn;\n\t\t}\n\t\tif (!diff.some((key) => key === \"name\" || key === \"inject\" || key === \"group\")) {\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tawait this._patchContext(diff);\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\ttry {\n\t\t\t\t\tawait this._patchContext(diff);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow updateError(\"rollback\", legacy, new AggregateError([error, rollbackError]));\n\t\t\t\t}\n\t\t\t\tthis.context.emit(\"loader/partial-dispose\", this, candidate, true);\n\t\t\t\tthrow updateError(\"apply\", candidate, error);\n\t\t\t}\n\t\t\tcommit();\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t\t\treturn;\n\t\t}\n\t\tlet plugin;\n\t\ttry {\n\t\t\tplugin = diff.includes(\"name\") ? this.loader.unwrapExports(await this.parent.tree.import(candidate.name, this.getOuterStack)) : previous.runtime.callback;\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"import\", candidate, error);\n\t\t}\n\t\tconst previousPlugin = previous.runtime.callback;\n\t\tthis.options = candidate;\n\t\ttry {\n\t\t\tawait this._dispose(previous);\n\t\t} catch (error) {\n\t\t\tthis.options = previousOptions;\n\t\t\tthrow updateError(\"dispose\", candidate, error);\n\t\t}\n\t\ttry {\n\t\t\tawait this._start(plugin);\n\t\t} catch (error) {\n\t\t\tthis.options = previousOptions;\n\t\t\ttry {\n\t\t\t\tawait this._start(previousPlugin);\n\t\t\t} catch (rollbackError) {\n\t\t\t\tthrow updateError(\"rollback\", legacy, new AggregateError([error, rollbackError]));\n\t\t\t}\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, candidate, true);\n\t\t\tthrow updateError(\"apply\", candidate, error);\n\t\t}\n\t\tcommit();\n\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t}\n\tgetOuterStack = () => {\n\t\tlet entry = this;\n\t\tconst result = [];\n\t\tdo {\n\t\t\tresult.push(` at ${entry.parent.tree.ctx.baseUrl}#${entry.options.id}`);\n\t\t\tentry = entry.parent.ctx.fiber.entry;\n\t\t} while (entry);\n\t\treturn result;\n\t};\n\t/** Import and start the configured plugin if it is not already running. */\n\tasync init() {\n\t\ttry {\n\t\t\tawait (this._initTask ??= this._init());\n\t\t} finally {\n\t\t\tthis._initTask = void 0;\n\t\t\tif (!this.loader.getTasks().length) this.ctx.reflect.notify([\"loader\"]);\n\t\t}\n\t\tawait this._await();\n\t}\n\tasync _await() {\n\t\ttry {\n\t\t\tawait this.fiber?.await();\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"apply\", this.options, error);\n\t\t}\n\t}\n\tasync _init() {\n\t\tlet plugin;\n\t\ttry {\n\t\t\tplugin = this.loader.unwrapExports(await this.parent.tree.import(this.options.name, this.getOuterStack));\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"import\", this.options, error);\n\t\t}\n\t\ttry {\n\t\t\tawait this._start(plugin);\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"apply\", this.options, error);\n\t\t}\n\t}\n\tasync _start(plugin) {\n\t\tlet fiber;\n\t\ttry {\n\t\t\tawait this._patchContext([]);\n\t\t\tthis.loader.showLog(this, \"apply\");\n\t\t\tfiber = this.fiber = this.ctx.registry.plugin(plugin, this.options.config, this.getOuterStack);\n\t\t\tawait fiber.await();\n\t\t} catch (error) {\n\t\t\tawait this._dispose(fiber);\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n//#endregion\n//#region lib/types/config/isolate.js\nfunction swap(target, source) {\n\tfor (const key of Reflect.ownKeys(target)) Reflect.deleteProperty(target, key);\n\tfor (const key of Reflect.ownKeys(source || {})) Reflect.defineProperty(target, key, Reflect.getOwnPropertyDescriptor(source, key));\n}\n/** Symbol realm used to isolate service implementations by entry or label. */\nvar Realm = class {\n\tstore = Object.create(null);\n\taccess(key, create = false) {\n\t\tif (create) return this.store[key] ??= Symbol(`${key}${this.suffix}`);\n\t\telse return this.store[key] ?? Symbol(`${key}${this.suffix}`);\n\t}\n\tdelete(key) {\n\t\tdelete this.store[key];\n\t}\n\tget size() {\n\t\treturn Object.keys(this.store).length;\n\t}\n};\n/** Entry-local isolation realm. */\nvar LocalRealm = class extends Realm {\n\tentry;\n\tconstructor(entry) {\n\t\tsuper();\n\t\tthis.entry = entry;\n\t}\n\tget suffix() {\n\t\treturn \"#\" + this.entry.options.id;\n\t}\n};\n/** Named isolation realm shared by entries that use the same label. */\nvar GlobalRealm = class extends Realm {\n\tlabel;\n\tconstructor(label) {\n\t\tsuper();\n\t\tthis.label = label;\n\t}\n\tget suffix() {\n\t\treturn \"@\" + this.label;\n\t}\n};\n/** Install loader hooks that apply `intercept` and `isolate` entry options. */\nfunction isolate(ctx) {\n\tconst realms = Object.create(null);\n\tconst delims = Object.create(null);\n\tfunction access(entry, name, create = false) {\n\t\tlet realm;\n\t\tconst label = entry.options.isolate?.[name];\n\t\tif (!label) return;\n\t\tif (label === true) realm = entry.realm ??= new LocalRealm(entry);\n\t\telse if (create) realm = realms[label] ??= new GlobalRealm(label);\n\t\telse realm = realms[label];\n\t\treturn realm?.access(name, create);\n\t}\n\tctx.on(\"loader/entry-init\", (entry) => {\n\t\tentry.ctx[Context.intercept] = Object.create(entry.ctx[Context.intercept]);\n\t\tentry.ctx[Context.isolate] = Object.create(entry.ctx[Context.isolate]);\n\t});\n\tctx.on(\"loader/patch-context\", async (entry, next) => {\n\t\tconst newMap = Object.create(entry.parent.ctx[Context.isolate]);\n\t\tfor (const name of Object.keys(entry.options.isolate ?? {})) newMap[name] = access(entry, name, true);\n\t\tconst diff = Object.create(null);\n\t\tconst oldMap = entry.ctx[Context.isolate];\n\t\tfor (const name in {\n\t\t\t...newMap,\n\t\t\t...delims\n\t\t}) {\n\t\t\tif (newMap[name] === oldMap[name]) continue;\n\t\t\tconst delim = delims[name] ??= Symbol(`delim:${name}`);\n\t\t\tentry.ctx[delim] = Symbol(`${name}#${entry.id}`);\n\t\t\tfor (const symbol of [oldMap[name], newMap[name]]) {\n\t\t\t\tconst impl = symbol && entry.ctx.reflect.store[symbol];\n\t\t\t\tif (!impl) continue;\n\t\t\t\tif (!impl.fiber) {\n\t\t\t\t\tentry.ctx.logger.warn(/* @__PURE__ */ new Error(`expected service ${name} to be implemented`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdiff[name] = [\n\t\t\t\t\toldMap[name],\n\t\t\t\t\tnewMap[name],\n\t\t\t\t\tentry.ctx[delim],\n\t\t\t\t\timpl.fiber.ctx[delim]\n\t\t\t\t];\n\t\t\t\tif (entry.ctx[delim] !== impl.fiber.ctx[delim]) break;\n\t\t\t}\n\t\t}\n\t\tObject.setPrototypeOf(entry.ctx[Context.isolate], entry.parent.ctx[Context.isolate]);\n\t\tObject.setPrototypeOf(entry.ctx[Context.intercept], entry.parent.ctx[Context.intercept]);\n\t\tswap(entry.ctx[Context.isolate], newMap);\n\t\tswap(entry.ctx[Context.intercept], entry.options.intercept);\n\t\tawait next();\n\t\tfor (const [symbol1, symbol2, flag1, flag2] of Object.values(diff)) if (flag1 === flag2 && entry.ctx.reflect.store[symbol1] && !entry.ctx.reflect.store[symbol2]) {\n\t\t\tentry.ctx.reflect.store[symbol2] = entry.ctx.reflect.store[symbol1];\n\t\t\tdelete entry.ctx.reflect.store[symbol1];\n\t\t}\n\t\tctx.reflect.notify(Object.keys(diff), (ctx, name) => {\n\t\t\tconst [symbol1, symbol2, flag1, flag2] = diff[name];\n\t\t\tconst symbol3 = ctx[Context.isolate][name];\n\t\t\tconst flag3 = ctx[delims[name]];\n\t\t\treturn (symbol1 === symbol3 || symbol2 === symbol3) && flag1 === flag3 !== (flag1 === flag2);\n\t\t});\n\t\tfor (const name in delims) if (!Reflect.ownKeys(newMap).includes(name)) delete entry.ctx[delims[name]];\n\t});\n\tctx.on(\"loader/partial-dispose\", (entry, legacy, active) => {\n\t\tfor (const [name, label] of Object.entries(legacy.isolate ?? {})) {\n\t\t\tif (label === true) continue;\n\t\t\tif (active && entry.options.isolate?.[name] === label) continue;\n\t\t\tconst realm = realms[label];\n\t\t\tif (!realm) continue;\n\t\t\tfor (const entry of ctx.loader.entries()) if (entry.options.isolate?.[name] === realm.label) return;\n\t\t\trealm.delete(name);\n\t\t\tif (!realm.size) delete realms[realm.label];\n\t\t}\n\t});\n}\n//#endregion\n//#region lib/types/index.js\n/**\n* Service that owns a loader entry tree and imports configured plugins.\n*\n* Subclasses provide persistence by implementing `write()` on `EntryTree`.\n*/\nvar Loader = class extends EntryTree {\n\tconfig;\n\tenvData = { startTime: Date.now() };\n\tname = \"loader\";\n\tinternal = ModuleLoader.fromInternal();\n\tbuiltins = Object.create(null);\n\tconstructor(ctx, config = {}) {\n\t\tsuper(ctx);\n\t\tthis.config = config;\n\t\tif (config.baseUrl) this.ctx.baseUrl = config.baseUrl;\n\t\tconst self = this;\n\t\tdefineProperty(this, Service.tracker, {\n\t\t\tassociate: \"loader\",\n\t\t\tproperty: \"ctx\",\n\t\t\tnoShadow: true\n\t\t});\n\t\tctx.reflect.provide(\"loader\", this, this[Service.check]);\n\t\tctx.on(\"internal/config\", function(_config, next) {\n\t\t\tconst config = next();\n\t\t\tif (!this.entry || this.parent.fiber?.entry === this.entry) return config;\n\t\t\tif ((this.runtime?.callback)?.[EntryGroup.key]) return config;\n\t\t\treturn interpolate(this.ctx, config);\n\t\t}, { global: true });\n\t\tctx.on(\"internal/update\", async function(config, noSave, next) {\n\t\t\tif (!this.entry || noSave || this.parent.fiber?.entry === this.entry) return next();\n\t\t\tawait next();\n\t\t\tconst unparse = this.runtime?.Config?.[\"simplify\"];\n\t\t\tthis.entry.options.config = unparse ? unparse(config) : config;\n\t\t\tthis.entry.parent.tree.write();\n\t\t}, {\n\t\t\tglobal: true,\n\t\t\tprepend: true\n\t\t});\n\t\tctx.on(\"internal/update\", function(config, _, next) {\n\t\t\tif (!this.entry || this.parent.fiber?.entry === this.entry) return next();\n\t\t\tself.showLog(this.entry, \"reload\");\n\t\t\treturn next();\n\t\t}, { global: true });\n\t\tctx.on(\"internal/plugin\", (fiber) => {\n\t\t\tif (fiber.parent[Entry.key] && !fiber.entry) {\n\t\t\t\tfiber.entry = fiber.parent[Entry.key];\n\t\t\t\tInject.resolve(fiber.entry.options.inject, fiber.inject);\n\t\t\t}\n\t\t\tif (fiber.uid) return;\n\t\t\tif (!fiber.entry) return;\n\t\t\tif (fiber.parent.fiber?.entry === fiber.entry) return;\n\t\t\tif (!ctx.registry.has(fiber.runtime.callback)) return;\n\t\t\tconst treeOwner = fiber.entry.parent.tree.ctx.fiber;\n\t\t\tif (!treeOwner.uid || treeOwner.state === 5) return;\n\t\t\tif (fiber.entry._disposing) return;\n\t\t\tthis.showLog(fiber.entry, \"unload\");\n\t\t\tif (fiber.entry.disabled) return;\n\t\t\tfiber.entry.options.disabled = true;\n\t\t\tfiber.entry.parent.tree.write();\n\t\t});\n\t\tctx.plugin(isolate);\n\t}\n\twrite() {}\n\t[Service.check]() {\n\t\tif (Service.prototype[Service.resolveConfig].call(this).await && this.getTasks().length) return false;\n\t\treturn true;\n\t}\n\tshowLog(entry, type) {\n\t\tif (entry.options.group || !entry.parent.tree.enableLogs) return;\n\t\tthis.ctx.root.logger?.(\"loader\").info(\"%s plugin %C\", type, entry.options.name);\n\t}\n\t/** Return the loader entry id that owns `fiber`, if any. */\n\tlocate(fiber = this.ctx.fiber) {\n\t\twhile (1) {\n\t\t\tif (fiber.entry) return fiber.entry.id;\n\t\t\tconst next = fiber.parent.fiber;\n\t\t\tif (fiber === next) return;\n\t\t\tfiber = next;\n\t\t}\n\t}\n\t/** Hook for hosts that can restart the process on full-reload requests. */\n\texit() {}\n\t/** Normalize ESM/CJS/default export shapes before applying a plugin. */\n\tunwrapExports(exports) {\n\t\tif (isNullable(exports)) return exports;\n\t\texports = exports.default ?? exports;\n\t\tif (!exports.__esModule) return exports;\n\t\treturn exports.default ?? exports;\n\t}\n};\n//#endregion\nexport { Entry, EntryGroup, EntryTree, GlobalRealm, Group, Loader, Loader as default, LocalRealm, ModuleLoader, Realm, evaluate, interpolate, isJsExpr };\n","import type { Plugin } from '@deepseek-ai/cordis';\nimport type { ToolContribution } from '@forgeax/engine-tool-runtime';\n\n/** A native Cordis plugin plus the tool contributions it exposes. */\nexport interface ToolPlugin {\n readonly plugin: Plugin;\n readonly tools: readonly ToolContribution<unknown, unknown>[];\n}\n\nexport function defineToolPlugin(\n plugin: Plugin,\n tools: readonly ToolContribution<unknown, unknown>[],\n): ToolPlugin {\n return { plugin, tools: [...tools] };\n}\n\nexport function isToolPlugin(value: unknown): value is ToolPlugin {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<ToolPlugin>;\n return candidate.plugin !== undefined && Array.isArray(candidate.tools);\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\nimport { type EntryOptions, Group, Loader } from '@deepseek-ai/cordis-plugin-loader';\nimport type { ToolRealm } from '@forgeax/engine-tool-runtime';\n\nimport { isToolPlugin } from './tool-plugin.js';\n\nexport type PluginRealm = ToolRealm;\n\nexport interface PluginCatalogRecord {\n readonly realm: PluginRealm;\n /** Package code identity bound by a generated/static catalog. */\n readonly version?: string;\n /** Optional content identity for catalogs that pin source bytes. */\n readonly digest?: string;\n readonly load: () => Promise<unknown>;\n}\n\nexport type PluginCatalog = ReadonlyMap<string, PluginCatalogRecord>;\n\nexport { createContextCapabilityResolver } from './capability.js';\nexport { defineToolPlugin, isToolPlugin, type ToolPlugin } from './tool-plugin.js';\n\nexport interface GamePluginEntry extends EntryOptions {\n readonly realm?: PluginRealm;\n}\n\nexport type CatalogLoaderErrorCode =\n | 'plugin-catalog-missing'\n | 'plugin-realm-mismatch'\n | 'plugin-entry-realm-mixed'\n | 'plugin-realm-unsupported'\n | 'plugin-catalog-digest-mismatch';\n\nexport interface CatalogMissingDetail {\n readonly name: string;\n readonly realm?: PluginRealm;\n readonly attempt?: number;\n}\n\nexport interface CatalogRealmMismatchDetail {\n readonly name: string;\n readonly actual: PluginRealm;\n readonly expected: PluginRealm;\n}\n\nexport interface CatalogMixedRealmDetail {\n readonly group: string;\n readonly actual: PluginRealm;\n readonly expected: PluginRealm;\n}\n\nexport interface CatalogUnsupportedRealmDetail {\n readonly realm: PluginRealm;\n readonly supportedRealms: readonly PluginRealm[];\n}\n\nexport interface CatalogDigestMismatchDetail {\n readonly actual: string;\n readonly expected: string;\n}\n\nexport type CatalogLoaderErrorDetailByCode = {\n 'plugin-catalog-missing': CatalogMissingDetail;\n 'plugin-realm-mismatch': CatalogRealmMismatchDetail;\n 'plugin-entry-realm-mixed': CatalogMixedRealmDetail;\n 'plugin-realm-unsupported': CatalogUnsupportedRealmDetail;\n 'plugin-catalog-digest-mismatch': CatalogDigestMismatchDetail;\n};\n\nexport type CatalogLoaderErrorArgs<C extends CatalogLoaderErrorCode = CatalogLoaderErrorCode> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: CatalogLoaderErrorDetailByCode[C];\n};\n\nclass CatalogLoaderErrorClass extends Error {\n readonly code: CatalogLoaderErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: CatalogLoaderErrorDetailByCode[CatalogLoaderErrorCode];\n\n constructor(args: CatalogLoaderErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'CatalogLoaderError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype CatalogLoaderErrorVariant<C extends CatalogLoaderErrorCode> = CatalogLoaderErrorClass & {\n readonly code: C;\n readonly detail: CatalogLoaderErrorDetailByCode[C];\n};\n\nexport type CatalogLoaderError = {\n [C in CatalogLoaderErrorCode]: CatalogLoaderErrorVariant<C>;\n}[CatalogLoaderErrorCode];\n\ninterface CatalogLoaderErrorConstructor {\n new <C extends CatalogLoaderErrorCode>(\n code: C,\n expected: string,\n hint: string,\n detail: CatalogLoaderErrorDetailByCode[C],\n ): CatalogLoaderErrorVariant<C>;\n readonly prototype: CatalogLoaderError;\n}\n\nexport const CatalogLoaderError: CatalogLoaderErrorConstructor =\n class extends CatalogLoaderErrorClass {\n constructor(\n code: CatalogLoaderErrorCode,\n expected: string,\n hint: string,\n detail: CatalogLoaderErrorDetailByCode[CatalogLoaderErrorCode],\n ) {\n super({ code, expected, hint, detail });\n }\n } as unknown as CatalogLoaderErrorConstructor;\n\ninterface CatalogLoaderConfig {\n readonly catalog: PluginCatalog;\n readonly realm: PluginRealm;\n readonly baseUrl?: string;\n}\n\nexport interface CatalogLoaderBootstrapOptions {\n readonly catalogDigest: string;\n readonly supportedRealms: readonly PluginRealm[];\n}\n\nexport interface CatalogLoaderBootstrapValue extends CatalogLoaderHandle {\n readonly catalogDigest: string;\n readonly realm: PluginRealm;\n}\n\nexport type CatalogLoaderBootstrapResult =\n | { readonly ok: true; readonly value: CatalogLoaderBootstrapValue }\n | { readonly ok: false; readonly error: CatalogLoaderError };\n\n/** DeepSeek Harness Loader with its import boundary resolved by a static build catalog. */\nexport class CatalogLoader extends Loader {\n readonly catalog: PluginCatalog;\n readonly realm: PluginRealm;\n\n constructor(ctx: Context, config: CatalogLoaderConfig) {\n super(ctx, config.baseUrl === undefined ? {} : { baseUrl: config.baseUrl });\n this.catalog = config.catalog;\n this.realm = config.realm;\n this.internal = undefined;\n this.builtins.group = Group;\n }\n\n override import(name: string, getOuterStack?: () => string[]): Promise<unknown> | unknown {\n if (name.startsWith('cordis:')) return super.import(name, getOuterStack);\n const record = this.catalog.get(name);\n if (record === undefined) {\n throw new CatalogLoaderError(\n 'plugin-catalog-missing',\n `plugin ${name} to exist in the generated catalog`,\n 'Install the package, add the Entry to forge.json, and rebuild the generated catalog.',\n { name, realm: this.realm },\n );\n }\n if (record.realm !== this.realm) {\n throw new CatalogLoaderError(\n 'plugin-realm-mismatch',\n `plugin ${name} to target the ${this.realm} realm`,\n 'Use a realm-specific plugin export and Entry.',\n { actual: record.realm, expected: this.realm, name },\n );\n }\n return record.load();\n }\n\n override unwrapExports(exports: unknown): unknown {\n const value = super.unwrapExports(exports);\n return isToolPlugin(value) ? value.plugin : value;\n }\n}\n\nexport interface CatalogLoaderHandle {\n readonly loader: CatalogLoader;\n readonly fiber: Fiber;\n}\n\n/** Bridges one already-active Cordis realm into the generic typed capability seam. */\n/** Install the native DSH Loader service into an existing Cordis realm. */\nexport async function installCatalogLoader(\n ctx: Context,\n catalog: PluginCatalog,\n realm: PluginRealm,\n): Promise<CatalogLoaderHandle> {\n const fiber = await ctx.plugin(CatalogLoader as unknown as Plugin, { catalog, realm });\n return { fiber, loader: ctx.loader as CatalogLoader };\n}\n\n/** Validate the physical realm before installing the one native CatalogLoader. */\nexport async function bootstrapCatalogLoader(\n ctx: Context,\n catalog: PluginCatalog,\n realm: PluginRealm,\n options: CatalogLoaderBootstrapOptions,\n): Promise<CatalogLoaderBootstrapResult> {\n if (!options.supportedRealms.includes(realm)) {\n return {\n ok: false,\n error: new CatalogLoaderError(\n 'plugin-realm-unsupported',\n `the ${realm} realm to be supported by this host`,\n 'Select a realm advertised by the capability matrix before module evaluation.',\n { realm, supportedRealms: options.supportedRealms },\n ),\n };\n }\n const handle = await installCatalogLoader(ctx, catalog, realm);\n return {\n ok: true,\n value: { ...handle, catalogDigest: options.catalogDigest, realm },\n };\n}\n\nfunction effectiveRealm(entry: GamePluginEntry, inherited: PluginRealm): PluginRealm {\n return entry.realm ?? inherited;\n}\n\nfunction assertSingleRealmGroup(entry: GamePluginEntry, inheritedRealm: PluginRealm): void {\n const realm = effectiveRealm(entry, inheritedRealm);\n if (!entry.group) return;\n const children = (entry.config ?? []) as readonly GamePluginEntry[];\n for (const child of children) {\n const childRealm = effectiveRealm(child, realm);\n if (childRealm !== realm) {\n throw new CatalogLoaderError(\n 'plugin-entry-realm-mixed',\n `group ${entry.id} to contain entries for only the ${realm} physical realm`,\n 'Split Host and Engine capabilities into separate top-level groups.',\n { actual: childRealm, expected: realm, group: entry.id },\n );\n }\n assertSingleRealmGroup(child, realm);\n }\n}\n\nfunction projectEntry(entry: GamePluginEntry, inherited: PluginRealm): EntryOptions {\n const realm = effectiveRealm(entry, inherited);\n const config = entry.group\n ? projectPluginEntries((entry.config ?? []) as readonly GamePluginEntry[], realm, realm)\n : entry.config;\n return {\n id: entry.id,\n name: entry.name,\n ...(config === undefined ? {} : { config }),\n ...(entry.group == null ? {} : { group: entry.group }),\n ...(entry.disabled == null ? {} : { disabled: entry.disabled }),\n ...(entry.inject == null ? {} : { inject: entry.inject }),\n };\n}\n\n/** Select one physical realm and strip ForgeaX-only deployment metadata before DSH reconciliation. */\nexport function projectPluginEntries(\n entries: readonly GamePluginEntry[],\n realm: PluginRealm,\n inheritedRealm: PluginRealm = 'engine',\n): EntryOptions[] {\n const projected: EntryOptions[] = [];\n for (const entry of entries) {\n const current = effectiveRealm(entry, inheritedRealm);\n assertSingleRealmGroup(entry, inheritedRealm);\n if (current === realm) projected.push(projectEntry(entry, current));\n }\n return projected;\n}\n\nexport {\n Entry,\n EntryGroup,\n type EntryOptions,\n EntryTree,\n Group,\n Loader,\n} from '@deepseek-ai/cordis-plugin-loader';\n"]}
1
+ {"version":3,"sources":["../src/capability.ts","../src/composition.ts","../src/inspection.ts","../../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.2/node_modules/@deepseek-ai/cosmokit/lib/index.js","../../../node_modules/.pnpm/@deepseek-ai+cordis-plugin-loader@1.0.2_patch_hash=6e77a3b82171afbdac249c0e31290cc06386_1a14a168fdebad14b739afc92f305e1c/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js","../src/tool-plugin.ts","../src/loader.ts","../src/tool-contract.ts"],"names":["value","Binary","a","b","Time","template","ModuleLoader","config","EntryTree","Entry","ctx","entry"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\nimport {\n createCapabilityResolver,\n type ToolCapabilityResolver,\n} from '@forgeax/engine-tool-runtime';\n\n/** Bridge one active Cordis realm into the realm-neutral ToolRuntime seam. */\nexport function createContextCapabilityResolver(ctx: Context): ToolCapabilityResolver {\n return createCapabilityResolver((capability) => Reflect.get(ctx, capability.id));\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\n\nexport type PluginCompositionErrorCode =\n | 'plugin-config-invalid'\n | 'plugin-group-child-failed'\n | 'plugin-group-dependency-cycle'\n | 'plugin-group-key-duplicate'\n | 'plugin-group-key-required'\n | 'plugin-group-provider-missing';\n\nexport interface PluginConfigInvalidDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupChildFailedDetail {\n readonly child: string;\n}\n\nexport interface PluginGroupDependencyCycleDetail {\n readonly path: readonly string[];\n}\n\nexport interface PluginGroupKeyDuplicateDetail {\n readonly key: string;\n}\n\nexport interface PluginGroupKeyRequiredDetail {\n readonly plugin: string;\n}\n\nexport interface PluginGroupProviderMissingDetail {\n readonly service: string;\n}\n\nexport type PluginCompositionErrorDetailByCode = {\n 'plugin-config-invalid': PluginConfigInvalidDetail;\n 'plugin-group-child-failed': PluginGroupChildFailedDetail;\n 'plugin-group-dependency-cycle': PluginGroupDependencyCycleDetail;\n 'plugin-group-key-duplicate': PluginGroupKeyDuplicateDetail;\n 'plugin-group-key-required': PluginGroupKeyRequiredDetail;\n 'plugin-group-provider-missing': PluginGroupProviderMissingDetail;\n};\n\nexport type PluginCompositionErrorArgs<\n C extends PluginCompositionErrorCode = PluginCompositionErrorCode,\n> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n};\n\nclass PluginCompositionErrorClass extends Error {\n readonly code: PluginCompositionErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: PluginCompositionErrorDetailByCode[PluginCompositionErrorCode];\n\n constructor(args: PluginCompositionErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'PluginCompositionError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype PluginCompositionErrorVariant<C extends PluginCompositionErrorCode> =\n PluginCompositionErrorClass & {\n readonly code: C;\n readonly detail: PluginCompositionErrorDetailByCode[C];\n };\n\nexport type PluginCompositionError = {\n [C in PluginCompositionErrorCode]: PluginCompositionErrorVariant<C>;\n}[PluginCompositionErrorCode];\n\ninterface PluginCompositionErrorConstructor {\n new <C extends PluginCompositionErrorCode>(\n args: PluginCompositionErrorArgs<C>,\n ): PluginCompositionErrorVariant<C>;\n readonly prototype: PluginCompositionError;\n}\n\nexport const PluginCompositionError: PluginCompositionErrorConstructor =\n PluginCompositionErrorClass as unknown as PluginCompositionErrorConstructor;\n\nexport interface PluginUseOptions {\n readonly key?: string;\n}\n\ntype PluginConfig<P> = P extends (ctx: Context, config: infer C) => unknown\n ? C\n : P extends new (\n ctx: Context,\n config: infer C,\n ) => unknown\n ? C\n : P extends { apply(ctx: Context, config: infer C): unknown }\n ? C\n : unknown;\n\ntype ConfigArgs<P> =\n undefined extends PluginConfig<P> ? [config?: PluginConfig<P>] : [config: PluginConfig<P>];\n\nexport interface PluginUse<P extends Plugin = Plugin> {\n readonly plugin: P;\n readonly config: PluginConfig<P>;\n readonly key?: string;\n}\n\nexport function usePlugin<P extends Plugin>(\n plugin: P,\n ...args: [...ConfigArgs<P>, options?: PluginUseOptions]\n): PluginUse<P> {\n const config = args[0] as PluginConfig<P>;\n const options = args[1] as PluginUseOptions | undefined;\n return {\n plugin,\n config,\n ...(options?.key === undefined ? {} : { key: options.key }),\n };\n}\n\nexport interface PluginGroupOptions<C = unknown> {\n readonly name: string;\n readonly children: (config: C) => readonly PluginUse[];\n}\n\ninterface ChildRecord {\n readonly key: string | object;\n readonly plugin: Plugin;\n config: unknown;\n fiber: Fiber;\n}\n\ninterface GroupState {\n readonly records: Map<string | object, ChildRecord>;\n}\n\nclass ChildOperationFailure extends Error {\n constructor(\n readonly child: PluginUse,\n readonly reason: unknown,\n readonly cleanupFailures: readonly unknown[] = [],\n ) {\n super(`child operation failed: ${pluginName(child.plugin)}`);\n }\n}\n\nconst groupStateKey = Symbol('forgeax.plugin.group.state');\n\nfunction pluginName(plugin: Plugin): string {\n return plugin.name ?? 'anonymous';\n}\n\nfunction dependencyNames(plugin: Plugin): readonly string[] {\n const inject = plugin.inject;\n if (inject === undefined) return [];\n return Array.isArray(inject) ? inject : Object.keys(inject);\n}\n\nfunction providedNames(plugin: Plugin): readonly string[] {\n const provide = plugin.provide;\n if (provide === undefined) return [];\n return Array.isArray(provide) ? provide : [provide];\n}\n\nfunction keyFor(child: PluginUse): string | object {\n if (child.key !== undefined) return child.key;\n return child.plugin;\n}\n\nfunction validateKeys(children: readonly PluginUse[]): void {\n const keys = new Map<string | object, PluginUse>();\n for (const child of children) {\n const key = keyFor(child);\n const previous = keys.get(key);\n if (previous !== undefined) {\n if (child.key === undefined && previous.key === undefined) {\n throw new PluginCompositionError({\n code: 'plugin-group-key-required',\n expected: 'repeated Plugin references to declare a stable child key',\n hint: 'assign a unique key to each repeated child before activation.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n throw new PluginCompositionError({\n code: 'plugin-group-key-duplicate',\n expected: 'stable child key to be unique within its Group',\n hint: 'assign a unique key to each child declaration.',\n detail: { key: String(child.key) },\n });\n }\n keys.set(key, child);\n }\n}\n\nfunction orderedChildren(\n ctx: Context,\n children: readonly PluginUse[],\n groupOwnedServices: ReadonlySet<string>,\n): PluginUse[] {\n const providers = new Map<string, number>();\n children.forEach((child, index) => {\n for (const service of providedNames(child.plugin)) {\n if (!providers.has(service)) providers.set(service, index);\n }\n });\n\n const graph = children.map(() => [] as number[]);\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n if (child === undefined) continue;\n for (const service of dependencyNames(child.plugin)) {\n const provider = providers.get(service);\n const externalServiceAvailable =\n !groupOwnedServices.has(service) && ctx.reflect.get(service, false) !== undefined;\n if (provider === undefined && !externalServiceAvailable) {\n throw new PluginCompositionError({\n code: 'plugin-group-provider-missing',\n expected: 'an inject/provide dependency to be available before the child starts',\n hint: 'provide the service in the Group or install the owning plugin first.',\n detail: { service },\n });\n }\n if (provider !== undefined && provider !== index) graph[index]?.push(provider);\n if (provider === index) graph[index]?.push(index);\n }\n }\n\n const state = children.map(() => 0);\n const sorted: number[] = [];\n const visit = (index: number, path: number[]): void => {\n if (state[index] === 1) {\n const cycleStart = path.indexOf(index);\n const cycle = [...path.slice(cycleStart), index].map((item) => {\n const child = children[item];\n return child === undefined ? 'unknown' : pluginName(child.plugin);\n });\n throw new PluginCompositionError({\n code: 'plugin-group-dependency-cycle',\n expected: 'an acyclic inject/provide dependency graph',\n hint: 'break the dependency cycle before activating the Group.',\n detail: { path: cycle },\n });\n }\n if (state[index] === 2) return;\n state[index] = 1;\n for (const dependency of graph[index] ?? []) visit(dependency, [...path, index]);\n state[index] = 2;\n sorted.push(index);\n };\n for (let index = 0; index < children.length; index += 1) visit(index, []);\n return sorted\n .map((index) => children[index])\n .filter((child): child is PluginUse => child !== undefined);\n}\n\nasync function validateConfig(child: PluginUse): Promise<void> {\n const schema = child.plugin.Config;\n if (schema === undefined) return;\n const result = await schema['~standard'].validate(child.config);\n if ('issues' in result && result.issues) {\n throw new PluginCompositionError({\n code: 'plugin-config-invalid',\n expected: `${pluginName(child.plugin)} Plugin.Config to validate the child config`,\n hint: 'provide a valid config before the child side effect runs.',\n detail: { plugin: pluginName(child.plugin) },\n });\n }\n}\n\nasync function validateChildren(children: readonly PluginUse[]): Promise<void> {\n const results = await Promise.allSettled(children.map((child) => validateConfig(child)));\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n}\n\nfunction childFailure(child: PluginUse, _reason: unknown): PluginCompositionError {\n return new PluginCompositionError({\n code: 'plugin-group-child-failed',\n expected: `${pluginName(child.plugin)} to activate under its owning Group`,\n hint: 'repair the child and retry the Group update.',\n detail: { child: pluginName(child.plugin) },\n });\n}\n\nfunction sameConfig(left: unknown, right: unknown): boolean {\n return sameDataValue(left, right, new Set());\n}\n\nfunction sameDataValue(left: unknown, right: unknown, active: Set<object>): boolean {\n if (Object.is(left, right)) return true;\n if (left === null || right === null || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n const leftArray = Array.isArray(left);\n if (leftArray !== Array.isArray(right)) return false;\n const leftPrototype = Object.getPrototypeOf(left);\n const rightPrototype = Object.getPrototypeOf(right);\n if (leftArray) {\n if (leftPrototype !== Array.prototype || rightPrototype !== Array.prototype) return false;\n } else if (\n !(\n (leftPrototype === Object.prototype || leftPrototype === null) &&\n (rightPrototype === Object.prototype || rightPrototype === null) &&\n leftPrototype === rightPrototype\n )\n ) {\n return false;\n }\n if (active.has(left)) return false;\n active.add(left);\n try {\n const leftKeys = Reflect.ownKeys(left).filter((key) => !leftArray || key !== 'length');\n const rightKeys = Reflect.ownKeys(right).filter((key) => !leftArray || key !== 'length');\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!Object.hasOwn(right, key)) return false;\n const leftDescriptor = Object.getOwnPropertyDescriptor(left, key);\n const rightDescriptor = Object.getOwnPropertyDescriptor(right, key);\n if (\n leftDescriptor === undefined ||\n rightDescriptor === undefined ||\n !('value' in leftDescriptor) ||\n !('value' in rightDescriptor) ||\n !sameDataValue(leftDescriptor.value, rightDescriptor.value, active)\n ) {\n return false;\n }\n }\n return true;\n } finally {\n active.delete(left);\n }\n}\n\nfunction startChild(ctx: Context, child: PluginUse): ChildRecord {\n let fiber: Fiber | undefined;\n try {\n fiber = ctx.plugin(child.plugin, child.config);\n return { key: keyFor(child), plugin: child.plugin, config: child.config, fiber };\n } catch (reason) {\n if (fiber !== undefined) void fiber.dispose();\n if (reason instanceof PluginCompositionError) throw reason;\n throw childFailure(child, reason);\n }\n}\n\nasync function activateChild(ctx: Context, child: PluginUse): Promise<ChildRecord> {\n const record = startChild(ctx, child);\n await record.fiber.await();\n return record;\n}\n\nfunction recordUse(record: ChildRecord): PluginUse {\n return {\n plugin: record.plugin,\n config: record.config,\n ...(typeof record.key === 'string' ? { key: record.key } : {}),\n };\n}\n\nfunction sharesProvidedService(left: Plugin, right: Plugin): boolean {\n const rightServices = new Set(providedNames(right));\n return providedNames(left).some((service) => rightServices.has(service));\n}\n\nasync function restoreRecord(\n ctx: Context,\n record: ChildRecord,\n config: unknown,\n): Promise<ChildRecord> {\n try {\n await record.fiber.update(config);\n await record.fiber.await();\n return { ...record, config };\n } catch (updateReason) {\n if (record.fiber.uid !== null) await record.fiber.dispose();\n try {\n return await activateChild(ctx, { ...recordUse(record), config });\n } catch (restoreReason) {\n throw restoreReason ?? updateReason;\n }\n }\n}\n\nasync function settleRecords(\n records: readonly ChildRecord[],\n abort: Promise<unknown> | undefined,\n): Promise<void> {\n if (records.length === 0) return;\n const outcomes = records.map((record, index) =>\n record.fiber.await().then(\n () => ({ index, reason: undefined }),\n (reason: unknown) => ({ index, reason }),\n ),\n );\n const pending = new Set(outcomes);\n const abortSignal =\n abort === undefined\n ? undefined\n : abort.then((reason) => ({ index: -1, reason, aborted: true as const }));\n while (pending.size > 0) {\n const outcome = await Promise.race([\n ...pending,\n ...(abortSignal === undefined ? [] : [abortSignal]),\n ]);\n if ('aborted' in outcome) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n if (outcome.reason instanceof ChildOperationFailure) {\n throw new ChildOperationFailure(\n outcome.reason.child,\n outcome.reason.reason,\n cleanupFailures,\n );\n }\n throw outcome.reason;\n }\n const completed = outcomes[outcome.index];\n if (completed !== undefined) pending.delete(completed);\n if (outcome.reason !== undefined) {\n const record = records[outcome.index];\n if (record !== undefined) {\n const cleanupFailures = await disposeRecordsInReverse(records);\n await Promise.allSettled(outcomes);\n throw new ChildOperationFailure(recordUse(record), outcome.reason, cleanupFailures);\n }\n throw outcome.reason;\n }\n }\n}\n\nasync function disposeRecordsInReverse(records: readonly ChildRecord[]): Promise<unknown[]> {\n const failures: unknown[] = [];\n for (const record of [...records].reverse()) {\n try {\n await record.fiber.dispose();\n } catch (reason) {\n failures.push(reason);\n }\n }\n return failures;\n}\n\nasync function reconcile(\n ctx: Context,\n state: GroupState,\n children: readonly PluginUse[],\n): Promise<void> {\n validateKeys(children);\n const groupOwnedServices = new Set<string>();\n for (const record of state.records.values()) {\n for (const service of providedNames(record.plugin)) groupOwnedServices.add(service);\n }\n const ordered = orderedChildren(ctx, children, groupOwnedServices);\n await validateChildren(ordered);\n const desired = new Map(ordered.map((child) => [keyFor(child), child] as const));\n const removed = [...state.records.values()].filter((record) => !desired.has(record.key));\n const changed: Array<{ record: ChildRecord; child: PluginUse; config: unknown }> = [];\n const candidateChildren: PluginUse[] = [];\n const replacements: Array<{ old: ChildRecord; child: PluginUse }> = [];\n const released: ChildRecord[] = [];\n const retired: ChildRecord[] = [];\n const candidates: ChildRecord[] = [];\n\n for (const child of ordered) {\n const current = state.records.get(keyFor(child));\n if (current === undefined) {\n candidateChildren.push(child);\n } else if (current.plugin !== child.plugin) {\n candidateChildren.push(child);\n replacements.push({ old: current, child });\n } else if (!sameConfig(current.config, child.config)) {\n changed.push({ record: current, child, config: current.config });\n }\n }\n\n const desiredServiceProviders = candidateChildren.filter(\n (child) => providedNames(child.plugin).length > 0,\n );\n for (const record of removed) {\n if (\n desiredServiceProviders.some((child) => sharesProvidedService(record.plugin, child.plugin))\n ) {\n released.push(record);\n }\n }\n for (const { old, child } of replacements) {\n if (sharesProvidedService(old.plugin, child.plugin) && !released.includes(old)) {\n released.push(old);\n }\n }\n\n try {\n const releaseResults = await Promise.allSettled(\n released.map((record) => record.fiber.dispose()),\n );\n const releaseFailureIndex = releaseResults.findIndex(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (releaseFailureIndex !== -1) {\n const releaseFailure = releaseResults[releaseFailureIndex];\n const releasedRecord = released[releaseFailureIndex];\n if (releaseFailure?.status === 'rejected' && releasedRecord !== undefined) {\n throw new ChildOperationFailure(recordUse(releasedRecord), releaseFailure.reason);\n }\n throw releaseFailure;\n }\n\n const updateTasks = changed.map(({ record, child }) => {\n return Promise.resolve()\n .then(() => record.fiber.update(child.config))\n .then(() => record.fiber.await())\n .catch((reason: unknown) => {\n throw new ChildOperationFailure(child, reason);\n });\n });\n for (const child of candidateChildren) candidates.push(startChild(ctx, child));\n const updateFailure =\n updateTasks.length === 0\n ? undefined\n : Promise.race(\n updateTasks.map((task) =>\n task.then(\n () => new Promise<never>(() => {}),\n (reason: unknown) => reason,\n ),\n ),\n );\n const results = await Promise.allSettled([\n settleRecords(candidates, updateFailure),\n ...updateTasks,\n ]);\n const failure = results.find(\n (result): result is PromiseRejectedResult => result.status === 'rejected',\n );\n if (failure !== undefined) throw failure.reason;\n for (const record of removed) {\n if (released.includes(record)) continue;\n retired.push(record);\n try {\n await record.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(record), retirementReason);\n }\n }\n for (const { old } of replacements) {\n if (released.includes(old)) continue;\n retired.push(old);\n try {\n await old.fiber.dispose();\n } catch (retirementReason) {\n throw new ChildOperationFailure(recordUse(old), retirementReason);\n }\n }\n } catch (reason) {\n const operation = reason instanceof ChildOperationFailure ? reason : undefined;\n const primary = operation?.reason ?? reason;\n const rollbackFailures = operation?.cleanupFailures\n ? [...operation.cleanupFailures]\n : await disposeRecordsInReverse(candidates);\n for (const { record, config } of changed.reverse()) {\n try {\n const restored = await restoreRecord(ctx, record, config);\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of released.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n for (const record of retired.reverse()) {\n try {\n const restored = await activateChild(ctx, recordUse(record));\n state.records.set(record.key, restored);\n } catch (restoreReason) {\n rollbackFailures.push(restoreReason);\n }\n }\n const fallback = operation?.child ?? ordered[0];\n const primaryError =\n primary instanceof PluginCompositionError\n ? primary\n : fallback === undefined\n ? primary\n : childFailure(fallback, primary);\n if (rollbackFailures.length > 0) {\n throw new AggregateError(\n [primaryError, ...rollbackFailures],\n 'plugin Group reconciliation and rollback both failed',\n );\n }\n throw primaryError;\n }\n\n for (const record of removed) state.records.delete(record.key);\n for (const { old, child } of replacements) {\n state.records.delete(old.key);\n const next = candidates.find((record) => record.key === keyFor(child));\n if (next !== undefined) state.records.set(next.key, next);\n }\n for (const record of candidates) state.records.set(record.key, record);\n for (const { record, child } of changed) record.config = child.config;\n}\n\nexport function definePluginGroup<C = unknown>(options: PluginGroupOptions<C>): Plugin {\n const group: Plugin.Object = {\n name: options.name,\n async apply(ctx, config) {\n const owner = ctx.fiber as Fiber & { [groupStateKey]?: GroupState };\n let state = owner[groupStateKey];\n if (state === undefined) {\n state = { records: new Map() };\n owner[groupStateKey] = state;\n }\n ctx.effect(\n () => async () => {\n state.records.clear();\n delete owner[groupStateKey];\n },\n 'plugin-group-state',\n );\n ctx.on('internal/update', (nextConfig, _noSave, _next) =>\n reconcile(ctx, state, options.children(nextConfig as C)),\n );\n await reconcile(ctx, state, options.children(config as C));\n },\n };\n return group;\n}\n","import type { CatalogLoader, Entry, EntryOptions } from './loader.js';\n\nexport type CatalogPluginFiberState =\n | 'pending'\n | 'loading'\n | 'active'\n | 'failed'\n | 'disposed'\n | 'unloading'\n | 'disabled'\n | 'missing'\n | 'unavailable';\n\nexport interface CatalogPluginInspectionFailure {\n readonly code: string;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CatalogPluginInspectionEntry extends EntryOptions {\n readonly entryId: string;\n readonly module: string;\n readonly realm: 'host' | 'engine' | 'build';\n readonly desiredState: 'enabled' | 'disabled';\n readonly fiberState: CatalogPluginFiberState;\n readonly parent?: string;\n readonly requiredServices: readonly string[];\n readonly providedServices: readonly string[];\n readonly configDigest: string;\n readonly failure?: CatalogPluginInspectionFailure;\n}\n\nexport interface CatalogPluginInspection {\n readonly live: readonly CatalogPluginInspectionEntry[];\n}\n\nconst FIBER_STATE_BY_CODE: readonly CatalogPluginFiberState[] = [\n 'pending',\n 'loading',\n 'active',\n 'failed',\n 'disposed',\n 'unloading',\n];\n\nfunction canonicalJson(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item)).join(',')}]`;\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => `${JSON.stringify(key)}:${canonicalJson(item)}`)\n .join(',')}}`;\n}\n\nfunction configDigest(value: unknown): string {\n let hash = 2166136261;\n for (const char of canonicalJson(value)) {\n hash ^= char.codePointAt(0) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n return `fnv1a:${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\nfunction requiredServices(inject: unknown): readonly string[] {\n if (Array.isArray(inject)) {\n return inject.filter((name): name is string => typeof name === 'string').sort();\n }\n if (inject !== null && typeof inject === 'object') return Object.keys(inject).sort();\n return [];\n}\n\nfunction providedServices(fiber: NonNullable<Entry['fiber']>): readonly string[] {\n const names = new Set<string>();\n const stores = [\n fiber.store,\n (fiber.ctx.reflect as unknown as { readonly store?: Record<PropertyKey, unknown> }).store,\n ];\n for (const store of stores) {\n if (store === undefined) continue;\n for (const key of Reflect.ownKeys(store)) {\n const value = (store as Record<PropertyKey, unknown>)[key];\n if (\n value !== null &&\n typeof value === 'object' &&\n 'fiber' in value &&\n ((value as { readonly fiber?: { readonly uid?: unknown } }).fiber === fiber ||\n (value as { readonly fiber?: { readonly uid?: unknown } }).fiber?.uid === fiber.uid) &&\n 'name' in value &&\n typeof (value as { readonly name?: unknown }).name === 'string'\n ) {\n names.add((value as { readonly name: string }).name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction failureFromFiber(\n fiber: NonNullable<Entry['fiber']>,\n): CatalogPluginInspectionFailure | undefined {\n if (fiber.state !== 3) return undefined;\n const cause = (fiber as unknown as { readonly _error?: unknown })._error;\n if (\n cause !== null &&\n typeof cause === 'object' &&\n typeof (cause as { readonly code?: unknown }).code === 'string' &&\n typeof (cause as { readonly expected?: unknown }).expected === 'string' &&\n typeof (cause as { readonly hint?: unknown }).hint === 'string' &&\n (cause as { readonly detail?: unknown }).detail !== null &&\n typeof (cause as { readonly detail?: unknown }).detail === 'object'\n ) {\n return {\n code: (cause as { readonly code: string }).code,\n expected: (cause as { readonly expected: string }).expected,\n hint: (cause as { readonly hint: string }).hint,\n detail: (cause as { readonly detail: Readonly<Record<string, unknown>> }).detail,\n };\n }\n return {\n code: 'plugin-fiber-failed',\n expected: 'the native Plugin Fiber to settle in an active state',\n hint: 'Read the owning Entry, repair its module/config or required service, then reconcile again.',\n detail: {\n reason: cause instanceof Error ? cause.message : String(cause ?? 'unknown failure'),\n },\n };\n}\n\nfunction projectLiveEntry(loader: CatalogLoader, entry: Entry): CatalogPluginInspectionEntry {\n const options = entry.options;\n const fiber = entry.fiber;\n const disabled = entry.disabled;\n const state = disabled\n ? 'disabled'\n : fiber === undefined\n ? 'missing'\n : (FIBER_STATE_BY_CODE[fiber.state] ?? 'unavailable');\n const parent = entry.parent?.ctx.fiber.entry?.id;\n const failure = fiber === undefined ? undefined : failureFromFiber(fiber);\n return {\n ...options,\n entryId: entry.id,\n module: options.name,\n realm: loader.realm,\n desiredState: disabled ? 'disabled' : 'enabled',\n fiberState: state,\n ...(parent === undefined ? {} : { parent }),\n requiredServices: requiredServices(fiber?.inject ?? options.inject),\n providedServices: fiber === undefined ? [] : providedServices(fiber),\n configDigest: configDigest(options.config),\n ...(failure === undefined ? {} : { failure }),\n };\n}\n\n/** Project the live native Loader tree without introducing another state owner. */\nexport function inspectCatalogPlugins(loader: CatalogLoader): CatalogPluginInspection {\n return { live: [...loader.entries()].map((entry) => projectLiveEntry(loader, entry)) };\n}\n","//#region lib/types/misc.js\n/** No-op callback returning `undefined` at runtime and `any` at type level. */\nfunction noop() {}\n/** Return true when a value is `null` or `undefined`. */\nfunction isNullable(value) {\n\treturn value === null || value === void 0;\n}\n/** Return true when a value is neither `null` nor `undefined`. */\nfunction isNonNullable(value) {\n\treturn !isNullable(value);\n}\n/** Return true for non-array object values. */\nfunction isPlainObject(data) {\n\treturn data && typeof data === \"object\" && !Array.isArray(data);\n}\n/** Filter object entries and return a new object. */\nfunction filterKeys(object, filter) {\n\treturn Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value)));\n}\n/** Map object values while preserving the original key set. */\nfunction mapValues(object, transform) {\n\treturn Object.fromEntries(Object.entries(object).map(([key, value]) => [key, transform(value, key)]));\n}\n/** Pick selected keys from an object, optionally including `undefined` values. */\nfunction pick(source, keys, forced) {\n\tif (!keys) return { ...source };\n\tconst result = {};\n\tfor (const key of keys) if (forced || source[key] !== void 0) result[key] = source[key];\n\treturn result;\n}\n/** Omit selected keys from a shallow object copy. */\nfunction omit(source, keys) {\n\tif (!keys) return { ...source };\n\tconst result = { ...source };\n\tfor (const key of keys) Reflect.deleteProperty(result, key);\n\treturn result;\n}\n/** Define a non-enumerable writable property and return the object. */\nfunction defineProperty(object, key, value) {\n\treturn Object.defineProperty(object, key, {\n\t\twritable: true,\n\t\tvalue,\n\t\tenumerable: false\n\t});\n}\n//#endregion\n//#region lib/types/array.js\n/** Return true when every item in `array2` is present in `array1`. */\nfunction contain(array1, array2) {\n\treturn array2.every((item) => array1.includes(item));\n}\n/** Return items that appear in both arrays. */\nfunction intersection(array1, array2) {\n\treturn array1.filter((item) => array2.includes(item));\n}\n/** Return items from `array1` that do not appear in `array2`. */\nfunction difference(array1, array2) {\n\treturn array1.filter((item) => !array2.includes(item));\n}\n/** Return the set-union of two arrays while preserving first occurrence order. */\nfunction union(array1, array2) {\n\treturn Array.from(new Set([...array1, ...array2]));\n}\n/** Remove duplicate values while preserving first occurrence order. */\nfunction deduplicate(array) {\n\treturn [...new Set(array)];\n}\n/** Remove one item from an array and report whether it was found. */\nfunction remove(list, item) {\n\tconst index = list?.indexOf(item);\n\tif (index >= 0) {\n\t\tlist.splice(index, 1);\n\t\treturn true;\n\t} else return false;\n}\n/** Normalize nullish, scalar, or array input to an array. */\nfunction makeArray(source) {\n\treturn Array.isArray(source) ? source : isNullable(source) ? [] : [source];\n}\n//#endregion\n//#region lib/types/types.js\n/** Test values using `instanceof` with a `toStringTag` fallback. */\nfunction is(type, value) {\n\tif (arguments.length === 1) return (value) => is(type, value);\n\treturn type in globalThis && value instanceof globalThis[type] || Object.prototype.toString.call(value).slice(8, -1) === type;\n}\nfunction isArrayBufferLike(value) {\n\treturn is(\"ArrayBuffer\", value) || is(\"SharedArrayBuffer\", value);\n}\nfunction isArrayBufferSource(value) {\n\treturn isArrayBufferLike(value) || ArrayBuffer.isView(value);\n}\n/** Binary source detection and base64/hex conversion helpers. */\nvar Binary;\n(function(Binary) {\n\tBinary.is = isArrayBufferLike;\n\tBinary.isSource = isArrayBufferSource;\n\tfunction fromSource(source) {\n\t\tif (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);\n\t\telse return source;\n\t}\n\tBinary.fromSource = fromSource;\n\tfunction toBase64(source) {\n\t\tsource = fromSource(source);\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(source).toString(\"base64\");\n\t\tlet binary = \"\";\n\t\tconst bytes = new Uint8Array(source);\n\t\tfor (let i = 0; i < bytes.byteLength; i++) binary += String.fromCharCode(bytes[i]);\n\t\treturn btoa(binary);\n\t}\n\tBinary.toBase64 = toBase64;\n\tfunction fromBase64(source) {\n\t\tif (typeof Buffer !== \"undefined\") return fromSource(Buffer.from(source, \"base64\"));\n\t\treturn Uint8Array.from(atob(source), (c) => c.charCodeAt(0));\n\t}\n\tBinary.fromBase64 = fromBase64;\n\tfunction toHex(source) {\n\t\tsource = fromSource(source);\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(source).toString(\"hex\");\n\t\treturn Array.from(new Uint8Array(source), (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n\t}\n\tBinary.toHex = toHex;\n\tfunction fromHex(source) {\n\t\tif (typeof Buffer !== \"undefined\") return fromSource(Buffer.from(source, \"hex\"));\n\t\tconst hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1);\n\t\tconst buffer = [];\n\t\tfor (let i = 0; i < hex.length; i += 2) buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16));\n\t\treturn Uint8Array.from(buffer).buffer;\n\t}\n\tBinary.fromHex = fromHex;\n})(Binary || (Binary = {}));\n/** Decode a base64 string into binary data. */\nconst base64ToArrayBuffer = Binary.fromBase64;\n/** Encode binary data as base64. */\nconst arrayBufferToBase64 = Binary.toBase64;\n/** Decode a hex string into binary data. */\nconst hexToArrayBuffer = Binary.fromHex;\n/** Encode binary data as hex. */\nconst arrayBufferToHex = Binary.toHex;\n/** Deep-clone common JavaScript values while preserving prototypes and cycles. */\nfunction clone(source, refs = /* @__PURE__ */ new Map()) {\n\tif (!source || typeof source !== \"object\") return source;\n\tif (is(\"Date\", source)) return new Date(source.valueOf());\n\tif (is(\"RegExp\", source)) return new RegExp(source.source, source.flags);\n\tif (isArrayBufferLike(source)) return source.slice(0);\n\tif (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);\n\tconst cached = refs.get(source);\n\tif (cached) return cached;\n\tif (Array.isArray(source)) {\n\t\tconst result = [];\n\t\trefs.set(source, result);\n\t\tsource.forEach((value, index) => {\n\t\t\tresult[index] = Reflect.apply(clone, null, [value, refs]);\n\t\t});\n\t\treturn result;\n\t}\n\tconst result = Object.create(Object.getPrototypeOf(source));\n\trefs.set(source, result);\n\tfor (const key of Reflect.ownKeys(source)) {\n\t\tconst descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) };\n\t\tif (\"value\" in descriptor) descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs]);\n\t\tReflect.defineProperty(result, key, descriptor);\n\t}\n\treturn result;\n}\n/** Deeply compare arrays, dates, regexps, buffers, and plain object fields. */\nfunction deepEqual(a, b, strict) {\n\tif (a === b) return true;\n\tif (!strict && isNullable(a) && isNullable(b)) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (typeof a !== \"object\") return false;\n\tif (!a || !b) return false;\n\tfunction check(test, then) {\n\t\treturn test(a) ? test(b) ? then(a, b) : false : test(b) ? false : void 0;\n\t}\n\treturn check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index]))) ?? check(is(\"Date\"), (a, b) => a.valueOf() === b.valueOf()) ?? check(is(\"RegExp\"), (a, b) => a.source === b.source && a.flags === b.flags) ?? check(isArrayBufferLike, (a, b) => {\n\t\tif (a.byteLength !== b.byteLength) return false;\n\t\tconst viewA = new Uint8Array(a);\n\t\tconst viewB = new Uint8Array(b);\n\t\tfor (let i = 0; i < viewA.length; i++) if (viewA[i] !== viewB[i]) return false;\n\t\treturn true;\n\t}) ?? Object.keys({\n\t\t...a,\n\t\t...b\n\t}).every((key) => deepEqual(a[key], b[key], strict));\n}\n//#endregion\n//#region lib/types/string.js\n/** Uppercase the first character of a string. */\nfunction capitalize(source) {\n\treturn source.charAt(0).toUpperCase() + source.slice(1);\n}\n/** Lowercase the first character of a string. */\nfunction uncapitalize(source) {\n\treturn source.charAt(0).toLowerCase() + source.slice(1);\n}\n/** Convert dash or underscore delimited text to camelCase. */\nfunction camelCase(source) {\n\treturn source.replace(/[_-][a-z]/g, (str) => str.slice(1).toUpperCase());\n}\nfunction tokenize(source, delimiters, delimiter) {\n\tconst output = [];\n\tlet state = 0;\n\tfor (let i = 0; i < source.length; i++) {\n\t\tconst code = source.charCodeAt(i);\n\t\tif (code >= 65 && code <= 90) {\n\t\t\tif (state === 1) {\n\t\t\t\tconst next = source.charCodeAt(i + 1);\n\t\t\t\tif (next >= 97 && next <= 122) output.push(delimiter);\n\t\t\t\toutput.push(code + 32);\n\t\t\t} else {\n\t\t\t\tif (state !== 0) output.push(delimiter);\n\t\t\t\toutput.push(code + 32);\n\t\t\t}\n\t\t\tstate = 1;\n\t\t} else if (code >= 97 && code <= 122) {\n\t\t\toutput.push(code);\n\t\t\tstate = 2;\n\t\t} else if (delimiters.includes(code)) {\n\t\t\tif (state !== 0) output.push(delimiter);\n\t\t\tstate = 0;\n\t\t} else output.push(code);\n\t}\n\treturn String.fromCharCode(...output);\n}\n/** Convert text to dash-delimited parameter case. */\nfunction paramCase(source) {\n\treturn tokenize(source, [45, 95], 45);\n}\n/** Convert text to underscore-delimited snake case. */\nfunction snakeCase(source) {\n\treturn tokenize(source, [45, 95], 95);\n}\n/** Runtime alias for `camelCase`. */\nconst camelize = camelCase;\n/** Runtime alias for `paramCase`. */\nconst hyphenate = paramCase;\n/** Format a property key as a JavaScript member access suffix. */\nfunction formatProperty(key) {\n\tif (typeof key !== \"string\") return `[${key.toString()}]`;\n\treturn /^[a-z_$][\\w$]*$/i.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`;\n}\n/** Remove one trailing slash from a path string. */\nfunction trimSlash(source) {\n\treturn source.replace(/\\/$/, \"\");\n}\n/** Ensure a path starts with `/` and has no trailing slash. */\nfunction sanitize(source) {\n\tif (!source.startsWith(\"/\")) source = \"/\" + source;\n\treturn trimSlash(source);\n}\n//#endregion\n//#region lib/types/time.js\n/** Time constants plus parsing and formatting helpers. */\nvar Time;\n(function(Time) {\n\tTime.millisecond = 1;\n\tTime.second = 1e3;\n\tTime.minute = Time.second * 60;\n\tTime.hour = Time.minute * 60;\n\tTime.day = Time.hour * 24;\n\tTime.week = Time.day * 7;\n\tlet timezoneOffset = (/* @__PURE__ */ new Date()).getTimezoneOffset();\n\tfunction setTimezoneOffset(offset) {\n\t\ttimezoneOffset = offset;\n\t}\n\tTime.setTimezoneOffset = setTimezoneOffset;\n\tfunction getTimezoneOffset() {\n\t\treturn timezoneOffset;\n\t}\n\tTime.getTimezoneOffset = getTimezoneOffset;\n\tfunction getDateNumber(date = /* @__PURE__ */ new Date(), offset) {\n\t\tif (typeof date === \"number\") date = new Date(date);\n\t\tif (offset === void 0) offset = timezoneOffset;\n\t\treturn Math.floor((date.valueOf() / Time.minute - offset) / 1440);\n\t}\n\tTime.getDateNumber = getDateNumber;\n\tfunction fromDateNumber(value, offset) {\n\t\tconst date = new Date(value * Time.day);\n\t\tif (offset === void 0) offset = timezoneOffset;\n\t\treturn new Date(+date + offset * Time.minute);\n\t}\n\tTime.fromDateNumber = fromDateNumber;\n\tconst numeric = /\\d+(?:\\.\\d+)?/.source;\n\tconst timeRegExp = new RegExp(`^${[\n\t\t\"w(?:eek(?:s)?)?\",\n\t\t\"d(?:ay(?:s)?)?\",\n\t\t\"h(?:our(?:s)?)?\",\n\t\t\"m(?:in(?:ute)?(?:s)?)?\",\n\t\t\"s(?:ec(?:ond)?(?:s)?)?\"\n\t].map((unit) => `(${numeric}${unit})?`).join(\"\")}$`);\n\tfunction parseTime(source) {\n\t\tconst capture = timeRegExp.exec(source);\n\t\tif (!capture) return 0;\n\t\treturn (parseFloat(capture[1]) * Time.week || 0) + (parseFloat(capture[2]) * Time.day || 0) + (parseFloat(capture[3]) * Time.hour || 0) + (parseFloat(capture[4]) * Time.minute || 0) + (parseFloat(capture[5]) * Time.second || 0);\n\t}\n\tTime.parseTime = parseTime;\n\tfunction parseDate(date) {\n\t\tconst parsed = parseTime(date);\n\t\tif (parsed) date = Date.now() + parsed;\n\t\telse if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).toLocaleDateString()}-${date}`;\n\t\telse if (/^\\d{1,2}-\\d{1,2}-\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) date = `${(/* @__PURE__ */ new Date()).getFullYear()}-${date}`;\n\t\treturn date ? new Date(date) : /* @__PURE__ */ new Date();\n\t}\n\tTime.parseDate = parseDate;\n\tfunction format(ms) {\n\t\tconst abs = Math.abs(ms);\n\t\tif (abs >= Time.day - Time.hour / 2) return Math.round(ms / Time.day) + \"d\";\n\t\telse if (abs >= Time.hour - Time.minute / 2) return Math.round(ms / Time.hour) + \"h\";\n\t\telse if (abs >= Time.minute - Time.second / 2) return Math.round(ms / Time.minute) + \"m\";\n\t\telse if (abs >= Time.second) return Math.round(ms / Time.second) + \"s\";\n\t\treturn ms + \"ms\";\n\t}\n\tTime.format = format;\n\tfunction toDigits(source, length = 2) {\n\t\treturn source.toString().padStart(length, \"0\");\n\t}\n\tTime.toDigits = toDigits;\n\tfunction template(template, time = /* @__PURE__ */ new Date()) {\n\t\treturn template.replace(\"yyyy\", time.getFullYear().toString()).replace(\"yy\", time.getFullYear().toString().slice(2)).replace(\"MM\", toDigits(time.getMonth() + 1)).replace(\"dd\", toDigits(time.getDate())).replace(\"hh\", toDigits(time.getHours())).replace(\"mm\", toDigits(time.getMinutes())).replace(\"ss\", toDigits(time.getSeconds())).replace(\"SSS\", toDigits(time.getMilliseconds(), 3));\n\t}\n\tTime.template = template;\n})(Time || (Time = {}));\n//#endregion\nexport { Binary, Time, arrayBufferToBase64, arrayBufferToHex, base64ToArrayBuffer, camelCase, camelize, capitalize, clone, contain, deduplicate, deepEqual, defineProperty, difference, filterKeys, formatProperty, hexToArrayBuffer, hyphenate, intersection, is, isNonNullable, isNullable, isPlainObject, makeArray, mapValues, mapValues as valueMap, noop, omit, paramCase, pick, remove, sanitize, snakeCase, trimSlash, uncapitalize, union };\n","import { Context, Inject, Service, composeError } from \"@deepseek-ai/cordis\";\nimport { deepEqual, defineProperty, isNonNullable, isNullable, valueMap } from \"@deepseek-ai/cosmokit\";\n//#region lib/types/internal.js\n/** Helpers for locating the current Node internal module loader. */\nvar ModuleLoader;\n(function(ModuleLoader) {\n\tlet _cachedLoader;\n\tfunction fromInternal() {\n\t\tif (_cachedLoader) return _cachedLoader;\n\t}\n\tModuleLoader.fromInternal = fromInternal;\n})(ModuleLoader || (ModuleLoader = {}));\n//#endregion\n//#region lib/types/config/group.js\n/** Runtime owner for a list of child loader entries. */\nvar EntryGroup = class {\n\tctx;\n\ttree;\n\tstatic key = Symbol.for(\"cordis.group\");\n\tdata = [];\n\tconstructor(ctx, tree) {\n\t\tthis.ctx = ctx;\n\t\tthis.tree = tree;\n\t\tconst entry = ctx.fiber.entry;\n\t\tif (entry) entry.subgroup = this;\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\tasync create(options) {\n\t\tconst id = this.tree.ensureId(options);\n\t\tconst existing = this.tree.store[id];\n\t\tconst entry = existing ?? (this.tree.store[id] = new Entry(this.ctx.loader));\n\t\tconst previousParent = entry.parent;\n\t\tentry.parent = this;\n\t\ttry {\n\t\t\tawait entry.update(options, true, true);\n\t\t} catch (error) {\n\t\t\tif (existing) entry.parent = previousParent;\n\t\t\telse delete this.tree.store[id];\n\t\t\tthrow error;\n\t\t}\n\t\treturn entry.id;\n\t}\n\tunlink(options) {\n\t\tconst config = this.data;\n\t\tconst index = config.indexOf(options);\n\t\tif (index >= 0) config.splice(index, 1);\n\t}\n\tasync remove(id, isDispose = false) {\n\t\tconst entry = this.tree.store[id];\n\t\tif (!entry) return;\n\t\tawait entry._dispose();\n\t\tif (!isDispose) this.unlink(entry.options);\n\t\tdelete this.tree.store[id];\n\t\tthis.context.emit(\"loader/partial-dispose\", entry, entry.options, false);\n\t}\n\tasync update(config) {\n\t\tconst oldConfig = this.data;\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tfor (const options of config) {\n\t\t\tconst id = this.tree.ensureId(options);\n\t\t\tif (seen.has(id)) throw new TypeError(`duplicate loader entry id: ${id}`);\n\t\t\tseen.add(id);\n\t\t}\n\t\tconst oldMap = Object.fromEntries(oldConfig.map((options) => [options.id, options]));\n\t\tconst newMap = Object.fromEntries(config.map((options) => [options.id, options]));\n\t\ttry {\n\t\t\tconst outcomes = await Promise.allSettled(config.map((options) => this.create(options)));\n\t\t\tif (this.ctx.fiber.uid === null) return;\n\t\t\tconst failures = outcomes.filter((outcome) => outcome.status === \"rejected\").map((outcome) => outcome.reason);\n\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\tif (failures.length > 1) throw new AggregateError(failures, \"loader entries failed to apply\");\n\t\t\tfor (const id of Object.keys(oldMap)) if (!newMap[id]) await this.remove(id, true);\n\t\t\tthis.data = config;\n\t\t} catch (error) {\n\t\t\tconst rollbackErrors = [];\n\t\t\tfor (const id of Object.keys(newMap).reverse()) {\n\t\t\t\tif (oldMap[id]) continue;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.remove(id, true);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\trollbackErrors.push(rollbackError);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const options of oldConfig) try {\n\t\t\t\tawait this.create(options);\n\t\t\t} catch (rollbackError) {\n\t\t\t\trollbackErrors.push(rollbackError);\n\t\t\t}\n\t\t\tthis.data = oldConfig;\n\t\t\tif (rollbackErrors.length) throw new AggregateError([error, ...rollbackErrors], \"loader entry rollback failed\");\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync stop() {\n\t\tfor (const options of this.data) await this.remove(options.id, true);\n\t}\n};\n/** Plugin that mounts a nested loader entry group. */\nvar Group = class extends EntryGroup {\n\tctx;\n\tconfig;\n\tstatic initial = [];\n\tstatic [EntryGroup.key] = true;\n\tconstructor(ctx, config) {\n\t\tsuper(ctx, ctx.fiber.entry.parent.tree);\n\t\tthis.ctx = ctx;\n\t\tthis.config = config;\n\t\tctx.on(\"internal/update\", (config) => this.update(config));\n\t}\n\tasync *[Service.init]() {\n\t\tyield () => this.stop();\n\t\tawait this.update(this.config);\n\t}\n};\n//#endregion\n//#region lib/types/config/tree.js\nvar __rewriteRelativeImportExtension = function(path, preserveJsx) {\n\tif (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {\n\t\treturn tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n\t});\n\treturn path;\n};\n/** Mutable tree of loader entries. Persistence is supplied by subclasses. */\nvar EntryTree = class EntryTree {\n\tstatic sep = \":\";\n\tctx;\n\tenableLogs;\n\troot;\n\tstore = Object.create(null);\n\tconstructor(ctx) {\n\t\tthis.ctx = ctx.extend({ baseUrl: ctx.baseUrl });\n\t\tthis.root = new EntryGroup(this.ctx, this);\n\t\tconst entry = this.ctx.fiber.entry;\n\t\tif (entry) entry.subtree = this;\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\t/** Iterate entries in this tree and any nested subtrees. */\n\t*entries() {\n\t\tfor (const entry of Object.values(this.store)) {\n\t\t\tyield entry;\n\t\t\tif (!entry.subtree) continue;\n\t\t\tyield* entry.subtree.entries();\n\t\t}\n\t}\n\t/** Return pending import and lifecycle tasks owned by this tree. */\n\tgetTasks() {\n\t\treturn [...this.entries()].map((entry) => entry._initTask || entry.fiber?.inertia).filter(isNonNullable);\n\t}\n\t/**\n\t* Wait until this tree has no active import or lifecycle tasks.\n\t* @throws a settled fiber failure, or an aggregate when several fibers failed.\n\t*/\n\tasync await() {\n\t\twhile (true) {\n\t\t\tconst tasks = this.getTasks();\n\t\t\tif (tasks.length) {\n\t\t\t\tawait Promise.allSettled(tasks);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst failures = (await Promise.allSettled([...this.entries()].map((entry) => entry._await()))).filter((outcome) => outcome.status === \"rejected\").map((outcome) => outcome.reason);\n\t\t\tif (failures.length === 1) throw failures[0];\n\t\t\tif (failures.length > 1) throw new AggregateError(failures, \"loader fibers failed\");\n\t\t\tthis.ctx.reflect.notify([\"loader\"]);\n\t\t\tif (!this.getTasks().length) return;\n\t\t}\n\t}\n\tensureId(options) {\n\t\tif (!options.id) do\n\t\t\toptions.id = Math.random().toString(16).slice(2, 10);\n\t\twhile (this.store[options.id]);\n\t\treturn options.id;\n\t}\n\t/** Resolve an entry by id, including nested ids separated by `EntryTree.sep`. */\n\tresolve(id) {\n\t\tconst parts = id.split(EntryTree.sep);\n\t\tlet tree = this;\n\t\tconst final = parts.pop();\n\t\tfor (const part of parts) {\n\t\t\ttree = tree.store[part]?.subtree;\n\t\t\tif (!tree) throw new Error(`cannot resolve entry ${id}`);\n\t\t}\n\t\tconst entry = tree.store[final];\n\t\tif (!entry) throw new Error(`cannot resolve entry ${id}`);\n\t\treturn entry;\n\t}\n\tresolveGroup(id) {\n\t\tif (!id) return this.root;\n\t\tconst entry = this.resolve(id);\n\t\tif (!entry.subgroup) throw new Error(`entry ${id} is not a group`);\n\t\treturn entry.subgroup;\n\t}\n\t/** Create an entry in the root group or a nested group. */\n\tasync create(options, parent = null, position = Infinity) {\n\t\tconst group = this.resolveGroup(parent);\n\t\tconst id = await group.create(options);\n\t\tconst entry = this.resolve(id);\n\t\tgroup.data.splice(position, 0, entry.options);\n\t\tgroup.tree.write();\n\t\treturn id;\n\t}\n\t/** Stop and remove an entry from its parent group. */\n\tasync remove(id) {\n\t\tconst entry = this.resolve(id);\n\t\tawait entry.parent.remove(id);\n\t\tentry.parent.tree.write();\n\t}\n\t/** Update an entry and optionally move it to another group. */\n\tasync update(id, options, parent, position) {\n\t\tconst entry = this.resolve(id);\n\t\tconst source = entry.parent;\n\t\tconst sourceIndex = source.data.indexOf(entry.options);\n\t\tlet target = source;\n\t\tif (parent !== void 0) {\n\t\t\ttarget = this.resolveGroup(parent);\n\t\t\tsource.unlink(entry.options);\n\t\t\ttarget.data.splice(position ?? Infinity, 0, entry.options);\n\t\t\tentry.parent = target;\n\t\t}\n\t\ttry {\n\t\t\tawait entry.update(options, false, true);\n\t\t} catch (error) {\n\t\t\tif (parent !== void 0) {\n\t\t\t\ttarget.unlink(entry.options);\n\t\t\t\tsource.data.splice(sourceIndex < 0 ? source.data.length : sourceIndex, 0, entry.options);\n\t\t\t\tentry.parent = source;\n\t\t\t\ttry {\n\t\t\t\t\tawait entry.update({}, false, true);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow new AggregateError([error, rollbackError], `failed to roll back loader entry move ${id}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tsource.tree.write();\n\t\tif (target !== source) target.tree.write();\n\t}\n\t/** Import a plugin module from a specifier or `cordis:` builtin. */\n\timport(name, getOuterStack) {\n\t\tif (name.startsWith(\"cordis:\")) return this.ctx.loader.builtins[name.slice(7)];\n\t\treturn composeError(async (info) => {\n\t\t\tinfo.offset += 3;\n\t\t\tif (this.ctx.loader.internal) return await this.ctx.loader.internal.import(name, this.ctx.baseUrl, {});\n\t\t\telse if (name.startsWith(\".\")) return await import(__rewriteRelativeImportExtension(\n\t\t\t\t/* @vite-ignore */\n\t\t\t\tnew URL(name, this.ctx.baseUrl).href\n\t\t\t));\n\t\t\telse return await import(__rewriteRelativeImportExtension(\n\t\t\t\t/* @vite-ignore */\n\t\t\t\tname\n\t\t\t));\n\t\t}, getOuterStack);\n\t}\n};\n//#endregion\n//#region lib/types/config/utils.js\n/** Evaluate a JavaScript expression against a loader context scope. */\nconst evaluate = new Function(\"ctx\", \"expr\", `\n with (ctx) {\n return eval(expr)\n }\n`);\n/** Recursively replace YAML `!js` expression nodes with evaluated values. */\nfunction interpolate(ctx, value) {\n\tif (isJsExpr(value)) return evaluate(ctx, value.__jsExpr);\n\telse if (!value || typeof value !== \"object\") return value;\n\telse if (Array.isArray(value)) return value.map((item) => interpolate(ctx, item));\n\telse return valueMap(value, (item) => interpolate(ctx, item));\n}\n/** Return true when a value is a serialized loader JavaScript expression. */\nfunction isJsExpr(value) {\n\treturn value instanceof Object && \"__jsExpr\" in value;\n}\n//#endregion\n//#region lib/types/config/entry.js\nfunction updateError(stage, options, cause) {\n\tconst detail = cause instanceof Error ? cause.message : String(cause);\n\treturn new Error(`failed to ${stage} loader entry ${options.id} (${options.name}): ${detail}`, { cause });\n}\nfunction takeEntries(object, keys) {\n\tconst result = [];\n\tfor (const key of keys) {\n\t\tif (!(key in object)) continue;\n\t\tresult.push([key, object[key]]);\n\t\tdelete object[key];\n\t}\n\treturn result;\n}\nfunction sortKeys(object, prepend = [\"id\", \"name\"], append = [\"config\"]) {\n\tconst part1 = takeEntries(object, prepend);\n\tconst part2 = takeEntries(object, append);\n\tconst rest = takeEntries(object, Object.keys(object)).sort(([a], [b]) => a.localeCompare(b));\n\treturn Object.assign(object, Object.fromEntries([\n\t\t...part1,\n\t\t...rest,\n\t\t...part2\n\t]));\n}\nfunction replaceKeys(target, source) {\n\tfor (const key of Object.keys(target)) Reflect.deleteProperty(target, key);\n\treturn Object.assign(target, source);\n}\n/** One configured plugin node inside an `EntryTree`. */\nvar Entry = class Entry {\n\tloader;\n\tstatic key = Symbol.for(\"cordis.entry\");\n\tctx;\n\tfiber;\n\tparent;\n\toptions = {};\n\tsubgroup;\n\tsubtree;\n\t_initTask;\n\t_disposing = 0;\n\tconstructor(loader) {\n\t\tthis.loader = loader;\n\t\tthis.ctx = loader.ctx.extend({ [Entry.key]: this });\n\t\tthis.context.emit(\"loader/entry-init\", this);\n\t}\n\tget context() {\n\t\treturn this.ctx;\n\t}\n\tget id() {\n\t\tlet id = this.options.id;\n\t\tif (this.parent.tree.ctx.fiber.entry) id = this.parent.tree.ctx.fiber.entry.id + EntryTree.sep + id;\n\t\treturn id;\n\t}\n\t/** True when this entry or any owning parent entry is disabled. */\n\tget disabled() {\n\t\treturn this._disabled(this.options);\n\t}\n\t_disabled(options) {\n\t\tif (options.group) return false;\n\t\tif (this.disabledOf(options)) return true;\n\t\tlet entry = this.parent.ctx.fiber.entry;\n\t\twhile (entry) {\n\t\t\tif (this.disabledOf(entry.options)) return true;\n\t\t\tentry = entry.parent.ctx.fiber.entry;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Effective disabled state: a `!!js` expression evaluates against the loader\n\t* context. The raw node stays in the options, so write-back keeps the form.\n\t*/\n\tdisabledOf(options) {\n\t\treturn isJsExpr(options.disabled) ? Boolean(this.evaluate(options.disabled.__jsExpr)) : Boolean(options.disabled);\n\t}\n\tevaluate(expr) {\n\t\treturn evaluate(this.ctx, expr);\n\t}\n\tasync _patchContext(diff) {\n\t\tawait this.context.waterfall(\"loader/patch-context\", this, async () => {\n\t\t\tObject.setPrototypeOf(this.ctx, this.parent.ctx);\n\t\t\tif (this.fiber?.uid && (diff.includes(\"config\") || this.options.group)) await this.fiber.update(this.options.config, true);\n\t\t});\n\t}\n\tasync refresh() {\n\t\tif (this.fiber) return;\n\t\tif (this.disabled) return;\n\t\tawait this.init();\n\t}\n\tasync _dispose(fiber = this.fiber) {\n\t\tif (!fiber) return;\n\t\tif (this.fiber === fiber) this.fiber = void 0;\n\t\tthis._disposing += 1;\n\t\ttry {\n\t\t\tawait fiber.dispose();\n\t\t} finally {\n\t\t\tthis._disposing -= 1;\n\t\t}\n\t}\n\t/** Merge new options, restart as needed, and persist through the parent tree. */\n\tasync update(options, create = false, force = false) {\n\t\tconst previousOptions = this.options;\n\t\tconst legacy = { ...previousOptions };\n\t\tconst candidate = create ? options : { ...previousOptions };\n\t\tif (!create) for (const [key, value] of Object.entries(options)) if (isNullable(value)) delete candidate[key];\n\t\telse candidate[key] = value;\n\t\tsortKeys(candidate);\n\t\tconst diff = Object.keys({\n\t\t\t...candidate,\n\t\t\t...legacy\n\t\t}).filter((key) => !deepEqual(candidate[key], legacy[key]));\n\t\tif (!diff.length && !force) return;\n\t\tconst commit = () => {\n\t\t\tif (create) return;\n\t\t\tthis.options = replaceKeys(previousOptions, candidate);\n\t\t};\n\t\tconst previous = this.fiber;\n\t\tif (!previous?.uid) {\n\t\t\tthis.fiber = void 0;\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tif (!this._disabled(candidate)) await this.init();\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tcommit();\n\t\t\treturn;\n\t\t}\n\t\tif (this._disabled(candidate)) {\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tawait this._dispose(previous);\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\tthrow updateError(\"dispose\", candidate, error);\n\t\t\t}\n\t\t\tcommit();\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t\t\treturn;\n\t\t}\n\t\tif (!diff.some((key) => key === \"name\" || key === \"inject\" || key === \"group\")) {\n\t\t\tthis.options = candidate;\n\t\t\ttry {\n\t\t\t\tawait this._patchContext(diff);\n\t\t\t} catch (error) {\n\t\t\t\tthis.options = previousOptions;\n\t\t\t\ttry {\n\t\t\t\t\tawait this._patchContext(diff);\n\t\t\t\t} catch (rollbackError) {\n\t\t\t\t\tthrow updateError(\"rollback\", legacy, new AggregateError([error, rollbackError]));\n\t\t\t\t}\n\t\t\t\tthis.context.emit(\"loader/partial-dispose\", this, candidate, true);\n\t\t\t\tthrow updateError(\"apply\", candidate, error);\n\t\t\t}\n\t\t\tcommit();\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t\t\treturn;\n\t\t}\n\t\tlet plugin;\n\t\ttry {\n\t\t\tplugin = diff.includes(\"name\") ? this.loader.unwrapExports(await this.parent.tree.import(candidate.name, this.getOuterStack)) : previous.runtime.callback;\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"import\", candidate, error);\n\t\t}\n\t\tconst previousPlugin = previous.runtime.callback;\n\t\tthis.options = candidate;\n\t\ttry {\n\t\t\tawait this._dispose(previous);\n\t\t} catch (error) {\n\t\t\tthis.options = previousOptions;\n\t\t\tthrow updateError(\"dispose\", candidate, error);\n\t\t}\n\t\ttry {\n\t\t\tawait this._start(plugin);\n\t\t} catch (error) {\n\t\t\tthis.options = previousOptions;\n\t\t\ttry {\n\t\t\t\tawait this._start(previousPlugin);\n\t\t\t} catch (rollbackError) {\n\t\t\t\tthrow updateError(\"rollback\", legacy, new AggregateError([error, rollbackError]));\n\t\t\t}\n\t\t\tthis.context.emit(\"loader/partial-dispose\", this, candidate, true);\n\t\t\tthrow updateError(\"apply\", candidate, error);\n\t\t}\n\t\tcommit();\n\t\tthis.context.emit(\"loader/partial-dispose\", this, legacy, true);\n\t}\n\tgetOuterStack = () => {\n\t\tlet entry = this;\n\t\tconst result = [];\n\t\tdo {\n\t\t\tresult.push(` at ${entry.parent.tree.ctx.baseUrl}#${entry.options.id}`);\n\t\t\tentry = entry.parent.ctx.fiber.entry;\n\t\t} while (entry);\n\t\treturn result;\n\t};\n\t/** Import and start the configured plugin if it is not already running. */\n\tasync init() {\n\t\ttry {\n\t\t\tawait (this._initTask ??= this._init());\n\t\t} finally {\n\t\t\tthis._initTask = void 0;\n\t\t\tif (!this.loader.getTasks().length) this.ctx.reflect.notify([\"loader\"]);\n\t\t}\n\t\tawait this._await();\n\t}\n\tasync _await() {\n\t\ttry {\n\t\t\tawait this.fiber?.await();\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"apply\", this.options, error);\n\t\t}\n\t}\n\tasync _init() {\n\t\tlet plugin;\n\t\ttry {\n\t\t\tplugin = this.loader.unwrapExports(await this.parent.tree.import(this.options.name, this.getOuterStack));\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"import\", this.options, error);\n\t\t}\n\t\ttry {\n\t\t\tawait this._start(plugin);\n\t\t} catch (error) {\n\t\t\tthrow updateError(\"apply\", this.options, error);\n\t\t}\n\t}\n\tasync _start(plugin) {\n\t\tlet fiber;\n\t\ttry {\n\t\t\tawait this._patchContext([]);\n\t\t\tthis.loader.showLog(this, \"apply\");\n\t\t\tfiber = this.fiber = this.ctx.registry.plugin(plugin, this.options.config, this.getOuterStack);\n\t\t\tawait fiber.await();\n\t\t} catch (error) {\n\t\t\tawait this._dispose(fiber);\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n//#endregion\n//#region lib/types/config/isolate.js\nfunction swap(target, source) {\n\tfor (const key of Reflect.ownKeys(target)) Reflect.deleteProperty(target, key);\n\tfor (const key of Reflect.ownKeys(source || {})) Reflect.defineProperty(target, key, Reflect.getOwnPropertyDescriptor(source, key));\n}\n/** Symbol realm used to isolate service implementations by entry or label. */\nvar Realm = class {\n\tstore = Object.create(null);\n\taccess(key, create = false) {\n\t\tif (create) return this.store[key] ??= Symbol(`${key}${this.suffix}`);\n\t\telse return this.store[key] ?? Symbol(`${key}${this.suffix}`);\n\t}\n\tdelete(key) {\n\t\tdelete this.store[key];\n\t}\n\tget size() {\n\t\treturn Object.keys(this.store).length;\n\t}\n};\n/** Entry-local isolation realm. */\nvar LocalRealm = class extends Realm {\n\tentry;\n\tconstructor(entry) {\n\t\tsuper();\n\t\tthis.entry = entry;\n\t}\n\tget suffix() {\n\t\treturn \"#\" + this.entry.options.id;\n\t}\n};\n/** Named isolation realm shared by entries that use the same label. */\nvar GlobalRealm = class extends Realm {\n\tlabel;\n\tconstructor(label) {\n\t\tsuper();\n\t\tthis.label = label;\n\t}\n\tget suffix() {\n\t\treturn \"@\" + this.label;\n\t}\n};\n/** Install loader hooks that apply `intercept` and `isolate` entry options. */\nfunction isolate(ctx) {\n\tconst realms = Object.create(null);\n\tconst delims = Object.create(null);\n\tfunction access(entry, name, create = false) {\n\t\tlet realm;\n\t\tconst label = entry.options.isolate?.[name];\n\t\tif (!label) return;\n\t\tif (label === true) realm = entry.realm ??= new LocalRealm(entry);\n\t\telse if (create) realm = realms[label] ??= new GlobalRealm(label);\n\t\telse realm = realms[label];\n\t\treturn realm?.access(name, create);\n\t}\n\tctx.on(\"loader/entry-init\", (entry) => {\n\t\tentry.ctx[Context.intercept] = Object.create(entry.ctx[Context.intercept]);\n\t\tentry.ctx[Context.isolate] = Object.create(entry.ctx[Context.isolate]);\n\t});\n\tctx.on(\"loader/patch-context\", async (entry, next) => {\n\t\tconst newMap = Object.create(entry.parent.ctx[Context.isolate]);\n\t\tfor (const name of Object.keys(entry.options.isolate ?? {})) newMap[name] = access(entry, name, true);\n\t\tconst diff = Object.create(null);\n\t\tconst oldMap = entry.ctx[Context.isolate];\n\t\tfor (const name in {\n\t\t\t...newMap,\n\t\t\t...delims\n\t\t}) {\n\t\t\tif (newMap[name] === oldMap[name]) continue;\n\t\t\tconst delim = delims[name] ??= Symbol(`delim:${name}`);\n\t\t\tentry.ctx[delim] = Symbol(`${name}#${entry.id}`);\n\t\t\tfor (const symbol of [oldMap[name], newMap[name]]) {\n\t\t\t\tconst impl = symbol && entry.ctx.reflect.store[symbol];\n\t\t\t\tif (!impl) continue;\n\t\t\t\tif (!impl.fiber) {\n\t\t\t\t\tentry.ctx.logger.warn(/* @__PURE__ */ new Error(`expected service ${name} to be implemented`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdiff[name] = [\n\t\t\t\t\toldMap[name],\n\t\t\t\t\tnewMap[name],\n\t\t\t\t\tentry.ctx[delim],\n\t\t\t\t\timpl.fiber.ctx[delim]\n\t\t\t\t];\n\t\t\t\tif (entry.ctx[delim] !== impl.fiber.ctx[delim]) break;\n\t\t\t}\n\t\t}\n\t\tObject.setPrototypeOf(entry.ctx[Context.isolate], entry.parent.ctx[Context.isolate]);\n\t\tObject.setPrototypeOf(entry.ctx[Context.intercept], entry.parent.ctx[Context.intercept]);\n\t\tswap(entry.ctx[Context.isolate], newMap);\n\t\tswap(entry.ctx[Context.intercept], entry.options.intercept);\n\t\tawait next();\n\t\tfor (const [symbol1, symbol2, flag1, flag2] of Object.values(diff)) if (flag1 === flag2 && entry.ctx.reflect.store[symbol1] && !entry.ctx.reflect.store[symbol2]) {\n\t\t\tentry.ctx.reflect.store[symbol2] = entry.ctx.reflect.store[symbol1];\n\t\t\tdelete entry.ctx.reflect.store[symbol1];\n\t\t}\n\t\tctx.reflect.notify(Object.keys(diff), (ctx, name) => {\n\t\t\tconst [symbol1, symbol2, flag1, flag2] = diff[name];\n\t\t\tconst symbol3 = ctx[Context.isolate][name];\n\t\t\tconst flag3 = ctx[delims[name]];\n\t\t\treturn (symbol1 === symbol3 || symbol2 === symbol3) && flag1 === flag3 !== (flag1 === flag2);\n\t\t});\n\t\tfor (const name in delims) if (!Reflect.ownKeys(newMap).includes(name)) delete entry.ctx[delims[name]];\n\t});\n\tctx.on(\"loader/partial-dispose\", (entry, legacy, active) => {\n\t\tfor (const [name, label] of Object.entries(legacy.isolate ?? {})) {\n\t\t\tif (label === true) continue;\n\t\t\tif (active && entry.options.isolate?.[name] === label) continue;\n\t\t\tconst realm = realms[label];\n\t\t\tif (!realm) continue;\n\t\t\tfor (const entry of ctx.loader.entries()) if (entry.options.isolate?.[name] === realm.label) return;\n\t\t\trealm.delete(name);\n\t\t\tif (!realm.size) delete realms[realm.label];\n\t\t}\n\t});\n}\n//#endregion\n//#region lib/types/index.js\n/**\n* Service that owns a loader entry tree and imports configured plugins.\n*\n* Subclasses provide persistence by implementing `write()` on `EntryTree`.\n*/\nvar Loader = class extends EntryTree {\n\tconfig;\n\tenvData = { startTime: Date.now() };\n\tname = \"loader\";\n\tinternal = ModuleLoader.fromInternal();\n\tbuiltins = Object.create(null);\n\tconstructor(ctx, config = {}) {\n\t\tsuper(ctx);\n\t\tthis.config = config;\n\t\tif (config.baseUrl) this.ctx.baseUrl = config.baseUrl;\n\t\tconst self = this;\n\t\tdefineProperty(this, Service.tracker, {\n\t\t\tassociate: \"loader\",\n\t\t\tproperty: \"ctx\",\n\t\t\tnoShadow: true\n\t\t});\n\t\tctx.reflect.provide(\"loader\", this, this[Service.check]);\n\t\tctx.on(\"internal/config\", function(_config, next) {\n\t\t\tconst config = next();\n\t\t\tif (!this.entry || this.parent.fiber?.entry === this.entry) return config;\n\t\t\tif ((this.runtime?.callback)?.[EntryGroup.key]) return config;\n\t\t\treturn interpolate(this.ctx, config);\n\t\t}, { global: true });\n\t\tctx.on(\"internal/update\", async function(config, noSave, next) {\n\t\t\tif (!this.entry || noSave || this.parent.fiber?.entry === this.entry) return next();\n\t\t\tawait next();\n\t\t\tconst unparse = this.runtime?.Config?.[\"simplify\"];\n\t\t\tthis.entry.options.config = unparse ? unparse(config) : config;\n\t\t\tthis.entry.parent.tree.write();\n\t\t}, {\n\t\t\tglobal: true,\n\t\t\tprepend: true\n\t\t});\n\t\tctx.on(\"internal/update\", function(config, _, next) {\n\t\t\tif (!this.entry || this.parent.fiber?.entry === this.entry) return next();\n\t\t\tself.showLog(this.entry, \"reload\");\n\t\t\treturn next();\n\t\t}, { global: true });\n\t\tctx.on(\"internal/plugin\", (fiber) => {\n\t\t\tif (fiber.parent[Entry.key] && !fiber.entry) {\n\t\t\t\tfiber.entry = fiber.parent[Entry.key];\n\t\t\t\tInject.resolve(fiber.entry.options.inject, fiber.inject);\n\t\t\t}\n\t\t\tif (fiber.uid) return;\n\t\t\tif (!fiber.entry) return;\n\t\t\tif (fiber.parent.fiber?.entry === fiber.entry) return;\n\t\t\tif (!ctx.registry.has(fiber.runtime.callback)) return;\n\t\t\tconst treeOwner = fiber.entry.parent.tree.ctx.fiber;\n\t\t\tif (!treeOwner.uid || treeOwner.state === 5) return;\n\t\t\tif (fiber.entry._disposing) return;\n\t\t\tthis.showLog(fiber.entry, \"unload\");\n\t\t\tif (fiber.entry.disabled) return;\n\t\t\tfiber.entry.options.disabled = true;\n\t\t\tfiber.entry.parent.tree.write();\n\t\t});\n\t\tctx.plugin(isolate);\n\t}\n\twrite() {}\n\t[Service.check]() {\n\t\tif (Service.prototype[Service.resolveConfig].call(this).await && this.getTasks().length) return false;\n\t\treturn true;\n\t}\n\tshowLog(entry, type) {\n\t\tif (entry.options.group || !entry.parent.tree.enableLogs) return;\n\t\tthis.ctx.root.logger?.(\"loader\").info(\"%s plugin %C\", type, entry.options.name);\n\t}\n\t/** Return the loader entry id that owns `fiber`, if any. */\n\tlocate(fiber = this.ctx.fiber) {\n\t\twhile (1) {\n\t\t\tif (fiber.entry) return fiber.entry.id;\n\t\t\tconst next = fiber.parent.fiber;\n\t\t\tif (fiber === next) return;\n\t\t\tfiber = next;\n\t\t}\n\t}\n\t/** Hook for hosts that can restart the process on full-reload requests. */\n\texit() {}\n\t/** Normalize ESM/CJS/default export shapes before applying a plugin. */\n\tunwrapExports(exports) {\n\t\tif (isNullable(exports)) return exports;\n\t\texports = exports.default ?? exports;\n\t\tif (!exports.__esModule) return exports;\n\t\treturn exports.default ?? exports;\n\t}\n};\n//#endregion\nexport { Entry, EntryGroup, EntryTree, GlobalRealm, Group, Loader, Loader as default, LocalRealm, ModuleLoader, Realm, evaluate, interpolate, isJsExpr };\n","import type { Plugin } from '@deepseek-ai/cordis';\nimport type { ToolContribution } from '@forgeax/engine-tool-runtime';\n\n/** A native Cordis plugin plus the tool contributions it exposes. */\nexport interface ToolPlugin {\n readonly plugin: Plugin;\n readonly tools: readonly ToolContribution<unknown, unknown>[];\n}\n\nexport function defineToolPlugin(\n plugin: Plugin,\n tools: readonly ToolContribution<unknown, unknown>[],\n): ToolPlugin {\n return { plugin, tools: [...tools] };\n}\n\nexport function isToolPlugin(value: unknown): value is ToolPlugin {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<ToolPlugin>;\n return candidate.plugin !== undefined && Array.isArray(candidate.tools);\n}\n","import type { Context, Fiber, Plugin } from '@deepseek-ai/cordis';\nimport { type EntryOptions, Group, Loader } from '@deepseek-ai/cordis-plugin-loader';\nimport type { ToolRealm } from '@forgeax/engine-tool-runtime';\n\nimport { isToolPlugin } from './tool-plugin.js';\n\nexport type PluginRealm = ToolRealm;\n\nexport interface PluginCatalogRecord {\n readonly realm: PluginRealm;\n /** Package code identity bound by a generated/static catalog. */\n readonly version?: string;\n /** Optional content identity for catalogs that pin source bytes. */\n readonly digest?: string;\n readonly load: () => Promise<unknown>;\n}\n\nexport type PluginCatalog = ReadonlyMap<string, PluginCatalogRecord>;\n\nexport { createContextCapabilityResolver } from './capability.js';\nexport { defineToolPlugin, isToolPlugin, type ToolPlugin } from './tool-plugin.js';\n\nexport interface GamePluginEntry extends EntryOptions {\n readonly realm?: PluginRealm;\n}\n\nexport type CatalogLoaderErrorCode =\n | 'plugin-catalog-missing'\n | 'plugin-realm-mismatch'\n | 'plugin-entry-realm-mixed'\n | 'plugin-realm-unsupported'\n | 'plugin-catalog-digest-mismatch';\n\nexport interface CatalogMissingDetail {\n readonly name: string;\n readonly realm?: PluginRealm;\n readonly attempt?: number;\n}\n\nexport interface CatalogRealmMismatchDetail {\n readonly name: string;\n readonly actual: PluginRealm;\n readonly expected: PluginRealm;\n}\n\nexport interface CatalogMixedRealmDetail {\n readonly group: string;\n readonly actual: PluginRealm;\n readonly expected: PluginRealm;\n}\n\nexport interface CatalogUnsupportedRealmDetail {\n readonly realm: PluginRealm;\n readonly supportedRealms: readonly PluginRealm[];\n}\n\nexport interface CatalogDigestMismatchDetail {\n readonly actual: string;\n readonly expected: string;\n}\n\nexport type CatalogLoaderErrorDetailByCode = {\n 'plugin-catalog-missing': CatalogMissingDetail;\n 'plugin-realm-mismatch': CatalogRealmMismatchDetail;\n 'plugin-entry-realm-mixed': CatalogMixedRealmDetail;\n 'plugin-realm-unsupported': CatalogUnsupportedRealmDetail;\n 'plugin-catalog-digest-mismatch': CatalogDigestMismatchDetail;\n};\n\nexport type CatalogLoaderErrorArgs<C extends CatalogLoaderErrorCode = CatalogLoaderErrorCode> = {\n readonly code: C;\n readonly expected: string;\n readonly hint: string;\n readonly detail: CatalogLoaderErrorDetailByCode[C];\n};\n\nclass CatalogLoaderErrorClass extends Error {\n readonly code: CatalogLoaderErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: CatalogLoaderErrorDetailByCode[CatalogLoaderErrorCode];\n\n constructor(args: CatalogLoaderErrorArgs) {\n super(`${args.code}: ${args.expected}`);\n this.name = 'CatalogLoaderError';\n this.code = args.code;\n this.expected = args.expected;\n this.hint = args.hint;\n this.detail = args.detail;\n }\n}\n\ntype CatalogLoaderErrorVariant<C extends CatalogLoaderErrorCode> = CatalogLoaderErrorClass & {\n readonly code: C;\n readonly detail: CatalogLoaderErrorDetailByCode[C];\n};\n\nexport type CatalogLoaderError = {\n [C in CatalogLoaderErrorCode]: CatalogLoaderErrorVariant<C>;\n}[CatalogLoaderErrorCode];\n\ninterface CatalogLoaderErrorConstructor {\n new <C extends CatalogLoaderErrorCode>(\n code: C,\n expected: string,\n hint: string,\n detail: CatalogLoaderErrorDetailByCode[C],\n ): CatalogLoaderErrorVariant<C>;\n readonly prototype: CatalogLoaderError;\n}\n\nexport const CatalogLoaderError: CatalogLoaderErrorConstructor =\n class extends CatalogLoaderErrorClass {\n constructor(\n code: CatalogLoaderErrorCode,\n expected: string,\n hint: string,\n detail: CatalogLoaderErrorDetailByCode[CatalogLoaderErrorCode],\n ) {\n super({ code, expected, hint, detail });\n }\n } as unknown as CatalogLoaderErrorConstructor;\n\ninterface CatalogLoaderConfig {\n readonly catalog: PluginCatalog;\n readonly realm: PluginRealm;\n readonly baseUrl?: string;\n}\n\nexport interface CatalogLoaderBootstrapOptions {\n readonly catalogDigest: string;\n readonly supportedRealms: readonly PluginRealm[];\n}\n\nexport interface CatalogLoaderBootstrapValue extends CatalogLoaderHandle {\n readonly catalogDigest: string;\n readonly realm: PluginRealm;\n}\n\nexport type CatalogLoaderBootstrapResult =\n | { readonly ok: true; readonly value: CatalogLoaderBootstrapValue }\n | { readonly ok: false; readonly error: CatalogLoaderError };\n\n/** DeepSeek Harness Loader with its import boundary resolved by a static build catalog. */\nexport class CatalogLoader extends Loader {\n readonly catalog: PluginCatalog;\n readonly realm: PluginRealm;\n\n constructor(ctx: Context, config: CatalogLoaderConfig) {\n super(ctx, config.baseUrl === undefined ? {} : { baseUrl: config.baseUrl });\n this.catalog = config.catalog;\n this.realm = config.realm;\n this.internal = undefined;\n this.builtins.group = Group;\n }\n\n override import(name: string, getOuterStack?: () => string[]): Promise<unknown> | unknown {\n if (name.startsWith('cordis:')) return super.import(name, getOuterStack);\n const record = this.catalog.get(name);\n if (record === undefined) {\n throw new CatalogLoaderError(\n 'plugin-catalog-missing',\n `plugin ${name} to exist in the generated catalog`,\n 'Install the package, add the Entry to forge.json, and rebuild the generated catalog.',\n { name, realm: this.realm },\n );\n }\n if (record.realm !== this.realm) {\n throw new CatalogLoaderError(\n 'plugin-realm-mismatch',\n `plugin ${name} to target the ${this.realm} realm`,\n 'Use a realm-specific plugin export and Entry.',\n { actual: record.realm, expected: this.realm, name },\n );\n }\n return record.load();\n }\n\n override unwrapExports(exports: unknown): unknown {\n const value = super.unwrapExports(exports);\n return isToolPlugin(value) ? value.plugin : value;\n }\n}\n\nexport interface CatalogLoaderHandle {\n readonly loader: CatalogLoader;\n readonly fiber: Fiber;\n}\n\n/** Bridges one already-active Cordis realm into the generic typed capability seam. */\n/** Install the native DSH Loader service into an existing Cordis realm. */\nexport async function installCatalogLoader(\n ctx: Context,\n catalog: PluginCatalog,\n realm: PluginRealm,\n): Promise<CatalogLoaderHandle> {\n const fiber = await ctx.plugin(CatalogLoader as unknown as Plugin, { catalog, realm });\n return { fiber, loader: ctx.loader as CatalogLoader };\n}\n\n/** Validate the physical realm before installing the one native CatalogLoader. */\nexport async function bootstrapCatalogLoader(\n ctx: Context,\n catalog: PluginCatalog,\n realm: PluginRealm,\n options: CatalogLoaderBootstrapOptions,\n): Promise<CatalogLoaderBootstrapResult> {\n if (!options.supportedRealms.includes(realm)) {\n return {\n ok: false,\n error: new CatalogLoaderError(\n 'plugin-realm-unsupported',\n `the ${realm} realm to be supported by this host`,\n 'Select a realm advertised by the capability matrix before module evaluation.',\n { realm, supportedRealms: options.supportedRealms },\n ),\n };\n }\n const handle = await installCatalogLoader(ctx, catalog, realm);\n return {\n ok: true,\n value: { ...handle, catalogDigest: options.catalogDigest, realm },\n };\n}\n\nfunction effectiveRealm(entry: GamePluginEntry, inherited: PluginRealm): PluginRealm {\n return entry.realm ?? inherited;\n}\n\nfunction assertSingleRealmGroup(entry: GamePluginEntry, inheritedRealm: PluginRealm): void {\n const realm = effectiveRealm(entry, inheritedRealm);\n if (!entry.group) return;\n const children = (entry.config ?? []) as readonly GamePluginEntry[];\n for (const child of children) {\n const childRealm = effectiveRealm(child, realm);\n if (childRealm !== realm) {\n throw new CatalogLoaderError(\n 'plugin-entry-realm-mixed',\n `group ${entry.id} to contain entries for only the ${realm} physical realm`,\n 'Split Host and Engine capabilities into separate top-level groups.',\n { actual: childRealm, expected: realm, group: entry.id },\n );\n }\n assertSingleRealmGroup(child, realm);\n }\n}\n\nfunction projectEntry(entry: GamePluginEntry, inherited: PluginRealm): EntryOptions {\n const realm = effectiveRealm(entry, inherited);\n const config = entry.group\n ? projectPluginEntries((entry.config ?? []) as readonly GamePluginEntry[], realm, realm)\n : entry.config;\n return {\n id: entry.id,\n name: entry.name,\n ...(config === undefined ? {} : { config }),\n ...(entry.group == null ? {} : { group: entry.group }),\n ...(entry.disabled == null ? {} : { disabled: entry.disabled }),\n ...(entry.inject == null ? {} : { inject: entry.inject }),\n };\n}\n\n/** Select one physical realm and strip ForgeaX-only deployment metadata before DSH reconciliation. */\nexport function projectPluginEntries(\n entries: readonly GamePluginEntry[],\n realm: PluginRealm,\n inheritedRealm: PluginRealm = 'engine',\n): EntryOptions[] {\n const projected: EntryOptions[] = [];\n for (const entry of entries) {\n const current = effectiveRealm(entry, inheritedRealm);\n assertSingleRealmGroup(entry, inheritedRealm);\n if (current === realm) projected.push(projectEntry(entry, current));\n }\n return projected;\n}\n\nexport {\n Entry,\n EntryGroup,\n type EntryOptions,\n EntryTree,\n Group,\n Loader,\n} from '@deepseek-ai/cordis-plugin-loader';\n","import type { ToolEvidenceKind, ToolRealm } from '@forgeax/engine-tool-runtime';\n\n/**\n * A source-only command declaration. Project discovery may load this contract\n * without importing the executor, DOM, World, or a running Project.\n */\nexport interface ToolCommandDeclaration {\n readonly id: string;\n readonly path?: readonly string[];\n readonly title: string;\n readonly summary: string;\n readonly realm: ToolRealm;\n readonly argsSchema?: string;\n readonly resultSchema?: string;\n readonly evidence?: readonly ToolEvidenceKind[];\n /** Module specifier resolved only when the command is executed. */\n readonly executor?: string;\n readonly exportName?: string;\n}\n\nexport interface ToolCommandContract {\n readonly schemaVersion: '1.0.0';\n readonly commands: readonly ToolCommandDeclaration[];\n}\n\nexport function defineToolCommandContract(\n commands: readonly ToolCommandDeclaration[],\n): ToolCommandContract {\n return { schemaVersion: '1.0.0', commands: [...commands] };\n}\n\nexport function isToolCommandContract(value: unknown): value is ToolCommandContract {\n if (value === null || typeof value !== 'object') return false;\n const candidate = value as Partial<ToolCommandContract>;\n return candidate.schemaVersion === '1.0.0' && Array.isArray(candidate.commands);\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import type { ToolEvidenceKind, ToolRealm } from '@forgeax/engine-tool-runtime';
2
+ /**
3
+ * A source-only command declaration. Project discovery may load this contract
4
+ * without importing the executor, DOM, World, or a running Project.
5
+ */
6
+ export interface ToolCommandDeclaration {
7
+ readonly id: string;
8
+ readonly path?: readonly string[];
9
+ readonly title: string;
10
+ readonly summary: string;
11
+ readonly realm: ToolRealm;
12
+ readonly argsSchema?: string;
13
+ readonly resultSchema?: string;
14
+ readonly evidence?: readonly ToolEvidenceKind[];
15
+ /** Module specifier resolved only when the command is executed. */
16
+ readonly executor?: string;
17
+ readonly exportName?: string;
18
+ }
19
+ export interface ToolCommandContract {
20
+ readonly schemaVersion: '1.0.0';
21
+ readonly commands: readonly ToolCommandDeclaration[];
22
+ }
23
+ export declare function defineToolCommandContract(commands: readonly ToolCommandDeclaration[]): ToolCommandContract;
24
+ export declare function isToolCommandContract(value: unknown): value is ToolCommandContract;
25
+ //# sourceMappingURL=tool-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-contract.d.ts","sourceRoot":"","sources":["../src/tool-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACtD;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GAC1C,mBAAmB,CAErB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAIlF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-plugin",
3
- "version": "0.1.27",
3
+ "version": "0.1.28",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -30,7 +30,7 @@
30
30
  "dependencies": {
31
31
  "@deepseek-ai/cordis": "4.0.1",
32
32
  "@deepseek-ai/cordis-plugin-loader": "1.0.2",
33
- "@forgeax/engine-tool-runtime": "0.1.27"
33
+ "@forgeax/engine-tool-runtime": "0.1.28"
34
34
  },
35
35
  "forgeax": {
36
36
  "metrics": {
package/src/browser.ts CHANGED
@@ -27,6 +27,12 @@ export {
27
27
  type CatalogPluginInspectionFailure,
28
28
  inspectCatalogPlugins,
29
29
  } from './inspection.js';
30
+ export {
31
+ defineToolCommandContract,
32
+ isToolCommandContract,
33
+ type ToolCommandContract,
34
+ type ToolCommandDeclaration,
35
+ } from './tool-contract.js';
30
36
  export {
31
37
  defineToolPlugin,
32
38
  isToolPlugin,
package/src/index.ts CHANGED
@@ -41,6 +41,12 @@ export {
41
41
  type PluginRealm,
42
42
  projectPluginEntries,
43
43
  } from './loader.js';
44
+ export {
45
+ defineToolCommandContract,
46
+ isToolCommandContract,
47
+ type ToolCommandContract,
48
+ type ToolCommandDeclaration,
49
+ } from './tool-contract.js';
44
50
  export {
45
51
  defineToolPlugin,
46
52
  isToolPlugin,
@@ -0,0 +1,36 @@
1
+ import type { ToolEvidenceKind, ToolRealm } from '@forgeax/engine-tool-runtime';
2
+
3
+ /**
4
+ * A source-only command declaration. Project discovery may load this contract
5
+ * without importing the executor, DOM, World, or a running Project.
6
+ */
7
+ export interface ToolCommandDeclaration {
8
+ readonly id: string;
9
+ readonly path?: readonly string[];
10
+ readonly title: string;
11
+ readonly summary: string;
12
+ readonly realm: ToolRealm;
13
+ readonly argsSchema?: string;
14
+ readonly resultSchema?: string;
15
+ readonly evidence?: readonly ToolEvidenceKind[];
16
+ /** Module specifier resolved only when the command is executed. */
17
+ readonly executor?: string;
18
+ readonly exportName?: string;
19
+ }
20
+
21
+ export interface ToolCommandContract {
22
+ readonly schemaVersion: '1.0.0';
23
+ readonly commands: readonly ToolCommandDeclaration[];
24
+ }
25
+
26
+ export function defineToolCommandContract(
27
+ commands: readonly ToolCommandDeclaration[],
28
+ ): ToolCommandContract {
29
+ return { schemaVersion: '1.0.0', commands: [...commands] };
30
+ }
31
+
32
+ export function isToolCommandContract(value: unknown): value is ToolCommandContract {
33
+ if (value === null || typeof value !== 'object') return false;
34
+ const candidate = value as Partial<ToolCommandContract>;
35
+ return candidate.schemaVersion === '1.0.0' && Array.isArray(candidate.commands);
36
+ }