@forgeax/engine-plugin 0.1.26 → 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