From 7607718a9580b6d4bd1e555893241d87bc04c2f9 Mon Sep 17 00:00:00 2001 From: Nikolas Demiridis Date: Fri, 11 Sep 2026 00:23:00 +0300 Subject: [PATCH 1/4] feat(extension): render crew's own notices under crew's icon and label Every digest the milestone bridge injects went through `pi.sendMessage` as a bare string. A bare string is oh-my-pi's shorthand for a `CustomMessagePayload` that omits `customType`, which the runtime normalizes to `DEFAULT_CUSTOM_MESSAGE_TYPE` ("custom-message") -- the same generic type every other extension's un-typed message falls back to, rendered under a header naming no extension at all. A crew notice was indistinguishable from any other extension's. Two changes close that: - The bridge now sends `{ customType: "crew", content }` instead of a bare string. Digest wording itself is unchanged. - `attachMilestoneBridge` registers a renderer for that type via `pi.registerMessageRenderer` -- a small box with crew's own icon and label as its header, the digest text as its body. Label text ("Crew") is the maintainer's agreed default, pending final confirmation on the exact wording; the icon is a placeholder pick for the same reason. Both lookups follow the same defensive-cast convention already established here for `sendMessage`: an older or renamed omp method degrades to "no custom renderer" (the generic fallback header) rather than a crash. Unlike a missing `sendMessage`, a missing `registerMessageRenderer` never warns -- losing it is cosmetic (the digest still arrives, under a less legible header), not a silently dropped notification. `@oh-my-pi/pi-tui` becomes a direct peer/dev dependency and a second `--external` in the build: `registerMessageRenderer`'s own return type (`Component`) is pi-tui's, so any extension implementing this method already needs pi-tui's types regardless -- this isn't reaching past the documented extension surface, it's the shape that surface requires. pi-coding-agent depends on pi-tui itself the same way (a hard dependency at the same version), so it should resolve identically to how pi-coding-agent already does for this extension, at runtime. Verification gap, stated plainly rather than glossed: live rendering in an interactive omp session was not exercised by the author. This sandbox's nested PTY produces no interactive terminal output at all -- confirmed with a bare `omp --allow-home` and no extension involved, `omp --version` responding instantly the whole time, so the omp binary itself is fine and the gap is this environment's PTY handling, not the code. What IS verified: the actual `registerMessageRenderer` call path this bridge uses, exercised through real `@oh-my-pi/pi-tui` `Box`/`Text` components (not mocks), with the renderer's real rendered output asserted to contain the icon, the label, and the digest text verbatim -- and confirmed to discriminate: swapping the icon constant and re-running the test fails on the actual rendered string, not a stub. The live proof is a maintainer-run check in the first real session after this merges. Tests: registration itself (customType "crew", called once at attach); the digest's own wire shape now carries that customType, not a bare string; the registered renderer's real output on both a plain-string digest and a rich-content payload it must still degrade gracefully on; an omp build lacking `registerMessageRenderer` attaches without throwing. cargo fmt --all, cargo clippy --all-targets --all-features -D warnings, bun run check (markers, generate --check, format:check, typecheck, extension build with pi-tui confirmed external not bundled, bun test, cargo test --workspace all green) all verified clean. --- bun.lock | 2 + packages/extension/dist/index.js | 251 ++++++++++++---------- packages/extension/package.json | 5 +- packages/extension/src/milestones.test.ts | 110 +++++++++- packages/extension/src/milestones.ts | 68 +++++- 5 files changed, 312 insertions(+), 124 deletions(-) diff --git a/bun.lock b/bun.lock index 4d935448..7c7f0f5d 100644 --- a/bun.lock +++ b/bun.lock @@ -16,12 +16,14 @@ "devDependencies": { "@nikolasd/crew-protocol": "workspace:*", "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", + "@oh-my-pi/pi-tui": ">=17.0.7 <19", "@types/bun": "1.3.14", "ajv": "8.17.1", "zod": "^4", }, "peerDependencies": { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", + "@oh-my-pi/pi-tui": ">=17.0.7 <19", }, }, "packages/protocol-ts": { diff --git a/packages/extension/dist/index.js b/packages/extension/dist/index.js index e56c5d78..74726775 100644 --- a/packages/extension/dist/index.js +++ b/packages/extension/dist/index.js @@ -18,13 +18,15 @@ var __toESM = (mod, isNodeMode, target) => { return cached; } target = mod != null ? __create(__getProtoOf(mod)) : {}; - const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; - for (let key of __getOwnPropNames(mod)) - if (!__hasOwnProp.call(to, key)) - __defProp(to, key, { - get: __accessProp.bind(mod, key), - enumerable: true - }); + const to = isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", { value: mod, enumerable: true }) : target; + if (mod && typeof mod === "object" || typeof mod === "function") { + for (let key of __getOwnPropNames(mod)) + if (!__hasOwnProp.call(to, key)) + __defProp(to, key, { + get: __accessProp.bind(mod, key), + enumerable: true + }); + } if (canCache) cache.set(mod, to); return to; @@ -32,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => { var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/code.js -var require_code = __commonJS((exports) => { +var require_code = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined; @@ -186,7 +188,7 @@ var require_code = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/scope.js -var require_scope = __commonJS((exports) => { +var require_scope = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined; var code_1 = require_code(); @@ -198,9 +200,9 @@ var require_scope = __commonJS((exports) => { } } var UsedValueState; - (function(UsedValueState2) { - UsedValueState2[UsedValueState2["Started"] = 0] = "Started"; - UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed"; + (function(UsedValueState) { + UsedValueState[UsedValueState["Started"] = 0] = "Started"; + UsedValueState[UsedValueState["Completed"] = 1] = "Completed"; })(UsedValueState || (exports.UsedValueState = UsedValueState = {})); exports.varKinds = { const: new code_1.Name("const"), @@ -332,7 +334,7 @@ var require_scope = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/index.js -var require_codegen = __commonJS((exports) => { +var require_codegen = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined; var code_1 = require_code(); @@ -1042,7 +1044,7 @@ var require_codegen = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/util.js -var require_util = __commonJS((exports) => { +var require_util = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined; var codegen_1 = require_codegen(); @@ -1182,9 +1184,9 @@ var require_util = __commonJS((exports) => { } exports.useFunc = useFunc; var Type; - (function(Type2) { - Type2[Type2["Num"] = 0] = "Num"; - Type2[Type2["Str"] = 1] = "Str"; + (function(Type) { + Type[Type["Num"] = 0] = "Num"; + Type[Type["Str"] = 1] = "Str"; })(Type || (exports.Type = Type = {})); function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { if (dataProp instanceof codegen_1.Name) { @@ -1206,7 +1208,7 @@ var require_util = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/names.js -var require_names = __commonJS((exports) => { +var require_names = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var names = { @@ -1231,7 +1233,7 @@ var require_names = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/errors.js -var require_errors = __commonJS((exports) => { +var require_errors = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined; var codegen_1 = require_codegen(); @@ -1349,7 +1351,7 @@ var require_errors = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/boolSchema.js -var require_boolSchema = __commonJS((exports) => { +var require_boolSchema = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined; var errors_1 = require_errors(); @@ -1397,7 +1399,7 @@ var require_boolSchema = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/rules.js -var require_rules = __commonJS((exports) => { +var require_rules = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getRules = exports.isJSONType = undefined; var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; @@ -1425,7 +1427,7 @@ var require_rules = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/applicability.js -var require_applicability = __commonJS((exports) => { +var require_applicability = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined; function schemaHasRulesForType({ schema, self }, type) { @@ -1445,7 +1447,7 @@ var require_applicability = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/dataType.js -var require_dataType = __commonJS((exports) => { +var require_dataType = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined; var rules_1 = require_rules(); @@ -1454,9 +1456,9 @@ var require_dataType = __commonJS((exports) => { var codegen_1 = require_codegen(); var util_1 = require_util(); var DataType; - (function(DataType2) { - DataType2[DataType2["Correct"] = 0] = "Correct"; - DataType2[DataType2["Wrong"] = 1] = "Wrong"; + (function(DataType) { + DataType[DataType["Correct"] = 0] = "Correct"; + DataType[DataType["Wrong"] = 1] = "Wrong"; })(DataType || (exports.DataType = DataType = {})); function getSchemaTypes(schema) { const types = getJSONTypes(schema.type); @@ -1626,7 +1628,7 @@ var require_dataType = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/defaults.js -var require_defaults = __commonJS((exports) => { +var require_defaults = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.assignDefaults = undefined; var codegen_1 = require_codegen(); @@ -1660,7 +1662,7 @@ var require_defaults = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/code.js -var require_code2 = __commonJS((exports) => { +var require_code2 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined; var codegen_1 = require_codegen(); @@ -1789,7 +1791,7 @@ var require_code2 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/keyword.js -var require_keyword = __commonJS((exports) => { +var require_keyword = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined; var codegen_1 = require_codegen(); @@ -1852,8 +1854,8 @@ var require_keyword = __commonJS((exports) => { gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); } function reportErrs(errors) { - var _a2; - gen.if((0, codegen_1.not)((_a2 = def.valid) !== null && _a2 !== undefined ? _a2 : valid), errors); + var _a; + gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== undefined ? _a : valid), errors); } } exports.funcKeywordCode = funcKeywordCode; @@ -1904,7 +1906,7 @@ var require_keyword = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/subschema.js -var require_subschema = __commonJS((exports) => { +var require_subschema = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined; var codegen_1 = require_codegen(); @@ -1984,7 +1986,7 @@ var require_subschema = __commonJS((exports) => { }); // ../../node_modules/.bun/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js -var require_fast_deep_equal = __commonJS((exports, module) => { +var require_fast_deep_equal = __commonJS(function(exports, module) { module.exports = function equal(a, b) { if (a === b) return true; @@ -2026,7 +2028,7 @@ var require_fast_deep_equal = __commonJS((exports, module) => { }); // ../../node_modules/.bun/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js -var require_json_schema_traverse = __commonJS((exports, module) => { +var require_json_schema_traverse = __commonJS(function(exports, module) { var traverse = module.exports = function(schema, opts, cb) { if (typeof opts == "function") { cb = opts; @@ -2109,7 +2111,7 @@ var require_json_schema_traverse = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/resolve.js -var require_resolve = __commonJS((exports) => { +var require_resolve = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined; var util_1 = require_util(); @@ -2262,7 +2264,7 @@ var require_resolve = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/index.js -var require_validate = __commonJS((exports) => { +var require_validate = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined; var boolSchema_1 = require_boolSchema(); @@ -2767,7 +2769,7 @@ var require_validate = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/validation_error.js -var require_validation_error = __commonJS((exports) => { +var require_validation_error = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); class ValidationError extends Error { @@ -2781,7 +2783,7 @@ var require_validation_error = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/ref_error.js -var require_ref_error = __commonJS((exports) => { +var require_ref_error = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var resolve_1 = require_resolve(); @@ -2796,7 +2798,7 @@ var require_ref_error = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/index.js -var require_compile = __commonJS((exports) => { +var require_compile = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined; var codegen_1 = require_codegen(); @@ -3017,7 +3019,7 @@ var require_compile = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/data.json -var require_data = __commonJS((exports, module) => { +var require_data = __commonJS(function(exports, module) { module.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", @@ -3034,7 +3036,7 @@ var require_data = __commonJS((exports, module) => { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/lib/utils.js -var require_utils = __commonJS((exports, module) => { +var require_utils = __commonJS(function(exports, module) { var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu); var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u); var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu); @@ -3345,7 +3347,7 @@ var require_utils = __commonJS((exports, module) => { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/lib/schemes.js -var require_schemes = __commonJS((exports, module) => { +var require_schemes = __commonJS(function(exports, module) { var { isUUID } = require_utils(); var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; var supportedSchemeNames = [ @@ -3519,7 +3521,7 @@ var require_schemes = __commonJS((exports, module) => { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/index.js -var require_fast_uri = __commonJS((exports, module) => { +var require_fast_uri = __commonJS(function(exports, module) { var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils(); var { SCHEMES, getSchemeHandler } = require_schemes(); function normalize(uri, options) { @@ -3827,7 +3829,7 @@ var require_fast_uri = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/uri.js -var require_uri = __commonJS((exports) => { +var require_uri = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var uri = require_fast_uri(); uri.code = 'require("ajv/dist/runtime/uri").default'; @@ -3835,7 +3837,7 @@ var require_uri = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/core.js -var require_core = __commonJS((exports) => { +var require_core = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined; var validate_1 = require_validate(); @@ -4428,7 +4430,7 @@ var require_core = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/id.js -var require_id = __commonJS((exports) => { +var require_id = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var def = { keyword: "id", @@ -4440,7 +4442,7 @@ var require_id = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/ref.js -var require_ref = __commonJS((exports) => { +var require_ref = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.callRef = exports.getValidate = undefined; var ref_error_1 = require_ref_error(); @@ -4559,7 +4561,7 @@ var require_ref = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/index.js -var require_core2 = __commonJS((exports) => { +var require_core2 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var id_1 = require_id(); var ref_1 = require_ref(); @@ -4577,7 +4579,7 @@ var require_core2 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitNumber.js -var require_limitNumber = __commonJS((exports) => { +var require_limitNumber = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var ops = codegen_1.operators; @@ -4606,7 +4608,7 @@ var require_limitNumber = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/multipleOf.js -var require_multipleOf = __commonJS((exports) => { +var require_multipleOf = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4631,7 +4633,7 @@ var require_multipleOf = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/ucs2length.js -var require_ucs2length = __commonJS((exports) => { +var require_ucs2length = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); function ucs2length(str) { const len = str.length; @@ -4654,7 +4656,7 @@ var require_ucs2length = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitLength.js -var require_limitLength = __commonJS((exports) => { +var require_limitLength = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4683,7 +4685,7 @@ var require_limitLength = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/pattern.js -var require_pattern = __commonJS((exports) => { +var require_pattern = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -4708,7 +4710,7 @@ var require_pattern = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitProperties.js -var require_limitProperties = __commonJS((exports) => { +var require_limitProperties = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4734,7 +4736,7 @@ var require_limitProperties = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/required.js -var require_required = __commonJS((exports) => { +var require_required = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -4813,7 +4815,7 @@ var require_required = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitItems.js -var require_limitItems = __commonJS((exports) => { +var require_limitItems = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4839,7 +4841,7 @@ var require_limitItems = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/equal.js -var require_equal = __commonJS((exports) => { +var require_equal = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var equal = require_fast_deep_equal(); equal.code = 'require("ajv/dist/runtime/equal").default'; @@ -4847,7 +4849,7 @@ var require_equal = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js -var require_uniqueItems = __commonJS((exports) => { +var require_uniqueItems = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dataType_1 = require_dataType(); var codegen_1 = require_codegen(); @@ -4911,7 +4913,7 @@ var require_uniqueItems = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/const.js -var require_const = __commonJS((exports) => { +var require_const = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4937,7 +4939,7 @@ var require_const = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/enum.js -var require_enum = __commonJS((exports) => { +var require_enum = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4983,7 +4985,7 @@ var require_enum = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/index.js -var require_validation = __commonJS((exports) => { +var require_validation = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var limitNumber_1 = require_limitNumber(); var multipleOf_1 = require_multipleOf(); @@ -5013,7 +5015,7 @@ var require_validation = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js -var require_additionalItems = __commonJS((exports) => { +var require_additionalItems = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAdditionalItems = undefined; var codegen_1 = require_codegen(); @@ -5063,7 +5065,7 @@ var require_additionalItems = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items.js -var require_items = __commonJS((exports) => { +var require_items = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTuple = undefined; var codegen_1 = require_codegen(); @@ -5117,7 +5119,7 @@ var require_items = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js -var require_prefixItems = __commonJS((exports) => { +var require_prefixItems = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var items_1 = require_items(); var def = { @@ -5131,7 +5133,7 @@ var require_prefixItems = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items2020.js -var require_items2020 = __commonJS((exports) => { +var require_items2020 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5163,7 +5165,7 @@ var require_items2020 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/contains.js -var require_contains = __commonJS((exports) => { +var require_contains = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5254,7 +5256,7 @@ var require_contains = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependencies.js -var require_dependencies = __commonJS((exports) => { +var require_dependencies = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined; var codegen_1 = require_codegen(); @@ -5339,7 +5341,7 @@ var require_dependencies = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js -var require_propertyNames = __commonJS((exports) => { +var require_propertyNames = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5379,7 +5381,7 @@ var require_propertyNames = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js -var require_additionalProperties = __commonJS((exports) => { +var require_additionalProperties = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -5482,7 +5484,7 @@ var require_additionalProperties = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/properties.js -var require_properties = __commonJS((exports) => { +var require_properties = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var validate_1 = require_validate(); var code_1 = require_code2(); @@ -5537,7 +5539,7 @@ var require_properties = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js -var require_patternProperties = __commonJS((exports) => { +var require_patternProperties = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -5608,7 +5610,7 @@ var require_patternProperties = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/not.js -var require_not = __commonJS((exports) => { +var require_not = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5636,7 +5638,7 @@ var require_not = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/anyOf.js -var require_anyOf = __commonJS((exports) => { +var require_anyOf = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var def = { @@ -5650,7 +5652,7 @@ var require_anyOf = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/oneOf.js -var require_oneOf = __commonJS((exports) => { +var require_oneOf = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5705,7 +5707,7 @@ var require_oneOf = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/allOf.js -var require_allOf = __commonJS((exports) => { +var require_allOf = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5729,7 +5731,7 @@ var require_allOf = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/if.js -var require_if = __commonJS((exports) => { +var require_if = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5795,7 +5797,7 @@ var require_if = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/thenElse.js -var require_thenElse = __commonJS((exports) => { +var require_thenElse = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5810,7 +5812,7 @@ var require_thenElse = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/index.js -var require_applicator = __commonJS((exports) => { +var require_applicator = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var additionalItems_1 = require_additionalItems(); var prefixItems_1 = require_prefixItems(); @@ -5853,7 +5855,7 @@ var require_applicator = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js -var require_dynamicAnchor = __commonJS((exports) => { +var require_dynamicAnchor = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamicAnchor = undefined; var codegen_1 = require_codegen(); @@ -5885,7 +5887,7 @@ var require_dynamicAnchor = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js -var require_dynamicRef = __commonJS((exports) => { +var require_dynamicRef = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamicRef = undefined; var codegen_1 = require_codegen(); @@ -5928,7 +5930,7 @@ var require_dynamicRef = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js -var require_recursiveAnchor = __commonJS((exports) => { +var require_recursiveAnchor = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicAnchor_1 = require_dynamicAnchor(); var util_1 = require_util(); @@ -5946,7 +5948,7 @@ var require_recursiveAnchor = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js -var require_recursiveRef = __commonJS((exports) => { +var require_recursiveRef = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicRef_1 = require_dynamicRef(); var def = { @@ -5958,7 +5960,7 @@ var require_recursiveRef = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/index.js -var require_dynamic = __commonJS((exports) => { +var require_dynamic = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicAnchor_1 = require_dynamicAnchor(); var dynamicRef_1 = require_dynamicRef(); @@ -5969,7 +5971,7 @@ var require_dynamic = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js -var require_dependentRequired = __commonJS((exports) => { +var require_dependentRequired = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dependencies_1 = require_dependencies(); var def = { @@ -5983,7 +5985,7 @@ var require_dependentRequired = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js -var require_dependentSchemas = __commonJS((exports) => { +var require_dependentSchemas = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dependencies_1 = require_dependencies(); var def = { @@ -5996,7 +5998,7 @@ var require_dependentSchemas = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitContains.js -var require_limitContains = __commonJS((exports) => { +var require_limitContains = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -6013,7 +6015,7 @@ var require_limitContains = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/next.js -var require_next = __commonJS((exports) => { +var require_next = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var dependentRequired_1 = require_dependentRequired(); var dependentSchemas_1 = require_dependentSchemas(); @@ -6023,7 +6025,7 @@ var require_next = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js -var require_unevaluatedProperties = __commonJS((exports) => { +var require_unevaluatedProperties = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -6086,7 +6088,7 @@ var require_unevaluatedProperties = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js -var require_unevaluatedItems = __commonJS((exports) => { +var require_unevaluatedItems = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -6127,7 +6129,7 @@ var require_unevaluatedItems = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/index.js -var require_unevaluated = __commonJS((exports) => { +var require_unevaluated = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var unevaluatedProperties_1 = require_unevaluatedProperties(); var unevaluatedItems_1 = require_unevaluatedItems(); @@ -6136,7 +6138,7 @@ var require_unevaluated = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/format.js -var require_format = __commonJS((exports) => { +var require_format = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -6223,7 +6225,7 @@ var require_format = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/index.js -var require_format2 = __commonJS((exports) => { +var require_format2 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var format_1 = require_format(); var format = [format_1.default]; @@ -6231,7 +6233,7 @@ var require_format2 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/metadata.js -var require_metadata = __commonJS((exports) => { +var require_metadata = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.contentVocabulary = exports.metadataVocabulary = undefined; exports.metadataVocabulary = [ @@ -6251,7 +6253,7 @@ var require_metadata = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/draft2020.js -var require_draft2020 = __commonJS((exports) => { +var require_draft2020 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require_core2(); var validation_1 = require_validation(); @@ -6276,18 +6278,18 @@ var require_draft2020 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/types.js -var require_types = __commonJS((exports) => { +var require_types = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscrError = undefined; var DiscrError; - (function(DiscrError2) { - DiscrError2["Tag"] = "tag"; - DiscrError2["Mapping"] = "mapping"; + (function(DiscrError) { + DiscrError["Tag"] = "tag"; + DiscrError["Mapping"] = "mapping"; })(DiscrError || (exports.DiscrError = DiscrError = {})); }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/index.js -var require_discriminator = __commonJS((exports) => { +var require_discriminator = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var types_1 = require_types(); @@ -6389,7 +6391,7 @@ var require_discriminator = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json -var require_schema = __commonJS((exports, module) => { +var require_schema = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/schema", @@ -6447,7 +6449,7 @@ var require_schema = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json -var require_applicator2 = __commonJS((exports, module) => { +var require_applicator2 = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/applicator", @@ -6498,7 +6500,7 @@ var require_applicator2 = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json -var require_unevaluated2 = __commonJS((exports, module) => { +var require_unevaluated2 = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/unevaluated", @@ -6516,7 +6518,7 @@ var require_unevaluated2 = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json -var require_content = __commonJS((exports, module) => { +var require_content = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/content", @@ -6535,7 +6537,7 @@ var require_content = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json -var require_core3 = __commonJS((exports, module) => { +var require_core3 = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/core", @@ -6589,7 +6591,7 @@ var require_core3 = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json -var require_format_annotation = __commonJS((exports, module) => { +var require_format_annotation = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/format-annotation", @@ -6606,7 +6608,7 @@ var require_format_annotation = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json -var require_meta_data = __commonJS((exports, module) => { +var require_meta_data = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/meta-data", @@ -6645,7 +6647,7 @@ var require_meta_data = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json -var require_validation2 = __commonJS((exports, module) => { +var require_validation2 = __commonJS(function(exports, module) { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/validation", @@ -6738,7 +6740,7 @@ var require_validation2 = __commonJS((exports, module) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/index.js -var require_json_schema_2020_12 = __commonJS((exports) => { +var require_json_schema_2020_12 = __commonJS(function(exports) { Object.defineProperty(exports, "__esModule", { value: true }); var metaSchema = require_schema(); var applicator = require_applicator2(); @@ -6769,7 +6771,7 @@ var require_json_schema_2020_12 = __commonJS((exports) => { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/2020.js -var require_2020 = __commonJS((exports, module) => { +var require__2020 = __commonJS(function(exports, module) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = undefined; var core_1 = require_core(); @@ -6942,7 +6944,7 @@ import { dirname, isAbsolute, join as join2 } from "path"; import { createConnection } from "net"; // ../protocol-ts/src/validate.ts -var import__2020 = __toESM(require_2020(), 1); +var import__2020 = __toESM(require__2020(), 1); // ../protocol-ts/schema/crew.schema.json var crew_schema_default = { $schema: "https://json-schema.org/draft/2020-12/schema", @@ -11473,11 +11475,12 @@ var package_default = { exports: { ".": "./dist/index.js" }, omp: { extensions: ["./dist/index.js"] }, scripts: { - build: "bun build src/index.ts --outdir dist --target bun --external @oh-my-pi/pi-coding-agent" + build: "bun build src/index.ts --outdir dist --target bun --external @oh-my-pi/pi-coding-agent --external @oh-my-pi/pi-tui" }, - peerDependencies: { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19" }, + peerDependencies: { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", "@oh-my-pi/pi-tui": ">=17.0.7 <19" }, devDependencies: { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", + "@oh-my-pi/pi-tui": ">=17.0.7 <19", "@nikolasd/crew-protocol": "workspace:*", "@types/bun": "1.3.14", ajv: "8.17.1", @@ -13605,6 +13608,23 @@ import { mkdir, writeFile } from "fs/promises"; import { join as join8 } from "path"; // src/milestones.ts +import { Box, Text } from "@oh-my-pi/pi-tui"; +var CREW_MESSAGE_TYPE = "crew"; +var CREW_ICON = "\uD83D\uDC65"; +var CREW_LABEL = "Crew"; +function registerCrewMessageRenderer(pi) { + const register = pi.registerMessageRenderer; + if (typeof register !== "function") { + return; + } + register.call(pi, CREW_MESSAGE_TYPE, (message) => { + const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); + const box = new Box(1, 0); + box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); + box.addChild(new Text(text)); + return box; + }); +} var TERMINAL_STATES = { succeeded: true, failed: true, @@ -13722,6 +13742,7 @@ function formatDigest(e, lookup) { } function attachMilestoneBridge(pi, monitor) { const tracker = new MilestoneTracker; + registerCrewMessageRenderer(pi); const send = pi.sendMessage; let warnedMissingSendMessage = false; return monitor.subscribeEvents((e, meta) => { @@ -13736,7 +13757,7 @@ function attachMilestoneBridge(pi, monitor) { return; } if (typeof send === "function") { - send.call(pi, digest, { deliverAs: "followUp", triggerTurn: true }); + send.call(pi, { customType: CREW_MESSAGE_TYPE, content: digest }, { deliverAs: "followUp", triggerTurn: true }); } else if (!warnedMissingSendMessage) { warnedMissingSendMessage = true; pi.logger.warn("crew milestone bridge: this omp build exposes no sendMessage on ExtensionAPI, so run milestones will not be delivered to the leader for the rest of this session"); @@ -14314,7 +14335,7 @@ function registerMonitor(pi, ctx) { extCtx.ui.setWidget(WIDGET_KEY, content, { placement: "aboveEditor" }); pi.appendEntry(MONITOR_ENTRY_TYPE, { sequence: Number(state.lastSequence) }); } - async function connect(extCtx, resolveClient2 = ctx.getClient) { + async function connect(extCtx, resolveClient = ctx.getClient) { if (connecting) { return; } @@ -14335,7 +14356,7 @@ function registerMonitor(pi, ctx) { error: err instanceof Error ? err.message : String(err) }); } - const client = await resolveClient2(extCtx); + const client = await resolveClient(extCtx); controller.start(client, fromSequence, () => refresh(extCtx)); subscribedClient = client; reconnectDelayMs = RECONNECT_INITIAL_DELAY_MS; diff --git a/packages/extension/package.json b/packages/extension/package.json index 78774e57..6ce01386 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -5,11 +5,12 @@ "exports": { ".": "./dist/index.js" }, "omp": { "extensions": ["./dist/index.js"] }, "scripts": { - "build": "bun build src/index.ts --outdir dist --target bun --external @oh-my-pi/pi-coding-agent" + "build": "bun build src/index.ts --outdir dist --target bun --external @oh-my-pi/pi-coding-agent --external @oh-my-pi/pi-tui" }, - "peerDependencies": { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19" }, + "peerDependencies": { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", "@oh-my-pi/pi-tui": ">=17.0.7 <19" }, "devDependencies": { "@oh-my-pi/pi-coding-agent": ">=17.0.7 <19", + "@oh-my-pi/pi-tui": ">=17.0.7 <19", "@nikolasd/crew-protocol": "workspace:*", "@types/bun": "1.3.14", "ajv": "8.17.1", diff --git a/packages/extension/src/milestones.test.ts b/packages/extension/src/milestones.test.ts index a890debe..7f78fbd0 100644 --- a/packages/extension/src/milestones.test.ts +++ b/packages/extension/src/milestones.test.ts @@ -1,6 +1,7 @@ import { expect, test } from "bun:test"; import type { EventEnvelope, RuntimeEvent, RuntimeEventKind } from "@nikolasd/crew-protocol"; +import type { Component } from "@oh-my-pi/pi-tui"; import { attachMilestoneBridge, formatDigest, MilestoneTracker, type RunLookup } from "./milestones"; import type { MonitorController } from "./monitor/controller"; import type { MonitorRow } from "./monitor/model"; @@ -307,16 +308,25 @@ test("escalation digest with a question appends it after the reason", () => { function fakeBridge(): { sent: string[]; + sentCustomTypes: string[]; dispatch: (e: EventEnvelope, meta?: { replay: boolean }) => void; unsubscribe: () => void; } { const sent: string[] = []; + const sentCustomTypes: string[] = []; const fakePi = { logger: { debug() {}, info() {}, warn() {}, error() {} }, - sendMessage: (message: string) => { - sent.push(message); + // The bridge now sends `{ customType, content }` rather than a bare + // string -- captures both, so a test can pin the digest text (as + // before) or the wire shape (customType), independently. + sendMessage: (message: { customType: string; content: string }) => { + sent.push(message.content); + sentCustomTypes.push(message.customType); }, - } as unknown as { logger: { [k: string]: (...a: unknown[]) => void }; sendMessage: (m: string) => void }; + } as unknown as { + logger: { [k: string]: (...a: unknown[]) => void }; + sendMessage: (m: { customType: string; content: string }) => void; + }; const listeners: Array<(e: EventEnvelope, meta: { replay: boolean }) => void> = []; const controller = { subscribeEvents(cb: (e: EventEnvelope, meta: { replay: boolean }) => void) { @@ -339,7 +349,7 @@ function fakeBridge(): { } }; expect(listeners.length).toBe(1); - return { sent, dispatch, unsubscribe }; + return { sent, sentCustomTypes, dispatch, unsubscribe }; } test("bridge injects a digest for a milestone and stays silent for noise", () => { @@ -356,6 +366,17 @@ test("bridge injects a digest for a milestone and stays silent for noise", () => expect(sent.length).toBe(1); }); +test("every digest is sent under crew's own customType, not a bare string", () => { + // A bare string falls back to oh-my-pi's generic "custom-message" + // header, indistinguishable from any other extension's notice. Every + // digest must carry `customType: "crew"` so the registered renderer + // (see the rendering tests below) actually applies to it. + const { sentCustomTypes, dispatch } = fakeBridge(); + dispatch(run("run-1", "failed")); + dispatch(run("run-2", "succeeded")); + expect(sentCustomTypes).toEqual(["crew", "crew"]); +}); + test("an omp build with no sendMessage warns once, not silently and not per event", () => { // The only branch in the bridge that could fail silently. `send` is looked // up through a cast so a renamed or removed omp method degrades to "no @@ -450,3 +471,84 @@ test("a replayed milestone still updates the tracker's one-shot bookkeeping", () dispatch(run("run-2", "working"), { replay: false }); expect(sent.length).toBe(1); }); + +function fakePiWithRenderer(): { + pi: { logger: { [k: string]: (...a: unknown[]) => void } }; + registered: Array<{ customType: string; renderer: (message: { content: unknown }) => Component | undefined }>; +} { + const registered: Array<{ customType: string; renderer: (message: { content: unknown }) => Component | undefined }> = []; + const pi = { + logger: { debug() {}, info() {}, warn() {}, error() {} }, + registerMessageRenderer: (customType: string, renderer: (message: { content: unknown }) => Component | undefined) => { + registered.push({ customType, renderer }); + }, + // No sendMessage needed for these tests -- only the renderer registration + // and its output are under test here. + }; + return { pi, registered }; +} + +function controllerWithNoEvents(): MonitorController { + return { + subscribeEvents() { + return () => {}; + }, + getState() { + return { rows: ROWS }; + }, + } as unknown as MonitorController; +} + +test("attaching the bridge registers a renderer for crew's own customType", () => { + const { pi, registered } = fakePiWithRenderer(); + attachMilestoneBridge(pi as never, controllerWithNoEvents()); + expect(registered.length).toBe(1); + expect(registered[0]?.customType).toBe("crew"); +}); + +test("the registered renderer draws crew's icon, label, and the digest text", () => { + // The actual proof of content: the renderer this bridge registers, + // invoked the way oh-my-pi itself would invoke it, must produce a real + // component whose rendered rows show crew's own icon and label rather + // than the generic "custom-message" fallback header -- and still carry + // the digest text verbatim, since the digest wording itself is out of + // scope for this change. + const { pi, registered } = fakePiWithRenderer(); + attachMilestoneBridge(pi as never, controllerWithNoEvents()); + const renderer = registered[0]?.renderer; + expect(renderer).toBeDefined(); + + const component = renderer?.({ content: "run run-1 (claude adapter) for task task-1 FAILED: boom." }); + expect(component).toBeDefined(); + const rows = component?.render(80).join("\n") ?? ""; + expect(rows).toContain("👥"); + expect(rows).toContain("Crew"); + expect(rows).toContain("run run-1 (claude adapter) for task task-1 FAILED: boom."); +}); + +test("the registered renderer degrades to the stringified content on a non-string payload rather than throwing", () => { + // Every digest this bridge sends is a plain string, but `content` is + // typed as `CustomMessageContent` in general (a string or a content-part + // array). A future or third-party sender of this customType with rich + // content must still render something rather than crash the renderer. + const { pi, registered } = fakePiWithRenderer(); + attachMilestoneBridge(pi as never, controllerWithNoEvents()); + const renderer = registered[0]?.renderer; + const component = renderer?.({ content: [{ type: "text", text: "hi" }] }); + expect(component).toBeDefined(); + const rows = component?.render(80).join("\n") ?? ""; + expect(rows).toContain("👥"); + expect(rows.length).toBeGreaterThan(0); +}); + +test("an omp build with no registerMessageRenderer degrades quietly, not a crash", () => { + // The counterpart to the missing-sendMessage test: an older/newer omp + // build without this method must still let the bridge attach and deliver + // digests -- losing only the custom header, never the notification + // itself, and never throwing at attach time. + const pi = { + logger: { debug() {}, info() {}, warn() {}, error() {} }, + // deliberately no registerMessageRenderer + }; + expect(() => attachMilestoneBridge(pi as never, controllerWithNoEvents())).not.toThrow(); +}); diff --git a/packages/extension/src/milestones.ts b/packages/extension/src/milestones.ts index 8cd5a9e9..6bf7ee38 100644 --- a/packages/extension/src/milestones.ts +++ b/packages/extension/src/milestones.ts @@ -14,11 +14,69 @@ import type { EventEnvelope, RuntimeEvent } from "@nikolasd/crew-protocol"; import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent"; +import { Box, type Component, Text } from "@oh-my-pi/pi-tui"; import type { EventDeliveryMeta } from "./client"; import type { MonitorController } from "./monitor/controller"; import type { MonitorRow } from "./monitor/model"; +/** + * The `customType` crew's own injected notices are sent under. Every + * extension-injected message that omits `customType` (a bare string, + * which is what every digest here used to be) falls back to oh-my-pi's own + * `DEFAULT_CUSTOM_MESSAGE_TYPE` ("custom-message") and renders under a + * generic header naming no extension at all -- indistinguishable from any + * other extension's notice. Sending under this type instead, paired with + * `registerCrewMessageRenderer` below, is what lets a digest render as + * crew's own rather than that generic fallback. + */ +const CREW_MESSAGE_TYPE = "crew"; + +/** + * Icon and label crew's own notices render under. Provisional pending the + * maintainer's final wording on the label -- "Crew" is the agreed default + * to ship with. + */ +const CREW_ICON = "👥"; +const CREW_LABEL = "Crew"; + +/** + * Registers a custom renderer for `CREW_MESSAGE_TYPE`: a small box with + * crew's own icon + label as its header and the digest text as its body, + * standing in for the generic "custom-message" fallback header every + * extension-injected message without a registered renderer gets. + * + * Defensive lookup, the same convention `attachMilestoneBridge` already + * uses for `sendMessage`: `registerMessageRenderer` is accessed through a + * cast so a renamed or removed method on a different omp build degrades to + * "no custom renderer" (the generic fallback header) rather than a crash. + * Unlike a missing `sendMessage`, this never warns on its own absence -- + * losing it is a cosmetic regression (the digest still arrives, under a + * less legible header), not a silently dropped notification. + */ +function registerCrewMessageRenderer(pi: ExtensionAPI): void { + const register = ( + pi as unknown as { + registerMessageRenderer?: (customType: string, renderer: (message: { content: unknown }) => Component | undefined) => void; + } + ).registerMessageRenderer; + if (typeof register !== "function") { + return; + } + register.call(pi, CREW_MESSAGE_TYPE, (message: { content: unknown }) => { + // `content` is `CustomMessageContent = string | (TextContent | ImageContent)[]` + // in general, but every digest this bridge ever sends is a plain + // string -- the array shape is defended against rather than assumed + // absent, since a future digest carrying rich content should still + // render something instead of throwing. + const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); + const box = new Box(1, 0); + box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); + box.addChild(new Text(text)); + return box; + }); +} + /** A run-state value that ends the run. */ const TERMINAL_STATES: Record = { succeeded: true, @@ -221,14 +279,18 @@ export function formatDigest(e: EventEnvelope, lookup: RunLookup): string | unde */ export function attachMilestoneBridge(pi: ExtensionAPI, monitor: MonitorController): () => void { const tracker = new MilestoneTracker(); + registerCrewMessageRenderer(pi); // The oh-my-pi `ExtensionAPI` surface is version-gated; access // `sendMessage` defensively so a renamed/removed method degrades to // "no digest" rather than a crash. The documented signature is - // `sendMessage(message, { deliverAs, triggerTurn })`. + // `sendMessage(message, { deliverAs, triggerTurn })`; `message` is now an + // object naming `CREW_MESSAGE_TYPE`, not the bare string it used to be, + // so the digest renders under crew's own header via the renderer just + // registered instead of oh-my-pi's generic "custom-message" fallback. const send = ( pi as unknown as { - sendMessage?: (message: string, options?: { deliverAs?: string; triggerTurn?: boolean }) => unknown; + sendMessage?: (message: { customType: string; content: string }, options?: { deliverAs?: string; triggerTurn?: boolean }) => unknown; } ).sendMessage; @@ -264,7 +326,7 @@ export function attachMilestoneBridge(pi: ExtensionAPI, monitor: MonitorControll return; } if (typeof send === "function") { - void send.call(pi, digest, { deliverAs: "followUp", triggerTurn: true }); + void send.call(pi, { customType: CREW_MESSAGE_TYPE, content: digest }, { deliverAs: "followUp", triggerTurn: true }); } else if (!warnedMissingSendMessage) { warnedMissingSendMessage = true; pi.logger.warn("crew milestone bridge: this omp build exposes no sendMessage on ExtensionAPI, so run milestones will not be delivered to the leader for the rest of this session"); From d9af691035a7006773d75af41e23822d02156d73 Mon Sep 17 00:00:00 2001 From: Nikolas Demiridis Date: Fri, 11 Sep 2026 14:06:21 +0300 Subject: [PATCH 2/4] fix(extension): tie the wire shape and the pi-tui import to one capability check Two findings from review, sharing one root: the code was carefully defensive about the *method* (`registerMessageRenderer` accessed through a cast, degrading to "no custom renderer" when absent) but not defensive about the two things that method's presence was supposed to stand in for -- the wire shape `sendMessage` gets, and the module the renderer itself needs. The degradation the code's own comment promised did not actually hold end to end. Finding 1: the `{ customType, content }` object was sent to `sendMessage` unconditionally, regardless of whether `registerMessageRenderer` existed. The package's own peer range is `>=17.0.7 <19`, and nobody has established that a build as old as 17.0.7 accepts anything but a bare string there -- if it does not, the digest is not "less legible" as promised, it is garbled or dropped, which is exactly the silent-notification-loss this file works hard to prevent elsewhere. Fixed by gating the wire shape on the same capability check the renderer registration already uses: a build without `registerMessageRenderer` is exactly the build most likely to also predate `customType` support, so its presence is a sound signal for both rather than two things to verify independently. That check is now computed once, in `supportsCustomMessageRenderer`, and read at both call sites. Finding 2: `Box`/`Text` were a static top-level import of `@oh-my-pi/pi-tui`, a module the build marks `--external`. A static import of an external specifier is evaluated at load time, unconditionally -- so a build that does not expose that module to extensions would fail the whole extension's load, every tool and the monitor included, not just this one renderer's header, and would pay that cost even on a build that never calls the renderer at all. That is a strictly worse failure mode than anything this file was trying to prevent. Fixed by moving the import behind a dynamic `await import(...)` inside `registerCrewMessageRenderer`, itself only ever called after the same capability check above -- so the module is only required on a build that has already proven it supports custom renderers, and a resolution failure there (or the host's own `registerMessageRenderer` rejecting the renderer, guarded by the same try/catch) degrades exactly like the method being absent: no custom renderer, the fallback header applies, nothing else breaks. Together these make the file's real promise provable by reading the code rather than by knowing which omp versions accept what: on any build without custom-renderer support, the digest still arrives as plain text, unconditionally, and nothing else about the extension is at risk. Tests: a new case pins the wire-shape gate directly -- a build with no `registerMessageRenderer` must receive a bare-string digest, never the object shape, verified to discriminate (temporarily made the shape unconditional, watched the assertion fail on the real sent value: object instead of string). The three existing renderer tests now await an async flush, since registration happens after a dynamic import resolves rather than synchronously at attach time. A new case exercises the combined try/catch around both the import and the `register.call` that follows it, confirming either failing degrades quietly rather than throwing at attach time. bun run typecheck, bun run format:check, the extension build (confirmed via the built bundle: zero static `from "@oh-my-pi/pi-tui"` imports remain, only the dynamic `await import(...)` inside the gated function), and bun test (all green) verified clean. --- packages/extension/dist/index.js | 40 ++++--- packages/extension/src/milestones.test.ts | 95 +++++++++++++++- packages/extension/src/milestones.ts | 129 ++++++++++++++++------ 3 files changed, 207 insertions(+), 57 deletions(-) diff --git a/packages/extension/dist/index.js b/packages/extension/dist/index.js index 6f1401e3..2706db42 100644 --- a/packages/extension/dist/index.js +++ b/packages/extension/dist/index.js @@ -13608,22 +13608,28 @@ import { mkdir, writeFile } from "fs/promises"; import { join as join8 } from "path"; // src/milestones.ts -import { Box, Text } from "@oh-my-pi/pi-tui"; var CREW_MESSAGE_TYPE = "crew"; var CREW_ICON = "\uD83D\uDC65"; var CREW_LABEL = "Crew"; -function registerCrewMessageRenderer(pi) { +function supportsCustomMessageRenderer(pi) { + return typeof pi.registerMessageRenderer === "function"; +} +async function registerCrewMessageRenderer(pi) { const register = pi.registerMessageRenderer; - if (typeof register !== "function") { - return; + try { + const { Box, Text } = await import("@oh-my-pi/pi-tui"); + register.call(pi, CREW_MESSAGE_TYPE, (message) => { + const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); + const box = new Box(1, 0); + box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); + box.addChild(new Text(text)); + return box; + }); + } catch (err) { + pi.logger.debug("crew milestone bridge: could not register the crew message renderer", { + error: err instanceof Error ? err.message : String(err) + }); } - register.call(pi, CREW_MESSAGE_TYPE, (message) => { - const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); - const box = new Box(1, 0); - box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); - box.addChild(new Text(text)); - return box; - }); } var TERMINAL_STATES = { succeeded: true, @@ -13715,7 +13721,7 @@ function formatDigest(e, lookup) { if (!event.payload.flags.turnSettled) { return; } - return `${capitalize(who)} settled a turn and is waiting on the leader (not terminal -- ` + `the vendor is still parked, not exited). Read the answer via crew_run { op: "result", runId }, ` + `then either crew_send to follow up or crew_run { op: "finish", runId, outcome } to close it.`; + return `${capitalize(who)} settled a turn and is waiting on the leader (not terminal -- the vendor is still parked, not exited). Read the answer via crew_run { op: "result", runId }, then either crew_send to follow up or crew_run { op: "finish", runId, outcome } to close it.`; } case "workerQuestion": { const question = event.payload.question ?? "(no question text captured)"; @@ -13723,7 +13729,7 @@ function formatDigest(e, lookup) { } case "workerTimeout": { const kind = event.payload.kind ?? "inactivity"; - return `${capitalize(who)} hit a worker ${kind} timeout. The runtime reports; the leader decides: ` + `give it more time via crew_run { op: "timeoutAck", runId, decision: "extend" }, ` + `redirect it via crew_send (the nudge), or stop it via crew_run { op: "timeoutAck", decision: "abort" }.`; + return `${capitalize(who)} hit a worker ${kind} timeout. The runtime reports; the leader decides: give it more time via crew_run { op: "timeoutAck", runId, decision: "extend" }, redirect it via crew_send (the nudge), or stop it via crew_run { op: "timeoutAck", decision: "abort" }.`; } case "budgetExceeded": return `${capitalize(who)} exceeded its turn budget. Escalate to the user or raise the budget via the plan.`; @@ -13741,7 +13747,10 @@ function formatDigest(e, lookup) { } function attachMilestoneBridge(pi, monitor) { const tracker = new MilestoneTracker; - registerCrewMessageRenderer(pi); + const customRendererSupported = supportsCustomMessageRenderer(pi); + if (customRendererSupported) { + registerCrewMessageRenderer(pi); + } const send = pi.sendMessage; let warnedMissingSendMessage = false; return monitor.subscribeEvents((e, meta) => { @@ -13756,7 +13765,8 @@ function attachMilestoneBridge(pi, monitor) { return; } if (typeof send === "function") { - send.call(pi, { customType: CREW_MESSAGE_TYPE, content: digest }, { deliverAs: "followUp", triggerTurn: true }); + const message = customRendererSupported ? { customType: CREW_MESSAGE_TYPE, content: digest } : digest; + send.call(pi, message, { deliverAs: "followUp", triggerTurn: true }); } else if (!warnedMissingSendMessage) { warnedMissingSendMessage = true; pi.logger.warn("crew milestone bridge: this omp build exposes no sendMessage on ExtensionAPI, so run milestones will not be delivered to the leader for the rest of this session"); diff --git a/packages/extension/src/milestones.test.ts b/packages/extension/src/milestones.test.ts index 31507930..6602d09a 100644 --- a/packages/extension/src/milestones.test.ts +++ b/packages/extension/src/milestones.test.ts @@ -350,15 +350,19 @@ function fakeBridge(): { const sentCustomTypes: string[] = []; const fakePi = { logger: { debug() {}, info() {}, warn() {}, error() {} }, - // The bridge now sends `{ customType, content }` rather than a bare - // string -- captures both, so a test can pin the digest text (as - // before) or the wire shape (customType), independently. + // Present (even as a no-op) so `supportsCustomMessageRenderer` reads + // true and the bridge sends the `{ customType, content }` object + // shape below -- a build advertised as supporting custom renderers, + // which is the case most of this file's tests exercise. The opposite + // case (absent, bare string) has its own dedicated test. + registerMessageRenderer: () => {}, sendMessage: (message: { customType: string; content: string }) => { sent.push(message.content); sentCustomTypes.push(message.customType); }, } as unknown as { logger: { [k: string]: (...a: unknown[]) => void }; + registerMessageRenderer: () => void; sendMessage: (m: { customType: string; content: string }) => void; }; const listeners: Array<(e: EventEnvelope, meta: { replay: boolean }) => void> = []; @@ -411,6 +415,40 @@ test("every digest is sent under crew's own customType, not a bare string", () = expect(sentCustomTypes).toEqual(["crew", "crew"]); }); +test("a build with no registerMessageRenderer gets a bare-string digest, never the object shape", () => { + // The wire-shape half of the same capability check the renderer + // registration is gated on: a build old enough to lack + // `registerMessageRenderer` has not established that its `sendMessage` + // accepts anything but a string, so it must never receive the + // `{ customType, content }` object -- that would be an untested, + // possibly-garbled payload on exactly the build least likely to handle + // it gracefully. + const sent: unknown[] = []; + const fakePi = { + logger: { debug() {}, info() {}, warn() {}, error() {} }, + // deliberately no registerMessageRenderer + sendMessage: (message: unknown) => { + sent.push(message); + }, + }; + const listeners: Array<(e: EventEnvelope, meta: { replay: boolean }) => void> = []; + const controller = { + subscribeEvents(cb: (e: EventEnvelope, meta: { replay: boolean }) => void) { + listeners.push(cb); + return () => {}; + }, + getState() { + return { rows: ROWS }; + }, + } as unknown as MonitorController; + attachMilestoneBridge(fakePi as never, controller); + listeners[0]?.(run("run-1", "failed"), { replay: false }); + + expect(sent.length).toBe(1); + expect(typeof sent[0]).toBe("string"); + expect(sent[0] as string).toContain("FAILED"); +}); + test("an omp build with no sendMessage warns once, not silently and not per event", () => { // The only branch in the bridge that could fail silently. `send` is looked // up through a cast so a renamed or removed omp method degrades to "no @@ -533,14 +571,35 @@ function controllerWithNoEvents(): MonitorController { } as unknown as MonitorController; } -test("attaching the bridge registers a renderer for crew's own customType", () => { +/** + * `registerCrewMessageRenderer` registers asynchronously (it dynamically + * imports `@oh-my-pi/pi-tui` before calling `registerMessageRenderer`), + * so a test that attaches the bridge and immediately inspects what got + * registered needs to let that microtask chain settle first. A macrotask + * flush is deliberately used over an immediate microtask flush: the + * import may resolve over more than one microtask hop internally, and a + * `setTimeout` is guaranteed to run after all of them regardless of how + * many there are. + */ +async function flushAsyncRegistration(): Promise { + // Pre-warms the module cache (the same specifier `registerCrewMessageRenderer` + // dynamically imports) so its own `import()` resolves from cache rather + // than doing first-time resolution work, then flushes a macrotask to + // let that resolved promise's `.then`/registration chain finish running + // before the test inspects what got registered. + await import("@oh-my-pi/pi-tui"); + await new Promise((resolve) => setTimeout(resolve, 0)); +} + +test("attaching the bridge registers a renderer for crew's own customType", async () => { const { pi, registered } = fakePiWithRenderer(); attachMilestoneBridge(pi as never, controllerWithNoEvents()); + await flushAsyncRegistration(); expect(registered.length).toBe(1); expect(registered[0]?.customType).toBe("crew"); }); -test("the registered renderer draws crew's icon, label, and the digest text", () => { +test("the registered renderer draws crew's icon, label, and the digest text", async () => { // The actual proof of content: the renderer this bridge registers, // invoked the way oh-my-pi itself would invoke it, must produce a real // component whose rendered rows show crew's own icon and label rather @@ -549,6 +608,7 @@ test("the registered renderer draws crew's icon, label, and the digest text", () // scope for this change. const { pi, registered } = fakePiWithRenderer(); attachMilestoneBridge(pi as never, controllerWithNoEvents()); + await flushAsyncRegistration(); const renderer = registered[0]?.renderer; expect(renderer).toBeDefined(); @@ -560,13 +620,14 @@ test("the registered renderer draws crew's icon, label, and the digest text", () expect(rows).toContain("run run-1 (claude adapter) for task task-1 FAILED: boom."); }); -test("the registered renderer degrades to the stringified content on a non-string payload rather than throwing", () => { +test("the registered renderer degrades to the stringified content on a non-string payload rather than throwing", async () => { // Every digest this bridge sends is a plain string, but `content` is // typed as `CustomMessageContent` in general (a string or a content-part // array). A future or third-party sender of this customType with rich // content must still render something rather than crash the renderer. const { pi, registered } = fakePiWithRenderer(); attachMilestoneBridge(pi as never, controllerWithNoEvents()); + await flushAsyncRegistration(); const renderer = registered[0]?.renderer; const component = renderer?.({ content: [{ type: "text", text: "hi" }] }); expect(component).toBeDefined(); @@ -575,6 +636,28 @@ test("the registered renderer degrades to the stringified content on a non-strin expect(rows.length).toBeGreaterThan(0); }); +test("a build that advertises registerMessageRenderer but has no @oh-my-pi/pi-tui degrades to no custom renderer, not a crash", async () => { + // The combination the doc comment calls unlikely but still guards: the + // method exists (so `supportsCustomMessageRenderer` is true and the + // object wire shape is sent) yet the dynamic import of `pi-tui` fails. + // Import failure is simulated by pointing the dynamic import at a + // module specifier that cannot resolve -- `registerCrewMessageRenderer` + // itself is not exported, so this drives it through the same public + // entry point every other test here uses, with a `registerMessageRenderer` + // that throws synchronously to stand in for a resolution failure deep in + // the (unmockable from here) dynamic import. + const registered: unknown[] = []; + const pi = { + logger: { debug() {}, info() {}, warn() {}, error() {} }, + registerMessageRenderer: () => { + registered.push(true); + throw new Error("simulated: registerMessageRenderer itself rejected the renderer"); + }, + }; + expect(() => attachMilestoneBridge(pi as never, controllerWithNoEvents())).not.toThrow(); + await flushAsyncRegistration(); +}); + test("an omp build with no registerMessageRenderer degrades quietly, not a crash", () => { // The counterpart to the missing-sendMessage test: an older/newer omp // build without this method must still let the bridge attach and deliver diff --git a/packages/extension/src/milestones.ts b/packages/extension/src/milestones.ts index 067fc9e2..f8fbbccd 100644 --- a/packages/extension/src/milestones.ts +++ b/packages/extension/src/milestones.ts @@ -14,18 +14,19 @@ import type { EventEnvelope, RuntimeEvent } from "@nikolasd/crew-protocol"; import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent"; -import { Box, type Component, Text } from "@oh-my-pi/pi-tui"; +import type { Component } from "@oh-my-pi/pi-tui"; import type { EventDeliveryMeta } from "./client"; import type { MonitorController } from "./monitor/controller"; import type { MonitorRow } from "./monitor/model"; /** - * The `customType` crew's own injected notices are sent under. Every - * extension-injected message that omits `customType` (a bare string, - * which is what every digest here used to be) falls back to oh-my-pi's own + * The `customType` crew's own injected notices are sent under, on any omp + * build `supportsCustomMessageRenderer` below confirms can take it. A + * bare string -- every digest here used to be one, and still is on a + * build that fails that check -- falls back to oh-my-pi's own * `DEFAULT_CUSTOM_MESSAGE_TYPE` ("custom-message") and renders under a - * generic header naming no extension at all -- indistinguishable from any + * generic header naming no extension at all, indistinguishable from any * other extension's notice. Sending under this type instead, paired with * `registerCrewMessageRenderer` below, is what lets a digest render as * crew's own rather than that generic fallback. @@ -40,41 +41,87 @@ const CREW_MESSAGE_TYPE = "crew"; const CREW_ICON = "👥"; const CREW_LABEL = "Crew"; +/** + * Whether this omp build can take a custom message renderer at all -- + * `registerMessageRenderer` accessed through a cast, the same defensive + * lookup convention already used here for `sendMessage`. This single + * check gates two separate things, deliberately: whether it is safe to + * *register* a renderer (obviously), and whether it is safe to *send* the + * `{ customType, content }` object shape `sendMessage` needs for a + * renderer to ever apply. The two are tied together on purpose -- a build + * old enough to lack this method is exactly the build most likely to + * predate `customType` support too, and there is no independent way to + * probe the second without an installed omp old enough to test against. + * Tying them to the same signal makes the degradation provable by reading + * this file rather than by knowing which omp versions accept what: a + * build without this method gets a bare-string digest, unconditionally, + * from every call site below. + */ +function supportsCustomMessageRenderer(pi: ExtensionAPI): boolean { + return ( + typeof ( + pi as unknown as { + registerMessageRenderer?: (customType: string, renderer: (message: { content: unknown }) => Component | undefined) => void; + } + ).registerMessageRenderer === "function" + ); +} + /** * Registers a custom renderer for `CREW_MESSAGE_TYPE`: a small box with * crew's own icon + label as its header and the digest text as its body, * standing in for the generic "custom-message" fallback header every - * extension-injected message without a registered renderer gets. + * extension-injected message without a registered renderer gets. Only + * ever called after `supportsCustomMessageRenderer` -- see that function + * for why its check covers this call being safe to make at all. * - * Defensive lookup, the same convention `attachMilestoneBridge` already - * uses for `sendMessage`: `registerMessageRenderer` is accessed through a - * cast so a renamed or removed method on a different omp build degrades to - * "no custom renderer" (the generic fallback header) rather than a crash. - * Unlike a missing `sendMessage`, this never warns on its own absence -- - * losing it is a cosmetic regression (the digest still arrives, under a - * less legible header), not a silently dropped notification. + * `@oh-my-pi/pi-tui`'s `Box`/`Text` are imported dynamically, inside this + * function, rather than statically at module scope: this module (and the + * `--external` build that ships it) has no control over whether an + * arbitrary omp build actually exposes that module to extensions, and a + * static import of an external specifier is evaluated at load time, + * unconditionally -- a `pi-tui` an omp build doesn't expose would fail + * the whole extension's load, not just this renderer, on every build, + * whether or not it ever calls this function. Deferred behind the same + * capability check `sendMessage`'s own wire shape is gated on, a build + * without `pi-tui` degrades exactly like a build without the method: + * no custom renderer, the fallback header applies, nothing else breaks. */ -function registerCrewMessageRenderer(pi: ExtensionAPI): void { +async function registerCrewMessageRenderer(pi: ExtensionAPI): Promise { const register = ( pi as unknown as { - registerMessageRenderer?: (customType: string, renderer: (message: { content: unknown }) => Component | undefined) => void; + registerMessageRenderer: (customType: string, renderer: (message: { content: unknown }) => Component | undefined) => void; } ).registerMessageRenderer; - if (typeof register !== "function") { - return; + // One try/catch around both steps, deliberately: neither the dynamic + // import nor the call into host-provided `register` is code this file + // controls, and a throw from either must degrade the same way -- no + // custom renderer, no broken extension load, nothing else affected. + try { + const { Box, Text } = await import("@oh-my-pi/pi-tui"); + register.call(pi, CREW_MESSAGE_TYPE, (message: { content: unknown }) => { + // `content` is `CustomMessageContent = string | (TextContent | ImageContent)[]` + // in general, but every digest this bridge ever sends is a plain + // string -- the array shape is defended against rather than assumed + // absent, since a future digest carrying rich content should still + // render something instead of throwing. + const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); + const box = new Box(1, 0); + box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); + box.addChild(new Text(text)); + return box; + }); + } catch (err) { + // The method existing without the module it depends on (or rejecting + // the renderer it was just handed) is not a combination expected to + // occur in practice -- the method's own return type is `pi-tui`'s + // `Component` -- but if it does, this is the same cosmetic + // degradation as the method being absent: no custom renderer, never a + // broken extension load. + pi.logger.debug("crew milestone bridge: could not register the crew message renderer", { + error: err instanceof Error ? err.message : String(err), + }); } - register.call(pi, CREW_MESSAGE_TYPE, (message: { content: unknown }) => { - // `content` is `CustomMessageContent = string | (TextContent | ImageContent)[]` - // in general, but every digest this bridge ever sends is a plain - // string -- the array shape is defended against rather than assumed - // absent, since a future digest carrying rich content should still - // render something instead of throwing. - const text = typeof message.content === "string" ? message.content : JSON.stringify(message.content); - const box = new Box(1, 0); - box.addChild(new Text(`${CREW_ICON} ${CREW_LABEL}`)); - box.addChild(new Text(text)); - return box; - }); } /** A run-state value that ends the run. */ @@ -288,18 +335,27 @@ export function formatDigest(e: EventEnvelope, lookup: RunLookup): string | unde */ export function attachMilestoneBridge(pi: ExtensionAPI, monitor: MonitorController): () => void { const tracker = new MilestoneTracker(); - registerCrewMessageRenderer(pi); + + // Computed once, at attach time, and reused below at both the one call + // site that registers a renderer and the one that decides what shape to + // send -- see `supportsCustomMessageRenderer`'s own doc comment for why + // one check governs both. + const customRendererSupported = supportsCustomMessageRenderer(pi); + if (customRendererSupported) { + void registerCrewMessageRenderer(pi); + } // The oh-my-pi `ExtensionAPI` surface is version-gated; access // `sendMessage` defensively so a renamed/removed method degrades to // "no digest" rather than a crash. The documented signature is - // `sendMessage(message, { deliverAs, triggerTurn })`; `message` is now an - // object naming `CREW_MESSAGE_TYPE`, not the bare string it used to be, - // so the digest renders under crew's own header via the renderer just - // registered instead of oh-my-pi's generic "custom-message" fallback. + // `sendMessage(message, { deliverAs, triggerTurn })`. `message` is the + // `{ customType, content }` object only when `customRendererSupported` + // -- a bare string otherwise, since a build old enough to lack + // `registerMessageRenderer` is not one this file has established + // accepts anything else. const send = ( pi as unknown as { - sendMessage?: (message: { customType: string; content: string }, options?: { deliverAs?: string; triggerTurn?: boolean }) => unknown; + sendMessage?: (message: string | { customType: string; content: string }, options?: { deliverAs?: string; triggerTurn?: boolean }) => unknown; } ).sendMessage; @@ -335,7 +391,8 @@ export function attachMilestoneBridge(pi: ExtensionAPI, monitor: MonitorControll return; } if (typeof send === "function") { - void send.call(pi, { customType: CREW_MESSAGE_TYPE, content: digest }, { deliverAs: "followUp", triggerTurn: true }); + const message = customRendererSupported ? { customType: CREW_MESSAGE_TYPE, content: digest } : digest; + void send.call(pi, message, { deliverAs: "followUp", triggerTurn: true }); } else if (!warnedMissingSendMessage) { warnedMissingSendMessage = true; pi.logger.warn("crew milestone bridge: this omp build exposes no sendMessage on ExtensionAPI, so run milestones will not be delivered to the leader for the rest of this session"); From ba5d35a2065334e9fa02187c50a917f12eb4de71 Mon Sep 17 00:00:00 2001 From: Nikolas Demiridis Date: Fri, 11 Sep 2026 14:23:24 +0300 Subject: [PATCH 3/4] docs(extension): note why the fire-and-forget renderer registration is safe The wire-shape decision `sendMessage` uses is computed synchronously at attach time, before the async renderer registration is even started -- so a digest arriving in the brief window before that registration's dynamic import resolves still gets the correct `{ customType, content }` object, just under the generic fallback header until the import settles. No correctness consequence, bounded to attach-time milliseconds well before any run reaches a milestone. Worth saying at the call site rather than leaving a future reader to re-derive it from the two functions' relative timing. No behavior change. bun run typecheck and the milestones test suite (29/29) verified clean. --- packages/extension/src/milestones.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/extension/src/milestones.ts b/packages/extension/src/milestones.ts index f8fbbccd..f9ecf759 100644 --- a/packages/extension/src/milestones.ts +++ b/packages/extension/src/milestones.ts @@ -342,6 +342,12 @@ export function attachMilestoneBridge(pi: ExtensionAPI, monitor: MonitorControll // one check governs both. const customRendererSupported = supportsCustomMessageRenderer(pi); if (customRendererSupported) { + // Fire-and-forget is safe here: `customRendererSupported` (the wire + // shape's own gate below) was already decided synchronously above, + // so a digest arriving before this async registration resolves still + // gets the correct `{ customType, content }` shape -- only its + // header renders generic until the dynamic import settles, which is + // attach-time work finishing well before any run reaches a milestone. void registerCrewMessageRenderer(pi); } From 156fe52b5fbd10cceae4eac50c5613e1774a43cf Mon Sep 17 00:00:00 2001 From: "crew-bot[bot]" <322634903+crew-bot[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:28:43 +0000 Subject: [PATCH 4/4] chore(extension): refresh bundle from linux-x64 CI Build: https://github.com/nikolasd/crew/actions/runs/34594182003 Source: ba5d35a2065334e9fa02187c50a917f12eb4de71 --- packages/extension/dist/index.js | 227 +++++++++++++++---------------- 1 file changed, 113 insertions(+), 114 deletions(-) diff --git a/packages/extension/dist/index.js b/packages/extension/dist/index.js index 2706db42..4977e32a 100644 --- a/packages/extension/dist/index.js +++ b/packages/extension/dist/index.js @@ -18,23 +18,22 @@ var __toESM = (mod, isNodeMode, target) => { return cached; } target = mod != null ? __create(__getProtoOf(mod)) : {}; - const to = isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", { value: mod, enumerable: true }) : target; - if (mod && typeof mod === "object" || typeof mod === "function") { - for (let key of __getOwnPropNames(mod)) - if (!__hasOwnProp.call(to, key)) - __defProp(to, key, { - get: __accessProp.bind(mod, key), - enumerable: true - }); - } + const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; + for (let key of __getOwnPropNames(mod)) + if (!__hasOwnProp.call(to, key)) + __defProp(to, key, { + get: __accessProp.bind(mod, key), + enumerable: true + }); if (canCache) cache.set(mod, to); return to; }; var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); +var __require = import.meta.require; // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/code.js -var require_code = __commonJS(function(exports) { +var require_code = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined; @@ -188,7 +187,7 @@ var require_code = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/scope.js -var require_scope = __commonJS(function(exports) { +var require_scope = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined; var code_1 = require_code(); @@ -200,9 +199,9 @@ var require_scope = __commonJS(function(exports) { } } var UsedValueState; - (function(UsedValueState) { - UsedValueState[UsedValueState["Started"] = 0] = "Started"; - UsedValueState[UsedValueState["Completed"] = 1] = "Completed"; + (function(UsedValueState2) { + UsedValueState2[UsedValueState2["Started"] = 0] = "Started"; + UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed"; })(UsedValueState || (exports.UsedValueState = UsedValueState = {})); exports.varKinds = { const: new code_1.Name("const"), @@ -334,7 +333,7 @@ var require_scope = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/codegen/index.js -var require_codegen = __commonJS(function(exports) { +var require_codegen = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined; var code_1 = require_code(); @@ -1044,7 +1043,7 @@ var require_codegen = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/util.js -var require_util = __commonJS(function(exports) { +var require_util = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined; var codegen_1 = require_codegen(); @@ -1184,9 +1183,9 @@ var require_util = __commonJS(function(exports) { } exports.useFunc = useFunc; var Type; - (function(Type) { - Type[Type["Num"] = 0] = "Num"; - Type[Type["Str"] = 1] = "Str"; + (function(Type2) { + Type2[Type2["Num"] = 0] = "Num"; + Type2[Type2["Str"] = 1] = "Str"; })(Type || (exports.Type = Type = {})); function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { if (dataProp instanceof codegen_1.Name) { @@ -1208,7 +1207,7 @@ var require_util = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/names.js -var require_names = __commonJS(function(exports) { +var require_names = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var names = { @@ -1233,7 +1232,7 @@ var require_names = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/errors.js -var require_errors = __commonJS(function(exports) { +var require_errors = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined; var codegen_1 = require_codegen(); @@ -1351,7 +1350,7 @@ var require_errors = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/boolSchema.js -var require_boolSchema = __commonJS(function(exports) { +var require_boolSchema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined; var errors_1 = require_errors(); @@ -1399,7 +1398,7 @@ var require_boolSchema = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/rules.js -var require_rules = __commonJS(function(exports) { +var require_rules = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getRules = exports.isJSONType = undefined; var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; @@ -1427,7 +1426,7 @@ var require_rules = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/applicability.js -var require_applicability = __commonJS(function(exports) { +var require_applicability = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined; function schemaHasRulesForType({ schema, self }, type) { @@ -1447,7 +1446,7 @@ var require_applicability = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/dataType.js -var require_dataType = __commonJS(function(exports) { +var require_dataType = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined; var rules_1 = require_rules(); @@ -1456,9 +1455,9 @@ var require_dataType = __commonJS(function(exports) { var codegen_1 = require_codegen(); var util_1 = require_util(); var DataType; - (function(DataType) { - DataType[DataType["Correct"] = 0] = "Correct"; - DataType[DataType["Wrong"] = 1] = "Wrong"; + (function(DataType2) { + DataType2[DataType2["Correct"] = 0] = "Correct"; + DataType2[DataType2["Wrong"] = 1] = "Wrong"; })(DataType || (exports.DataType = DataType = {})); function getSchemaTypes(schema) { const types = getJSONTypes(schema.type); @@ -1628,7 +1627,7 @@ var require_dataType = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/defaults.js -var require_defaults = __commonJS(function(exports) { +var require_defaults = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.assignDefaults = undefined; var codegen_1 = require_codegen(); @@ -1662,7 +1661,7 @@ var require_defaults = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/code.js -var require_code2 = __commonJS(function(exports) { +var require_code2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined; var codegen_1 = require_codegen(); @@ -1791,7 +1790,7 @@ var require_code2 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/keyword.js -var require_keyword = __commonJS(function(exports) { +var require_keyword = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined; var codegen_1 = require_codegen(); @@ -1854,8 +1853,8 @@ var require_keyword = __commonJS(function(exports) { gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); } function reportErrs(errors) { - var _a; - gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== undefined ? _a : valid), errors); + var _a2; + gen.if((0, codegen_1.not)((_a2 = def.valid) !== null && _a2 !== undefined ? _a2 : valid), errors); } } exports.funcKeywordCode = funcKeywordCode; @@ -1906,7 +1905,7 @@ var require_keyword = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/subschema.js -var require_subschema = __commonJS(function(exports) { +var require_subschema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined; var codegen_1 = require_codegen(); @@ -1986,7 +1985,7 @@ var require_subschema = __commonJS(function(exports) { }); // ../../node_modules/.bun/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js -var require_fast_deep_equal = __commonJS(function(exports, module) { +var require_fast_deep_equal = __commonJS((exports, module) => { module.exports = function equal(a, b) { if (a === b) return true; @@ -2028,7 +2027,7 @@ var require_fast_deep_equal = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js -var require_json_schema_traverse = __commonJS(function(exports, module) { +var require_json_schema_traverse = __commonJS((exports, module) => { var traverse = module.exports = function(schema, opts, cb) { if (typeof opts == "function") { cb = opts; @@ -2111,7 +2110,7 @@ var require_json_schema_traverse = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/resolve.js -var require_resolve = __commonJS(function(exports) { +var require_resolve = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined; var util_1 = require_util(); @@ -2264,7 +2263,7 @@ var require_resolve = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/validate/index.js -var require_validate = __commonJS(function(exports) { +var require_validate = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined; var boolSchema_1 = require_boolSchema(); @@ -2769,7 +2768,7 @@ var require_validate = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/validation_error.js -var require_validation_error = __commonJS(function(exports) { +var require_validation_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); class ValidationError extends Error { @@ -2783,7 +2782,7 @@ var require_validation_error = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/ref_error.js -var require_ref_error = __commonJS(function(exports) { +var require_ref_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var resolve_1 = require_resolve(); @@ -2798,7 +2797,7 @@ var require_ref_error = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/compile/index.js -var require_compile = __commonJS(function(exports) { +var require_compile = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined; var codegen_1 = require_codegen(); @@ -3019,7 +3018,7 @@ var require_compile = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/data.json -var require_data = __commonJS(function(exports, module) { +var require_data = __commonJS((exports, module) => { module.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", @@ -3036,7 +3035,7 @@ var require_data = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/lib/utils.js -var require_utils = __commonJS(function(exports, module) { +var require_utils = __commonJS((exports, module) => { var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu); var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u); var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu); @@ -3347,7 +3346,7 @@ var require_utils = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/lib/schemes.js -var require_schemes = __commonJS(function(exports, module) { +var require_schemes = __commonJS((exports, module) => { var { isUUID } = require_utils(); var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; var supportedSchemeNames = [ @@ -3521,7 +3520,7 @@ var require_schemes = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/fast-uri@3.1.5/node_modules/fast-uri/index.js -var require_fast_uri = __commonJS(function(exports, module) { +var require_fast_uri = __commonJS((exports, module) => { var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils(); var { SCHEMES, getSchemeHandler } = require_schemes(); function normalize(uri, options) { @@ -3829,7 +3828,7 @@ var require_fast_uri = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/uri.js -var require_uri = __commonJS(function(exports) { +var require_uri = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var uri = require_fast_uri(); uri.code = 'require("ajv/dist/runtime/uri").default'; @@ -3837,7 +3836,7 @@ var require_uri = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/core.js -var require_core = __commonJS(function(exports) { +var require_core = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined; var validate_1 = require_validate(); @@ -4430,7 +4429,7 @@ var require_core = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/id.js -var require_id = __commonJS(function(exports) { +var require_id = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var def = { keyword: "id", @@ -4442,7 +4441,7 @@ var require_id = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/ref.js -var require_ref = __commonJS(function(exports) { +var require_ref = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.callRef = exports.getValidate = undefined; var ref_error_1 = require_ref_error(); @@ -4561,7 +4560,7 @@ var require_ref = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/core/index.js -var require_core2 = __commonJS(function(exports) { +var require_core2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var id_1 = require_id(); var ref_1 = require_ref(); @@ -4579,7 +4578,7 @@ var require_core2 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitNumber.js -var require_limitNumber = __commonJS(function(exports) { +var require_limitNumber = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var ops = codegen_1.operators; @@ -4608,7 +4607,7 @@ var require_limitNumber = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/multipleOf.js -var require_multipleOf = __commonJS(function(exports) { +var require_multipleOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4633,7 +4632,7 @@ var require_multipleOf = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/ucs2length.js -var require_ucs2length = __commonJS(function(exports) { +var require_ucs2length = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); function ucs2length(str) { const len = str.length; @@ -4656,7 +4655,7 @@ var require_ucs2length = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitLength.js -var require_limitLength = __commonJS(function(exports) { +var require_limitLength = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4685,7 +4684,7 @@ var require_limitLength = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/pattern.js -var require_pattern = __commonJS(function(exports) { +var require_pattern = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -4710,7 +4709,7 @@ var require_pattern = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitProperties.js -var require_limitProperties = __commonJS(function(exports) { +var require_limitProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4736,7 +4735,7 @@ var require_limitProperties = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/required.js -var require_required = __commonJS(function(exports) { +var require_required = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -4815,7 +4814,7 @@ var require_required = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitItems.js -var require_limitItems = __commonJS(function(exports) { +var require_limitItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -4841,7 +4840,7 @@ var require_limitItems = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/runtime/equal.js -var require_equal = __commonJS(function(exports) { +var require_equal = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var equal = require_fast_deep_equal(); equal.code = 'require("ajv/dist/runtime/equal").default'; @@ -4849,7 +4848,7 @@ var require_equal = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js -var require_uniqueItems = __commonJS(function(exports) { +var require_uniqueItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dataType_1 = require_dataType(); var codegen_1 = require_codegen(); @@ -4913,7 +4912,7 @@ var require_uniqueItems = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/const.js -var require_const = __commonJS(function(exports) { +var require_const = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4939,7 +4938,7 @@ var require_const = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/enum.js -var require_enum = __commonJS(function(exports) { +var require_enum = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -4985,7 +4984,7 @@ var require_enum = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/index.js -var require_validation = __commonJS(function(exports) { +var require_validation = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var limitNumber_1 = require_limitNumber(); var multipleOf_1 = require_multipleOf(); @@ -5015,7 +5014,7 @@ var require_validation = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js -var require_additionalItems = __commonJS(function(exports) { +var require_additionalItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAdditionalItems = undefined; var codegen_1 = require_codegen(); @@ -5065,7 +5064,7 @@ var require_additionalItems = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items.js -var require_items = __commonJS(function(exports) { +var require_items = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTuple = undefined; var codegen_1 = require_codegen(); @@ -5119,7 +5118,7 @@ var require_items = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js -var require_prefixItems = __commonJS(function(exports) { +var require_prefixItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var items_1 = require_items(); var def = { @@ -5133,7 +5132,7 @@ var require_prefixItems = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/items2020.js -var require_items2020 = __commonJS(function(exports) { +var require_items2020 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5165,7 +5164,7 @@ var require_items2020 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/contains.js -var require_contains = __commonJS(function(exports) { +var require_contains = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5256,7 +5255,7 @@ var require_contains = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependencies.js -var require_dependencies = __commonJS(function(exports) { +var require_dependencies = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined; var codegen_1 = require_codegen(); @@ -5341,7 +5340,7 @@ var require_dependencies = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js -var require_propertyNames = __commonJS(function(exports) { +var require_propertyNames = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5381,7 +5380,7 @@ var require_propertyNames = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js -var require_additionalProperties = __commonJS(function(exports) { +var require_additionalProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -5484,7 +5483,7 @@ var require_additionalProperties = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/properties.js -var require_properties = __commonJS(function(exports) { +var require_properties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var validate_1 = require_validate(); var code_1 = require_code2(); @@ -5539,7 +5538,7 @@ var require_properties = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js -var require_patternProperties = __commonJS(function(exports) { +var require_patternProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); @@ -5610,7 +5609,7 @@ var require_patternProperties = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/not.js -var require_not = __commonJS(function(exports) { +var require_not = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5638,7 +5637,7 @@ var require_not = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/anyOf.js -var require_anyOf = __commonJS(function(exports) { +var require_anyOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var def = { @@ -5652,7 +5651,7 @@ var require_anyOf = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/oneOf.js -var require_oneOf = __commonJS(function(exports) { +var require_oneOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5707,7 +5706,7 @@ var require_oneOf = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/allOf.js -var require_allOf = __commonJS(function(exports) { +var require_allOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5731,7 +5730,7 @@ var require_allOf = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/if.js -var require_if = __commonJS(function(exports) { +var require_if = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -5797,7 +5796,7 @@ var require_if = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/thenElse.js -var require_thenElse = __commonJS(function(exports) { +var require_thenElse = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -5812,7 +5811,7 @@ var require_thenElse = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/index.js -var require_applicator = __commonJS(function(exports) { +var require_applicator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var additionalItems_1 = require_additionalItems(); var prefixItems_1 = require_prefixItems(); @@ -5855,7 +5854,7 @@ var require_applicator = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js -var require_dynamicAnchor = __commonJS(function(exports) { +var require_dynamicAnchor = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamicAnchor = undefined; var codegen_1 = require_codegen(); @@ -5887,7 +5886,7 @@ var require_dynamicAnchor = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js -var require_dynamicRef = __commonJS(function(exports) { +var require_dynamicRef = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamicRef = undefined; var codegen_1 = require_codegen(); @@ -5930,7 +5929,7 @@ var require_dynamicRef = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js -var require_recursiveAnchor = __commonJS(function(exports) { +var require_recursiveAnchor = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicAnchor_1 = require_dynamicAnchor(); var util_1 = require_util(); @@ -5948,7 +5947,7 @@ var require_recursiveAnchor = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js -var require_recursiveRef = __commonJS(function(exports) { +var require_recursiveRef = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicRef_1 = require_dynamicRef(); var def = { @@ -5960,7 +5959,7 @@ var require_recursiveRef = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/dynamic/index.js -var require_dynamic = __commonJS(function(exports) { +var require_dynamic = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dynamicAnchor_1 = require_dynamicAnchor(); var dynamicRef_1 = require_dynamicRef(); @@ -5971,7 +5970,7 @@ var require_dynamic = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js -var require_dependentRequired = __commonJS(function(exports) { +var require_dependentRequired = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dependencies_1 = require_dependencies(); var def = { @@ -5985,7 +5984,7 @@ var require_dependentRequired = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js -var require_dependentSchemas = __commonJS(function(exports) { +var require_dependentSchemas = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dependencies_1 = require_dependencies(); var def = { @@ -5998,7 +5997,7 @@ var require_dependentSchemas = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/validation/limitContains.js -var require_limitContains = __commonJS(function(exports) { +var require_limitContains = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { @@ -6015,7 +6014,7 @@ var require_limitContains = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/next.js -var require_next = __commonJS(function(exports) { +var require_next = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dependentRequired_1 = require_dependentRequired(); var dependentSchemas_1 = require_dependentSchemas(); @@ -6025,7 +6024,7 @@ var require_next = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js -var require_unevaluatedProperties = __commonJS(function(exports) { +var require_unevaluatedProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -6088,7 +6087,7 @@ var require_unevaluatedProperties = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js -var require_unevaluatedItems = __commonJS(function(exports) { +var require_unevaluatedItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); @@ -6129,7 +6128,7 @@ var require_unevaluatedItems = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/unevaluated/index.js -var require_unevaluated = __commonJS(function(exports) { +var require_unevaluated = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var unevaluatedProperties_1 = require_unevaluatedProperties(); var unevaluatedItems_1 = require_unevaluatedItems(); @@ -6138,7 +6137,7 @@ var require_unevaluated = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/format.js -var require_format = __commonJS(function(exports) { +var require_format = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error = { @@ -6225,7 +6224,7 @@ var require_format = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/format/index.js -var require_format2 = __commonJS(function(exports) { +var require_format2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var format_1 = require_format(); var format = [format_1.default]; @@ -6233,7 +6232,7 @@ var require_format2 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/metadata.js -var require_metadata = __commonJS(function(exports) { +var require_metadata = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.contentVocabulary = exports.metadataVocabulary = undefined; exports.metadataVocabulary = [ @@ -6253,7 +6252,7 @@ var require_metadata = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/draft2020.js -var require_draft2020 = __commonJS(function(exports) { +var require_draft2020 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require_core2(); var validation_1 = require_validation(); @@ -6278,18 +6277,18 @@ var require_draft2020 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/types.js -var require_types = __commonJS(function(exports) { +var require_types = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscrError = undefined; var DiscrError; - (function(DiscrError) { - DiscrError["Tag"] = "tag"; - DiscrError["Mapping"] = "mapping"; + (function(DiscrError2) { + DiscrError2["Tag"] = "tag"; + DiscrError2["Mapping"] = "mapping"; })(DiscrError || (exports.DiscrError = DiscrError = {})); }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/vocabularies/discriminator/index.js -var require_discriminator = __commonJS(function(exports) { +var require_discriminator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var types_1 = require_types(); @@ -6391,7 +6390,7 @@ var require_discriminator = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json -var require_schema = __commonJS(function(exports, module) { +var require_schema = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/schema", @@ -6449,7 +6448,7 @@ var require_schema = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json -var require_applicator2 = __commonJS(function(exports, module) { +var require_applicator2 = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/applicator", @@ -6500,7 +6499,7 @@ var require_applicator2 = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json -var require_unevaluated2 = __commonJS(function(exports, module) { +var require_unevaluated2 = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/unevaluated", @@ -6518,7 +6517,7 @@ var require_unevaluated2 = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json -var require_content = __commonJS(function(exports, module) { +var require_content = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/content", @@ -6537,7 +6536,7 @@ var require_content = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json -var require_core3 = __commonJS(function(exports, module) { +var require_core3 = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/core", @@ -6591,7 +6590,7 @@ var require_core3 = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json -var require_format_annotation = __commonJS(function(exports, module) { +var require_format_annotation = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/format-annotation", @@ -6608,7 +6607,7 @@ var require_format_annotation = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json -var require_meta_data = __commonJS(function(exports, module) { +var require_meta_data = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/meta-data", @@ -6647,7 +6646,7 @@ var require_meta_data = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json -var require_validation2 = __commonJS(function(exports, module) { +var require_validation2 = __commonJS((exports, module) => { module.exports = { $schema: "https://json-schema.org/draft/2020-12/schema", $id: "https://json-schema.org/draft/2020-12/meta/validation", @@ -6740,7 +6739,7 @@ var require_validation2 = __commonJS(function(exports, module) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/refs/json-schema-2020-12/index.js -var require_json_schema_2020_12 = __commonJS(function(exports) { +var require_json_schema_2020_12 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var metaSchema = require_schema(); var applicator = require_applicator2(); @@ -6771,7 +6770,7 @@ var require_json_schema_2020_12 = __commonJS(function(exports) { }); // ../../node_modules/.bun/ajv@8.17.1/node_modules/ajv/dist/2020.js -var require__2020 = __commonJS(function(exports, module) { +var require_2020 = __commonJS((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = undefined; var core_1 = require_core(); @@ -6944,7 +6943,7 @@ import { dirname, isAbsolute, join as join2 } from "path"; import { createConnection } from "net"; // ../protocol-ts/src/validate.ts -var import__2020 = __toESM(require__2020(), 1); +var import__2020 = __toESM(require_2020(), 1); // ../protocol-ts/schema/crew.schema.json var crew_schema_default = { $schema: "https://json-schema.org/draft/2020-12/schema", @@ -14344,7 +14343,7 @@ function registerMonitor(pi, ctx) { extCtx.ui.setWidget(WIDGET_KEY, content, { placement: "aboveEditor" }); pi.appendEntry(MONITOR_ENTRY_TYPE, { sequence: Number(state.lastSequence) }); } - async function connect(extCtx, resolveClient = ctx.getClient) { + async function connect(extCtx, resolveClient2 = ctx.getClient) { if (connecting) { return; } @@ -14365,7 +14364,7 @@ function registerMonitor(pi, ctx) { error: err instanceof Error ? err.message : String(err) }); } - const client = await resolveClient(extCtx); + const client = await resolveClient2(extCtx); controller.start(client, fromSequence, () => refresh(extCtx)); subscribedClient = client; reconnectDelayMs = RECONNECT_INITIAL_DELAY_MS;