@almadar/core 5.7.0 → 5.9.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 +2 -2
- package/dist/{compose-behaviors-C2rrviU4.d.ts → compose-behaviors-CrvkqqKZ.d.ts} +1 -1
- package/dist/domain-language/index.d.ts +1 -1
- package/dist/domain-language/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/{schema-Dy3r-r80.d.ts → schema-jvDmDqz7.d.ts} +26 -26
- package/dist/state-machine/index.js +3 -1
- package/dist/state-machine/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -5382,7 +5382,7 @@ declare const OrbitalPageSchema: z.ZodObject<{
|
|
|
5382
5382
|
config?: TraitConfigObject | undefined;
|
|
5383
5383
|
linkedEntity?: string | undefined;
|
|
5384
5384
|
}[] | undefined;
|
|
5385
|
-
viewType?: "custom" | "create" | "
|
|
5385
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
5386
5386
|
}, {
|
|
5387
5387
|
path: string;
|
|
5388
5388
|
name: string;
|
|
@@ -5394,7 +5394,7 @@ declare const OrbitalPageSchema: z.ZodObject<{
|
|
|
5394
5394
|
config?: TraitConfigObject | undefined;
|
|
5395
5395
|
linkedEntity?: string | undefined;
|
|
5396
5396
|
}[] | undefined;
|
|
5397
|
-
viewType?: "custom" | "create" | "
|
|
5397
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
5398
5398
|
}>;
|
|
5399
5399
|
type OrbitalPageInput = z.input<typeof OrbitalPageSchema>;
|
|
5400
5400
|
type OrbitalPageStrictInput = z.input<typeof OrbitalPageStrictSchema>;
|
|
@@ -5432,7 +5432,7 @@ declare const PageSchema: z.ZodObject<{
|
|
|
5432
5432
|
config?: TraitConfigObject | undefined;
|
|
5433
5433
|
linkedEntity?: string | undefined;
|
|
5434
5434
|
}[] | undefined;
|
|
5435
|
-
viewType?: "custom" | "create" | "
|
|
5435
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
5436
5436
|
}, {
|
|
5437
5437
|
path: string;
|
|
5438
5438
|
name: string;
|
|
@@ -5444,7 +5444,7 @@ declare const PageSchema: z.ZodObject<{
|
|
|
5444
5444
|
config?: TraitConfigObject | undefined;
|
|
5445
5445
|
linkedEntity?: string | undefined;
|
|
5446
5446
|
}[] | undefined;
|
|
5447
|
-
viewType?: "custom" | "create" | "
|
|
5447
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
5448
5448
|
}>;
|
|
5449
5449
|
|
|
5450
5450
|
/**
|
|
@@ -7444,7 +7444,7 @@ declare const PageRefSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
7444
7444
|
config?: TraitConfigObject | undefined;
|
|
7445
7445
|
linkedEntity?: string | undefined;
|
|
7446
7446
|
}[] | undefined;
|
|
7447
|
-
viewType?: "custom" | "create" | "
|
|
7447
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
7448
7448
|
}, {
|
|
7449
7449
|
path: string;
|
|
7450
7450
|
name: string;
|
|
@@ -7456,7 +7456,7 @@ declare const PageRefSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
7456
7456
|
config?: TraitConfigObject | undefined;
|
|
7457
7457
|
linkedEntity?: string | undefined;
|
|
7458
7458
|
}[] | undefined;
|
|
7459
|
-
viewType?: "custom" | "create" | "
|
|
7459
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
7460
7460
|
}>, z.ZodString, z.ZodObject<{
|
|
7461
7461
|
ref: z.ZodString;
|
|
7462
7462
|
from: z.ZodOptional<z.ZodString>;
|
|
@@ -9696,7 +9696,7 @@ declare const OrbitalDefinitionSchema: z.ZodObject<{
|
|
|
9696
9696
|
config?: TraitConfigObject | undefined;
|
|
9697
9697
|
linkedEntity?: string | undefined;
|
|
9698
9698
|
}[] | undefined;
|
|
9699
|
-
viewType?: "custom" | "create" | "
|
|
9699
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
9700
9700
|
}, {
|
|
9701
9701
|
path: string;
|
|
9702
9702
|
name: string;
|
|
@@ -9708,7 +9708,7 @@ declare const OrbitalDefinitionSchema: z.ZodObject<{
|
|
|
9708
9708
|
config?: TraitConfigObject | undefined;
|
|
9709
9709
|
linkedEntity?: string | undefined;
|
|
9710
9710
|
}[] | undefined;
|
|
9711
|
-
viewType?: "custom" | "create" | "
|
|
9711
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
9712
9712
|
}>, z.ZodString, z.ZodObject<{
|
|
9713
9713
|
ref: z.ZodString;
|
|
9714
9714
|
from: z.ZodOptional<z.ZodString>;
|
|
@@ -10858,7 +10858,7 @@ declare const OrbitalDefinitionSchema: z.ZodObject<{
|
|
|
10858
10858
|
config?: TraitConfigObject | undefined;
|
|
10859
10859
|
linkedEntity?: string | undefined;
|
|
10860
10860
|
}[] | undefined;
|
|
10861
|
-
viewType?: "custom" | "create" | "
|
|
10861
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
10862
10862
|
} | {
|
|
10863
10863
|
ref: string;
|
|
10864
10864
|
path?: string | undefined;
|
|
@@ -11256,7 +11256,7 @@ declare const OrbitalDefinitionSchema: z.ZodObject<{
|
|
|
11256
11256
|
config?: TraitConfigObject | undefined;
|
|
11257
11257
|
linkedEntity?: string | undefined;
|
|
11258
11258
|
}[] | undefined;
|
|
11259
|
-
viewType?: "custom" | "create" | "
|
|
11259
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
11260
11260
|
} | {
|
|
11261
11261
|
ref: string;
|
|
11262
11262
|
path?: string | undefined;
|
|
@@ -12607,7 +12607,7 @@ declare const OrbitalSchema$1: z.ZodObject<{
|
|
|
12607
12607
|
config?: TraitConfigObject | undefined;
|
|
12608
12608
|
linkedEntity?: string | undefined;
|
|
12609
12609
|
}[] | undefined;
|
|
12610
|
-
viewType?: "custom" | "create" | "
|
|
12610
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
12611
12611
|
}, {
|
|
12612
12612
|
path: string;
|
|
12613
12613
|
name: string;
|
|
@@ -12619,7 +12619,7 @@ declare const OrbitalSchema$1: z.ZodObject<{
|
|
|
12619
12619
|
config?: TraitConfigObject | undefined;
|
|
12620
12620
|
linkedEntity?: string | undefined;
|
|
12621
12621
|
}[] | undefined;
|
|
12622
|
-
viewType?: "custom" | "create" | "
|
|
12622
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
12623
12623
|
}>, z.ZodString, z.ZodObject<{
|
|
12624
12624
|
ref: z.ZodString;
|
|
12625
12625
|
from: z.ZodOptional<z.ZodString>;
|
|
@@ -13769,7 +13769,7 @@ declare const OrbitalSchema$1: z.ZodObject<{
|
|
|
13769
13769
|
config?: TraitConfigObject | undefined;
|
|
13770
13770
|
linkedEntity?: string | undefined;
|
|
13771
13771
|
}[] | undefined;
|
|
13772
|
-
viewType?: "custom" | "create" | "
|
|
13772
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
13773
13773
|
} | {
|
|
13774
13774
|
ref: string;
|
|
13775
13775
|
path?: string | undefined;
|
|
@@ -14167,7 +14167,7 @@ declare const OrbitalSchema$1: z.ZodObject<{
|
|
|
14167
14167
|
config?: TraitConfigObject | undefined;
|
|
14168
14168
|
linkedEntity?: string | undefined;
|
|
14169
14169
|
}[] | undefined;
|
|
14170
|
-
viewType?: "custom" | "create" | "
|
|
14170
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
14171
14171
|
} | {
|
|
14172
14172
|
ref: string;
|
|
14173
14173
|
path?: string | undefined;
|
|
@@ -15525,7 +15525,7 @@ declare const OrbitalUnitSchema: z.ZodObject<{
|
|
|
15525
15525
|
config?: TraitConfigObject | undefined;
|
|
15526
15526
|
linkedEntity?: string | undefined;
|
|
15527
15527
|
}[] | undefined;
|
|
15528
|
-
viewType?: "custom" | "create" | "
|
|
15528
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
15529
15529
|
}, {
|
|
15530
15530
|
path: string;
|
|
15531
15531
|
name: string;
|
|
@@ -15537,7 +15537,7 @@ declare const OrbitalUnitSchema: z.ZodObject<{
|
|
|
15537
15537
|
config?: TraitConfigObject | undefined;
|
|
15538
15538
|
linkedEntity?: string | undefined;
|
|
15539
15539
|
}[] | undefined;
|
|
15540
|
-
viewType?: "custom" | "create" | "
|
|
15540
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
15541
15541
|
}>, z.ZodString, z.ZodObject<{
|
|
15542
15542
|
ref: z.ZodString;
|
|
15543
15543
|
from: z.ZodOptional<z.ZodString>;
|
|
@@ -16687,7 +16687,7 @@ declare const OrbitalUnitSchema: z.ZodObject<{
|
|
|
16687
16687
|
config?: TraitConfigObject | undefined;
|
|
16688
16688
|
linkedEntity?: string | undefined;
|
|
16689
16689
|
}[] | undefined;
|
|
16690
|
-
viewType?: "custom" | "create" | "
|
|
16690
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
16691
16691
|
} | {
|
|
16692
16692
|
ref: string;
|
|
16693
16693
|
path?: string | undefined;
|
|
@@ -17085,7 +17085,7 @@ declare const OrbitalUnitSchema: z.ZodObject<{
|
|
|
17085
17085
|
config?: TraitConfigObject | undefined;
|
|
17086
17086
|
linkedEntity?: string | undefined;
|
|
17087
17087
|
}[] | undefined;
|
|
17088
|
-
viewType?: "custom" | "create" | "
|
|
17088
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
17089
17089
|
} | {
|
|
17090
17090
|
ref: string;
|
|
17091
17091
|
path?: string | undefined;
|
|
@@ -18684,7 +18684,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
18684
18684
|
config?: TraitConfigObject | undefined;
|
|
18685
18685
|
linkedEntity?: string | undefined;
|
|
18686
18686
|
}[] | undefined;
|
|
18687
|
-
viewType?: "custom" | "create" | "
|
|
18687
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
18688
18688
|
}, {
|
|
18689
18689
|
path: string;
|
|
18690
18690
|
name: string;
|
|
@@ -18696,7 +18696,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
18696
18696
|
config?: TraitConfigObject | undefined;
|
|
18697
18697
|
linkedEntity?: string | undefined;
|
|
18698
18698
|
}[] | undefined;
|
|
18699
|
-
viewType?: "custom" | "create" | "
|
|
18699
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
18700
18700
|
}>, z.ZodString, z.ZodObject<{
|
|
18701
18701
|
ref: z.ZodString;
|
|
18702
18702
|
from: z.ZodOptional<z.ZodString>;
|
|
@@ -19846,7 +19846,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
19846
19846
|
config?: TraitConfigObject | undefined;
|
|
19847
19847
|
linkedEntity?: string | undefined;
|
|
19848
19848
|
}[] | undefined;
|
|
19849
|
-
viewType?: "custom" | "create" | "
|
|
19849
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
19850
19850
|
} | {
|
|
19851
19851
|
ref: string;
|
|
19852
19852
|
path?: string | undefined;
|
|
@@ -20244,7 +20244,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
20244
20244
|
config?: TraitConfigObject | undefined;
|
|
20245
20245
|
linkedEntity?: string | undefined;
|
|
20246
20246
|
}[] | undefined;
|
|
20247
|
-
viewType?: "custom" | "create" | "
|
|
20247
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
20248
20248
|
} | {
|
|
20249
20249
|
ref: string;
|
|
20250
20250
|
path?: string | undefined;
|
|
@@ -20820,7 +20820,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
20820
20820
|
config?: TraitConfigObject | undefined;
|
|
20821
20821
|
linkedEntity?: string | undefined;
|
|
20822
20822
|
}[] | undefined;
|
|
20823
|
-
viewType?: "custom" | "create" | "
|
|
20823
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
20824
20824
|
} | {
|
|
20825
20825
|
ref: string;
|
|
20826
20826
|
path?: string | undefined;
|
|
@@ -21307,7 +21307,7 @@ declare const OrbitalSchemaSchema: z.ZodObject<{
|
|
|
21307
21307
|
config?: TraitConfigObject | undefined;
|
|
21308
21308
|
linkedEntity?: string | undefined;
|
|
21309
21309
|
}[] | undefined;
|
|
21310
|
-
viewType?: "custom" | "create" | "
|
|
21310
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
21311
21311
|
} | {
|
|
21312
21312
|
ref: string;
|
|
21313
21313
|
path?: string | undefined;
|
|
@@ -21841,7 +21841,7 @@ declare function safeParseOrbitalSchema(data: unknown): z.SafeParseReturnType<{
|
|
|
21841
21841
|
config?: TraitConfigObject | undefined;
|
|
21842
21842
|
linkedEntity?: string | undefined;
|
|
21843
21843
|
}[] | undefined;
|
|
21844
|
-
viewType?: "custom" | "create" | "
|
|
21844
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
21845
21845
|
} | {
|
|
21846
21846
|
ref: string;
|
|
21847
21847
|
path?: string | undefined;
|
|
@@ -22328,7 +22328,7 @@ declare function safeParseOrbitalSchema(data: unknown): z.SafeParseReturnType<{
|
|
|
22328
22328
|
config?: TraitConfigObject | undefined;
|
|
22329
22329
|
linkedEntity?: string | undefined;
|
|
22330
22330
|
}[] | undefined;
|
|
22331
|
-
viewType?: "custom" | "create" | "
|
|
22331
|
+
viewType?: "custom" | "create" | "dashboard" | "list" | "detail" | "edit" | undefined;
|
|
22332
22332
|
} | {
|
|
22333
22333
|
ref: string;
|
|
22334
22334
|
path?: string | undefined;
|
|
@@ -180,7 +180,7 @@ function buildReplayPaths(transitions, initialState, maxDepth = 3) {
|
|
|
180
180
|
// src/state-machine/edge-walk.ts
|
|
181
181
|
function buildEdgeCoveringWalk(transitions, initialState) {
|
|
182
182
|
const filtered = transitions.filter(
|
|
183
|
-
(t) => t.from !== "*" && t.event
|
|
183
|
+
(t) => t.from !== "*" && !(t.event === "INIT" && t.from === initialState)
|
|
184
184
|
);
|
|
185
185
|
const graph = /* @__PURE__ */ new Map();
|
|
186
186
|
const allStates = /* @__PURE__ */ new Set();
|
|
@@ -333,6 +333,8 @@ function buildPayloadForEdge(transition, guardCase) {
|
|
|
333
333
|
payload[field.name] = 1;
|
|
334
334
|
} else if (field.type === "boolean") {
|
|
335
335
|
payload[field.name] = true;
|
|
336
|
+
} else if (field.type === "object" || field.type === "any") {
|
|
337
|
+
payload[field.name] = {};
|
|
336
338
|
} else {
|
|
337
339
|
payload[field.name] = `mock-${field.name}`;
|
|
338
340
|
}
|
|
@@ -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":"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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 */\nexport function buildGuardPayloads(guard: unknown): GuardPayload {\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 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, 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 { 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 and INIT\n const filtered = transitions.filter(\n (t) => t.from !== '*' && t.event !== 'INIT',\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// eslint-disable-next-line almadar/no-record-string-unknown -- Payloads are dynamically typed per event schema\n): Record<string, unknown> {\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 // eslint-disable-next-line almadar/no-record-string-unknown -- Mock payloads are dynamically typed per event schema\n const payload: Record<string, unknown> = {};\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;\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 {\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 */\nexport function buildGuardPayloads(guard: unknown): GuardPayload {\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 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, 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 { 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// eslint-disable-next-line almadar/no-record-string-unknown -- Payloads are dynamically typed per event schema\n): Record<string, unknown> {\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 // eslint-disable-next-line almadar/no-record-string-unknown -- Mock payloads are dynamically typed per event schema\n const payload: Record<string, unknown> = {};\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;\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"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { e as EntityRow, aU as FieldValue, S as SExpr, b as TraitConfig, az as EventPayload } from '../schema-
|
|
2
|
-
export { A as AGENT_DOMAIN_CATEGORIES, n as ALLOWED_CUSTOM_COMPONENTS, o as AgentDomainCategory, p as AgentDomainCategorySchema, q as AgentEffect, r as AllowedCustomComponent, s as AnimationDef, t as AnimationDefInput, u as AnimationDefSchema, h as AppSchema, v as AssetMap, w as AssetMapInput, x as AssetMapSchema, y as AssetMapping, z as AssetMappingInput, B as AssetMappingSchema, C as AtomicEffect, D as CORE_BINDINGS, F as CallServiceConfig, G as CallServiceEffect, H as ComputedEventContract, I as ComputedEventContractSchema, J as ComputedEventListener, K as ComputedEventListenerSchema, L as CoreBinding, M as CustomPatternDefinition, N as CustomPatternDefinitionInput, Q as CustomPatternDefinitionSchema, R as CustomPatternMap, V as CustomPatternMapInput, W as CustomPatternMapSchema, X as DerefEffect, Y as DesignPreferences, Z as DesignPreferencesInput, _ as DesignPreferencesSchema, $ as DesignTokens, a0 as DesignTokensInput, a1 as DesignTokensSchema, a2 as DespawnEffect, a3 as DoEffect, a4 as DomainCategory, a5 as DomainCategorySchema, a6 as DomainContext, a7 as DomainContextInput, a8 as DomainContextSchema, a9 as DomainVocabulary, aa as DomainVocabularySchema, ab as ENTITY_ROLES, ac as Effect, ad as EffectInput, ae as EffectSchema, af as EmitConfig, ag as EmitEffect, E as Entity, ah as EntityCall, ai as EntityCallSchema, aj as EntityData, c as EntityField, ak as EntityFieldInput, al as EntityFieldSchema, d as EntityPersistence, am as EntityPersistenceSchema, f as EntityRef, an as EntityRefSchema, ao as EntityRefStringSchema, ap as EntityRole, aq as EntityRoleSchema, ar as EntitySchema, as as EntitySemanticRole, at as EntitySemanticRoleSchema, au as EvalContext, av as Event, aw as EventInput, ax as EventListener, ay as EventListenerSchema, aA as EventPayloadField, aB as EventPayloadFieldSchema, aC as EventPayloadValue, aD as EventSchema, aE as EventScope, aF as EventScopeSchema, aG as EventSemanticRole, aH as EventSemanticRoleSchema, aI as EventSource, aJ as EventSourceSchema, aK as Expression, aL as ExpressionInput, aM as ExpressionSchema, aN as FetchEffect, aO as Field, aP as FieldFormat, aQ as FieldFormatSchema, aR as FieldSchema, aS as FieldType, aT as FieldTypeSchema, aV as FullOrbitalUnit, aW as GAME_TYPES, aX as GameSubCategory, aY as GameSubCategorySchema, aZ as GameType, a_ as GameTypeSchema, a$ as Guard, b0 as GuardInput, b1 as GuardSchema, b2 as ListenSource, b3 as ListenSourceSchema, b4 as LogEffect, b5 as LogMeta, b6 as McpServiceDef, b7 as McpServiceDefSchema, b8 as NavigateEffect, b9 as NodeClassification, ba as NodeClassificationSchema, bb as NotifyEffect, aV as Orbital, bc as OrbitalConfig, bd as OrbitalConfigInput, be as OrbitalConfigSchema, O as OrbitalDefinition, bf as OrbitalDefinitionSchema, bg as OrbitalEntity, bh as OrbitalEntityInput, bi as OrbitalEntitySchema, bj as OrbitalInput, bk as OrbitalPage, bl as OrbitalPageInput, bm as OrbitalPageSchema, bn as OrbitalPageStrictInput, bo as OrbitalPageStrictSchema, h as OrbitalSchema, bp as OrbitalSchemaInput, bq as OrbitalSchemaSchema, br as OrbitalTraitRef, bs as OrbitalTraitRefSchema, bt as OrbitalUnit, bu as OrbitalUnitSchema, bv as OrbitalZodSchema, j as Page, P as PageRef, k as PageRefObject, bw as PageRefObjectSchema, bx as PageRefSchema, by as PageRefStringSchema, bz as PageSchema, bA as PageTraitRef, bB as PageTraitRefSchema, bC as ParsedBinding, bD as PayloadField, bE as PayloadFieldSchema, bF as PersistEffect, bG as PresentationType, bH as RefEffect, bI as RelatedLink, bJ as RelatedLinkSchema, bK as RelationConfig, bL as RelationConfigSchema, bM as RenderItemLambda, bN as RenderUIConfig, bO as RenderUIEffect, bP as RenderUINode, bQ as RequiredField, bR as RequiredFieldSchema, bS as ResolvedAsset, bT as ResolvedAssetInput, bU as ResolvedAssetSchema, bV as ResolvedPatternProps, bW as RestAuthConfig, bX as RestAuthConfigSchema, bY as RestServiceDef, bZ as RestServiceDefSchema, b_ as SERVICE_TYPES, b$ as SExprAtom, c0 as SExprAtomSchema, c1 as SExprInput, c2 as SExprSchema, c3 as SemanticAssetRef, c4 as SemanticAssetRefInput, c5 as SemanticAssetRefSchema, c6 as ServiceDefinition, c7 as ServiceDefinitionSchema, c8 as ServiceParams, c9 as ServiceRef, ca as ServiceRefObject, cb as ServiceRefObjectSchema, cc as ServiceRefSchema, cd as ServiceRefStringSchema, ce as ServiceType, cf as ServiceTypeSchema, cg as SetEffect, ch as SocketEvents, ci as SocketEventsSchema, cj as SocketServiceDef, ck as SocketServiceDefSchema, cl as SpawnEffect, m as State, cm as StateInput, cn as StateMachine, co as StateMachineInput, cp as StateMachineSchema, cq as StateSchema, cr as StateSemanticRole, cs as StateSemanticRoleSchema, ct as SuggestedGuard, cu as SuggestedGuardSchema, cv as SwapEffect, cw as ThemeDefinition, cx as ThemeDefinitionSchema, cy as ThemeRef, cz as ThemeRefSchema, cA as ThemeRefStringSchema, cB as ThemeTokens, cC as ThemeTokensSchema, cD as ThemeVariant, cE as ThemeVariantSchema, i as Trait, cF as TraitCategory, cG as TraitCategorySchema, cH as TraitConfigObject, cI as TraitConfigSchema, cJ as TraitConfigValue, cK as TraitConfigValueSchema, cL as TraitDataEntity, cM as TraitDataEntitySchema, cN as TraitEntityField, cO as TraitEntityFieldSchema, T as TraitEventContract, cP as TraitEventContractSchema, a as TraitEventListener, cQ as TraitEventListenerSchema, cR as TraitInput, g as TraitRef, cS as TraitRefSchema, l as TraitReference, cT as TraitReferenceInput, cU as TraitReferenceSchema, cV as TraitSchema, cW as TraitTick, cX as TraitTickSchema, cY as TraitUIBinding, cZ as Transition, c_ as TransitionInput, c$ as TransitionSchema, d0 as TypedEffect, d1 as UISlot, d2 as UISlotSchema, d3 as UI_SLOTS, d4 as UXHints, d5 as UXHintsSchema, U as UseDeclaration, d6 as UseDeclarationSchema, d7 as UserPersona, d8 as UserPersonaInput, d9 as UserPersonaSchema, da as VISUAL_STYLES, db as ViewType, dc as ViewTypeSchema, dd as VisualStyle, de as VisualStyleSchema, df as WatchEffect, dg as WatchOptions, dh as atomic, di as callService, dj as collectBindings, dk as createAssetKey, dl as deref, dm as deriveCollection, dn as despawn, dp as doEffects, dq as emit, dr as findService, ds as getArgs, dt as getDefaultAnimationsForRole, du as getOperator, dv as getServiceNames, dw as getTraitConfig, dx as getTraitName, dy as hasService, dz as isBinding, dA as isCircuitEvent, dB as isEffect, dC as isEntityCall, dD as isEntityReference, dE as isEntityReferenceAny, dF as isImportedTraitRef, dG as isInlineTrait, dH as isMcpService, dI as isOrbitalDefinition, dJ as isPageReference, dK as isPageReferenceObject, dL as isPageReferenceString, dM as isRestService, dN as isRuntimeEntity, dO as isSExpr, dP as isSExprAtom, dQ as isSExprCall, dR as isSExprEffect, dS as isServiceReference, dT as isServiceReferenceObject, dU as isSingletonEntity, dV as isSocketService, dW as isThemeReference, dX as isValidBinding, dY as navigate, dZ as normalizeTraitRef, d_ as notify, d$ as parseAssetKey, e0 as parseBinding, e1 as parseEntityRef, e2 as parseImportedTraitRef, e3 as parseOrbitalSchema, e4 as parsePageRef, e5 as parseServiceRef, e6 as persist, e7 as ref, e8 as renderUI, e9 as safeParseOrbitalSchema, ea as set, eb as sexpr, ec as spawn, ed as swap, ee as validateAssetAnimations, ef as walkSExpr, eg as watch } from '../schema-
|
|
1
|
+
import { e as EntityRow, aU as FieldValue, S as SExpr, b as TraitConfig, az as EventPayload } from '../schema-jvDmDqz7.js';
|
|
2
|
+
export { A as AGENT_DOMAIN_CATEGORIES, n as ALLOWED_CUSTOM_COMPONENTS, o as AgentDomainCategory, p as AgentDomainCategorySchema, q as AgentEffect, r as AllowedCustomComponent, s as AnimationDef, t as AnimationDefInput, u as AnimationDefSchema, h as AppSchema, v as AssetMap, w as AssetMapInput, x as AssetMapSchema, y as AssetMapping, z as AssetMappingInput, B as AssetMappingSchema, C as AtomicEffect, D as CORE_BINDINGS, F as CallServiceConfig, G as CallServiceEffect, H as ComputedEventContract, I as ComputedEventContractSchema, J as ComputedEventListener, K as ComputedEventListenerSchema, L as CoreBinding, M as CustomPatternDefinition, N as CustomPatternDefinitionInput, Q as CustomPatternDefinitionSchema, R as CustomPatternMap, V as CustomPatternMapInput, W as CustomPatternMapSchema, X as DerefEffect, Y as DesignPreferences, Z as DesignPreferencesInput, _ as DesignPreferencesSchema, $ as DesignTokens, a0 as DesignTokensInput, a1 as DesignTokensSchema, a2 as DespawnEffect, a3 as DoEffect, a4 as DomainCategory, a5 as DomainCategorySchema, a6 as DomainContext, a7 as DomainContextInput, a8 as DomainContextSchema, a9 as DomainVocabulary, aa as DomainVocabularySchema, ab as ENTITY_ROLES, ac as Effect, ad as EffectInput, ae as EffectSchema, af as EmitConfig, ag as EmitEffect, E as Entity, ah as EntityCall, ai as EntityCallSchema, aj as EntityData, c as EntityField, ak as EntityFieldInput, al as EntityFieldSchema, d as EntityPersistence, am as EntityPersistenceSchema, f as EntityRef, an as EntityRefSchema, ao as EntityRefStringSchema, ap as EntityRole, aq as EntityRoleSchema, ar as EntitySchema, as as EntitySemanticRole, at as EntitySemanticRoleSchema, au as EvalContext, av as Event, aw as EventInput, ax as EventListener, ay as EventListenerSchema, aA as EventPayloadField, aB as EventPayloadFieldSchema, aC as EventPayloadValue, aD as EventSchema, aE as EventScope, aF as EventScopeSchema, aG as EventSemanticRole, aH as EventSemanticRoleSchema, aI as EventSource, aJ as EventSourceSchema, aK as Expression, aL as ExpressionInput, aM as ExpressionSchema, aN as FetchEffect, aO as Field, aP as FieldFormat, aQ as FieldFormatSchema, aR as FieldSchema, aS as FieldType, aT as FieldTypeSchema, aV as FullOrbitalUnit, aW as GAME_TYPES, aX as GameSubCategory, aY as GameSubCategorySchema, aZ as GameType, a_ as GameTypeSchema, a$ as Guard, b0 as GuardInput, b1 as GuardSchema, b2 as ListenSource, b3 as ListenSourceSchema, b4 as LogEffect, b5 as LogMeta, b6 as McpServiceDef, b7 as McpServiceDefSchema, b8 as NavigateEffect, b9 as NodeClassification, ba as NodeClassificationSchema, bb as NotifyEffect, aV as Orbital, bc as OrbitalConfig, bd as OrbitalConfigInput, be as OrbitalConfigSchema, O as OrbitalDefinition, bf as OrbitalDefinitionSchema, bg as OrbitalEntity, bh as OrbitalEntityInput, bi as OrbitalEntitySchema, bj as OrbitalInput, bk as OrbitalPage, bl as OrbitalPageInput, bm as OrbitalPageSchema, bn as OrbitalPageStrictInput, bo as OrbitalPageStrictSchema, h as OrbitalSchema, bp as OrbitalSchemaInput, bq as OrbitalSchemaSchema, br as OrbitalTraitRef, bs as OrbitalTraitRefSchema, bt as OrbitalUnit, bu as OrbitalUnitSchema, bv as OrbitalZodSchema, j as Page, P as PageRef, k as PageRefObject, bw as PageRefObjectSchema, bx as PageRefSchema, by as PageRefStringSchema, bz as PageSchema, bA as PageTraitRef, bB as PageTraitRefSchema, bC as ParsedBinding, bD as PayloadField, bE as PayloadFieldSchema, bF as PersistEffect, bG as PresentationType, bH as RefEffect, bI as RelatedLink, bJ as RelatedLinkSchema, bK as RelationConfig, bL as RelationConfigSchema, bM as RenderItemLambda, bN as RenderUIConfig, bO as RenderUIEffect, bP as RenderUINode, bQ as RequiredField, bR as RequiredFieldSchema, bS as ResolvedAsset, bT as ResolvedAssetInput, bU as ResolvedAssetSchema, bV as ResolvedPatternProps, bW as RestAuthConfig, bX as RestAuthConfigSchema, bY as RestServiceDef, bZ as RestServiceDefSchema, b_ as SERVICE_TYPES, b$ as SExprAtom, c0 as SExprAtomSchema, c1 as SExprInput, c2 as SExprSchema, c3 as SemanticAssetRef, c4 as SemanticAssetRefInput, c5 as SemanticAssetRefSchema, c6 as ServiceDefinition, c7 as ServiceDefinitionSchema, c8 as ServiceParams, c9 as ServiceRef, ca as ServiceRefObject, cb as ServiceRefObjectSchema, cc as ServiceRefSchema, cd as ServiceRefStringSchema, ce as ServiceType, cf as ServiceTypeSchema, cg as SetEffect, ch as SocketEvents, ci as SocketEventsSchema, cj as SocketServiceDef, ck as SocketServiceDefSchema, cl as SpawnEffect, m as State, cm as StateInput, cn as StateMachine, co as StateMachineInput, cp as StateMachineSchema, cq as StateSchema, cr as StateSemanticRole, cs as StateSemanticRoleSchema, ct as SuggestedGuard, cu as SuggestedGuardSchema, cv as SwapEffect, cw as ThemeDefinition, cx as ThemeDefinitionSchema, cy as ThemeRef, cz as ThemeRefSchema, cA as ThemeRefStringSchema, cB as ThemeTokens, cC as ThemeTokensSchema, cD as ThemeVariant, cE as ThemeVariantSchema, i as Trait, cF as TraitCategory, cG as TraitCategorySchema, cH as TraitConfigObject, cI as TraitConfigSchema, cJ as TraitConfigValue, cK as TraitConfigValueSchema, cL as TraitDataEntity, cM as TraitDataEntitySchema, cN as TraitEntityField, cO as TraitEntityFieldSchema, T as TraitEventContract, cP as TraitEventContractSchema, a as TraitEventListener, cQ as TraitEventListenerSchema, cR as TraitInput, g as TraitRef, cS as TraitRefSchema, l as TraitReference, cT as TraitReferenceInput, cU as TraitReferenceSchema, cV as TraitSchema, cW as TraitTick, cX as TraitTickSchema, cY as TraitUIBinding, cZ as Transition, c_ as TransitionInput, c$ as TransitionSchema, d0 as TypedEffect, d1 as UISlot, d2 as UISlotSchema, d3 as UI_SLOTS, d4 as UXHints, d5 as UXHintsSchema, U as UseDeclaration, d6 as UseDeclarationSchema, d7 as UserPersona, d8 as UserPersonaInput, d9 as UserPersonaSchema, da as VISUAL_STYLES, db as ViewType, dc as ViewTypeSchema, dd as VisualStyle, de as VisualStyleSchema, df as WatchEffect, dg as WatchOptions, dh as atomic, di as callService, dj as collectBindings, dk as createAssetKey, dl as deref, dm as deriveCollection, dn as despawn, dp as doEffects, dq as emit, dr as findService, ds as getArgs, dt as getDefaultAnimationsForRole, du as getOperator, dv as getServiceNames, dw as getTraitConfig, dx as getTraitName, dy as hasService, dz as isBinding, dA as isCircuitEvent, dB as isEffect, dC as isEntityCall, dD as isEntityReference, dE as isEntityReferenceAny, dF as isImportedTraitRef, dG as isInlineTrait, dH as isMcpService, dI as isOrbitalDefinition, dJ as isPageReference, dK as isPageReferenceObject, dL as isPageReferenceString, dM as isRestService, dN as isRuntimeEntity, dO as isSExpr, dP as isSExprAtom, dQ as isSExprCall, dR as isSExprEffect, dS as isServiceReference, dT as isServiceReferenceObject, dU as isSingletonEntity, dV as isSocketService, dW as isThemeReference, dX as isValidBinding, dY as navigate, dZ as normalizeTraitRef, d_ as notify, d$ as parseAssetKey, e0 as parseBinding, e1 as parseEntityRef, e2 as parseImportedTraitRef, e3 as parseOrbitalSchema, e4 as parsePageRef, e5 as parseServiceRef, e6 as persist, e7 as ref, e8 as renderUI, e9 as safeParseOrbitalSchema, ea as set, eb as sexpr, ec as spawn, ed as swap, ee as validateAssetAnimations, ef as walkSExpr, eg as watch } from '../schema-jvDmDqz7.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
export { PATTERN_TYPES, PatternConfig, PatternType, isValidPatternType } from '@almadar/patterns';
|
|
5
5
|
|
|
@@ -77,8 +77,8 @@ declare const BINDING_CONTEXT_RULES: {
|
|
|
77
77
|
readonly description: "Guards can access entity fields, event payload, current state, and time";
|
|
78
78
|
};
|
|
79
79
|
readonly effect: {
|
|
80
|
-
readonly allowed: readonly ["entity", "payload", "state", "now", "trait"];
|
|
81
|
-
readonly description: "Effects can access and modify entity fields, use payload data,
|
|
80
|
+
readonly allowed: readonly ["entity", "payload", "state", "now", "trait", "config"];
|
|
81
|
+
readonly description: "Effects can access and modify entity fields, use payload data, embed another trait's live frame via @trait.X inside render-ui children, and read trait config values (@config.X) for atoms parameterized by their call-site. At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved.";
|
|
82
82
|
};
|
|
83
83
|
readonly tick: {
|
|
84
84
|
readonly allowed: readonly ["entity", "state", "now"];
|
package/dist/types/index.js
CHANGED
|
@@ -1213,8 +1213,8 @@ var BINDING_CONTEXT_RULES = {
|
|
|
1213
1213
|
description: "Guards can access entity fields, event payload, current state, and time"
|
|
1214
1214
|
},
|
|
1215
1215
|
effect: {
|
|
1216
|
-
allowed: ["entity", "payload", "state", "now", "trait"],
|
|
1217
|
-
description: "Effects can access and modify entity fields, use payload data,
|
|
1216
|
+
allowed: ["entity", "payload", "state", "now", "trait", "config"],
|
|
1217
|
+
description: "Effects can access and modify entity fields, use payload data, embed another trait's live frame via @trait.X inside render-ui children, and read trait config values (@config.X) for atoms parameterized by their call-site. At molecule/organism inline time, @config.X is substituted with the literal value from the call-site config block; at atom-scope validate, @config is allowed-but-unresolved."
|
|
1218
1218
|
},
|
|
1219
1219
|
tick: {
|
|
1220
1220
|
allowed: ["entity", "state", "now"],
|