@forgeax/engine-plugin 0.0.0-dev.8d955ade1c79

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../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/capability.ts","../src/loader.ts"],"names":["value","Binary","a","b","Time","template","ModuleLoader","config","EntryTree","Entry","ctx","entry"],"mappings":"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","file":"loader.mjs","sourcesContent":["//#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 } 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';\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 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 class CatalogLoaderError extends Error {\n readonly code: CatalogLoaderErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n\n constructor(\n code: CatalogLoaderErrorCode,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n ) {\n super(`${code}: ${expected}`);\n this.name = 'CatalogLoaderError';\n this.code = code;\n this.expected = expected;\n this.hint = hint;\n this.detail = detail;\n }\n}\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"]}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from '@deepseek-ai/cordis';
2
+ import type { ToolContribution } from '@forgeax/engine-tool-runtime';
3
+ /** A native Cordis plugin plus the tool contributions it exposes. */
4
+ export interface ToolPlugin {
5
+ readonly plugin: Plugin;
6
+ readonly tools: readonly ToolContribution<unknown, unknown>[];
7
+ }
8
+ export declare function defineToolPlugin(plugin: Plugin, tools: readonly ToolContribution<unknown, unknown>[]): ToolPlugin;
9
+ export declare function isToolPlugin(value: unknown): value is ToolPlugin;
10
+ //# sourceMappingURL=tool-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-plugin.d.ts","sourceRoot":"","sources":["../src/tool-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;CAC/D;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GACnD,UAAU,CAEZ;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAIhE"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@forgeax/engine-plugin",
3
+ "version": "0.0.0-dev.8d955ade1c79",
4
+ "private": false,
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "sideEffects": false,
8
+ "description": "ForgeaX entry point for the DeepSeek Cordis plugin runtime.",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "browser": "./dist/browser.mjs",
13
+ "import": "./dist/index.mjs"
14
+ },
15
+ "./loader": {
16
+ "types": "./dist/loader.d.ts",
17
+ "import": "./dist/loader.mjs"
18
+ },
19
+ "./package.json": "./package.json"
20
+ },
21
+ "main": "./dist/index.mjs",
22
+ "types": "./dist/index.d.ts",
23
+ "files": [
24
+ "dist",
25
+ "src",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "dependencies": {
30
+ "@deepseek-ai/cordis": "4.0.1",
31
+ "@deepseek-ai/cordis-plugin-loader": "1.0.2",
32
+ "@forgeax/engine-tool-runtime": "0.0.0-dev.8d955ade1c79"
33
+ },
34
+ "forgeax": {
35
+ "metrics": {
36
+ "bundle-size": {
37
+ "enabled": true,
38
+ "path": "dist/index.mjs",
39
+ "compression": "gzip"
40
+ },
41
+ "fps": {
42
+ "enabled": false,
43
+ "reason": "pure protocol-layer package; no runtime canvas"
44
+ },
45
+ "bench": {
46
+ "enabled": false,
47
+ "reason": "Cordis integration is exercised by lifecycle and engine composition tests"
48
+ },
49
+ "gate": {
50
+ "enabled": false,
51
+ "reason": "no package-level binary gate; AC surface covered by pnpm test:unit"
52
+ },
53
+ "spike-report": {
54
+ "enabled": false,
55
+ "reason": "not a spike package"
56
+ }
57
+ }
58
+ },
59
+ "scripts": {
60
+ "build": "tsup",
61
+ "test": "vitest run"
62
+ }
63
+ }
@@ -0,0 +1,10 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import * as browserEntry from '../browser';
3
+
4
+ describe('browser plugin entry', () => {
5
+ it('selects a browser condition without evaluating the Node loader', () => {
6
+ expect('CatalogLoader' in browserEntry).toBe(false);
7
+ expect(browserEntry.Context).toBeDefined();
8
+ expect(browserEntry.defineToolPlugin).toBeDefined();
9
+ });
10
+ });
@@ -0,0 +1,254 @@
1
+ import { Context, type Plugin } from '@deepseek-ai/cordis';
2
+ import { defineTool } from '@forgeax/engine-tool-runtime';
3
+ import { describe, expect, it } from 'vitest';
4
+ import {
5
+ CatalogLoaderError,
6
+ defineToolPlugin,
7
+ installCatalogLoader,
8
+ type PluginCatalog,
9
+ projectPluginEntries,
10
+ } from '../loader';
11
+
12
+ function catalogOf(name: string, plugin: Plugin): PluginCatalog {
13
+ return new Map([[name, { realm: 'engine' as const, load: async () => ({ default: plugin }) }]]);
14
+ }
15
+
16
+ describe('CatalogLoader', () => {
17
+ it('unwraps a ToolPlugin to its Cordis plugin in the build realm', async () => {
18
+ const lifecycle: string[] = [];
19
+ const plugin: Plugin = {
20
+ apply(ctx: Context) {
21
+ lifecycle.push('apply');
22
+ ctx.effect(() => () => lifecycle.push('dispose'));
23
+ },
24
+ };
25
+ const schema = { parse: (value: unknown) => ({ ok: true as const, value }) };
26
+ const tool = defineTool(
27
+ {
28
+ id: 'fixture.tool',
29
+ title: 'Fixture',
30
+ summary: 'Fixture tool.',
31
+ realm: 'build',
32
+ argsSchema: schema,
33
+ resultSchema: schema,
34
+ evidence: [],
35
+ },
36
+ async (value) => value,
37
+ );
38
+ const ctx = new Context();
39
+ const { loader } = await installCatalogLoader(
40
+ ctx,
41
+ new Map([
42
+ [
43
+ '@game/tools',
44
+ { realm: 'build', load: async () => ({ default: defineToolPlugin(plugin, [tool]) }) },
45
+ ],
46
+ ]),
47
+ 'build',
48
+ );
49
+ await loader.root.update([{ id: 'tools', name: '@game/tools' }]);
50
+ await loader.await();
51
+ expect(lifecycle).toEqual(['apply']);
52
+ await ctx.fiber.dispose();
53
+ expect(lifecycle).toEqual(['apply', 'dispose']);
54
+ });
55
+
56
+ it('uses native DSH Entry reconciliation for enable, update, disable, and remove', async () => {
57
+ const events: string[] = [];
58
+ const feature: Plugin = {
59
+ name: 'feature',
60
+ apply(ctx: Context, config: { value: number }) {
61
+ events.push(`apply:${config.value}`);
62
+ ctx.effect(() => () => events.push(`dispose:${config.value}`));
63
+ },
64
+ };
65
+ const ctx = new Context();
66
+ const { loader } = await installCatalogLoader(
67
+ ctx,
68
+ catalogOf('@game/feature', feature),
69
+ 'engine',
70
+ );
71
+
72
+ await loader.root.update([{ id: 'feature', name: '@game/feature', config: { value: 1 } }]);
73
+ expect(events).toEqual(['apply:1']);
74
+
75
+ await loader.update('feature', { config: { value: 2 } });
76
+ expect(events).toEqual(['apply:1', 'dispose:1', 'apply:2']);
77
+
78
+ await loader.update('feature', { disabled: true });
79
+ expect(events).toEqual(['apply:1', 'dispose:1', 'apply:2', 'dispose:2']);
80
+
81
+ await loader.update('feature', { disabled: false });
82
+ expect(events).toEqual(['apply:1', 'dispose:1', 'apply:2', 'dispose:2', 'apply:2']);
83
+
84
+ await loader.remove('feature');
85
+ expect(events).toEqual([
86
+ 'apply:1',
87
+ 'dispose:1',
88
+ 'apply:2',
89
+ 'dispose:2',
90
+ 'apply:2',
91
+ 'dispose:2',
92
+ ]);
93
+ expect([...loader.entries()]).toEqual([]);
94
+ await ctx.fiber.dispose();
95
+ });
96
+
97
+ it('rolls back a failed config update to the last working Fiber', async () => {
98
+ const active = new Set<number>();
99
+ const feature: Plugin = {
100
+ name: 'rollback-feature',
101
+ apply(ctx: Context, config: { value: number; fail?: boolean }) {
102
+ if (config.fail) throw new Error('rejected config');
103
+ active.add(config.value);
104
+ ctx.effect(() => () => active.delete(config.value));
105
+ },
106
+ };
107
+ const ctx = new Context();
108
+ const { loader } = await installCatalogLoader(
109
+ ctx,
110
+ catalogOf('@game/rollback', feature),
111
+ 'engine',
112
+ );
113
+ await loader.root.update([{ id: 'rollback', name: '@game/rollback', config: { value: 1 } }]);
114
+
115
+ await expect(loader.update('rollback', { config: { value: 2, fail: true } })).rejects.toThrow(
116
+ 'failed to apply',
117
+ );
118
+ expect(active).toEqual(new Set([1]));
119
+ expect(loader.resolve('rollback').options.config).toEqual({ value: 1 });
120
+ await ctx.fiber.dispose();
121
+ });
122
+
123
+ it('retries a refused catalog load through the same loader without residue', async () => {
124
+ const lifecycle = {
125
+ healthyApply: 0,
126
+ healthyDispose: 0,
127
+ retryApply: 0,
128
+ retryDispose: 0,
129
+ };
130
+ let refuse = true;
131
+ let loadAttempts = 0;
132
+ const healthy: Plugin = {
133
+ name: 'healthy',
134
+ apply(ctx: Context) {
135
+ lifecycle.healthyApply += 1;
136
+ ctx.effect(() => () => {
137
+ lifecycle.healthyDispose += 1;
138
+ });
139
+ },
140
+ };
141
+ const retry: Plugin = {
142
+ name: 'retry',
143
+ apply(ctx: Context) {
144
+ lifecycle.retryApply += 1;
145
+ ctx.effect(() => () => {
146
+ lifecycle.retryDispose += 1;
147
+ });
148
+ },
149
+ };
150
+ const refusal = new CatalogLoaderError(
151
+ 'plugin-catalog-missing',
152
+ 'injected retry source',
153
+ 'repair the injected catalog record',
154
+ { name: '@game/retry', attempt: 1 },
155
+ );
156
+ const catalog: PluginCatalog = new Map([
157
+ ['@game/healthy', { realm: 'engine', load: async () => ({ default: healthy }) }],
158
+ [
159
+ '@game/retry',
160
+ {
161
+ realm: 'engine',
162
+ load: async () => {
163
+ loadAttempts += 1;
164
+ if (refuse) throw refusal;
165
+ return { default: retry };
166
+ },
167
+ },
168
+ ],
169
+ ]);
170
+ const ctx = new Context();
171
+ const { loader, fiber: loaderFiber } = await installCatalogLoader(ctx, catalog, 'engine');
172
+
173
+ await loader.create({ name: '@game/healthy' });
174
+ await expect(loader.create({ name: '@game/retry' })).rejects.toMatchObject({
175
+ cause: refusal,
176
+ });
177
+ expect([...loader.entries()].map((entry) => entry.options.name)).toEqual(['@game/healthy']);
178
+ expect(lifecycle).toEqual({
179
+ healthyApply: 1,
180
+ healthyDispose: 0,
181
+ retryApply: 0,
182
+ retryDispose: 0,
183
+ });
184
+
185
+ refuse = false;
186
+ const retryId = await loader.create({ name: '@game/retry' });
187
+ await loader.await();
188
+ expect(loadAttempts).toBe(2);
189
+ const names = [...loader.entries()].map((entry) => entry.options.name);
190
+ expect(names).toHaveLength(2);
191
+ expect(names).toEqual(expect.arrayContaining(['@game/healthy', '@game/retry']));
192
+ expect(lifecycle).toEqual({
193
+ healthyApply: 1,
194
+ healthyDispose: 0,
195
+ retryApply: 1,
196
+ retryDispose: 0,
197
+ });
198
+
199
+ await loader.remove(retryId);
200
+ expect(lifecycle.retryDispose).toBe(1);
201
+ await loaderFiber.dispose();
202
+ await loaderFiber.dispose();
203
+ await ctx.fiber.dispose();
204
+ expect(lifecycle).toEqual({
205
+ healthyApply: 1,
206
+ healthyDispose: 1,
207
+ retryApply: 1,
208
+ retryDispose: 1,
209
+ });
210
+ });
211
+
212
+ it('fails before activation when a module is absent or targets another realm', async () => {
213
+ const ctx = new Context();
214
+ const catalog: PluginCatalog = new Map([
215
+ ['@game/host', { realm: 'host', load: async () => ({ default: () => undefined }) }],
216
+ ]);
217
+ const { loader } = await installCatalogLoader(ctx, catalog, 'engine');
218
+ await expect(loader.create({ name: '@game/missing' })).rejects.toMatchObject({
219
+ cause: expect.objectContaining({ code: 'plugin-catalog-missing' }),
220
+ });
221
+ await expect(loader.create({ name: '@game/host' })).rejects.toMatchObject({
222
+ cause: expect.objectContaining({ code: 'plugin-realm-mismatch' }),
223
+ });
224
+ await ctx.fiber.dispose();
225
+ });
226
+ });
227
+
228
+ describe('projectPluginEntries', () => {
229
+ it('uses DSH fields and strips only the ForgeaX realm extension', () => {
230
+ expect(
231
+ projectPluginEntries(
232
+ [
233
+ { id: 'engine', name: '@game/engine', realm: 'engine', inject: ['world'] },
234
+ { id: 'host', name: '@game/host', realm: 'host' },
235
+ ],
236
+ 'engine',
237
+ ),
238
+ ).toEqual([{ id: 'engine', name: '@game/engine', inject: ['world'] }]);
239
+ });
240
+
241
+ it('rejects a group that tries to span physical realms', () => {
242
+ const entries = [
243
+ {
244
+ id: 'mixed',
245
+ name: 'cordis:group',
246
+ group: true,
247
+ realm: 'host' as const,
248
+ config: [{ id: 'engine', name: '@game/engine', realm: 'engine' as const }],
249
+ },
250
+ ];
251
+ expect(() => projectPluginEntries(entries, 'engine')).toThrow(CatalogLoaderError);
252
+ expect(() => projectPluginEntries(entries, 'host')).toThrow(CatalogLoaderError);
253
+ });
254
+ });
@@ -0,0 +1,19 @@
1
+ import type { ToolRealm } from '@forgeax/engine-tool-runtime';
2
+ import { expectTypeOf, it } from 'vitest';
3
+ import type { PluginRealm } from '../loader.js';
4
+
5
+ const expectedPluginRealms = ['build', 'host', 'engine'] as const;
6
+ type ExpectedPluginRealm = (typeof expectedPluginRealms)[number];
7
+
8
+ it('derives PluginRealm from the public ToolRealm vocabulary', () => {
9
+ expectTypeOf<PluginRealm>().toEqualTypeOf<ToolRealm>();
10
+ expectTypeOf<ToolRealm>().toEqualTypeOf<PluginRealm>();
11
+ expectTypeOf<PluginRealm>().toEqualTypeOf<ExpectedPluginRealm>();
12
+ expectTypeOf<ExpectedPluginRealm>().toEqualTypeOf<PluginRealm>();
13
+
14
+ const acceptPluginRealm = (realm: PluginRealm): PluginRealm => realm;
15
+ for (const realm of expectedPluginRealms) acceptPluginRealm(realm);
16
+
17
+ // @ts-expect-error unknown physical realms remain outside the closed vocabulary.
18
+ acceptPluginRealm('worker');
19
+ });
package/src/browser.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Browser-safe ForgeaX Cordis surface.
3
+ *
4
+ * The native Catalog Loader is intentionally kept on the Node-facing root
5
+ * implementation and `/loader` subpath. Importing it would evaluate
6
+ * `@deepseek-ai/cordis-plugin-loader`, whose `node:module` dependency cannot
7
+ * exist in a browser bundle. Browser consumers still receive the same Cordis,
8
+ * ToolPlugin, and capability-resolver contracts without that Node-only edge.
9
+ */
10
+ export * from '@deepseek-ai/cordis';
11
+ export { createContextCapabilityResolver } from './capability.js';
12
+ export {
13
+ defineToolPlugin,
14
+ isToolPlugin,
15
+ type ToolPlugin,
16
+ } from './tool-plugin.js';
@@ -0,0 +1,10 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import {
3
+ createCapabilityResolver,
4
+ type ToolCapabilityResolver,
5
+ } from '@forgeax/engine-tool-runtime';
6
+
7
+ /** Bridge one active Cordis realm into the realm-neutral ToolRuntime seam. */
8
+ export function createContextCapabilityResolver(ctx: Context): ToolCapabilityResolver {
9
+ return createCapabilityResolver((capability) => Reflect.get(ctx, capability.id));
10
+ }
package/src/index.ts ADDED
@@ -0,0 +1,30 @@
1
+ /** Open service vocabulary projected onto Cordis Context by capability packages. */
2
+ // biome-ignore lint/suspicious/noEmptyInterface: domain packages augment this interface
3
+ export interface EngineContextServices {}
4
+
5
+ declare module '@deepseek-ai/cordis' {
6
+ interface Context extends EngineContextServices {}
7
+ }
8
+
9
+ export * from '@deepseek-ai/cordis';
10
+ export { createContextCapabilityResolver } from './capability.js';
11
+ export {
12
+ bootstrapCatalogLoader,
13
+ CatalogLoader,
14
+ type CatalogLoaderBootstrapOptions,
15
+ type CatalogLoaderBootstrapResult,
16
+ type CatalogLoaderBootstrapValue,
17
+ CatalogLoaderError,
18
+ type CatalogLoaderErrorCode,
19
+ type GamePluginEntry,
20
+ installCatalogLoader,
21
+ type PluginCatalog,
22
+ type PluginCatalogRecord,
23
+ type PluginRealm,
24
+ projectPluginEntries,
25
+ } from './loader.js';
26
+ export {
27
+ defineToolPlugin,
28
+ isToolPlugin,
29
+ type ToolPlugin,
30
+ } from './tool-plugin.js';