@orcalang/orca-lang 0.1.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.
Files changed (183) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +128 -0
  3. package/dist/auth/index.d.ts +6 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/index.js +6 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/lock.d.ts +2 -0
  8. package/dist/auth/lock.d.ts.map +1 -0
  9. package/dist/auth/lock.js +59 -0
  10. package/dist/auth/lock.js.map +1 -0
  11. package/dist/auth/providers/anthropic.d.ts +14 -0
  12. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  13. package/dist/auth/providers/anthropic.js +145 -0
  14. package/dist/auth/providers/anthropic.js.map +1 -0
  15. package/dist/auth/providers/index.d.ts +3 -0
  16. package/dist/auth/providers/index.d.ts.map +1 -0
  17. package/dist/auth/providers/index.js +3 -0
  18. package/dist/auth/providers/index.js.map +1 -0
  19. package/dist/auth/providers/minimax.d.ts +6 -0
  20. package/dist/auth/providers/minimax.d.ts.map +1 -0
  21. package/dist/auth/providers/minimax.js +65 -0
  22. package/dist/auth/providers/minimax.js.map +1 -0
  23. package/dist/auth/refresh.d.ts +8 -0
  24. package/dist/auth/refresh.d.ts.map +1 -0
  25. package/dist/auth/refresh.js +104 -0
  26. package/dist/auth/refresh.js.map +1 -0
  27. package/dist/auth/store.d.ts +11 -0
  28. package/dist/auth/store.d.ts.map +1 -0
  29. package/dist/auth/store.js +63 -0
  30. package/dist/auth/store.js.map +1 -0
  31. package/dist/auth/types.d.ts +51 -0
  32. package/dist/auth/types.d.ts.map +1 -0
  33. package/dist/auth/types.js +2 -0
  34. package/dist/auth/types.js.map +1 -0
  35. package/dist/compiler/mermaid.d.ts +3 -0
  36. package/dist/compiler/mermaid.d.ts.map +1 -0
  37. package/dist/compiler/mermaid.js +86 -0
  38. package/dist/compiler/mermaid.js.map +1 -0
  39. package/dist/compiler/xstate.d.ts +15 -0
  40. package/dist/compiler/xstate.d.ts.map +1 -0
  41. package/dist/compiler/xstate.js +542 -0
  42. package/dist/compiler/xstate.js.map +1 -0
  43. package/dist/config/index.d.ts +3 -0
  44. package/dist/config/index.d.ts.map +1 -0
  45. package/dist/config/index.js +3 -0
  46. package/dist/config/index.js.map +1 -0
  47. package/dist/config/loader.d.ts +4 -0
  48. package/dist/config/loader.d.ts.map +1 -0
  49. package/dist/config/loader.js +109 -0
  50. package/dist/config/loader.js.map +1 -0
  51. package/dist/config/types.d.ts +13 -0
  52. package/dist/config/types.d.ts.map +1 -0
  53. package/dist/config/types.js +8 -0
  54. package/dist/config/types.js.map +1 -0
  55. package/dist/generators/index.d.ts +5 -0
  56. package/dist/generators/index.d.ts.map +1 -0
  57. package/dist/generators/index.js +5 -0
  58. package/dist/generators/index.js.map +1 -0
  59. package/dist/generators/registry.d.ts +12 -0
  60. package/dist/generators/registry.d.ts.map +1 -0
  61. package/dist/generators/registry.js +15 -0
  62. package/dist/generators/registry.js.map +1 -0
  63. package/dist/generators/typescript.d.ts +9 -0
  64. package/dist/generators/typescript.d.ts.map +1 -0
  65. package/dist/generators/typescript.js +55 -0
  66. package/dist/generators/typescript.js.map +1 -0
  67. package/dist/index.d.ts +10 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +630 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/llm/anthropic.d.ts +14 -0
  72. package/dist/llm/anthropic.d.ts.map +1 -0
  73. package/dist/llm/anthropic.js +87 -0
  74. package/dist/llm/anthropic.js.map +1 -0
  75. package/dist/llm/grok.d.ts +13 -0
  76. package/dist/llm/grok.d.ts.map +1 -0
  77. package/dist/llm/grok.js +60 -0
  78. package/dist/llm/grok.js.map +1 -0
  79. package/dist/llm/index.d.ts +11 -0
  80. package/dist/llm/index.d.ts.map +1 -0
  81. package/dist/llm/index.js +23 -0
  82. package/dist/llm/index.js.map +1 -0
  83. package/dist/llm/ollama.d.ts +11 -0
  84. package/dist/llm/ollama.d.ts.map +1 -0
  85. package/dist/llm/ollama.js +51 -0
  86. package/dist/llm/ollama.js.map +1 -0
  87. package/dist/llm/openai.d.ts +13 -0
  88. package/dist/llm/openai.d.ts.map +1 -0
  89. package/dist/llm/openai.js +61 -0
  90. package/dist/llm/openai.js.map +1 -0
  91. package/dist/llm/provider.d.ts +32 -0
  92. package/dist/llm/provider.d.ts.map +1 -0
  93. package/dist/llm/provider.js +2 -0
  94. package/dist/llm/provider.js.map +1 -0
  95. package/dist/parser/ast-to-markdown.d.ts +3 -0
  96. package/dist/parser/ast-to-markdown.d.ts.map +1 -0
  97. package/dist/parser/ast-to-markdown.js +209 -0
  98. package/dist/parser/ast-to-markdown.js.map +1 -0
  99. package/dist/parser/ast.d.ts +183 -0
  100. package/dist/parser/ast.d.ts.map +1 -0
  101. package/dist/parser/ast.js +3 -0
  102. package/dist/parser/ast.js.map +1 -0
  103. package/dist/parser/markdown-parser.d.ts +8 -0
  104. package/dist/parser/markdown-parser.d.ts.map +1 -0
  105. package/dist/parser/markdown-parser.js +838 -0
  106. package/dist/parser/markdown-parser.js.map +1 -0
  107. package/dist/runtime/effects.d.ts +17 -0
  108. package/dist/runtime/effects.d.ts.map +1 -0
  109. package/dist/runtime/effects.js +28 -0
  110. package/dist/runtime/effects.js.map +1 -0
  111. package/dist/runtime/machine.d.ts +8 -0
  112. package/dist/runtime/machine.d.ts.map +1 -0
  113. package/dist/runtime/machine.js +158 -0
  114. package/dist/runtime/machine.js.map +1 -0
  115. package/dist/runtime/types.d.ts +37 -0
  116. package/dist/runtime/types.d.ts.map +1 -0
  117. package/dist/runtime/types.js +3 -0
  118. package/dist/runtime/types.js.map +1 -0
  119. package/dist/skills.d.ts +114 -0
  120. package/dist/skills.d.ts.map +1 -0
  121. package/dist/skills.js +1103 -0
  122. package/dist/skills.js.map +1 -0
  123. package/dist/tools.d.ts +18 -0
  124. package/dist/tools.d.ts.map +1 -0
  125. package/dist/tools.js +124 -0
  126. package/dist/tools.js.map +1 -0
  127. package/dist/verifier/completeness.d.ts +4 -0
  128. package/dist/verifier/completeness.d.ts.map +1 -0
  129. package/dist/verifier/completeness.js +82 -0
  130. package/dist/verifier/completeness.js.map +1 -0
  131. package/dist/verifier/determinism.d.ts +17 -0
  132. package/dist/verifier/determinism.d.ts.map +1 -0
  133. package/dist/verifier/determinism.js +301 -0
  134. package/dist/verifier/determinism.js.map +1 -0
  135. package/dist/verifier/properties.d.ts +6 -0
  136. package/dist/verifier/properties.d.ts.map +1 -0
  137. package/dist/verifier/properties.js +404 -0
  138. package/dist/verifier/properties.js.map +1 -0
  139. package/dist/verifier/structural.d.ts +50 -0
  140. package/dist/verifier/structural.d.ts.map +1 -0
  141. package/dist/verifier/structural.js +692 -0
  142. package/dist/verifier/structural.js.map +1 -0
  143. package/dist/verifier/types.d.ts +40 -0
  144. package/dist/verifier/types.d.ts.map +1 -0
  145. package/dist/verifier/types.js +2 -0
  146. package/dist/verifier/types.js.map +1 -0
  147. package/package.json +49 -0
  148. package/src/auth/index.ts +5 -0
  149. package/src/auth/lock.ts +71 -0
  150. package/src/auth/providers/anthropic.ts +192 -0
  151. package/src/auth/providers/index.ts +17 -0
  152. package/src/auth/providers/minimax.ts +100 -0
  153. package/src/auth/refresh.ts +138 -0
  154. package/src/auth/store.ts +75 -0
  155. package/src/auth/types.ts +62 -0
  156. package/src/compiler/mermaid.ts +109 -0
  157. package/src/compiler/xstate.ts +615 -0
  158. package/src/config/index.ts +2 -0
  159. package/src/config/loader.ts +122 -0
  160. package/src/config/types.ts +21 -0
  161. package/src/generators/index.ts +6 -0
  162. package/src/generators/registry.ts +27 -0
  163. package/src/generators/typescript.ts +67 -0
  164. package/src/index.ts +671 -0
  165. package/src/llm/anthropic.ts +102 -0
  166. package/src/llm/grok.ts +73 -0
  167. package/src/llm/index.ts +29 -0
  168. package/src/llm/ollama.ts +62 -0
  169. package/src/llm/openai.ts +74 -0
  170. package/src/llm/provider.ts +35 -0
  171. package/src/parser/ast-to-markdown.ts +220 -0
  172. package/src/parser/ast.ts +236 -0
  173. package/src/parser/markdown-parser.ts +844 -0
  174. package/src/runtime/effects.ts +48 -0
  175. package/src/runtime/machine.ts +201 -0
  176. package/src/runtime/types.ts +44 -0
  177. package/src/skills.ts +1339 -0
  178. package/src/tools.ts +144 -0
  179. package/src/verifier/completeness.ts +89 -0
  180. package/src/verifier/determinism.ts +328 -0
  181. package/src/verifier/properties.ts +507 -0
  182. package/src/verifier/structural.ts +803 -0
  183. package/src/verifier/types.ts +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"determinism.js","sourceRoot":"","sources":["../../src/verifier/determinism.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MachineDef } from '../parser/ast.js';
2
+ import { VerificationResult } from './types.js';
3
+ export declare function checkProperties(machine: MachineDef, options?: {
4
+ maxStates?: number;
5
+ }): VerificationResult;
6
+ //# sourceMappingURL=properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../src/verifier/properties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkH,MAAM,kBAAkB,CAAC;AAC9J,OAAO,EAAE,kBAAkB,EAAiD,MAAM,YAAY,CAAC;AAsc/F,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAmDzG"}
@@ -0,0 +1,404 @@
1
+ import { analyzeMachine, flattenStates } from './structural.js';
2
+ import { resolveGuardExpression, isExpressionStaticallyFalse } from './determinism.js';
3
+ const DEFAULT_MAX_STATES = 64;
4
+ /**
5
+ * Check if a transition's guard is statically false (can never fire).
6
+ * Used in guard-aware BFS to prune impossible transitions.
7
+ */
8
+ function isTransitionStaticallyBlocked(transition, guardDefs) {
9
+ if (!transition.guard)
10
+ return false; // No guard = always possible
11
+ const resolved = resolveGuardExpression(transition.guard, guardDefs);
12
+ if (!resolved)
13
+ return false; // Can't resolve = assume possible
14
+ return isExpressionStaticallyFalse(resolved);
15
+ }
16
+ /**
17
+ * BFS from source state, returning reachable set and parent map for counterexample traces.
18
+ * Supports guard-aware mode: skips transitions with statically false guards.
19
+ */
20
+ function bfs(stateMap, source, options) {
21
+ const reachable = new Set();
22
+ const parent = new Map();
23
+ const queue = [{ name: source, depth: 0 }];
24
+ reachable.add(source);
25
+ while (queue.length > 0) {
26
+ const { name, depth } = queue.shift();
27
+ if (options?.maxDepth !== undefined && depth >= options.maxDepth) {
28
+ continue;
29
+ }
30
+ const info = stateMap.get(name);
31
+ if (!info)
32
+ continue;
33
+ for (const t of info.outgoing) {
34
+ const target = t.target;
35
+ // Skip excluded state
36
+ if (options?.excludeState && target === options.excludeState)
37
+ continue;
38
+ // Guard-aware: skip transitions with statically false guards
39
+ if (options?.guardDefs && isTransitionStaticallyBlocked(t, options.guardDefs))
40
+ continue;
41
+ if (!reachable.has(target)) {
42
+ reachable.add(target);
43
+ const guardName = t.guard ? (t.guard.negated ? `!${t.guard.name}` : t.guard.name) : undefined;
44
+ parent.set(target, { state: name, event: t.event, guard: guardName });
45
+ queue.push({ name: target, depth: depth + 1 });
46
+ }
47
+ }
48
+ }
49
+ return { reachable, parent };
50
+ }
51
+ /**
52
+ * Reconstruct a path from source to target using the parent map.
53
+ */
54
+ function reconstructPath(parent, source, target) {
55
+ const path = [];
56
+ let current = target;
57
+ while (current !== source) {
58
+ const prev = parent.get(current);
59
+ if (!prev)
60
+ break;
61
+ path.unshift({ state: current, event: prev.event, guard: prev.guard });
62
+ current = prev.state;
63
+ }
64
+ path.unshift({ state: source });
65
+ return path;
66
+ }
67
+ /**
68
+ * Format a path as a readable string, including guard conditions.
69
+ */
70
+ function formatPath(path) {
71
+ return path
72
+ .map((step, i) => {
73
+ if (i === 0)
74
+ return step.state;
75
+ const guardStr = step.guard ? ` [${step.guard}]` : '';
76
+ return `[${step.event}${guardStr}] -> ${step.state}`;
77
+ })
78
+ .join(' ');
79
+ }
80
+ /**
81
+ * Check if any step in a path requires a guard condition.
82
+ */
83
+ function pathHasGuards(path) {
84
+ return path.some(step => step.guard !== undefined);
85
+ }
86
+ /**
87
+ * Resolve a state name to a flattened state name.
88
+ * Supports both exact match and simple name match.
89
+ */
90
+ function resolveStateName(name, flattenedStates) {
91
+ // Exact match
92
+ const exact = flattenedStates.find(fs => fs.name === name);
93
+ if (exact)
94
+ return { resolved: exact.name };
95
+ // Simple name match
96
+ const matches = flattenedStates.filter(fs => fs.simpleName === name && !fs.isRegion);
97
+ if (matches.length === 1)
98
+ return { resolved: matches[0].name };
99
+ if (matches.length > 1) {
100
+ return {
101
+ resolved: '',
102
+ error: {
103
+ code: 'PROPERTY_AMBIGUOUS_STATE',
104
+ message: `State name '${name}' is ambiguous — matches: ${matches.map(m => m.name).join(', ')}`,
105
+ severity: 'error',
106
+ suggestion: `Use the full dot-notation name to disambiguate`,
107
+ },
108
+ };
109
+ }
110
+ return {
111
+ resolved: '',
112
+ error: {
113
+ code: 'PROPERTY_INVALID_STATE',
114
+ message: `State '${name}' does not exist in this machine`,
115
+ severity: 'error',
116
+ suggestion: `Check the state name. Available states: ${flattenedStates.filter(fs => !fs.isRegion).map(fs => fs.name).join(', ')}`,
117
+ },
118
+ };
119
+ }
120
+ // --- Property checkers ---
121
+ function checkReachable(prop, analysis, flattenedStates, guardDefs) {
122
+ const errors = [];
123
+ const fromRes = resolveStateName(prop.from, flattenedStates);
124
+ if (fromRes.error)
125
+ return [fromRes.error];
126
+ const toRes = resolveStateName(prop.to, flattenedStates);
127
+ if (toRes.error)
128
+ return [toRes.error];
129
+ const { reachable } = bfs(analysis.stateMap, fromRes.resolved, { guardDefs });
130
+ if (!reachable.has(toRes.resolved)) {
131
+ errors.push({
132
+ code: 'PROPERTY_REACHABILITY_FAIL',
133
+ message: `Property 'reachable: ${prop.to} from ${prop.from}' violated — no path exists from '${fromRes.resolved}' to '${toRes.resolved}'`,
134
+ severity: 'error',
135
+ location: { state: fromRes.resolved },
136
+ suggestion: `Add transitions that create a path from '${fromRes.resolved}' to '${toRes.resolved}'`,
137
+ });
138
+ }
139
+ return errors;
140
+ }
141
+ function checkUnreachable(prop, analysis, flattenedStates, guardDefs) {
142
+ const errors = [];
143
+ const fromRes = resolveStateName(prop.from, flattenedStates);
144
+ if (fromRes.error)
145
+ return [fromRes.error];
146
+ const toRes = resolveStateName(prop.to, flattenedStates);
147
+ if (toRes.error)
148
+ return [toRes.error];
149
+ const { reachable, parent } = bfs(analysis.stateMap, fromRes.resolved, { guardDefs });
150
+ if (reachable.has(toRes.resolved)) {
151
+ const path = reconstructPath(parent, fromRes.resolved, toRes.resolved);
152
+ const hasGuards = pathHasGuards(path);
153
+ const guardNote = hasGuards
154
+ ? ' Note: this path requires guard conditions — it may be prevented at runtime by guards.'
155
+ : '';
156
+ errors.push({
157
+ code: 'PROPERTY_EXCLUSION_FAIL',
158
+ message: `Property 'unreachable: ${prop.to} from ${prop.from}' violated — path exists: ${formatPath(path)}${guardNote}`,
159
+ severity: 'error',
160
+ location: { state: fromRes.resolved },
161
+ suggestion: `Remove transitions that allow reaching '${toRes.resolved}' from '${fromRes.resolved}', or remove this property if the path is intentional.`,
162
+ });
163
+ }
164
+ return errors;
165
+ }
166
+ function checkPassesThrough(prop, analysis, flattenedStates, guardDefs) {
167
+ const errors = [];
168
+ const fromRes = resolveStateName(prop.from, flattenedStates);
169
+ if (fromRes.error)
170
+ return [fromRes.error];
171
+ const toRes = resolveStateName(prop.to, flattenedStates);
172
+ if (toRes.error)
173
+ return [toRes.error];
174
+ const throughRes = resolveStateName(prop.through, flattenedStates);
175
+ if (throughRes.error)
176
+ return [throughRes.error];
177
+ // First check: is target reachable from source at all?
178
+ const { reachable: fullReachable } = bfs(analysis.stateMap, fromRes.resolved, { guardDefs });
179
+ if (!fullReachable.has(toRes.resolved)) {
180
+ errors.push({
181
+ code: 'PROPERTY_PATH_FAIL',
182
+ message: `Property 'passes_through: ${prop.through} for ${prop.from} -> ${prop.to}' — '${toRes.resolved}' is not reachable from '${fromRes.resolved}' at all`,
183
+ severity: 'error',
184
+ location: { state: fromRes.resolved },
185
+ suggestion: `Ensure '${toRes.resolved}' is reachable from '${fromRes.resolved}' before adding path constraints`,
186
+ });
187
+ return errors;
188
+ }
189
+ // Core check: remove the intermediate state and see if target is still reachable
190
+ const { reachable: withoutThrough, parent } = bfs(analysis.stateMap, fromRes.resolved, {
191
+ excludeState: throughRes.resolved,
192
+ guardDefs,
193
+ });
194
+ if (withoutThrough.has(toRes.resolved)) {
195
+ const path = reconstructPath(parent, fromRes.resolved, toRes.resolved);
196
+ errors.push({
197
+ code: 'PROPERTY_PATH_FAIL',
198
+ message: `Property 'passes_through: ${prop.through} for ${prop.from} -> ${prop.to}' violated — path bypassing '${throughRes.resolved}': ${formatPath(path)}`,
199
+ severity: 'error',
200
+ location: { state: fromRes.resolved },
201
+ suggestion: `Ensure all transitions from '${fromRes.resolved}' to '${toRes.resolved}' must pass through '${throughRes.resolved}'. Note: this check ignores guard conditions.`,
202
+ });
203
+ }
204
+ return errors;
205
+ }
206
+ function checkLive(analysis, flattenedStates, guardDefs) {
207
+ const errors = [];
208
+ if (!analysis.initialState)
209
+ return errors;
210
+ // Find all reachable states from initial
211
+ const { reachable: reachableFromInitial } = bfs(analysis.stateMap, analysis.initialState.name, { guardDefs });
212
+ // Find all final state names
213
+ const finalStateNames = new Set(analysis.finalStates.map(s => s.name));
214
+ // For each reachable non-final leaf state, check if some final state is reachable
215
+ for (const stateName of reachableFromInitial) {
216
+ if (finalStateNames.has(stateName))
217
+ continue;
218
+ // Skip compound/parallel/region states — liveness is about leaf states
219
+ const fs = flattenedStates.find(f => f.name === stateName);
220
+ if (fs && (fs.isCompound || fs.isRegion))
221
+ continue;
222
+ const { reachable: reachableFromState } = bfs(analysis.stateMap, stateName, { guardDefs });
223
+ let canReachFinal = false;
224
+ for (const finalName of finalStateNames) {
225
+ if (reachableFromState.has(finalName)) {
226
+ canReachFinal = true;
227
+ break;
228
+ }
229
+ }
230
+ if (!canReachFinal) {
231
+ errors.push({
232
+ code: 'PROPERTY_LIVENESS_FAIL',
233
+ message: `Property 'live' violated — state '${stateName}' cannot reach any final state`,
234
+ severity: 'error',
235
+ location: { state: stateName },
236
+ suggestion: `Add transitions from '${stateName}' that lead to a final state, or mark '${stateName}' as [final]`,
237
+ });
238
+ }
239
+ }
240
+ return errors;
241
+ }
242
+ function checkResponds(prop, analysis, flattenedStates, guardDefs) {
243
+ const errors = [];
244
+ const fromRes = resolveStateName(prop.from, flattenedStates);
245
+ if (fromRes.error)
246
+ return [fromRes.error];
247
+ const toRes = resolveStateName(prop.to, flattenedStates);
248
+ if (toRes.error)
249
+ return [toRes.error];
250
+ const { reachable } = bfs(analysis.stateMap, fromRes.resolved, {
251
+ maxDepth: prop.within,
252
+ guardDefs,
253
+ });
254
+ if (!reachable.has(toRes.resolved)) {
255
+ // Check if it's reachable at all (just beyond the bound)
256
+ const { reachable: unbounded } = bfs(analysis.stateMap, fromRes.resolved, { guardDefs });
257
+ const reachableButBeyondBound = unbounded.has(toRes.resolved);
258
+ const suffix = reachableButBeyondBound
259
+ ? ` (reachable beyond ${prop.within} transitions — increase the bound or shorten the path)`
260
+ : ` (not reachable at all from '${fromRes.resolved}')`;
261
+ errors.push({
262
+ code: 'PROPERTY_RESPONSE_FAIL',
263
+ message: `Property 'responds: ${prop.to} from ${prop.from} within ${prop.within}' violated — '${toRes.resolved}' not reachable within ${prop.within} transitions${suffix}`,
264
+ severity: 'error',
265
+ location: { state: fromRes.resolved },
266
+ suggestion: `Shorten the path from '${fromRes.resolved}' to '${toRes.resolved}' or increase the bound`,
267
+ });
268
+ }
269
+ return errors;
270
+ }
271
+ function checkInvariant(prop, machine, flattenedStates) {
272
+ const errors = [];
273
+ // If a specific state is referenced, validate it exists
274
+ if (prop.inState) {
275
+ const stateRes = resolveStateName(prop.inState, flattenedStates);
276
+ if (stateRes.error)
277
+ return [stateRes.error];
278
+ }
279
+ // Validate that the invariant expression references declared context fields
280
+ const contextFieldNames = new Set(machine.context.map(f => f.name));
281
+ const undeclaredFields = findUndeclaredFields(prop.expression, contextFieldNames);
282
+ for (const field of undeclaredFields) {
283
+ errors.push({
284
+ code: 'PROPERTY_INVARIANT_INVALID',
285
+ message: `Invariant references undeclared context field '${field}'`,
286
+ severity: 'error',
287
+ suggestion: `Declare '${field}' in the context block or fix the field name`,
288
+ });
289
+ }
290
+ if (undeclaredFields.length === 0) {
291
+ // Advisory warning — topology-level check cannot prove context invariants
292
+ const stateDesc = prop.inState ? ` in state '${prop.inState}'` : '';
293
+ errors.push({
294
+ code: 'PROPERTY_INVARIANT_ADVISORY',
295
+ message: `Invariant${stateDesc} is syntactically valid but cannot be fully verified at topology level — requires runtime trace simulation`,
296
+ severity: 'warning',
297
+ suggestion: `This invariant will be checked during runtime verification when action implementations are available`,
298
+ });
299
+ }
300
+ return errors;
301
+ }
302
+ /**
303
+ * Find context field references in a guard expression that are not declared.
304
+ */
305
+ function findUndeclaredFields(expr, declared) {
306
+ const undeclared = [];
307
+ function walk(e) {
308
+ switch (e.kind) {
309
+ case 'true':
310
+ case 'false':
311
+ break;
312
+ case 'not':
313
+ walk(e.expr);
314
+ break;
315
+ case 'and':
316
+ case 'or':
317
+ walk(e.left);
318
+ walk(e.right);
319
+ break;
320
+ case 'compare': {
321
+ // Check variable path — first segment after 'ctx' is the field name
322
+ const path = e.left.path;
323
+ if (path.length >= 2 && path[0] === 'ctx') {
324
+ if (!declared.has(path[1])) {
325
+ undeclared.push(path[1]);
326
+ }
327
+ }
328
+ break;
329
+ }
330
+ case 'nullcheck': {
331
+ const path = e.expr.path;
332
+ if (path.length >= 2 && path[0] === 'ctx') {
333
+ if (!declared.has(path[1])) {
334
+ undeclared.push(path[1]);
335
+ }
336
+ }
337
+ break;
338
+ }
339
+ }
340
+ }
341
+ walk(expr);
342
+ return [...new Set(undeclared)];
343
+ }
344
+ // --- Size limit check ---
345
+ function checkMachineSize(flattenedStates, maxStates) {
346
+ const leafCount = flattenedStates.filter(fs => !fs.isRegion).length;
347
+ if (leafCount > maxStates) {
348
+ return [{
349
+ code: 'MACHINE_TOO_LARGE',
350
+ message: `Machine has ${leafCount} states (limit: ${maxStates}). Decompose into hierarchical states or separate machines communicating via events.`,
351
+ severity: 'error',
352
+ suggestion: `Split the machine into smaller composed machines. Each machine should stay under ${maxStates} states for verifiable complexity.`,
353
+ }];
354
+ }
355
+ return [];
356
+ }
357
+ // --- Main entry point ---
358
+ export function checkProperties(machine, options) {
359
+ const maxStates = options?.maxStates ?? DEFAULT_MAX_STATES;
360
+ const flattenedStates = flattenStates(machine.states);
361
+ const errors = [];
362
+ // Size limit check (always runs, even without properties block)
363
+ errors.push(...checkMachineSize(flattenedStates, maxStates));
364
+ if (errors.some(e => e.severity === 'error')) {
365
+ return { valid: false, errors };
366
+ }
367
+ // If no properties defined, pass
368
+ if (!machine.properties || machine.properties.length === 0) {
369
+ return { valid: true, errors };
370
+ }
371
+ const analysis = analyzeMachine(machine);
372
+ // Build guard definition map for guard-aware BFS
373
+ const guardDefs = new Map();
374
+ for (const g of machine.guards) {
375
+ guardDefs.set(g.name, g);
376
+ }
377
+ for (const prop of machine.properties) {
378
+ switch (prop.kind) {
379
+ case 'reachable':
380
+ errors.push(...checkReachable(prop, analysis, flattenedStates, guardDefs));
381
+ break;
382
+ case 'unreachable':
383
+ errors.push(...checkUnreachable(prop, analysis, flattenedStates, guardDefs));
384
+ break;
385
+ case 'passes_through':
386
+ errors.push(...checkPassesThrough(prop, analysis, flattenedStates, guardDefs));
387
+ break;
388
+ case 'live':
389
+ errors.push(...checkLive(analysis, flattenedStates, guardDefs));
390
+ break;
391
+ case 'responds':
392
+ errors.push(...checkResponds(prop, analysis, flattenedStates, guardDefs));
393
+ break;
394
+ case 'invariant':
395
+ errors.push(...checkInvariant(prop, machine, flattenedStates));
396
+ break;
397
+ }
398
+ }
399
+ return {
400
+ valid: errors.filter(e => e.severity === 'error').length === 0,
401
+ errors,
402
+ };
403
+ }
404
+ //# sourceMappingURL=properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/verifier/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { MachineDef, StateDef, OrcaFile } from '../parser/ast.js';
2
+ import type { VerificationError, VerificationResult, MachineAnalysis, FileAnalysis } from './types.js';
3
+ export type { Severity } from './types.js';
4
+ export type { VerificationError, VerificationResult, StateInfo, MachineAnalysis } from './types.js';
5
+ export interface FlattenedState {
6
+ name: string;
7
+ simpleName: string;
8
+ parentName?: string;
9
+ isCompound: boolean;
10
+ isParallel: boolean;
11
+ isRegion: boolean;
12
+ isInitial: boolean;
13
+ isFinal: boolean;
14
+ contains?: FlattenedState[];
15
+ regionOf?: string;
16
+ }
17
+ /**
18
+ * Recursively flatten nested states into dot-notation names.
19
+ * E.g., "movement" with children "walking", "running" becomes:
20
+ * - "movement" (compound)
21
+ * - "movement.walking" (child)
22
+ * - "movement.running" (child)
23
+ */
24
+ export declare function flattenStates(states: StateDef[], parentPrefix?: string): FlattenedState[];
25
+ /**
26
+ * Find the initial child state of a compound state.
27
+ */
28
+ export declare function findInitialChild(state: FlattenedState): FlattenedState | undefined;
29
+ /**
30
+ * Resolve a state name - if it's a compound state, return its initial child.
31
+ */
32
+ export declare function resolveState(states: FlattenedState[], name: string): FlattenedState | undefined;
33
+ export declare function analyzeMachine(machine: MachineDef): MachineAnalysis;
34
+ export declare function checkReachability(analysis: MachineAnalysis): VerificationError[];
35
+ export declare function checkDeadlocks(analysis: MachineAnalysis): VerificationError[];
36
+ export declare function checkOrphans(analysis: MachineAnalysis): VerificationError[];
37
+ export declare function checkStructural(machine: MachineDef): VerificationResult;
38
+ /**
39
+ * Analyze an entire OrcaFile with multiple machines.
40
+ * Performs cross-machine validation including:
41
+ * - Machine resolution (invoke.machine must exist)
42
+ * - Circular invocation detection
43
+ * - Child reachability to final state
44
+ * - onDone/onError event validation
45
+ * - Missing on_error warning
46
+ * - Combined state budget
47
+ * - Input field validation
48
+ */
49
+ export declare function analyzeFile(file: OrcaFile): FileAnalysis;
50
+ //# sourceMappingURL=structural.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/verifier/structural.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAa,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElH,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAwDzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAGlF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAU/F;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CAyHnE;AAkDD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE,CA6ChF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAwD7E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,EAAE,CA+C3E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,kBAAkB,CAYvE;AA2LD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAiExD"}