@almadar/core 9.10.3 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builders.d.ts +3 -3
- package/dist/builders.js.map +1 -1
- package/dist/{compose-behaviors-Dr2YbJmP.d.ts → compose-behaviors-DAYTsIWZ.d.ts} +1 -1
- package/dist/factory/index.d.ts +3 -3
- package/dist/index.d.ts +8 -8
- package/dist/index.js +41 -5
- package/dist/index.js.map +1 -1
- package/dist/{schema-CMrW_N4k.d.ts → schema-BetbBFJb.d.ts} +181 -181
- package/dist/state-machine/index.d.ts +20 -4
- package/dist/state-machine/index.js +41 -5
- package/dist/state-machine/index.js.map +1 -1
- package/dist/{trait-C61Wxi3a.d.ts → trait-CjyEE6Di.d.ts} +30 -5
- package/dist/types/index.d.ts +7 -74
- package/dist/types/index.js.map +1 -1
- package/dist/{types-CQF32lJA.d.ts → types-KzrHszR_.d.ts} +1 -1
- package/package.json +1 -1
|
@@ -244,6 +244,18 @@ declare function extractPayloadFieldRef(ref: unknown): string | null;
|
|
|
244
244
|
* buildGuardPayloads(['and', ['not-nil', '@payload.id'], ['eq', '@payload.status', 'ready']]);
|
|
245
245
|
* // Returns: { pass: { id: 'mock-test-value', status: 'ready' }, fail: { id: null } }
|
|
246
246
|
*/
|
|
247
|
+
/**
|
|
248
|
+
* Evaluate a guard that is fully constant (no `@payload`/`@entity`/`@config`
|
|
249
|
+
* bindings — e.g. after molecule/organism inlining folds `@config.mode` to a
|
|
250
|
+
* literal). Returns the constant truth value, or `null` when the guard depends
|
|
251
|
+
* on a binding (so a payload must be synthesized). This lets callers (a) emit
|
|
252
|
+
* an empty payload for a constant guard (no field to satisfy) and (b) skip the
|
|
253
|
+
* meaningless variant: an always-true guard has no fail case, an always-false
|
|
254
|
+
* guard has no pass case. Without it, `(or (= "create" "create") @payload.row)`
|
|
255
|
+
* (create-mode modal OPEN) was synthesized with a spurious `row`, which the
|
|
256
|
+
* runtime read as edit-mode and rejected.
|
|
257
|
+
*/
|
|
258
|
+
declare function constTruth(guard: unknown): boolean | null;
|
|
247
259
|
declare function buildGuardPayloads(guard: unknown): GuardPayload;
|
|
248
260
|
|
|
249
261
|
/**
|
|
@@ -302,9 +314,13 @@ declare function buildReplayPaths(transitions: ReplayTransition[], initialState:
|
|
|
302
314
|
/**
|
|
303
315
|
* Edge-Covering Walk Algorithm
|
|
304
316
|
*
|
|
305
|
-
* Computes an ordered sequence of events (WalkStep[]) that
|
|
306
|
-
* transition (edge) in a state machine graph
|
|
307
|
-
* 100%
|
|
317
|
+
* Computes an ordered sequence of events (WalkStep[]) that attempts to cover
|
|
318
|
+
* every transition (edge) in a state machine graph. This is a greedy chained
|
|
319
|
+
* walk: it does NOT guarantee 100% coverage. With no reset concept it can
|
|
320
|
+
* strand on absorbing states (no outgoing edges and no path back to uncovered
|
|
321
|
+
* edges), and a guard-fail misprediction desyncs the chained walk so later
|
|
322
|
+
* steps fire from the wrong state. Superseded by the hermetic per-frame walk
|
|
323
|
+
* in @almadar-io/verify, which re-seeds each frame independently.
|
|
308
324
|
*
|
|
309
325
|
* Algorithm:
|
|
310
326
|
* 1. Build adjacency list and edge universe (guarded transitions produce two edges)
|
|
@@ -328,4 +344,4 @@ declare function buildReplayPaths(transitions: ReplayTransition[], initialState:
|
|
|
328
344
|
*/
|
|
329
345
|
declare function buildEdgeCoveringWalk(transitions: EdgeWalkTransition[], initialState: string): WalkStep[];
|
|
330
346
|
|
|
331
|
-
export { type BFSNode, type BFSPathNode, type EdgeWalkTransition, type GraphTransition, type GuardPayload, type PayloadFieldSchema, type ReplayStep, type ReplayTransition, type StateEdge, type WalkStep, buildEdgeCoveringWalk, buildGuardPayloads, buildReplayPaths, buildStateGraph, collectReachableStates, extractPayloadFieldRef, walkStatePairs };
|
|
347
|
+
export { type BFSNode, type BFSPathNode, type EdgeWalkTransition, type GraphTransition, type GuardPayload, type PayloadFieldSchema, type ReplayStep, type ReplayTransition, type StateEdge, type WalkStep, buildEdgeCoveringWalk, buildGuardPayloads, buildReplayPaths, buildStateGraph, collectReachableStates, constTruth, extractPayloadFieldRef, walkStatePairs };
|
|
@@ -59,7 +59,43 @@ function extractPayloadFieldRef(ref) {
|
|
|
59
59
|
const match = ref.match(/^@payload\.([A-Za-z0-9_]+)/);
|
|
60
60
|
return match ? match[1] : null;
|
|
61
61
|
}
|
|
62
|
+
function constTruth(guard) {
|
|
63
|
+
if (typeof guard === "boolean") return guard;
|
|
64
|
+
if (typeof guard === "string") {
|
|
65
|
+
if (guard.startsWith("@")) return null;
|
|
66
|
+
return guard.length > 0;
|
|
67
|
+
}
|
|
68
|
+
if (!Array.isArray(guard) || guard.length === 0) return null;
|
|
69
|
+
const op = String(guard[0]);
|
|
70
|
+
const isLiteral = (x) => x === null || typeof x === "number" || typeof x === "boolean" || typeof x === "string" && !x.startsWith("@");
|
|
71
|
+
if (op === "=" || op === "==" || op === "eq") {
|
|
72
|
+
return isLiteral(guard[1]) && isLiteral(guard[2]) ? guard[1] === guard[2] : null;
|
|
73
|
+
}
|
|
74
|
+
if (op === "!=" || op === "ne" || op === "not-eq" || op === "neq") {
|
|
75
|
+
return isLiteral(guard[1]) && isLiteral(guard[2]) ? guard[1] !== guard[2] : null;
|
|
76
|
+
}
|
|
77
|
+
if (op === "not") {
|
|
78
|
+
const inner = constTruth(guard[1]);
|
|
79
|
+
return inner === null ? null : !inner;
|
|
80
|
+
}
|
|
81
|
+
if (op === "or") {
|
|
82
|
+
const subs = guard.slice(1).map(constTruth);
|
|
83
|
+
if (subs.some((s) => s === true)) return true;
|
|
84
|
+
if (subs.every((s) => s === false)) return false;
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
if (op === "and") {
|
|
88
|
+
const subs = guard.slice(1).map(constTruth);
|
|
89
|
+
if (subs.some((s) => s === false)) return false;
|
|
90
|
+
if (subs.every((s) => s === true)) return true;
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
62
95
|
function buildGuardPayloads(guard) {
|
|
96
|
+
if (constTruth(guard) !== null) {
|
|
97
|
+
return { pass: {}, fail: {} };
|
|
98
|
+
}
|
|
63
99
|
if (typeof guard === "string") {
|
|
64
100
|
const field = extractPayloadFieldRef(guard);
|
|
65
101
|
if (field) return { pass: { [field]: { id: "mock-test-id", name: "mock-test-name" } }, fail: { [field]: null } };
|
|
@@ -113,11 +149,11 @@ function buildGuardPayloads(guard) {
|
|
|
113
149
|
if (field) return { pass: { [field]: n }, fail: { [field]: n + 1 } };
|
|
114
150
|
}
|
|
115
151
|
if (op === "and") {
|
|
116
|
-
const subs = guard.slice(1)
|
|
152
|
+
const subs = guard.slice(1);
|
|
117
153
|
if (subs.length >= 2) {
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
return { pass
|
|
154
|
+
const built = subs.map(buildGuardPayloads);
|
|
155
|
+
const pass = built.reduce((acc, b) => ({ ...acc, ...b.pass }), {});
|
|
156
|
+
return { pass, fail: built[0].fail };
|
|
121
157
|
}
|
|
122
158
|
if (subs.length === 1) return buildGuardPayloads(subs[0]);
|
|
123
159
|
}
|
|
@@ -349,6 +385,6 @@ function buildPayloadForEdge(transition, guardCase) {
|
|
|
349
385
|
return {};
|
|
350
386
|
}
|
|
351
387
|
|
|
352
|
-
export { buildEdgeCoveringWalk, buildGuardPayloads, buildReplayPaths, buildStateGraph, collectReachableStates, extractPayloadFieldRef, walkStatePairs };
|
|
388
|
+
export { buildEdgeCoveringWalk, buildGuardPayloads, buildReplayPaths, buildStateGraph, collectReachableStates, constTruth, extractPayloadFieldRef, walkStatePairs };
|
|
353
389
|
//# sourceMappingURL=index.js.map
|
|
354
390
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/state-machine/graph.ts","../../src/state-machine/bfs.ts","../../src/state-machine/guard-payloads.ts","../../src/state-machine/replay-paths.ts","../../src/state-machine/edge-walk.ts"],"names":[],"mappings":";AA2BO,SAAS,gBACd,WAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAyB;AAC3C,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAK;AACpB,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,EAAE,CAAA;AAC5C,IAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CAAG,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;ACRO,SAAS,sBAAA,CACd,WAAA,EACA,YAAA,EACA,QAAA,GAAW,CAAA,EACE;AACb,EAAA,MAAM,KAAA,GAAQ,gBAAgB,WAAW,CAAA;AACzC,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAAY,CAAC,YAAY,CAAC,CAAA;AAC9C,EAAA,MAAM,QAAmB,CAAC,EAAE,OAAO,YAAA,EAAc,KAAA,EAAO,GAAG,CAAA;AAE3D,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAM;AAC5B,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAE/B,IAAA,MAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,KAAK,EAAC;AAC3C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAE,CAAA;AACnB,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,CAAK,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAsBA,eAAsB,cAAA,CACpB,WAAA,EACA,YAAA,EACA,QAAA,EACA,OAAA,EAC6D;AAC7D,EAAA,MAAM,KAAA,GAAQ,gBAAgB,WAAW,CAAA;AACzC,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,MAAM,QAAmB,CAAC,EAAE,OAAO,YAAA,EAAc,KAAA,EAAO,GAAG,CAAA;AAC3D,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAM;AAC5B,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAE/B,IAAA,MAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,KAAK,EAAC;AAC3C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAU,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA;AAC9C,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,EAAG;AAC/B,MAAA,YAAA,CAAa,IAAI,OAAO,CAAA;AAExB,MAAA,MAAM,gBAAgB,MAAM,OAAA,CAAQ,QAAQ,KAAA,EAAO,IAAA,EAAM,QAAQ,KAAK,CAAA;AACtE,MAAA,WAAA,EAAA;AAEA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,YAAA,GAAe,CAAC,GAAG,YAAY,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,CAAA,EAAG,IAAA,CAAK,EAAE,GAAG,CAAC,CAAA;AAC9E,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,CAAK,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG,CAAA;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,cAAc,WAAA,EAAY;AACrC;;;ACjFO,SAAS,uBAAuB,GAAA,EAA6B;AAClE,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,4BAA4B,CAAA;AACpD,EAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC5B;AA8BO,SAAS,mBAAmB,KAAA,EAA8B;AAQ/D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,uBAAuB,KAAK,CAAA;AAC1C,IAAA,IAAI,KAAA,SAAc,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,EAAE,EAAA,EAAI,gBAAgB,IAAA,EAAM,gBAAA,IAAmB,EAAG,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,IAAA,EAAK,EAAE;AAAA,EACjH;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,IAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,EAAC,EAAE;AAAA,EAC9B;AAEA,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAE1B,EAAA,IAAI,EAAA,KAAO,SAAA,IAAa,EAAA,KAAO,SAAA,EAAW;AACxC,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,iBAAA,EAAkB,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,MAAK,EAAE;AAAA,EACpF;AAEA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,KAAA,EAAO,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,iBAAA,EAAkB,EAAE;AAAA,EACrE;AAEA,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,IAAA,IAAQ,OAAO,GAAA,EAAK;AAC5C,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,IAAI,KAAA,IAAS,QAAQ,MAAA,EAAW;AAC9B,MAAA,MAAM,OAAA,GACJ,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,CAAA,GAC9B,OAAO,GAAA,KAAQ,QAAA,GAAW,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GACpC,IAAA;AACJ,MAAA,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,GAAA,EAAI,EAAG,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,SAAQ,EAAE;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,IAAI,EAAA,KAAO,QAAA,IAAY,EAAA,KAAO,IAAA,IAAQ,OAAO,KAAA,EAAO;AAClD,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,IAAI,KAAA,IAAS,QAAQ,MAAA,EAAW;AAC9B,MAAA,MAAM,OAAA,GACJ,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,CAAA,GAC9B,OAAO,GAAA,KAAQ,QAAA,GAAW,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GACpC,OAAA;AACJ,MAAA,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,KAAI,EAAE;AAAA,IAC9D;AAAA,EACF;AAEA,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,GAAA,EAAK;AAC7B,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACpD,IAAA,IAAI,OAAO,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,CAAA,EAAE,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,GAAE,EAAE;AAAA,EACzE;AAEA,EAAA,IAAI,EAAA,KAAO,KAAA,IAAS,EAAA,KAAO,IAAA,EAAM;AAC/B,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACpD,IAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,CAAA,EAAE,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,GAAE,EAAE;AAAA,EACrE;AAEA,EAAA,IAAI,EAAA,KAAO,IAAA,IAAQ,EAAA,KAAO,GAAA,EAAK;AAC7B,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACpD,IAAA,IAAI,OAAO,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,CAAA,EAAE,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,GAAE,EAAE;AAAA,EACzE;AAEA,EAAA,IAAI,EAAA,KAAO,KAAA,IAAS,EAAA,KAAO,IAAA,EAAM;AAC/B,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAM,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACpD,IAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,CAAA,EAAE,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,CAAA,GAAI,GAAE,EAAE;AAAA,EACrE;AAEA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,OAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAgB,MAAA,CAAO,MAAM,OAAO,CAAA;AAC/D,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AACrC,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AACrC,MAAA,OAAO,EAAE,IAAA,EAAM,EAAE,GAAG,EAAA,CAAG,IAAA,EAAM,GAAG,EAAA,CAAG,IAAA,EAAK,EAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAK;AAAA,IAC3D;AACA,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA,SAAU,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM;AAIf,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AACrC,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAKrC,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,EAAA,CAAG,IAAI,EAAE,MAAA,GAAS,CAAA,GAAI,EAAA,CAAG,IAAA,GAAO,EAAA,CAAG,IAAA;AACpE,MAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,EAAE,GAAG,EAAA,CAAG,IAAA,EAAM,GAAG,EAAA,CAAG,IAAA,EAAK,EAAE;AAAA,IAChE;AACA,IAAA,IAAI,KAAK,MAAA,KAAW,CAAA,SAAU,kBAAA,CAAmB,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAC,CAAA;AACzC,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,EAC9C;AAGA,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,mBAAA,EAAoB,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,mBAAkB,EAAE;AAAA,EACnG;AAEA,EAAA,IAAI,OAAO,uBAAA,EAAyB;AAClC,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,OAAO,OAAO,EAAE,IAAA,EAAM,EAAE,CAAC,KAAK,GAAG,aAAA,EAAc,EAAG,MAAM,EAAE,CAAC,KAAK,GAAG,mBAAkB,EAAE;AAAA,EAC7F;AAKA,EAAA,IAAI,EAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,EAAC,EAAE;AAAA,EAC9B;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,EAAC,EAAE;AAC9B;;;AC/KA,IAAM,qBAAA,uBAA4B,GAAA,CAAI,CAAC,QAAQ,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAC,CAAA;AA0C5D,SAAS,gBAAA,CACd,WAAA,EACA,YAAA,EACA,QAAA,GAAW,CAAA,EACgB;AAG3B,EAAA,MAAM,KAAA,GAAqB,CAAC,EAAE,KAAA,EAAO,cAAc,IAAA,EAAM,IAAI,CAAA;AAC7D,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAA0B;AAClD,EAAA,WAAA,CAAY,GAAA,CAAI,YAAA,EAAc,EAAE,CAAA;AAEhC,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,KAAA,EAAM;AACpC,IAAA,IAAI,IAAA,CAAK,UAAU,QAAA,EAAU;AAE7B,IAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAAA,MAC3B,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAA,IAAS,EAAE,KAAA,KAAU;AAAA,KACzC;AAEA,IAAA,KAAA,MAAW,cAAc,QAAA,EAAU;AACjC,MAAA,IAAI,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AAEpC,MAAA,MAAM,YAAA,GAAe,WAAW,aAAA,CAAc,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,gBAAgB,IAAI,CAAA;AAClF,MAAA,MAAM,mBAAA,GACJ,UAAA,CAAW,QAAA,IACX,UAAA,CAAW,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,qBAAA,CAAsB,GAAA,CAAI,CAAC,CAAC,CAAA;AAEnE,MAAA,MAAM,IAAA,GAAmB;AAAA,QACvB,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,SAAA,EAAW,KAAA;AAAA,QACX,SAAS,UAAA,CAAW,EAAA;AAAA,QACpB,IAAA,EAAM,cAAc,IAAA,IAAQ,MAAA;AAAA,QAC5B,eAAA,EAAiB,cAAc,WAAA,IAAe,MAAA;AAAA,QAC9C,eAAA,EAAiB,mBAAA;AAAA,QACjB,eAAe,UAAA,CAAW,aAAA,CAAc,MAAA,GAAS,CAAA,GAAI,WAAW,aAAA,GAAgB;AAAA,OAClF;AAEA,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA;AAC9B,MAAA,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,OAAO,CAAA;AACtC,MAAA,KAAA,CAAM,KAAK,EAAE,KAAA,EAAO,WAAW,EAAA,EAAI,IAAA,EAAM,SAAS,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;;;ACtEO,SAAS,qBAAA,CACd,aACA,YAAA,EACY;AAMZ,EAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAAA,IAC3B,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,GAAA,IAAO,EAAE,CAAA,CAAE,KAAA,KAAU,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,YAAA;AAAA,GAC9D;AAEA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAkF;AACpG,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAElC,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,SAAA,CAAU,GAAA,CAAI,EAAE,IAAI,CAAA;AACpB,IAAA,SAAA,CAAU,GAAA,CAAI,EAAE,EAAE,CAAA;AAClB,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,EAAE,CAAA;AAC5C,IAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CAAG,KAAK,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,UAAA,EAAY,GAAG,CAAA;AAAA,EACrE;AAGA,EAAA,SAAA,CAAU,IAAI,YAAY,CAAA;AAG1B,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAmF;AAExG,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,EAAE,QAAA,EAAU;AACd,MAAA,MAAM,OAAA,GAAU,GAAG,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,MAAA,CAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,GAAG,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,MAAA,CAAA;AAC7C,MAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AACrB,MAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AACrB,MAAA,QAAA,CAAS,IAAI,OAAA,EAAS,EAAE,YAAY,CAAA,EAAG,SAAA,EAAW,QAAQ,CAAA;AAC1D,MAAA,QAAA,CAAS,IAAI,OAAA,EAAS,EAAE,YAAY,CAAA,EAAG,SAAA,EAAW,QAAQ,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,MAAM,GAAA,GAAM,GAAG,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAA;AACzC,MAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,MAAA,QAAA,CAAS,IAAI,GAAA,EAAK,EAAE,YAAY,CAAA,EAAG,SAAA,EAAW,MAAM,CAAA;AAAA,IACtD;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG,OAAO,EAAC;AAGlC,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAA+D;AACzF,EAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,IAAA,aAAA,CAAc,GAAA,CAAI,KAAA,EAAO,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,EACzD;AAGA,EAAA,MAAM,OAAmB,EAAC;AAC1B,EAAA,IAAI,YAAA,GAAe,YAAA;AACnB,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,IAAA,GAAO,CAAA;AACxD,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,OAAO,SAAA,CAAU,IAAA,GAAO,CAAA,IAAK,UAAA,GAAa,aAAA,EAAe;AACvD,IAAA,UAAA,EAAA;AAGA,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,YAAA,EAAc,KAAA,EAAO,SAAS,CAAA;AAElE,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AAEvB,MAAA,MAAM,IAAA,GAAO,SAAS,CAAC,CAAA;AACvB,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,IAAA,CAAK,UAAA,EAAY,KAAK,SAAS,CAAA;AAEnE,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,KAAK,UAAA,CAAW,KAAA;AAAA,QACvB,EAAA,EAAI,KAAK,UAAA,CAAW,EAAA;AAAA,QACpB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,OAAA;AAAA,QACA,eAAA,EAAiB;AAAA,OAClB,CAAA;AAED,MAAA,SAAA,CAAU,MAAA,CAAO,KAAK,GAAG,CAAA;AAGzB,MAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAQ;AAC7B,QAAA,YAAA,GAAe,KAAK,UAAA,CAAW,EAAA;AAAA,MACjC;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,YAAA,EAAc,KAAA,EAAO,WAAW,aAAa,CAAA;AAEtF,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,WAAW,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA,EAAG,IAAI,MAAM,CAAA;AAC5D,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAExC,MAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,QAAA,IAAA,CAAK,IAAA,CAAK;AAAA,UACR,IAAA,EAAM,YAAA;AAAA,UACN,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,SAAA,EAAW,IAAA;AAAA,UACX,SAAS,EAAC;AAAA,UACV,eAAA,EAAiB;AAAA,SAClB,CAAA;AACD,QAAA,YAAA,GAAe,IAAA,CAAK,EAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAUA,SAAS,gBAAA,CACP,QACA,KAAA,EACmD;AACnD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAkD;AACpE,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAAY,CAAC,MAAM,CAAC,CAAA;AACxC,EAAA,MAAM,KAAA,GAA8E;AAAA,IAClF,EAAE,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,EAAC;AAAE,GAC5B;AAEA,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,KAAA,EAAM;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,KAAK,EAAC;AAEnC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAE,CAAA;AACnB,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AAC5D,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAC1B,MAAA,KAAA,CAAM,KAAK,EAAE,KAAA,EAAO,KAAK,EAAA,EAAI,IAAA,EAAM,SAAS,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,kBAAA,CACP,KAAA,EACA,KAAA,EACA,SAAA,EAC2F;AAC3F,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,KAAK,EAAC;AACnC,EAAA,MAAM,SAAoG,EAAC;AAE3G,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAA,EAAU;AAC5B,MAAA,MAAM,OAAA,GAAU,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,MAAA,CAAA;AAClD,MAAA,MAAM,OAAA,GAAU,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,MAAA,CAAA;AAElD,MAAA,IAAI,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1B,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAA,EAAK,OAAA,EAAS,YAAY,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,CAAA;AAAA,MAC9E;AACA,MAAA,IAAI,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1B,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAA,EAAK,OAAA,EAAS,YAAY,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,CAAA;AAAA,MAC9E;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,GAAA,GAAM,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,EAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AAC9C,MAAA,IAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAA,EAAK,UAAA,EAAY,KAAK,UAAA,EAAY,SAAA,EAAW,MAAM,CAAA;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,yBAAA,CACP,YAAA,EACA,KAAA,EACA,SAAA,EACA,aAAA,EACe;AAEf,EAAA,MAAM,mBAAA,uBAA0B,GAAA,EAAY;AAC5C,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAE3B,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClC,IAAA,mBAAA,CAAoB,IAAI,SAAS,CAAA;AAAA,EACnC;AAGA,EAAA,IAAI,mBAAA,CAAoB,GAAA,CAAI,YAAY,CAAA,EAAG,OAAO,YAAA;AAGlD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA;AAC5C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,WAAA,GAAc,QAAA;AAElB,EAAA,KAAA,MAAW,UAAU,mBAAA,EAAqB;AACxC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC7B,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,WAAA,EAAa;AACrC,MAAA,WAAA,GAAc,IAAA,CAAK,MAAA;AACnB,MAAA,YAAA,GAAe,MAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;AAQA,SAAS,mBAAA,CACP,YACA,SAAA,EACc;AAEd,EAAA,IAAI,UAAA,CAAW,QAAA,IAAY,UAAA,CAAW,KAAA,IAAS,SAAA,EAAW;AACxD,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,UAAA,CAAW,KAAK,CAAA;AACpD,IAAA,OAAO,SAAA,KAAc,MAAA,GAAS,QAAA,CAAS,IAAA,GAAO,QAAA,CAAS,IAAA;AAAA,EACzD;AAIA,EAAA,IAAI,UAAA,CAAW,aAAA,IAAiB,UAAA,CAAW,aAAA,CAAc,SAAS,CAAA,EAAG;AACnE,IAAA,MAAM,UAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,KAAA,IAAS,WAAW,aAAA,EAAe;AAE5C,MAAA,IAAI,KAAA,CAAM,cAAc,MAAA,EAAW;AACjC,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAM,SAAA;AAAA,MAC9B,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA,KAAA,EAAQ,MAAM,IAAI,CAAA,CAAA;AAAA,MAC1C,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA;AAAA,MACxB,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,SAAA,EAAW;AACnC,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,MACxB,WAAW,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,SAAS,KAAA,EAAO;AAQ1D,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,EAAC;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,GAAI,CAAA,KAAA,EAAQ,MAAM,IAAI,CAAA,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAC;AACV","file":"index.js","sourcesContent":["/**\n * State Graph Construction\n *\n * Build an adjacency list from state machine transitions.\n * Extracted from orbital-verify-unified/src/analyze.ts.\n *\n * @packageDocumentation\n */\n\nimport type { GraphTransition, StateEdge } from './types.js';\n\n/**\n * Builds an adjacency list from state machine transitions.\n * \n * Constructs a state transition graph where each state maps to an array\n * of outgoing edges (events and target states). Wildcard transitions\n * (from === '*') are excluded since they don't represent fixed edges.\n * Used as the foundation for state machine analysis, traversal, and verification.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @returns {Map<string, StateEdge[]>} State transition graph\n * \n * @example\n * const graph = buildStateGraph(transitions);\n * const edgesFromInitial = graph.get('initial'); // Array of outgoing edges\n * console.log(`Initial state has ${edgesFromInitial?.length} transitions`);\n */\nexport function buildStateGraph(\n transitions: GraphTransition[]\n): Map<string, StateEdge[]> {\n const graph = new Map<string, StateEdge[]>();\n for (const t of transitions) {\n if (t.from === '*') continue;\n if (!graph.has(t.from)) graph.set(t.from, []);\n graph.get(t.from)!.push({ event: t.event, to: t.to });\n }\n return graph;\n}\n","/**\n * BFS Reachability Algorithms\n *\n * Breadth-first search over state machine graphs.\n * Extracted from orbital-verify-unified/src/analyze.ts and phase3-server.ts.\n *\n * @packageDocumentation\n */\n\nimport type { BFSNode, StateEdge } from './types.js';\nimport { buildStateGraph } from './graph.js';\nimport type { GraphTransition } from './types.js';\n\n/**\n * Collects all reachable states from an initial state using breadth-first search.\n * \n * Performs BFS traversal of the state machine to find all states reachable\n * from the initial state, up to the specified maximum depth. Used for\n * state machine analysis, verification, and test coverage assessment.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @param {string} initialState - Starting state name\n * @param {number} [maxDepth=5] - Maximum search depth\n * @returns {Set<string>} Set of reachable state names\n * \n * @example\n * const reachable = collectReachableStates(transitions, 'initial', 10);\n * console.log('Reachable states:', Array.from(reachable));\n */\nexport function collectReachableStates(\n transitions: GraphTransition[],\n initialState: string,\n maxDepth = 5\n): Set<string> {\n const graph = buildStateGraph(transitions);\n const visited = new Set<string>([initialState]);\n const queue: BFSNode[] = [{ state: initialState, depth: 0 }];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDepth) continue;\n\n const edges = graph.get(current.state) ?? [];\n for (const edge of edges) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push({ state: edge.to, depth: current.depth + 1 });\n }\n }\n }\n\n return visited;\n}\n\n/**\n * Walks all reachable (state, event) pairs using BFS and invokes callback for each.\n * \n * Traverses the state machine using breadth-first search and calls the visitor\n * function for each (state, edge) pair encountered. Used by server verification\n * to test transitions by POSTing to endpoints and checking responses.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @param {string} initialState - Starting state name\n * @param {number} maxDepth - Maximum BFS depth\n * @param {(state: string, edge: StateEdge, depth: number) => Promise<boolean>} visitor - Callback for each pair\n * @returns {Promise<{ visitedPairs: Set<string>; walkedEdges: number }>} Traversal statistics\n * \n * @example\n * const result = await walkStatePairs(transitions, 'initial', 5, async (state, edge) => {\n * console.log(`Transition: ${state} --${edge.event}--> ${edge.to}`);\n * return true; // Continue exploration\n * });\n * console.log(`Visited ${result.visitedPairs.size} state-event pairs`);\n */\nexport async function walkStatePairs(\n transitions: GraphTransition[],\n initialState: string,\n maxDepth: number,\n visitor: (state: string, edge: StateEdge, depth: number) => Promise<boolean>\n): Promise<{ visitedPairs: Set<string>; walkedEdges: number }> {\n const graph = buildStateGraph(transitions);\n const visitedPairs = new Set<string>();\n const queue: BFSNode[] = [{ state: initialState, depth: 0 }];\n let walkedEdges = 0;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDepth) continue;\n\n const edges = graph.get(current.state) ?? [];\n for (const edge of edges) {\n const pairKey = `${current.state}:${edge.event}`;\n if (visitedPairs.has(pairKey)) continue;\n visitedPairs.add(pairKey);\n\n const shouldEnqueue = await visitor(current.state, edge, current.depth);\n walkedEdges++;\n\n if (shouldEnqueue) {\n const stateVisited = [...visitedPairs].some((k) => k.startsWith(`${edge.to}:`));\n if (!stateVisited) {\n queue.push({ state: edge.to, depth: current.depth + 1 });\n }\n }\n }\n }\n\n return { visitedPairs, walkedEdges };\n}\n","/**\n * Guard Payload Builder\n *\n * Derive pass and fail payloads from guard s-expressions.\n * Extracted from orbital-verify-unified/src/analyze.ts.\n *\n * @packageDocumentation\n */\n\nimport type { GuardPayload } from './types.js';\n\n/**\n * Extracts the first segment of a payload field reference.\n * \n * Parses binding references in the format \"@payload.field\" and extracts\n * the first field name segment. Used for identifying payload fields in\n * guard conditions for test data generation.\n * \n * @param {unknown} ref - Binding reference to extract from\n * @returns {string | null} First field segment or null for non-payload references\n * \n * @example\n * extractPayloadFieldRef('@payload.item'); // returns 'item'\n * extractPayloadFieldRef('@payload.data.weight'); // returns 'data'\n * extractPayloadFieldRef('@entity.id'); // returns null\n * extractPayloadFieldRef('@user.name'); // returns null\n */\nexport function extractPayloadFieldRef(ref: unknown): string | null {\n if (typeof ref !== 'string') return null;\n const match = ref.match(/^@payload\\.([A-Za-z0-9_]+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Builds test payloads that satisfy or violate guard conditions.\n * \n * Generates pass/fail test data for guard s-expressions used in state machine\n * transitions. Pass payloads satisfy the guard condition (allowing transition),\n * fail payloads violate it (blocking transition). Used for automated testing\n * and validation of state machine behavior.\n * \n * Supports operators: not-nil, nil, eq, not-eq, gt, gte, lt, lte, and, or, not\n * \n * @param {unknown} guard - Guard s-expression to analyze\n * @returns {GuardPayload} Object with pass and fail payloads\n * \n * @example\n * // Guard: ['not-nil', '@payload.completed']\n * buildGuardPayloads(['not-nil', '@payload.completed']);\n * // Returns: { pass: { completed: 'mock-test-value' }, fail: { completed: null } }\n * \n * @example\n * // Guard: ['eq', '@payload.status', 'active']\n * buildGuardPayloads(['eq', '@payload.status', 'active']);\n * // Returns: { pass: { status: 'active' }, fail: { status: 'not-active' } }\n * \n * @example\n * // Guard: ['and', ['not-nil', '@payload.id'], ['eq', '@payload.status', 'ready']]\n * buildGuardPayloads(['and', ['not-nil', '@payload.id'], ['eq', '@payload.status', 'ready']]);\n * // Returns: { pass: { id: 'mock-test-value', status: 'ready' }, fail: { id: null } }\n */\nexport function buildGuardPayloads(guard: unknown): GuardPayload {\n // Bare-binding existence guard: e.g. `when @payload.row` lowers to\n // the string `\"@payload.row\"`. The transition fires iff that field is\n // truthy. Synthesize pass with a truthy mock and fail with null so\n // the verifier can drive both branches. Without this, std-confirmation\n // and std-modal's existence guards (REQUEST/EDIT requiring @payload.row)\n // get empty payloads in both cases — the pass case then fails the\n // server-side guard and the portal observer flags \"slot not mounted\".\n if (typeof guard === 'string') {\n const field = extractPayloadFieldRef(guard);\n if (field) return { pass: { [field]: { id: 'mock-test-id', name: 'mock-test-name' } }, fail: { [field]: null } };\n }\n\n if (!Array.isArray(guard) || guard.length === 0) {\n return { pass: {}, fail: {} };\n }\n\n const op = String(guard[0]);\n\n if (op === 'not-nil' || op === 'not_nil') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mock-test-value' }, fail: { [field]: null } };\n }\n\n if (op === 'nil') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: {}, fail: { [field]: 'mock-test-value' } };\n }\n\n if (op === 'eq' || op === '==' || op === '=') {\n const field = extractPayloadFieldRef(guard[1]);\n const val = guard[2];\n if (field && val !== undefined) {\n const failVal =\n typeof val === 'number' ? val + 1\n : typeof val === 'string' ? `not-${val}`\n : null;\n return { pass: { [field]: val }, fail: { [field]: failVal } };\n }\n }\n\n if (op === 'not-eq' || op === '!=' || op === 'neq') {\n const field = extractPayloadFieldRef(guard[1]);\n const val = guard[2];\n if (field && val !== undefined) {\n const passVal =\n typeof val === 'number' ? val + 1\n : typeof val === 'string' ? `not-${val}`\n : 'other';\n return { pass: { [field]: passVal }, fail: { [field]: val } };\n }\n }\n\n if (op === 'gt' || op === '>') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n + 1 }, fail: { [field]: n - 1 } };\n }\n\n if (op === 'gte' || op === '>=') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n }, fail: { [field]: n - 1 } };\n }\n\n if (op === 'lt' || op === '<') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n - 1 }, fail: { [field]: n + 1 } };\n }\n\n if (op === 'lte' || op === '<=') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n }, fail: { [field]: n + 1 } };\n }\n\n if (op === 'and') {\n const subs = (guard.slice(1) as unknown[]).filter(Array.isArray);\n if (subs.length >= 2) {\n const s1 = buildGuardPayloads(subs[0]);\n const s2 = buildGuardPayloads(subs[1]);\n return { pass: { ...s1.pass, ...s2.pass }, fail: s1.fail };\n }\n if (subs.length === 1) return buildGuardPayloads(subs[0]);\n }\n\n if (op === 'or') {\n // Accept BOTH array sub-guards and bare-binding string sub-guards\n // (post-substitution mode-aware guards like\n // `(or (= \"edit\" \"create\") \"@payload.row\")` mix array + string children).\n const subs = guard.slice(1) as unknown[];\n if (subs.length >= 2) {\n const s1 = buildGuardPayloads(subs[0]);\n const s2 = buildGuardPayloads(subs[1]);\n // For OR: pass if EITHER branch passes. Prefer the second branch's\n // pass payload if the first yields nothing useful — the literal-fold\n // case `(= \"edit\" \"create\") || @payload.row` has the first branch\n // return `{}` and the row-payload comes from the second.\n const combinedPass = Object.keys(s1.pass).length > 0 ? s1.pass : s2.pass;\n return { pass: combinedPass, fail: { ...s1.fail, ...s2.fail } };\n }\n if (subs.length === 1) return buildGuardPayloads(subs[0]);\n }\n\n if (op === 'not') {\n const inner = buildGuardPayloads(guard[1]);\n return { pass: inner.fail, fail: inner.pass };\n }\n\n // Agent pure operators used in guards\n if (op === 'agent/is-pinned') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mem_test_unpinned' }, fail: { [field]: 'mem_test_pinned' } };\n }\n\n if (op === 'agent/memory-strength') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mem_test_id' }, fail: { [field]: 'mem_nonexistent' } };\n }\n\n // Agent operators in comparison contexts (e.g., [\">=\", [\"agent/context-usage\"], 0.85])\n // These don't use @payload, they query agent state directly. Return empty payloads\n // since the guard result depends on agent context, not event payload.\n if (op.startsWith('agent/')) {\n return { pass: {}, fail: {} };\n }\n\n return { pass: {}, fail: {} };\n}\n","/**\n * Replay Path Builder\n *\n * Compute the shortest path (replay steps) from an initial state\n * to every reachable state in a state machine. Used by browser\n * verification to navigate through states before running assertions.\n *\n * Extracted from orbital-verify-unified/src/analyze.ts (collectDataMutationTests).\n *\n * @packageDocumentation\n */\n\nimport type { GraphTransition, ReplayStep, PayloadFieldSchema } from './types.js';\n\n/** Entity-data sentinel payload fields: presence means transition needs a selected row */\nconst ENTITY_PAYLOAD_FIELDS = new Set(['data', 'row', 'item', 'id']);\n\n/**\n * Extended transition with render and payload info needed for replay path building.\n * Compatible with orbital-verify's UnifiedTransition.\n */\nexport interface ReplayTransition extends GraphTransition {\n hasGuard: boolean;\n guard?: unknown[];\n payloadFields: string[];\n payloadSchema: PayloadFieldSchema[];\n renderEffects: Array<{\n slot: string;\n patternType: string | null;\n }>;\n}\n\n/**\n * Builds the shortest replay paths from initial state to all reachable states.\n * \n * Computes step-by-step navigation paths for state machine testing and verification.\n * Uses breadth-first search to find shortest paths up to specified depth limit.\n * Each path contains replay steps with event, state, and payload information\n * needed to reproduce state transitions in tests.\n * \n * @param {ReplayTransition[]} transitions - Transitions with render/payload information\n * @param {string} initialState - Starting state name\n * @param {number} [maxDepth=3] - Maximum path length (default: 3)\n * @returns {Map<string, ReplayStep[]>} Map of state names to replay step arrays\n * \n * @example\n * // Build paths from 'initial' state\n * const paths = buildReplayPaths(transitions, 'initial', 5);\n * \n * // Get steps to reach 'completed' state\n * const stepsToComplete = paths.get('completed');\n * \n * // Execute replay steps\n * for (const step of stepsToComplete) {\n * await dispatchEvent(step.event, step.payload);\n * }\n */\nexport function buildReplayPaths(\n transitions: ReplayTransition[],\n initialState: string,\n maxDepth = 3\n): Map<string, ReplayStep[]> {\n type QueueNode = { state: string; path: ReplayStep[] };\n\n const queue: QueueNode[] = [{ state: initialState, path: [] }];\n const replayPaths = new Map<string, ReplayStep[]>();\n replayPaths.set(initialState, []);\n\n while (queue.length > 0) {\n const { state, path } = queue.shift()!;\n if (path.length >= maxDepth) continue;\n\n const fromHere = transitions.filter(\n (t) => t.from === state && t.event !== 'INIT',\n );\n\n for (const transition of fromHere) {\n if (replayPaths.has(transition.to)) continue;\n\n const renderEffect = transition.renderEffects.find((re) => re.patternType !== null);\n const stepNeedsEntityData =\n transition.hasGuard ||\n transition.payloadFields.some((f) => ENTITY_PAYLOAD_FIELDS.has(f));\n\n const step: ReplayStep = {\n event: transition.event,\n fromState: state,\n toState: transition.to,\n slot: renderEffect?.slot ?? 'main',\n expectedPattern: renderEffect?.patternType ?? undefined,\n needsEntityData: stepNeedsEntityData,\n payloadSchema: transition.payloadSchema.length > 0 ? transition.payloadSchema : undefined,\n };\n\n const newPath = [...path, step];\n replayPaths.set(transition.to, newPath);\n queue.push({ state: transition.to, path: newPath });\n }\n }\n\n return replayPaths;\n}\n","/**\n * Edge-Covering Walk Algorithm\n *\n * Computes an ordered sequence of events (WalkStep[]) that covers every\n * transition (edge) in a state machine graph at least once. This guarantees\n * 100% transition coverage regardless of graph topology.\n *\n * Algorithm:\n * 1. Build adjacency list and edge universe (guarded transitions produce two edges)\n * 2. Precompute BFS shortest paths between all state pairs (for repositioning)\n * 3. Greedy DFS: at each state, prefer uncovered outgoing edges\n * 4. When stuck, insert repositioning steps to nearest state with uncovered edges\n * 5. Guard-fail steps don't advance state (guard blocks transition)\n *\n * Used by StateWalkEngine in @almadar-io/verify. Both orbital-verify and\n * runtime-verify share this algorithm for consistent coverage.\n *\n * @packageDocumentation\n */\n\nimport type { EdgeWalkTransition, WalkStep, StateEdge } from './types.js';\nimport type { EventPayload, EventPayloadValue } from '../types/expression.js';\nimport { buildGuardPayloads } from './guard-payloads.js';\n\n/**\n * Build an ordered walk that covers every edge in the state machine.\n *\n * @param transitions - All transitions in the state machine\n * @param initialState - Starting state\n * @returns Ordered walk steps covering every edge\n */\nexport function buildEdgeCoveringWalk(\n transitions: EdgeWalkTransition[],\n initialState: string,\n): WalkStep[] {\n // 1. Build adjacency list. Skip wildcards (pseudostates) and skip the\n // boot INIT (the runtime auto-fires INIT from the initial state on\n // mount, so the walker doesn't need to fire it). User-triggered INITs\n // from non-initial states (refresh, retry) ARE walkable edges and\n // stay in the graph so coverage can reach them.\n const filtered = transitions.filter(\n (t) => t.from !== '*' && !(t.event === 'INIT' && t.from === initialState),\n );\n\n const graph = new Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>();\n const allStates = new Set<string>();\n\n for (const t of filtered) {\n allStates.add(t.from);\n allStates.add(t.to);\n if (!graph.has(t.from)) graph.set(t.from, []);\n graph.get(t.from)!.push({ event: t.event, to: t.to, transition: t });\n }\n\n // Ensure initial state is in the set\n allStates.add(initialState);\n\n // 2. Build edge universe. Guarded transitions produce pass + fail edges.\n const uncovered = new Set<string>();\n const edgeMeta = new Map<string, { transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }>();\n\n for (const t of filtered) {\n if (t.hasGuard) {\n const keyPass = `${t.from}+${t.event}->${t.to}[pass]`;\n const keyFail = `${t.from}+${t.event}->${t.to}[fail]`;\n uncovered.add(keyPass);\n uncovered.add(keyFail);\n edgeMeta.set(keyPass, { transition: t, guardCase: 'pass' });\n edgeMeta.set(keyFail, { transition: t, guardCase: 'fail' });\n } else {\n const key = `${t.from}+${t.event}->${t.to}`;\n uncovered.add(key);\n edgeMeta.set(key, { transition: t, guardCase: null });\n }\n }\n\n if (uncovered.size === 0) return [];\n\n // 3. Precompute BFS shortest paths between all state pairs\n const shortestPaths = new Map<string, Map<string, Array<{ event: string; to: string }>>>();\n for (const state of allStates) {\n shortestPaths.set(state, bfsShortestPaths(state, graph));\n }\n\n // 4. Greedy walk\n const walk: WalkStep[] = [];\n let currentState = initialState;\n const maxIterations = uncovered.size * allStates.size * 2; // safety bound\n let iterations = 0;\n\n while (uncovered.size > 0 && iterations < maxIterations) {\n iterations++;\n\n // Find uncovered edges from currentState\n const outgoing = findUncoveredEdges(currentState, graph, uncovered);\n\n if (outgoing.length > 0) {\n // Pick first uncovered edge\n const pick = outgoing[0];\n const payload = buildPayloadForEdge(pick.transition, pick.guardCase);\n\n walk.push({\n from: currentState,\n event: pick.transition.event,\n to: pick.transition.to,\n guardCase: pick.guardCase,\n payload,\n isRepositioning: false,\n });\n\n uncovered.delete(pick.key);\n\n // Guard-fail doesn't advance state\n if (pick.guardCase !== 'fail') {\n currentState = pick.transition.to;\n }\n } else {\n // Stuck: find nearest state with uncovered edges\n const target = findNearestUncoveredState(currentState, graph, uncovered, shortestPaths);\n\n if (!target) {\n // No reachable state with uncovered edges. Remaining edges are unreachable.\n break;\n }\n\n // Insert repositioning steps\n const repoPath = shortestPaths.get(currentState)?.get(target);\n if (!repoPath || repoPath.length === 0) break;\n\n for (const step of repoPath) {\n walk.push({\n from: currentState,\n event: step.event,\n to: step.to,\n guardCase: null,\n payload: {},\n isRepositioning: true,\n });\n currentState = step.to;\n }\n }\n }\n\n return walk;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/**\n * BFS from a source state, returning shortest paths to all reachable states.\n * Each path is an array of {event, to} steps.\n */\nfunction bfsShortestPaths(\n source: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n): Map<string, Array<{ event: string; to: string }>> {\n const paths = new Map<string, Array<{ event: string; to: string }>>();\n const visited = new Set<string>([source]);\n const queue: Array<{ state: string; path: Array<{ event: string; to: string }> }> = [\n { state: source, path: [] },\n ];\n\n while (queue.length > 0) {\n const { state, path } = queue.shift()!;\n const edges = graph.get(state) ?? [];\n\n for (const edge of edges) {\n if (visited.has(edge.to)) continue;\n visited.add(edge.to);\n const newPath = [...path, { event: edge.event, to: edge.to }];\n paths.set(edge.to, newPath);\n queue.push({ state: edge.to, path: newPath });\n }\n }\n\n return paths;\n}\n\n/**\n * Find uncovered edges from a given state.\n */\nfunction findUncoveredEdges(\n state: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n uncovered: Set<string>,\n): Array<{ key: string; transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }> {\n const edges = graph.get(state) ?? [];\n const result: Array<{ key: string; transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }> = [];\n\n for (const edge of edges) {\n if (edge.transition.hasGuard) {\n const keyPass = `${state}+${edge.event}->${edge.to}[pass]`;\n const keyFail = `${state}+${edge.event}->${edge.to}[fail]`;\n // Prefer pass first (advances state), then fail\n if (uncovered.has(keyPass)) {\n result.push({ key: keyPass, transition: edge.transition, guardCase: 'pass' });\n }\n if (uncovered.has(keyFail)) {\n result.push({ key: keyFail, transition: edge.transition, guardCase: 'fail' });\n }\n } else {\n const key = `${state}+${edge.event}->${edge.to}`;\n if (uncovered.has(key)) {\n result.push({ key, transition: edge.transition, guardCase: null });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Find the nearest state (from currentState) that has uncovered outgoing edges.\n */\nfunction findNearestUncoveredState(\n currentState: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n uncovered: Set<string>,\n shortestPaths: Map<string, Map<string, Array<{ event: string; to: string }>>>,\n): string | null {\n // Collect states that have uncovered edges\n const statesWithUncovered = new Set<string>();\n for (const key of uncovered) {\n // Key format: \"state+EVENT->target\" or \"state+EVENT->target[pass]\"\n const fromState = key.split('+')[0];\n statesWithUncovered.add(fromState);\n }\n\n // If current state has uncovered edges, return it (shouldn't happen, but handle it)\n if (statesWithUncovered.has(currentState)) return currentState;\n\n // Find nearest reachable state with uncovered edges\n const paths = shortestPaths.get(currentState);\n if (!paths) return null;\n\n let nearestState: string | null = null;\n let nearestDist = Infinity;\n\n for (const target of statesWithUncovered) {\n const path = paths.get(target);\n if (path && path.length < nearestDist) {\n nearestDist = path.length;\n nearestState = target;\n }\n }\n\n return nearestState;\n}\n\n/**\n * Build a payload for a given edge based on its guard case and payload schema.\n * For guarded transitions, uses guard expressions to generate pass/fail payloads.\n * For unguarded transitions with payload schemas (e.g., EDIT/VIEW with { id }),\n * generates mock values so fetch-by-ID effects can resolve entity data.\n */\nfunction buildPayloadForEdge(\n transition: EdgeWalkTransition,\n guardCase: 'pass' | 'fail' | null,\n): EventPayload {\n // Guard-based payload generation (existing behavior)\n if (transition.hasGuard && transition.guard && guardCase) {\n const payloads = buildGuardPayloads(transition.guard);\n return guardCase === 'pass' ? payloads.pass : payloads.fail;\n }\n\n // Schema-based payload generation for events that declare required fields\n // (e.g., EDIT/VIEW declare { name: \"id\", type: \"string\", required: true })\n if (transition.payloadSchema && transition.payloadSchema.length > 0) {\n const payload: EventPayload = {};\n for (const field of transition.payloadSchema) {\n // Use caller-provided mockValue if available (set from entity context)\n if (field.mockValue !== undefined) {\n payload[field.name] = field.mockValue as EventPayloadValue;\n } else if (field.type === 'string') {\n payload[field.name] = `mock-${field.name}`;\n } else if (field.type === 'number') {\n payload[field.name] = 1;\n } else if (field.type === 'boolean') {\n payload[field.name] = true;\n } else if (field.type === 'object' || field.type === 'any') {\n // `mock-<name>` is a plain string; persisting that for an object\n // field (e.g. SAVE's `data: object` carrying a form row) spreads\n // the string's characters across numeric keys server-side and\n // the downstream grid renders blank cards. An empty object is a\n // safer default — callers that need entity-shaped mocks should\n // set `mockValue` at the call site (see orbital-verify-unified's\n // phase4-browser TraitWalkConfig builder).\n payload[field.name] = {};\n } else {\n payload[field.name] = `mock-${field.name}`;\n }\n }\n return payload;\n }\n\n return {};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/state-machine/graph.ts","../../src/state-machine/bfs.ts","../../src/state-machine/guard-payloads.ts","../../src/state-machine/replay-paths.ts","../../src/state-machine/edge-walk.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * State Graph Construction\n *\n * Build an adjacency list from state machine transitions.\n * Extracted from orbital-verify-unified/src/analyze.ts.\n *\n * @packageDocumentation\n */\n\nimport type { GraphTransition, StateEdge } from './types.js';\n\n/**\n * Builds an adjacency list from state machine transitions.\n * \n * Constructs a state transition graph where each state maps to an array\n * of outgoing edges (events and target states). Wildcard transitions\n * (from === '*') are excluded since they don't represent fixed edges.\n * Used as the foundation for state machine analysis, traversal, and verification.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @returns {Map<string, StateEdge[]>} State transition graph\n * \n * @example\n * const graph = buildStateGraph(transitions);\n * const edgesFromInitial = graph.get('initial'); // Array of outgoing edges\n * console.log(`Initial state has ${edgesFromInitial?.length} transitions`);\n */\nexport function buildStateGraph(\n transitions: GraphTransition[]\n): Map<string, StateEdge[]> {\n const graph = new Map<string, StateEdge[]>();\n for (const t of transitions) {\n if (t.from === '*') continue;\n if (!graph.has(t.from)) graph.set(t.from, []);\n graph.get(t.from)!.push({ event: t.event, to: t.to });\n }\n return graph;\n}\n","/**\n * BFS Reachability Algorithms\n *\n * Breadth-first search over state machine graphs.\n * Extracted from orbital-verify-unified/src/analyze.ts and phase3-server.ts.\n *\n * @packageDocumentation\n */\n\nimport type { BFSNode, StateEdge } from './types.js';\nimport { buildStateGraph } from './graph.js';\nimport type { GraphTransition } from './types.js';\n\n/**\n * Collects all reachable states from an initial state using breadth-first search.\n * \n * Performs BFS traversal of the state machine to find all states reachable\n * from the initial state, up to the specified maximum depth. Used for\n * state machine analysis, verification, and test coverage assessment.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @param {string} initialState - Starting state name\n * @param {number} [maxDepth=5] - Maximum search depth\n * @returns {Set<string>} Set of reachable state names\n * \n * @example\n * const reachable = collectReachableStates(transitions, 'initial', 10);\n * console.log('Reachable states:', Array.from(reachable));\n */\nexport function collectReachableStates(\n transitions: GraphTransition[],\n initialState: string,\n maxDepth = 5\n): Set<string> {\n const graph = buildStateGraph(transitions);\n const visited = new Set<string>([initialState]);\n const queue: BFSNode[] = [{ state: initialState, depth: 0 }];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDepth) continue;\n\n const edges = graph.get(current.state) ?? [];\n for (const edge of edges) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push({ state: edge.to, depth: current.depth + 1 });\n }\n }\n }\n\n return visited;\n}\n\n/**\n * Walks all reachable (state, event) pairs using BFS and invokes callback for each.\n * \n * Traverses the state machine using breadth-first search and calls the visitor\n * function for each (state, edge) pair encountered. Used by server verification\n * to test transitions by POSTing to endpoints and checking responses.\n * \n * @param {GraphTransition[]} transitions - Array of state transitions\n * @param {string} initialState - Starting state name\n * @param {number} maxDepth - Maximum BFS depth\n * @param {(state: string, edge: StateEdge, depth: number) => Promise<boolean>} visitor - Callback for each pair\n * @returns {Promise<{ visitedPairs: Set<string>; walkedEdges: number }>} Traversal statistics\n * \n * @example\n * const result = await walkStatePairs(transitions, 'initial', 5, async (state, edge) => {\n * console.log(`Transition: ${state} --${edge.event}--> ${edge.to}`);\n * return true; // Continue exploration\n * });\n * console.log(`Visited ${result.visitedPairs.size} state-event pairs`);\n */\nexport async function walkStatePairs(\n transitions: GraphTransition[],\n initialState: string,\n maxDepth: number,\n visitor: (state: string, edge: StateEdge, depth: number) => Promise<boolean>\n): Promise<{ visitedPairs: Set<string>; walkedEdges: number }> {\n const graph = buildStateGraph(transitions);\n const visitedPairs = new Set<string>();\n const queue: BFSNode[] = [{ state: initialState, depth: 0 }];\n let walkedEdges = 0;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (current.depth >= maxDepth) continue;\n\n const edges = graph.get(current.state) ?? [];\n for (const edge of edges) {\n const pairKey = `${current.state}:${edge.event}`;\n if (visitedPairs.has(pairKey)) continue;\n visitedPairs.add(pairKey);\n\n const shouldEnqueue = await visitor(current.state, edge, current.depth);\n walkedEdges++;\n\n if (shouldEnqueue) {\n const stateVisited = [...visitedPairs].some((k) => k.startsWith(`${edge.to}:`));\n if (!stateVisited) {\n queue.push({ state: edge.to, depth: current.depth + 1 });\n }\n }\n }\n }\n\n return { visitedPairs, walkedEdges };\n}\n","/**\n * Guard Payload Builder\n *\n * Derive pass and fail payloads from guard s-expressions.\n * Extracted from orbital-verify-unified/src/analyze.ts.\n *\n * @packageDocumentation\n */\n\nimport type { GuardPayload } from './types.js';\n\n/**\n * Extracts the first segment of a payload field reference.\n * \n * Parses binding references in the format \"@payload.field\" and extracts\n * the first field name segment. Used for identifying payload fields in\n * guard conditions for test data generation.\n * \n * @param {unknown} ref - Binding reference to extract from\n * @returns {string | null} First field segment or null for non-payload references\n * \n * @example\n * extractPayloadFieldRef('@payload.item'); // returns 'item'\n * extractPayloadFieldRef('@payload.data.weight'); // returns 'data'\n * extractPayloadFieldRef('@entity.id'); // returns null\n * extractPayloadFieldRef('@user.name'); // returns null\n */\nexport function extractPayloadFieldRef(ref: unknown): string | null {\n if (typeof ref !== 'string') return null;\n const match = ref.match(/^@payload\\.([A-Za-z0-9_]+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Builds test payloads that satisfy or violate guard conditions.\n * \n * Generates pass/fail test data for guard s-expressions used in state machine\n * transitions. Pass payloads satisfy the guard condition (allowing transition),\n * fail payloads violate it (blocking transition). Used for automated testing\n * and validation of state machine behavior.\n * \n * Supports operators: not-nil, nil, eq, not-eq, gt, gte, lt, lte, and, or, not\n * \n * @param {unknown} guard - Guard s-expression to analyze\n * @returns {GuardPayload} Object with pass and fail payloads\n * \n * @example\n * // Guard: ['not-nil', '@payload.completed']\n * buildGuardPayloads(['not-nil', '@payload.completed']);\n * // Returns: { pass: { completed: 'mock-test-value' }, fail: { completed: null } }\n * \n * @example\n * // Guard: ['eq', '@payload.status', 'active']\n * buildGuardPayloads(['eq', '@payload.status', 'active']);\n * // Returns: { pass: { status: 'active' }, fail: { status: 'not-active' } }\n * \n * @example\n * // Guard: ['and', ['not-nil', '@payload.id'], ['eq', '@payload.status', 'ready']]\n * buildGuardPayloads(['and', ['not-nil', '@payload.id'], ['eq', '@payload.status', 'ready']]);\n * // Returns: { pass: { id: 'mock-test-value', status: 'ready' }, fail: { id: null } }\n */\n/**\n * Evaluate a guard that is fully constant (no `@payload`/`@entity`/`@config`\n * bindings — e.g. after molecule/organism inlining folds `@config.mode` to a\n * literal). Returns the constant truth value, or `null` when the guard depends\n * on a binding (so a payload must be synthesized). This lets callers (a) emit\n * an empty payload for a constant guard (no field to satisfy) and (b) skip the\n * meaningless variant: an always-true guard has no fail case, an always-false\n * guard has no pass case. Without it, `(or (= \"create\" \"create\") @payload.row)`\n * (create-mode modal OPEN) was synthesized with a spurious `row`, which the\n * runtime read as edit-mode and rejected.\n */\nexport function constTruth(guard: unknown): boolean | null {\n if (typeof guard === 'boolean') return guard;\n if (typeof guard === 'string') {\n if (guard.startsWith('@')) return null; // a binding — not constant\n return guard.length > 0; // bare non-binding literal: truthy iff non-empty\n }\n if (!Array.isArray(guard) || guard.length === 0) return null;\n const op = String(guard[0]);\n const isLiteral = (x: unknown): boolean =>\n x === null ||\n typeof x === 'number' ||\n typeof x === 'boolean' ||\n (typeof x === 'string' && !x.startsWith('@'));\n if (op === '=' || op === '==' || op === 'eq') {\n return isLiteral(guard[1]) && isLiteral(guard[2]) ? guard[1] === guard[2] : null;\n }\n if (op === '!=' || op === 'ne' || op === 'not-eq' || op === 'neq') {\n return isLiteral(guard[1]) && isLiteral(guard[2]) ? guard[1] !== guard[2] : null;\n }\n if (op === 'not') {\n const inner = constTruth(guard[1]);\n return inner === null ? null : !inner;\n }\n if (op === 'or') {\n const subs = (guard.slice(1) as unknown[]).map(constTruth);\n if (subs.some((s) => s === true)) return true; // short-circuit\n if (subs.every((s) => s === false)) return false;\n return null;\n }\n if (op === 'and') {\n const subs = (guard.slice(1) as unknown[]).map(constTruth);\n if (subs.some((s) => s === false)) return false; // short-circuit\n if (subs.every((s) => s === true)) return true;\n return null;\n }\n return null;\n}\n\nexport function buildGuardPayloads(guard: unknown): GuardPayload {\n // A fully-constant guard (post-inline literal fold) is decided by its\n // literals, not by the payload — synthesize nothing for either case.\n if (constTruth(guard) !== null) {\n return { pass: {}, fail: {} };\n }\n // Bare-binding existence guard: e.g. `when @payload.row` lowers to\n // the string `\"@payload.row\"`. The transition fires iff that field is\n // truthy. Synthesize pass with a truthy mock and fail with null so\n // the verifier can drive both branches. Without this, std-confirmation\n // and std-modal's existence guards (REQUEST/EDIT requiring @payload.row)\n // get empty payloads in both cases — the pass case then fails the\n // server-side guard and the portal observer flags \"slot not mounted\".\n if (typeof guard === 'string') {\n const field = extractPayloadFieldRef(guard);\n if (field) return { pass: { [field]: { id: 'mock-test-id', name: 'mock-test-name' } }, fail: { [field]: null } };\n }\n\n if (!Array.isArray(guard) || guard.length === 0) {\n return { pass: {}, fail: {} };\n }\n\n const op = String(guard[0]);\n\n if (op === 'not-nil' || op === 'not_nil') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mock-test-value' }, fail: { [field]: null } };\n }\n\n if (op === 'nil') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: {}, fail: { [field]: 'mock-test-value' } };\n }\n\n if (op === 'eq' || op === '==' || op === '=') {\n const field = extractPayloadFieldRef(guard[1]);\n const val = guard[2];\n if (field && val !== undefined) {\n const failVal =\n typeof val === 'number' ? val + 1\n : typeof val === 'string' ? `not-${val}`\n : null;\n return { pass: { [field]: val }, fail: { [field]: failVal } };\n }\n }\n\n if (op === 'not-eq' || op === '!=' || op === 'neq') {\n const field = extractPayloadFieldRef(guard[1]);\n const val = guard[2];\n if (field && val !== undefined) {\n const passVal =\n typeof val === 'number' ? val + 1\n : typeof val === 'string' ? `not-${val}`\n : 'other';\n return { pass: { [field]: passVal }, fail: { [field]: val } };\n }\n }\n\n if (op === 'gt' || op === '>') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n + 1 }, fail: { [field]: n - 1 } };\n }\n\n if (op === 'gte' || op === '>=') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n }, fail: { [field]: n - 1 } };\n }\n\n if (op === 'lt' || op === '<') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n - 1 }, fail: { [field]: n + 1 } };\n }\n\n if (op === 'lte' || op === '<=') {\n const field = extractPayloadFieldRef(guard[1]);\n const n = typeof guard[2] === 'number' ? guard[2] : 0;\n if (field) return { pass: { [field]: n }, fail: { [field]: n + 1 } };\n }\n\n if (op === 'and') {\n // Accept BOTH array sub-guards and bare-binding string sub-guards\n // (e.g. `(and \"@payload.row\" (not-nil \"@payload.id\"))`). Dropping the\n // bare strings with filter(Array.isArray) lost their fields from the\n // pass payload. AND passes iff every sub-guard passes, so merge all\n // sub-guards' pass payloads; AND fails iff any sub-guard fails, so the\n // first sub-guard's fail payload is a sufficient violation.\n const subs = guard.slice(1) as unknown[];\n if (subs.length >= 2) {\n const built = subs.map(buildGuardPayloads);\n const pass = built.reduce<GuardPayload['pass']>((acc, b) => ({ ...acc, ...b.pass }), {});\n return { pass, fail: built[0].fail };\n }\n if (subs.length === 1) return buildGuardPayloads(subs[0]);\n }\n\n if (op === 'or') {\n // Accept BOTH array sub-guards and bare-binding string sub-guards\n // (post-substitution mode-aware guards like\n // `(or (= \"edit\" \"create\") \"@payload.row\")` mix array + string children).\n const subs = guard.slice(1) as unknown[];\n if (subs.length >= 2) {\n const s1 = buildGuardPayloads(subs[0]);\n const s2 = buildGuardPayloads(subs[1]);\n // For OR: pass if EITHER branch passes. Prefer the second branch's\n // pass payload if the first yields nothing useful — the literal-fold\n // case `(= \"edit\" \"create\") || @payload.row` has the first branch\n // return `{}` and the row-payload comes from the second.\n const combinedPass = Object.keys(s1.pass).length > 0 ? s1.pass : s2.pass;\n return { pass: combinedPass, fail: { ...s1.fail, ...s2.fail } };\n }\n if (subs.length === 1) return buildGuardPayloads(subs[0]);\n }\n\n if (op === 'not') {\n const inner = buildGuardPayloads(guard[1]);\n return { pass: inner.fail, fail: inner.pass };\n }\n\n // Agent pure operators used in guards\n if (op === 'agent/is-pinned') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mem_test_unpinned' }, fail: { [field]: 'mem_test_pinned' } };\n }\n\n if (op === 'agent/memory-strength') {\n const field = extractPayloadFieldRef(guard[1]);\n if (field) return { pass: { [field]: 'mem_test_id' }, fail: { [field]: 'mem_nonexistent' } };\n }\n\n // Agent operators in comparison contexts (e.g., [\">=\", [\"agent/context-usage\"], 0.85])\n // These don't use @payload, they query agent state directly. Return empty payloads\n // since the guard result depends on agent context, not event payload.\n if (op.startsWith('agent/')) {\n return { pass: {}, fail: {} };\n }\n\n return { pass: {}, fail: {} };\n}\n","/**\n * Replay Path Builder\n *\n * Compute the shortest path (replay steps) from an initial state\n * to every reachable state in a state machine. Used by browser\n * verification to navigate through states before running assertions.\n *\n * Extracted from orbital-verify-unified/src/analyze.ts (collectDataMutationTests).\n *\n * @packageDocumentation\n */\n\nimport type { GraphTransition, ReplayStep, PayloadFieldSchema } from './types.js';\n\n/** Entity-data sentinel payload fields: presence means transition needs a selected row */\nconst ENTITY_PAYLOAD_FIELDS = new Set(['data', 'row', 'item', 'id']);\n\n/**\n * Extended transition with render and payload info needed for replay path building.\n * Compatible with orbital-verify's UnifiedTransition.\n */\nexport interface ReplayTransition extends GraphTransition {\n hasGuard: boolean;\n guard?: unknown[];\n payloadFields: string[];\n payloadSchema: PayloadFieldSchema[];\n renderEffects: Array<{\n slot: string;\n patternType: string | null;\n }>;\n}\n\n/**\n * Builds the shortest replay paths from initial state to all reachable states.\n * \n * Computes step-by-step navigation paths for state machine testing and verification.\n * Uses breadth-first search to find shortest paths up to specified depth limit.\n * Each path contains replay steps with event, state, and payload information\n * needed to reproduce state transitions in tests.\n * \n * @param {ReplayTransition[]} transitions - Transitions with render/payload information\n * @param {string} initialState - Starting state name\n * @param {number} [maxDepth=3] - Maximum path length (default: 3)\n * @returns {Map<string, ReplayStep[]>} Map of state names to replay step arrays\n * \n * @example\n * // Build paths from 'initial' state\n * const paths = buildReplayPaths(transitions, 'initial', 5);\n * \n * // Get steps to reach 'completed' state\n * const stepsToComplete = paths.get('completed');\n * \n * // Execute replay steps\n * for (const step of stepsToComplete) {\n * await dispatchEvent(step.event, step.payload);\n * }\n */\nexport function buildReplayPaths(\n transitions: ReplayTransition[],\n initialState: string,\n maxDepth = 3\n): Map<string, ReplayStep[]> {\n type QueueNode = { state: string; path: ReplayStep[] };\n\n const queue: QueueNode[] = [{ state: initialState, path: [] }];\n const replayPaths = new Map<string, ReplayStep[]>();\n replayPaths.set(initialState, []);\n\n while (queue.length > 0) {\n const { state, path } = queue.shift()!;\n if (path.length >= maxDepth) continue;\n\n const fromHere = transitions.filter(\n (t) => t.from === state && t.event !== 'INIT',\n );\n\n for (const transition of fromHere) {\n if (replayPaths.has(transition.to)) continue;\n\n const renderEffect = transition.renderEffects.find((re) => re.patternType !== null);\n const stepNeedsEntityData =\n transition.hasGuard ||\n transition.payloadFields.some((f) => ENTITY_PAYLOAD_FIELDS.has(f));\n\n const step: ReplayStep = {\n event: transition.event,\n fromState: state,\n toState: transition.to,\n slot: renderEffect?.slot ?? 'main',\n expectedPattern: renderEffect?.patternType ?? undefined,\n needsEntityData: stepNeedsEntityData,\n payloadSchema: transition.payloadSchema.length > 0 ? transition.payloadSchema : undefined,\n };\n\n const newPath = [...path, step];\n replayPaths.set(transition.to, newPath);\n queue.push({ state: transition.to, path: newPath });\n }\n }\n\n return replayPaths;\n}\n","/**\n * Edge-Covering Walk Algorithm\n *\n * Computes an ordered sequence of events (WalkStep[]) that attempts to cover\n * every transition (edge) in a state machine graph. This is a greedy chained\n * walk: it does NOT guarantee 100% coverage. With no reset concept it can\n * strand on absorbing states (no outgoing edges and no path back to uncovered\n * edges), and a guard-fail misprediction desyncs the chained walk so later\n * steps fire from the wrong state. Superseded by the hermetic per-frame walk\n * in @almadar-io/verify, which re-seeds each frame independently.\n *\n * Algorithm:\n * 1. Build adjacency list and edge universe (guarded transitions produce two edges)\n * 2. Precompute BFS shortest paths between all state pairs (for repositioning)\n * 3. Greedy DFS: at each state, prefer uncovered outgoing edges\n * 4. When stuck, insert repositioning steps to nearest state with uncovered edges\n * 5. Guard-fail steps don't advance state (guard blocks transition)\n *\n * Used by StateWalkEngine in @almadar-io/verify. Both orbital-verify and\n * runtime-verify share this algorithm for consistent coverage.\n *\n * @packageDocumentation\n */\n\nimport type { EdgeWalkTransition, WalkStep, StateEdge } from './types.js';\nimport type { EventPayload, EventPayloadValue } from '../types/expression.js';\nimport { buildGuardPayloads } from './guard-payloads.js';\n\n/**\n * Build an ordered walk that covers every edge in the state machine.\n *\n * @param transitions - All transitions in the state machine\n * @param initialState - Starting state\n * @returns Ordered walk steps covering every edge\n */\nexport function buildEdgeCoveringWalk(\n transitions: EdgeWalkTransition[],\n initialState: string,\n): WalkStep[] {\n // 1. Build adjacency list. Skip wildcards (pseudostates) and skip the\n // boot INIT (the runtime auto-fires INIT from the initial state on\n // mount, so the walker doesn't need to fire it). User-triggered INITs\n // from non-initial states (refresh, retry) ARE walkable edges and\n // stay in the graph so coverage can reach them.\n const filtered = transitions.filter(\n (t) => t.from !== '*' && !(t.event === 'INIT' && t.from === initialState),\n );\n\n const graph = new Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>();\n const allStates = new Set<string>();\n\n for (const t of filtered) {\n allStates.add(t.from);\n allStates.add(t.to);\n if (!graph.has(t.from)) graph.set(t.from, []);\n graph.get(t.from)!.push({ event: t.event, to: t.to, transition: t });\n }\n\n // Ensure initial state is in the set\n allStates.add(initialState);\n\n // 2. Build edge universe. Guarded transitions produce pass + fail edges.\n const uncovered = new Set<string>();\n const edgeMeta = new Map<string, { transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }>();\n\n for (const t of filtered) {\n if (t.hasGuard) {\n const keyPass = `${t.from}+${t.event}->${t.to}[pass]`;\n const keyFail = `${t.from}+${t.event}->${t.to}[fail]`;\n uncovered.add(keyPass);\n uncovered.add(keyFail);\n edgeMeta.set(keyPass, { transition: t, guardCase: 'pass' });\n edgeMeta.set(keyFail, { transition: t, guardCase: 'fail' });\n } else {\n const key = `${t.from}+${t.event}->${t.to}`;\n uncovered.add(key);\n edgeMeta.set(key, { transition: t, guardCase: null });\n }\n }\n\n if (uncovered.size === 0) return [];\n\n // 3. Precompute BFS shortest paths between all state pairs\n const shortestPaths = new Map<string, Map<string, Array<{ event: string; to: string }>>>();\n for (const state of allStates) {\n shortestPaths.set(state, bfsShortestPaths(state, graph));\n }\n\n // 4. Greedy walk\n const walk: WalkStep[] = [];\n let currentState = initialState;\n const maxIterations = uncovered.size * allStates.size * 2; // safety bound\n let iterations = 0;\n\n while (uncovered.size > 0 && iterations < maxIterations) {\n iterations++;\n\n // Find uncovered edges from currentState\n const outgoing = findUncoveredEdges(currentState, graph, uncovered);\n\n if (outgoing.length > 0) {\n // Pick first uncovered edge\n const pick = outgoing[0];\n const payload = buildPayloadForEdge(pick.transition, pick.guardCase);\n\n walk.push({\n from: currentState,\n event: pick.transition.event,\n to: pick.transition.to,\n guardCase: pick.guardCase,\n payload,\n isRepositioning: false,\n });\n\n uncovered.delete(pick.key);\n\n // Guard-fail doesn't advance state\n if (pick.guardCase !== 'fail') {\n currentState = pick.transition.to;\n }\n } else {\n // Stuck: find nearest state with uncovered edges\n const target = findNearestUncoveredState(currentState, graph, uncovered, shortestPaths);\n\n if (!target) {\n // No reachable state with uncovered edges. Remaining edges are unreachable.\n break;\n }\n\n // Insert repositioning steps\n const repoPath = shortestPaths.get(currentState)?.get(target);\n if (!repoPath || repoPath.length === 0) break;\n\n for (const step of repoPath) {\n walk.push({\n from: currentState,\n event: step.event,\n to: step.to,\n guardCase: null,\n payload: {},\n isRepositioning: true,\n });\n currentState = step.to;\n }\n }\n }\n\n return walk;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/**\n * BFS from a source state, returning shortest paths to all reachable states.\n * Each path is an array of {event, to} steps.\n */\nfunction bfsShortestPaths(\n source: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n): Map<string, Array<{ event: string; to: string }>> {\n const paths = new Map<string, Array<{ event: string; to: string }>>();\n const visited = new Set<string>([source]);\n const queue: Array<{ state: string; path: Array<{ event: string; to: string }> }> = [\n { state: source, path: [] },\n ];\n\n while (queue.length > 0) {\n const { state, path } = queue.shift()!;\n const edges = graph.get(state) ?? [];\n\n for (const edge of edges) {\n if (visited.has(edge.to)) continue;\n visited.add(edge.to);\n const newPath = [...path, { event: edge.event, to: edge.to }];\n paths.set(edge.to, newPath);\n queue.push({ state: edge.to, path: newPath });\n }\n }\n\n return paths;\n}\n\n/**\n * Find uncovered edges from a given state.\n */\nfunction findUncoveredEdges(\n state: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n uncovered: Set<string>,\n): Array<{ key: string; transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }> {\n const edges = graph.get(state) ?? [];\n const result: Array<{ key: string; transition: EdgeWalkTransition; guardCase: 'pass' | 'fail' | null }> = [];\n\n for (const edge of edges) {\n if (edge.transition.hasGuard) {\n const keyPass = `${state}+${edge.event}->${edge.to}[pass]`;\n const keyFail = `${state}+${edge.event}->${edge.to}[fail]`;\n // Prefer pass first (advances state), then fail\n if (uncovered.has(keyPass)) {\n result.push({ key: keyPass, transition: edge.transition, guardCase: 'pass' });\n }\n if (uncovered.has(keyFail)) {\n result.push({ key: keyFail, transition: edge.transition, guardCase: 'fail' });\n }\n } else {\n const key = `${state}+${edge.event}->${edge.to}`;\n if (uncovered.has(key)) {\n result.push({ key, transition: edge.transition, guardCase: null });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Find the nearest state (from currentState) that has uncovered outgoing edges.\n */\nfunction findNearestUncoveredState(\n currentState: string,\n graph: Map<string, Array<{ event: string; to: string; transition: EdgeWalkTransition }>>,\n uncovered: Set<string>,\n shortestPaths: Map<string, Map<string, Array<{ event: string; to: string }>>>,\n): string | null {\n // Collect states that have uncovered edges\n const statesWithUncovered = new Set<string>();\n for (const key of uncovered) {\n // Key format: \"state+EVENT->target\" or \"state+EVENT->target[pass]\"\n const fromState = key.split('+')[0];\n statesWithUncovered.add(fromState);\n }\n\n // If current state has uncovered edges, return it (shouldn't happen, but handle it)\n if (statesWithUncovered.has(currentState)) return currentState;\n\n // Find nearest reachable state with uncovered edges\n const paths = shortestPaths.get(currentState);\n if (!paths) return null;\n\n let nearestState: string | null = null;\n let nearestDist = Infinity;\n\n for (const target of statesWithUncovered) {\n const path = paths.get(target);\n if (path && path.length < nearestDist) {\n nearestDist = path.length;\n nearestState = target;\n }\n }\n\n return nearestState;\n}\n\n/**\n * Build a payload for a given edge based on its guard case and payload schema.\n * For guarded transitions, uses guard expressions to generate pass/fail payloads.\n * For unguarded transitions with payload schemas (e.g., EDIT/VIEW with { id }),\n * generates mock values so fetch-by-ID effects can resolve entity data.\n */\nfunction buildPayloadForEdge(\n transition: EdgeWalkTransition,\n guardCase: 'pass' | 'fail' | null,\n): EventPayload {\n // Guard-based payload generation (existing behavior)\n if (transition.hasGuard && transition.guard && guardCase) {\n const payloads = buildGuardPayloads(transition.guard);\n return guardCase === 'pass' ? payloads.pass : payloads.fail;\n }\n\n // Schema-based payload generation for events that declare required fields\n // (e.g., EDIT/VIEW declare { name: \"id\", type: \"string\", required: true })\n if (transition.payloadSchema && transition.payloadSchema.length > 0) {\n const payload: EventPayload = {};\n for (const field of transition.payloadSchema) {\n // Use caller-provided mockValue if available (set from entity context)\n if (field.mockValue !== undefined) {\n payload[field.name] = field.mockValue as EventPayloadValue;\n } else if (field.type === 'string') {\n payload[field.name] = `mock-${field.name}`;\n } else if (field.type === 'number') {\n payload[field.name] = 1;\n } else if (field.type === 'boolean') {\n payload[field.name] = true;\n } else if (field.type === 'object' || field.type === 'any') {\n // `mock-<name>` is a plain string; persisting that for an object\n // field (e.g. SAVE's `data: object` carrying a form row) spreads\n // the string's characters across numeric keys server-side and\n // the downstream grid renders blank cards. An empty object is a\n // safer default — callers that need entity-shaped mocks should\n // set `mockValue` at the call site (see orbital-verify-unified's\n // phase4-browser TraitWalkConfig builder).\n payload[field.name] = {};\n } else {\n payload[field.name] = `mock-${field.name}`;\n }\n }\n return payload;\n }\n\n return {};\n}\n"]}
|
|
@@ -1549,6 +1549,31 @@ type FieldValue = string | number | boolean | Date | null | string[] | FieldValu
|
|
|
1549
1549
|
type EntityRow = {
|
|
1550
1550
|
id?: string;
|
|
1551
1551
|
} & Record<string, FieldValue | undefined>;
|
|
1552
|
+
/**
|
|
1553
|
+
* A field-refined `EntityRow` — the SINGLE entity type, narrowed so a set of
|
|
1554
|
+
* named fields are REQUIRED (present, non-`undefined`). This is how an entity-
|
|
1555
|
+
* interacting component declares the fields it needs to function WITHOUT
|
|
1556
|
+
* introducing a separate per-component entity type: it stays structurally an
|
|
1557
|
+
* `EntityRow` (index signature intact, every other field still field-open), so
|
|
1558
|
+
* any domain entity that provides those fields satisfies it.
|
|
1559
|
+
*
|
|
1560
|
+
* One declaration, two jobs: (1) TypeScript enforces that the bound entity has
|
|
1561
|
+
* the fields (a behavior binding a thinner entity fails to typecheck); and
|
|
1562
|
+
* (2) pattern-sync reads the same type and writes `requiredFields` onto the
|
|
1563
|
+
* registry's entity prop, so the `ORB_X_ENTITY_PROP_CONTRACT` validator rule
|
|
1564
|
+
* rejects an incompatible bind at `orbital validate` (accounting for `.lolo`
|
|
1565
|
+
* field-remaps). Use a raw `EntityRow & { rating: number }` intersection when a
|
|
1566
|
+
* field needs a specific scalar type rather than mere presence.
|
|
1567
|
+
*
|
|
1568
|
+
* @example
|
|
1569
|
+
* // HeroOrganism renders entity.title / entity.subtitle:
|
|
1570
|
+
* entity?: EntityWith<'title' | 'subtitle'>;
|
|
1571
|
+
* // entity.title → FieldValue (required)
|
|
1572
|
+
* // entity.other → FieldValue | undefined (still field-open)
|
|
1573
|
+
*/
|
|
1574
|
+
type EntityWith<K extends string> = EntityRow & {
|
|
1575
|
+
readonly [P in K]: FieldValue;
|
|
1576
|
+
};
|
|
1552
1577
|
/**
|
|
1553
1578
|
* Collection of entity instances keyed by entity name.
|
|
1554
1579
|
* Used by OrbPreview mockData, OrbitalServerRuntime state, data grids, etc.
|
|
@@ -3305,8 +3330,8 @@ declare const TraitReferenceSchema: z.ZodEffects<z.ZodObject<{
|
|
|
3305
3330
|
from?: string | undefined;
|
|
3306
3331
|
effects?: Record<string, unknown[]> | undefined;
|
|
3307
3332
|
listens?: unknown[] | undefined;
|
|
3308
|
-
appliesTo?: string[] | undefined;
|
|
3309
3333
|
linkedEntity?: string | undefined;
|
|
3334
|
+
appliesTo?: string[] | undefined;
|
|
3310
3335
|
emitsScope?: "internal" | "external" | undefined;
|
|
3311
3336
|
}, {
|
|
3312
3337
|
ref: string;
|
|
@@ -3317,8 +3342,8 @@ declare const TraitReferenceSchema: z.ZodEffects<z.ZodObject<{
|
|
|
3317
3342
|
from?: string | undefined;
|
|
3318
3343
|
effects?: Record<string, unknown[]> | undefined;
|
|
3319
3344
|
listens?: unknown[] | undefined;
|
|
3320
|
-
appliesTo?: string[] | undefined;
|
|
3321
3345
|
linkedEntity?: string | undefined;
|
|
3346
|
+
appliesTo?: string[] | undefined;
|
|
3322
3347
|
emitsScope?: "internal" | "external" | undefined;
|
|
3323
3348
|
}>, {
|
|
3324
3349
|
ref: string;
|
|
@@ -3329,8 +3354,8 @@ declare const TraitReferenceSchema: z.ZodEffects<z.ZodObject<{
|
|
|
3329
3354
|
from?: string | undefined;
|
|
3330
3355
|
effects?: Record<string, unknown[]> | undefined;
|
|
3331
3356
|
listens?: unknown[] | undefined;
|
|
3332
|
-
appliesTo?: string[] | undefined;
|
|
3333
3357
|
linkedEntity?: string | undefined;
|
|
3358
|
+
appliesTo?: string[] | undefined;
|
|
3334
3359
|
emitsScope?: "internal" | "external" | undefined;
|
|
3335
3360
|
}, {
|
|
3336
3361
|
ref: string;
|
|
@@ -3341,8 +3366,8 @@ declare const TraitReferenceSchema: z.ZodEffects<z.ZodObject<{
|
|
|
3341
3366
|
from?: string | undefined;
|
|
3342
3367
|
effects?: Record<string, unknown[]> | undefined;
|
|
3343
3368
|
listens?: unknown[] | undefined;
|
|
3344
|
-
appliesTo?: string[] | undefined;
|
|
3345
3369
|
linkedEntity?: string | undefined;
|
|
3370
|
+
appliesTo?: string[] | undefined;
|
|
3346
3371
|
emitsScope?: "internal" | "external" | undefined;
|
|
3347
3372
|
}>;
|
|
3348
3373
|
/**
|
|
@@ -6102,4 +6127,4 @@ declare const OrbitalTraitRefSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
|
6102
6127
|
} | undefined;
|
|
6103
6128
|
}>]>;
|
|
6104
6129
|
|
|
6105
|
-
export { type
|
|
6130
|
+
export { type EnumEntityField as $, type AgentEffect as A, DeclaredTraitConfigSchema as B, type CallServiceConfig as C, type DeclaredTraitConfig as D, type Effect as E, type DerefEffect as F, type DespawnEffect as G, type DoEffect as H, ENTITY_ROLES as I, type EffectInput as J, EffectSchema as K, type EmitConfig as L, type EmitEffect as M, type EntityData as N, type EntityFieldContract as O, EntityFieldContractSchema as P, type EntityFieldInput as Q, type RenderBinding as R, type State as S, type Trait as T, type UISlot as U, EntityFieldSchema as V, EntityPersistenceSchema as W, type EntityRole as X, EntityRoleSchema as Y, EntitySchema as Z, type EntityWith as _, type RenderUIEffect as a, type RestServiceDef as a$, type EvaluateConfig as a0, type EvaluateEffect as a1, type Event as a2, type EventInput as a3, type EventPayloadField as a4, EventPayloadFieldSchema as a5, EventSchema as a6, type EventScope as a7, EventScopeSchema as a8, type FetchEffect as a9, type OrbitalEntity as aA, type OrbitalEntityInput as aB, OrbitalEntitySchema as aC, type OrbitalTraitRef as aD, OrbitalTraitRefSchema as aE, type OsEffect as aF, type PayloadField as aG, PayloadFieldSchema as aH, type PersistData as aI, type PersistEffect as aJ, type PersistEmitConfig as aK, type PresentationType as aL, type RefEffect as aM, type RelationConfig as aN, RelationConfigSchema as aO, type RelationEntityField as aP, type RenderItemLambda as aQ, type RenderUIConfig as aR, type RenderUINode as aS, type RequiredField as aT, RequiredFieldSchema as aU, type ResolvedAsset as aV, type ResolvedAssetInput as aW, ResolvedAssetSchema as aX, type ResolvedPatternProps as aY, type RestAuthConfig as aZ, RestAuthConfigSchema as a_, type FetchOptions as aa, type FetchResult as ab, type Field as ac, type FieldFormat as ad, FieldFormatSchema as ae, FieldSchema as af, type FieldType as ag, FieldTypeSchema as ah, type FieldValue as ai, type ForwardConfig as aj, type ForwardEffect as ak, GAME_TYPES as al, type GameType as am, GameTypeSchema as an, type Guard as ao, type GuardInput as ap, GuardSchema as aq, type ListenSource as ar, ListenSourceSchema as as, type LogEffect as at, type McpServiceDef as au, McpServiceDefSchema as av, type NavigateEffect as aw, type NnConfig as ax, type NnLayer as ay, type NotifyEffect as az, type TraitEventContract as b, callService as b$, RestServiceDefSchema as b0, SERVICE_TYPES as b1, type ScalarEntityField as b2, type SemanticAssetRef as b3, type SemanticAssetRefInput as b4, SemanticAssetRefSchema as b5, type ServiceDefinition as b6, ServiceDefinitionSchema as b7, type ServiceParams as b8, type ServiceParamsValue as b9, TraitConfigValueSchema as bA, type TraitDataEntity as bB, TraitDataEntitySchema as bC, type TraitEntityField as bD, TraitEntityFieldSchema as bE, TraitEventContractSchema as bF, TraitEventListenerSchema as bG, type TraitInput as bH, TraitRefSchema as bI, type TraitReferenceInput as bJ, TraitReferenceSchema as bK, TraitSchema as bL, type TraitTick as bM, TraitTickSchema as bN, type TraitUIBinding as bO, type Transition as bP, type TransitionInput as bQ, TransitionSchema as bR, type TypedEffect as bS, UISlotSchema as bT, UI_SLOTS as bU, VISUAL_STYLES as bV, type VisualStyle as bW, VisualStyleSchema as bX, type WatchEffect as bY, type WatchOptions as bZ, atomic as b_, type ServiceRef as ba, type ServiceRefObject as bb, ServiceRefObjectSchema as bc, ServiceRefSchema as bd, ServiceRefStringSchema as be, type ServiceType as bf, ServiceTypeSchema as bg, type SetEffect as bh, type SocketEvents as bi, SocketEventsSchema as bj, type SocketServiceDef as bk, SocketServiceDefSchema as bl, type SpawnEffect as bm, type StateInput as bn, type StateMachine as bo, type StateMachineInput as bp, StateMachineSchema as bq, StateSchema as br, type SwapEffect as bs, type TrainConfig as bt, type TrainEffect as bu, type TraitCategory as bv, TraitCategorySchema as bw, type TraitConfigObject as bx, TraitConfigSchema as by, type TraitConfigValue as bz, type Entity as c, createAssetKey as c0, deref as c1, deriveCollection as c2, despawn as c3, doEffects as c4, emit as c5, findService as c6, getDefaultAnimationsForRole as c7, getServiceNames as c8, getTraitConfig as c9, type TraitScope as cA, getTraitName as ca, hasService as cb, isCircuitEvent as cc, isEffect as cd, isInlineTrait as ce, isMcpService as cf, isRestService as cg, isRuntimeEntity as ch, isSExprEffect as ci, isServiceReference as cj, isServiceReferenceObject as ck, isSingletonEntity as cl, isSocketService as cm, navigate as cn, normalizeTraitRef as co, notify as cp, parseAssetKey as cq, parseServiceRef as cr, persist as cs, ref as ct, renderUI as cu, set as cv, spawn as cw, swap as cx, validateAssetAnimations as cy, watch as cz, type TraitEventListener as d, type TraitConfig as e, type EntityField as f, type EntityPersistence as g, type EntityRow as h, type TraitRef as i, type TraitReference as j, type AnimationDef as k, type AnimationDefInput as l, AnimationDefSchema as m, type ArrayEntityField as n, type AssetMap as o, type AssetMapInput as p, AssetMapSchema as q, type AssetMapping as r, type AssetMappingInput as s, AssetMappingSchema as t, type AtomicEffect as u, type CallServiceEffect as v, type CheckpointLoadEffect as w, type CheckpointSaveEffect as x, type ConfigFieldDeclaration as y, ConfigFieldDeclarationSchema as z };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { a as OrbitalSchema, a7 as Orbital, b as Page, L as DomainContext, O as OrbitalDefinition, b0 as PageTraitRef } from '../schema-
|
|
2
|
-
export { A as AGENT_DOMAIN_CATEGORIES, d as ALLOWED_CUSTOM_COMPONENTS, e as AgentDomainCategory, f as AgentDomainCategorySchema, g as AllowedCustomComponent, C as ColorSlice, h as ColorSliceSchema, i as ColorTokens, j as ColorTokensSchema, k as ComputedEventContract, l as ComputedEventContractSchema, m as ComputedEventListener, n as ComputedEventListenerSchema, o as ConfigProvenanceRecord, p as ConfigProvenanceRecordSchema, q as CustomPatternDefinition, r as CustomPatternDefinitionInput, s as CustomPatternDefinitionSchema, t as CustomPatternMap, u as CustomPatternMapInput, v as CustomPatternMapSchema, D as DensitySlice, w as DensitySliceSchema, x as DensityTokens, y as DensityTokensSchema, z as DesignPreferences, B as DesignPreferencesInput, F as DesignPreferencesSchema, G as DesignTokens, H as DesignTokensInput, I as DesignTokensSchema, J as DomainCategory, K as DomainCategorySchema, M as DomainContextInput, N as DomainContextSchema, Q as DomainVocabulary, R as DomainVocabularySchema, S as ElevationSlice, T as ElevationSliceSchema, V as ElevationTokens, W as ElevationTokensSchema, X as EntityCall, Y as EntityCallSchema, E as EntityRef, Z as EntityRefSchema, _ as EntityRefStringSchema, $ as EntitySemanticRole, a0 as EntitySemanticRoleSchema, a1 as EventListener, a2 as EventListenerSchema, a3 as EventSemanticRole, a4 as EventSemanticRoleSchema, a5 as EventSource, a6 as EventSourceSchema, a8 as GameSubCategory, a9 as GameSubCategorySchema, aa as GeometrySlice, ab as GeometrySliceSchema, ac as GeometryTokens, ad as GeometryTokensSchema, ae as IconFamily, af as IconFamilySchema, ag as IconographySlice, ah as IconographySliceSchema, ai as IconographyTokens, aj as IconographyTokensSchema, ak as IllustrationSlice, al as IllustrationSliceSchema, am as IllustrationStyle, an as IllustrationStyleSchema, ao as IllustrationTokens, ap as IllustrationTokensSchema, aq as MotionDurationKey, ar as MotionDurationKeySchema, as as MotionDurationPalette, at as MotionDurationPaletteSchema, au as MotionEasingKey, av as MotionEasingKeySchema, aw as MotionEasingPalette, ax as MotionEasingPaletteSchema, ay as MotionIntent, az as MotionIntentMap, aA as MotionIntentMapSchema, aB as MotionIntentSchema, aC as MotionSlice, aD as MotionSliceSchema, aE as MotionTokens, aF as MotionTokensSchema, aG as NodeClassification, aH as NodeClassificationSchema, aI as OrbitalConfig, aJ as OrbitalConfigInput, aK as OrbitalConfigSchema, aL as OrbitalDefinitionSchema, aM as OrbitalInput, aN as OrbitalPage, aO as OrbitalPageInput, aP as OrbitalPageSchema, aQ as OrbitalPageStrictInput, aR as OrbitalPageStrictSchema, aS as OrbitalSchemaInput, aT as OrbitalSchemaSchema, aU as OrbitalSchemaWithTraits, aV as OrbitalUnit, aW as OrbitalUnitSchema, aX as OrbitalZodSchema, P as PageRef, c as PageRefObject, aY as PageRefObjectSchema, aZ as PageRefSchema, a_ as PageRefStringSchema, a$ as PageSchema, b1 as PageTraitRefSchema, b2 as RelatedLink, b3 as RelatedLinkSchema, b4 as SchemaMetadata, b5 as SchemaMetadataSchema, b6 as SkinSpec, b7 as SkinSpecSchema, b8 as SpacingScale, b9 as SpacingScaleSchema, ba as StateSemanticRole, bb as StateSemanticRoleSchema, bc as SuggestedGuard, bd as SuggestedGuardSchema, be as ThemeDefinition, bf as ThemeDefinitionSchema, bg as ThemeRef, bh as ThemeRefSchema, bi as ThemeRefStringSchema, bj as ThemeTokens, bk as ThemeTokensSchema, bl as ThemeVariant, bm as ThemeVariantSchema, bn as TypeIntent, bo as TypeIntentMap, bp as TypeIntentMapSchema, bq as TypeIntentSchema, br as TypeScale, bs as TypeScaleEntry, bt as TypeScaleEntrySchema, bu as TypeScaleSchema, bv as TypeScaleTokens, bw as TypeScaleTokensSchema, bx as TypeSizeKey, by as TypeSizeKeySchema, bz as TypeSlice, bA as TypeSliceSchema, bB as TypeSlot, bC as TypeSlotSchema, bD as TypeWeight, bE as TypeWeightSchema, bF as UXHints, bG as UXHintsSchema, U as UseDeclaration, bH as UseDeclarationSchema, bI as UserPersona, bJ as UserPersonaInput, bK as UserPersonaSchema, bL as ViewType, bM as ViewTypeSchema, bN as isEntityCall, bO as isEntityReference, bP as isEntityReferenceAny, bQ as isImportedTraitRef, bR as isOrbitalDefinition, bS as isPageReference, bT as isPageReferenceObject, bU as isPageReferenceString, bV as isThemeReference, bW as parseEntityRef, bX as parseImportedTraitRef, bY as parseOrbitalSchema, bZ as parsePageRef, b_ as safeParseOrbitalSchema } from '../schema-
|
|
3
|
-
import {
|
|
4
|
-
export { A as AgentEffect, k as AnimationDef, l as AnimationDefInput, m as AnimationDefSchema, n as ArrayEntityField, o as AssetMap, p as AssetMapInput, q as AssetMapSchema, r as AssetMapping, s as AssetMappingInput, t as AssetMappingSchema, u as AtomicEffect, C as CallServiceConfig, v as CallServiceEffect, w as CheckpointLoadEffect, x as CheckpointSaveEffect, z as ConfigFieldDeclarationSchema, B as DeclaredTraitConfigSchema, F as DerefEffect, G as DespawnEffect, H as DoEffect, I as ENTITY_ROLES, J as EffectInput, K as EffectSchema, L as EmitConfig, M as EmitEffect, N as EntityData, O as EntityFieldContract, P as EntityFieldContractSchema, Q as EntityFieldInput, V as EntityFieldSchema, W as EntityPersistenceSchema, X as EntityRole, Y as EntityRoleSchema, Z as EntitySchema, _ as
|
|
1
|
+
import { a as OrbitalSchema, a7 as Orbital, b as Page, L as DomainContext, O as OrbitalDefinition, b0 as PageTraitRef } from '../schema-BetbBFJb.js';
|
|
2
|
+
export { A as AGENT_DOMAIN_CATEGORIES, d as ALLOWED_CUSTOM_COMPONENTS, e as AgentDomainCategory, f as AgentDomainCategorySchema, g as AllowedCustomComponent, C as ColorSlice, h as ColorSliceSchema, i as ColorTokens, j as ColorTokensSchema, k as ComputedEventContract, l as ComputedEventContractSchema, m as ComputedEventListener, n as ComputedEventListenerSchema, o as ConfigProvenanceRecord, p as ConfigProvenanceRecordSchema, q as CustomPatternDefinition, r as CustomPatternDefinitionInput, s as CustomPatternDefinitionSchema, t as CustomPatternMap, u as CustomPatternMapInput, v as CustomPatternMapSchema, D as DensitySlice, w as DensitySliceSchema, x as DensityTokens, y as DensityTokensSchema, z as DesignPreferences, B as DesignPreferencesInput, F as DesignPreferencesSchema, G as DesignTokens, H as DesignTokensInput, I as DesignTokensSchema, J as DomainCategory, K as DomainCategorySchema, M as DomainContextInput, N as DomainContextSchema, Q as DomainVocabulary, R as DomainVocabularySchema, S as ElevationSlice, T as ElevationSliceSchema, V as ElevationTokens, W as ElevationTokensSchema, X as EntityCall, Y as EntityCallSchema, E as EntityRef, Z as EntityRefSchema, _ as EntityRefStringSchema, $ as EntitySemanticRole, a0 as EntitySemanticRoleSchema, a1 as EventListener, a2 as EventListenerSchema, a3 as EventSemanticRole, a4 as EventSemanticRoleSchema, a5 as EventSource, a6 as EventSourceSchema, a8 as GameSubCategory, a9 as GameSubCategorySchema, aa as GeometrySlice, ab as GeometrySliceSchema, ac as GeometryTokens, ad as GeometryTokensSchema, ae as IconFamily, af as IconFamilySchema, ag as IconographySlice, ah as IconographySliceSchema, ai as IconographyTokens, aj as IconographyTokensSchema, ak as IllustrationSlice, al as IllustrationSliceSchema, am as IllustrationStyle, an as IllustrationStyleSchema, ao as IllustrationTokens, ap as IllustrationTokensSchema, aq as MotionDurationKey, ar as MotionDurationKeySchema, as as MotionDurationPalette, at as MotionDurationPaletteSchema, au as MotionEasingKey, av as MotionEasingKeySchema, aw as MotionEasingPalette, ax as MotionEasingPaletteSchema, ay as MotionIntent, az as MotionIntentMap, aA as MotionIntentMapSchema, aB as MotionIntentSchema, aC as MotionSlice, aD as MotionSliceSchema, aE as MotionTokens, aF as MotionTokensSchema, aG as NodeClassification, aH as NodeClassificationSchema, aI as OrbitalConfig, aJ as OrbitalConfigInput, aK as OrbitalConfigSchema, aL as OrbitalDefinitionSchema, aM as OrbitalInput, aN as OrbitalPage, aO as OrbitalPageInput, aP as OrbitalPageSchema, aQ as OrbitalPageStrictInput, aR as OrbitalPageStrictSchema, aS as OrbitalSchemaInput, aT as OrbitalSchemaSchema, aU as OrbitalSchemaWithTraits, aV as OrbitalUnit, aW as OrbitalUnitSchema, aX as OrbitalZodSchema, P as PageRef, c as PageRefObject, aY as PageRefObjectSchema, aZ as PageRefSchema, a_ as PageRefStringSchema, a$ as PageSchema, b1 as PageTraitRefSchema, b2 as RelatedLink, b3 as RelatedLinkSchema, b4 as SchemaMetadata, b5 as SchemaMetadataSchema, b6 as SkinSpec, b7 as SkinSpecSchema, b8 as SpacingScale, b9 as SpacingScaleSchema, ba as StateSemanticRole, bb as StateSemanticRoleSchema, bc as SuggestedGuard, bd as SuggestedGuardSchema, be as ThemeDefinition, bf as ThemeDefinitionSchema, bg as ThemeRef, bh as ThemeRefSchema, bi as ThemeRefStringSchema, bj as ThemeTokens, bk as ThemeTokensSchema, bl as ThemeVariant, bm as ThemeVariantSchema, bn as TypeIntent, bo as TypeIntentMap, bp as TypeIntentMapSchema, bq as TypeIntentSchema, br as TypeScale, bs as TypeScaleEntry, bt as TypeScaleEntrySchema, bu as TypeScaleSchema, bv as TypeScaleTokens, bw as TypeScaleTokensSchema, bx as TypeSizeKey, by as TypeSizeKeySchema, bz as TypeSlice, bA as TypeSliceSchema, bB as TypeSlot, bC as TypeSlotSchema, bD as TypeWeight, bE as TypeWeightSchema, bF as UXHints, bG as UXHintsSchema, U as UseDeclaration, bH as UseDeclarationSchema, bI as UserPersona, bJ as UserPersonaInput, bK as UserPersonaSchema, bL as ViewType, bM as ViewTypeSchema, bN as isEntityCall, bO as isEntityReference, bP as isEntityReferenceAny, bQ as isImportedTraitRef, bR as isOrbitalDefinition, bS as isPageReference, bT as isPageReferenceObject, bU as isPageReferenceString, bV as isThemeReference, bW as parseEntityRef, bX as parseImportedTraitRef, bY as parseOrbitalSchema, bZ as parsePageRef, b_ as safeParseOrbitalSchema } from '../schema-BetbBFJb.js';
|
|
3
|
+
import { b8 as ServiceParams, T as Trait, c as Entity, h as EntityRow, ai as FieldValue, D as DeclaredTraitConfig, e as TraitConfig, E as Effect, y as ConfigFieldDeclaration, S as State, bP as Transition, f as EntityField, a2 as Event, bz as TraitConfigValue, g as EntityPersistence, bv as TraitCategory, cA as TraitScope } from '../trait-CjyEE6Di.js';
|
|
4
|
+
export { A as AgentEffect, k as AnimationDef, l as AnimationDefInput, m as AnimationDefSchema, n as ArrayEntityField, o as AssetMap, p as AssetMapInput, q as AssetMapSchema, r as AssetMapping, s as AssetMappingInput, t as AssetMappingSchema, u as AtomicEffect, C as CallServiceConfig, v as CallServiceEffect, w as CheckpointLoadEffect, x as CheckpointSaveEffect, z as ConfigFieldDeclarationSchema, B as DeclaredTraitConfigSchema, F as DerefEffect, G as DespawnEffect, H as DoEffect, I as ENTITY_ROLES, J as EffectInput, K as EffectSchema, L as EmitConfig, M as EmitEffect, N as EntityData, O as EntityFieldContract, P as EntityFieldContractSchema, Q as EntityFieldInput, V as EntityFieldSchema, W as EntityPersistenceSchema, X as EntityRole, Y as EntityRoleSchema, Z as EntitySchema, _ as EntityWith, $ as EnumEntityField, a0 as EvaluateConfig, a1 as EvaluateEffect, a3 as EventInput, a4 as EventPayloadField, a5 as EventPayloadFieldSchema, a6 as EventSchema, a7 as EventScope, a8 as EventScopeSchema, a9 as FetchEffect, aa as FetchOptions, ab as FetchResult, ac as Field, ad as FieldFormat, ae as FieldFormatSchema, af as FieldSchema, ag as FieldType, ah as FieldTypeSchema, aj as ForwardConfig, ak as ForwardEffect, al as GAME_TYPES, am as GameType, an as GameTypeSchema, ao as Guard, ap as GuardInput, aq as GuardSchema, ar as ListenSource, as as ListenSourceSchema, at as LogEffect, au as McpServiceDef, av as McpServiceDefSchema, aw as NavigateEffect, ax as NnConfig, ay as NnLayer, az as NotifyEffect, aA as OrbitalEntity, aB as OrbitalEntityInput, aC as OrbitalEntitySchema, aD as OrbitalTraitRef, aE as OrbitalTraitRefSchema, aF as OsEffect, aG as PayloadField, aH as PayloadFieldSchema, aI as PersistData, aJ as PersistEffect, aK as PersistEmitConfig, aL as PresentationType, aM as RefEffect, aN as RelationConfig, aO as RelationConfigSchema, aP as RelationEntityField, R as RenderBinding, aQ as RenderItemLambda, aR as RenderUIConfig, a as RenderUIEffect, aS as RenderUINode, aT as RequiredField, aU as RequiredFieldSchema, aV as ResolvedAsset, aW as ResolvedAssetInput, aX as ResolvedAssetSchema, aY as ResolvedPatternProps, aZ as RestAuthConfig, a_ as RestAuthConfigSchema, a$ as RestServiceDef, b0 as RestServiceDefSchema, b1 as SERVICE_TYPES, b2 as ScalarEntityField, b3 as SemanticAssetRef, b4 as SemanticAssetRefInput, b5 as SemanticAssetRefSchema, b6 as ServiceDefinition, b7 as ServiceDefinitionSchema, b9 as ServiceParamsValue, ba as ServiceRef, bb as ServiceRefObject, bc as ServiceRefObjectSchema, bd as ServiceRefSchema, be as ServiceRefStringSchema, bf as ServiceType, bg as ServiceTypeSchema, bh as SetEffect, bi as SocketEvents, bj as SocketEventsSchema, bk as SocketServiceDef, bl as SocketServiceDefSchema, bm as SpawnEffect, bn as StateInput, bo as StateMachine, bp as StateMachineInput, bq as StateMachineSchema, br as StateSchema, bs as SwapEffect, bt as TrainConfig, bu as TrainEffect, bw as TraitCategorySchema, bx as TraitConfigObject, by as TraitConfigSchema, bA as TraitConfigValueSchema, bB as TraitDataEntity, bC as TraitDataEntitySchema, bD as TraitEntityField, bE as TraitEntityFieldSchema, b as TraitEventContract, bF as TraitEventContractSchema, d as TraitEventListener, bG as TraitEventListenerSchema, bH as TraitInput, i as TraitRef, bI as TraitRefSchema, j as TraitReference, bJ as TraitReferenceInput, bK as TraitReferenceSchema, bL as TraitSchema, bM as TraitTick, bN as TraitTickSchema, bO as TraitUIBinding, bQ as TransitionInput, bR as TransitionSchema, bS as TypedEffect, U as UISlot, bT as UISlotSchema, bU as UI_SLOTS, bV as VISUAL_STYLES, bW as VisualStyle, bX as VisualStyleSchema, bY as WatchEffect, bZ as WatchOptions, b_ as atomic, b$ as callService, c0 as createAssetKey, c1 as deref, c2 as deriveCollection, c3 as despawn, c4 as doEffects, c5 as emit, c6 as findService, c7 as getDefaultAnimationsForRole, c8 as getServiceNames, c9 as getTraitConfig, ca as getTraitName, cb as hasService, cc as isCircuitEvent, cd as isEffect, ce as isInlineTrait, cf as isMcpService, cg as isRestService, ch as isRuntimeEntity, ci as isSExprEffect, cj as isServiceReference, ck as isServiceReferenceObject, cl as isSingletonEntity, cm as isSocketService, cn as navigate, co as normalizeTraitRef, cp as notify, cq as parseAssetKey, cr as parseServiceRef, cs as persist, ct as ref, cu as renderUI, cv as set, cw as spawn, cx as swap, cy as validateAssetAnimations, cz as watch } from '../trait-CjyEE6Di.js';
|
|
5
5
|
import { c as EventPayloadValue, b as EventPayload, L as LogMeta, S as SExpr, E as EvalContext } from '../expression-BVRFm0sV.js';
|
|
6
6
|
export { C as CORE_BINDINGS, a as CoreBinding, d as Expression, e as ExpressionInput, f as ExpressionSchema, P as ParsedBinding, g as SExprAtom, h as SExprAtomSchema, i as SExprInput, j as SExprSchema, k as collectBindings, l as getArgs, m as getOperator, n as isBinding, o as isSExpr, p as isSExprAtom, q as isSExprCall, r as isValidBinding, s as parseBinding, t as sexpr, w as walkSExpr } from '../expression-BVRFm0sV.js';
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { AnyPatternConfig } from '@almadar/patterns';
|
|
9
9
|
export { PATTERN_TYPES, PatternConfig, PatternType, isValidPatternType } from '@almadar/patterns';
|
|
10
|
-
import { c as FactoryConfigTier } from '../types-
|
|
11
|
-
export { J as JsonObject, n as JsonValue, T as ToolArgs, t as isJsonArray, u as isJsonObject, v as isJsonPrimitive } from '../types-
|
|
10
|
+
import { c as FactoryConfigTier } from '../types-KzrHszR_.js';
|
|
11
|
+
export { J as JsonObject, n as JsonValue, T as ToolArgs, t as isJsonArray, u as isJsonObject, v as isJsonPrimitive } from '../types-KzrHszR_.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* S-Expression Bindings
|
|
@@ -1262,73 +1262,6 @@ type EventEmit<P> = string & {
|
|
|
1262
1262
|
type EventListen<P> = string & {
|
|
1263
1263
|
readonly __listenPayload?: P;
|
|
1264
1264
|
};
|
|
1265
|
-
/**
|
|
1266
|
-
* Phantom-typed brand for a component's data INLET, cardinality-neutral. The
|
|
1267
|
-
* shared base of `EntityRecord<T>` / `EntityCollection<T>`: it declares "this
|
|
1268
|
-
* prop is the bound-entity inlet" (the role) WITHOUT committing to record vs
|
|
1269
|
-
* collection. Structurally `(T | readonly T[])`.
|
|
1270
|
-
*
|
|
1271
|
-
* Use it on a SHARED base interface (e.g. `EntityDisplayProps<T>.entity`) whose
|
|
1272
|
-
* concrete extenders render either one record or a list — each extender narrows
|
|
1273
|
-
* to `EntityRecord<T>` / `EntityCollection<T>` in its own Props, and both are
|
|
1274
|
-
* assignable back to `EntityInlet<T>` (they intersect it), so the `extends`
|
|
1275
|
-
* stays sound. A prop left as `EntityInlet<T>` gets `kind: "entity"` with the
|
|
1276
|
-
* cardinality supplied by pattern-sync's base-prop default.
|
|
1277
|
-
*/
|
|
1278
|
-
type EntityInlet<T> = (T | readonly T[]) & {
|
|
1279
|
-
readonly __entityInlet?: true;
|
|
1280
|
-
};
|
|
1281
|
-
/**
|
|
1282
|
-
* Phantom-typed brand for a component's data INLET binding a SINGLE entity
|
|
1283
|
-
* record. The inlet half of a pattern's circuit, symmetric with the event
|
|
1284
|
-
* OUTLET brands above: just as `EventEmit<P>` declares "this prop is a bus
|
|
1285
|
-
* outlet" by type identity, `EntityRecord<T>` declares "this prop is the
|
|
1286
|
-
* bound-entity inlet, cardinality = one record."
|
|
1287
|
-
*
|
|
1288
|
-
* Structurally `(T | readonly T[])` — the SAME permissive shape as
|
|
1289
|
-
* `EntityCollection<T>` — because record renderers routinely accept an array
|
|
1290
|
-
* and collapse to its first element (e.g. DetailPanel's
|
|
1291
|
-
* `Array.isArray(entity) ? entity[0] : entity`). The `cardinality: "record"` is
|
|
1292
|
-
* therefore a DECLARED intent carried by the brand, not a structural
|
|
1293
|
-
* constraint, so annotating an existing `entity: T | readonly T[]` prop is a
|
|
1294
|
-
* pure type swap with no body change. The two inlet brands differ ONLY in the
|
|
1295
|
-
* declared cardinality — that is the whole point: the shape is declared.
|
|
1296
|
-
*
|
|
1297
|
-
* Pattern-sync (`tools/almadar-pattern-sync/parser.ts`) detects this brand by
|
|
1298
|
-
* type identity — imported from `@almadar/core`, exactly like `EventKey` /
|
|
1299
|
-
* `EventEmit<P>` — and writes into the patterns registry:
|
|
1300
|
-
* - `kind: "entity"` — the discriminant declaring this prop is the data inlet.
|
|
1301
|
-
* - `cardinality: "record"` — one record (vs a collection).
|
|
1302
|
-
* - the element's fixed sub-slots (via `items.properties`) when `T` is a
|
|
1303
|
-
* concrete interface; a generic `T` stays field-open (the domain entity
|
|
1304
|
-
* supplies the fields at compose time).
|
|
1305
|
-
*
|
|
1306
|
-
* Consumers read the inlet descriptor to bind the domain entity WITHOUT
|
|
1307
|
-
* name-matching the prop, closing the pattern's circuit deterministically.
|
|
1308
|
-
*
|
|
1309
|
-
* // DetailPanel.tsx
|
|
1310
|
-
* entity: EntityRecord<T>; // -> kind:"entity", cardinality:"record"
|
|
1311
|
-
*/
|
|
1312
|
-
type EntityRecord<T> = EntityInlet<T> & {
|
|
1313
|
-
readonly __entityCardinality?: "record";
|
|
1314
|
-
};
|
|
1315
|
-
/**
|
|
1316
|
-
* Phantom-typed brand for a component's data INLET binding a COLLECTION of
|
|
1317
|
-
* entity records. Mirror of `EntityRecord<T>` with `cardinality: "collection"`.
|
|
1318
|
-
*
|
|
1319
|
-
* The structural type is `T | readonly T[]` — matching the real, permissive
|
|
1320
|
-
* contract of collection renderers (they accept a single record and normalize
|
|
1321
|
-
* it to a one-element list, e.g. DataGrid's `Array.isArray(entity) ? entity :
|
|
1322
|
-
* [entity]`). The `cardinality: "collection"` is therefore a DECLARED intent
|
|
1323
|
-
* carried by the brand, not a structural constraint — so annotating an existing
|
|
1324
|
-
* `entity: T | readonly T[]` prop is a pure type swap with no body change.
|
|
1325
|
-
*
|
|
1326
|
-
* // DataGrid.tsx
|
|
1327
|
-
* entity: EntityCollection<T>; // -> kind:"entity", cardinality:"collection"
|
|
1328
|
-
*/
|
|
1329
|
-
type EntityCollection<T> = EntityInlet<T> & {
|
|
1330
|
-
readonly __entityCardinality?: "collection";
|
|
1331
|
-
};
|
|
1332
1265
|
/**
|
|
1333
1266
|
* Identifies the origin of a bus event. Used by cross-trait listeners to
|
|
1334
1267
|
* filter emits from specific orbitals, traits, transitions, or ticks.
|
|
@@ -2208,4 +2141,4 @@ interface ParsedDesign {
|
|
|
2208
2141
|
};
|
|
2209
2142
|
}
|
|
2210
2143
|
|
|
2211
|
-
export { type AgentCodeSearchResult, type AgentCompactResult, type AgentCompactStrategy, type AgentContext, type AgentGenerateOptions, type AgentMemoryCategory, type AgentMemoryRecord, type AnnotationTier, OrbitalSchema as AppSchema, type AppSummary, type AssetLoadStatus, BINDING_CONTEXT_RULES, BINDING_DOCS, BINDING_ROOTS, type BindingContext, type BindingRoot, BindingSchema, type BridgeHealth, type BusEvent, type BusEventListener, type BusEventSource, type CategorizedRemovals, type ChangeAuthor, type ChangeSetDocument, type ChangeSummary, type ChangesetValue, type CheckStatus, ConfigFieldDeclaration, type ContextExtensions, type CreateFlow, DEFAULT_INTERACTION_MODELS, DeclaredTraitConfig, type DeleteFlow, DomainContext, type EdgeType, type EditFlow, Effect, type EffectPayload, type EffectResult, type EffectTrace, Entity,
|
|
2144
|
+
export { type AgentCodeSearchResult, type AgentCompactResult, type AgentCompactStrategy, type AgentContext, type AgentGenerateOptions, type AgentMemoryCategory, type AgentMemoryRecord, type AnnotationTier, OrbitalSchema as AppSchema, type AppSummary, type AssetLoadStatus, BINDING_CONTEXT_RULES, BINDING_DOCS, BINDING_ROOTS, type BindingContext, type BindingRoot, BindingSchema, type BridgeHealth, type BusEvent, type BusEventListener, type BusEventSource, type CategorizedRemovals, type ChangeAuthor, type ChangeSetDocument, type ChangeSummary, type ChangesetValue, type CheckStatus, ConfigFieldDeclaration, type ContextExtensions, type CreateFlow, DEFAULT_INTERACTION_MODELS, DeclaredTraitConfig, type DeleteFlow, DomainContext, type EdgeType, type EditFlow, Effect, type EffectPayload, type EffectResult, type EffectTrace, Entity, EntityField, EntityPersistence, EntityRow, EvalContext, Event, type EventEmit, type EventKey, type EventListen, type EventLogEntry, EventPayload, EventPayloadValue, type EvolutionDelta, FieldValue, Orbital as FullOrbitalUnit, type GateState, type GitHubLink, type HistoryMeta, type InteractionModel, type InteractionModelInput, InteractionModelSchema, KNOWN_VALIDATION_ERROR_CODES, type KnobPayload, type KnownValidationErrorCode, type LazyService, type LineageEntry, type ListInteraction, type LivingEdge, type LivingEffect, type LivingEntity, type LivingEvent, type LivingField, type LivingOrbital, type LivingOrbitalSchema, type LivingPage, type LivingState, type LivingTrait, type LivingTransition, type LivingValue, type LivingVertex, LogMeta, Orbital, OrbitalDefinition, OrbitalSchema, type OrbitalVerificationAPI, Page, type PageContentReduction, PageTraitRef, type ParsedDesign, type ParsedDomainContext, type ParsedEmitDeclaration, type ParsedEntity, type ParsedEvent, type ParsedListenDeclaration, type ParsedOrbital, type ParsedPage, type ParsedState, type ParsedStateMachine, type ParsedTrait, type ParsedTraitConfig, type ParsedTransition, PatternTypeSchema, type PersistActionName, type Probability, type ResolvedEntity, type ResolvedEntityBinding, type ResolvedField, type ResolvedIR, type ResolvedNavigation, type ResolvedPage, type ResolvedPattern, type ResolvedSection, type ResolvedSectionEvent, type ResolvedTrait, type ResolvedTraitBinding, type ResolvedTraitDataEntity, type ResolvedTraitEvent, type ResolvedTraitGuard, type ResolvedTraitListener, type ResolvedTraitState, type ResolvedTraitTick, type ResolvedTraitTransition, type ResolvedTraitUIBinding, SExpr, type SaveOptions, type SaveResult, type SchemaChange, type SemanticAnnotation, type SemanticChangeKind, type SemanticSchemaChange, type SemanticVector, type ServerResponseTrace, type ServiceAction, type ServiceActionName, type ServiceContract, type ServiceEvents, ServiceParams, type SnapshotDocument, State, type StatsView, type StoreContract, type StoreFilter, type StoreFilterOp, Trait, TraitCategory, TraitConfig, TraitConfigValue, type TraitFieldRef, TraitFieldRefSchema, type TraitStateSnapshot, Transition, type TransitionFrom, type TransitionTrace, type Unsubscribe, OrbitalDefinition as ValidatedOrbital, type ValidationDocument, type ValidationError, type ValidationErrorCode, type ValidationIssue, type ValidationMeta, type ValidationResult, type ValidationResults, type VerificationCheck, type VerificationSnapshot, type VerificationSummary, type VertexId, type VertexPayload, type VertexType, type ViewFlow, createEmptyResolvedPage, createEmptyResolvedTrait, createLazyService, createResolvedField, createTypedEventBus, getAllPatternTypes, getBindingExamples, getInteractionModelForDomain, inferTsType, isKnownValidationErrorCode, isResolvedIR, isTraitFieldRef, toBindingRoot, validateBindingInContext, widenTier };
|