modality-ts 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/checker/encode/index.d.ts +2 -0
  4. package/dist/checker/encode/index.d.ts.map +1 -0
  5. package/dist/checker/encode/index.js +2 -0
  6. package/dist/checker/encode/index.js.map +1 -0
  7. package/dist/checker/index.d.ts +6 -0
  8. package/dist/checker/index.d.ts.map +1 -0
  9. package/dist/checker/index.js +6 -0
  10. package/dist/checker/index.js.map +1 -0
  11. package/dist/checker/monitors/index.d.ts +2 -0
  12. package/dist/checker/monitors/index.d.ts.map +1 -0
  13. package/dist/checker/monitors/index.js +2 -0
  14. package/dist/checker/monitors/index.js.map +1 -0
  15. package/dist/checker/search/eval.d.ts +16 -0
  16. package/dist/checker/search/eval.d.ts.map +1 -0
  17. package/dist/checker/search/eval.js +254 -0
  18. package/dist/checker/search/eval.js.map +1 -0
  19. package/dist/checker/search/index.d.ts +43 -0
  20. package/dist/checker/search/index.d.ts.map +1 -0
  21. package/dist/checker/search/index.js +532 -0
  22. package/dist/checker/search/index.js.map +1 -0
  23. package/dist/checker/slicing/index.d.ts +2 -0
  24. package/dist/checker/slicing/index.d.ts.map +1 -0
  25. package/dist/checker/slicing/index.js +2 -0
  26. package/dist/checker/slicing/index.js.map +1 -0
  27. package/dist/checker/traces/index.d.ts +2 -0
  28. package/dist/checker/traces/index.d.ts.map +1 -0
  29. package/dist/checker/traces/index.js +2 -0
  30. package/dist/checker/traces/index.js.map +1 -0
  31. package/dist/extraction/index.d.ts +31 -0
  32. package/dist/extraction/index.d.ts.map +1 -0
  33. package/dist/extraction/index.js +2254 -0
  34. package/dist/extraction/index.js.map +1 -0
  35. package/dist/extraction/pipeline/index.d.ts +45 -0
  36. package/dist/extraction/pipeline/index.d.ts.map +1 -0
  37. package/dist/extraction/pipeline/index.js +101 -0
  38. package/dist/extraction/pipeline/index.js.map +1 -0
  39. package/dist/extraction/spi/index.d.ts +99 -0
  40. package/dist/extraction/spi/index.d.ts.map +1 -0
  41. package/dist/extraction/spi/index.js +2 -0
  42. package/dist/extraction/spi/index.js.map +1 -0
  43. package/dist/harness/index.d.ts +109 -0
  44. package/dist/harness/index.d.ts.map +1 -0
  45. package/dist/harness/index.js +377 -0
  46. package/dist/harness/index.js.map +1 -0
  47. package/dist/kernel/artifacts/index.d.ts +11 -0
  48. package/dist/kernel/artifacts/index.d.ts.map +1 -0
  49. package/dist/kernel/artifacts/index.js +127 -0
  50. package/dist/kernel/artifacts/index.js.map +1 -0
  51. package/dist/kernel/index.d.ts +10 -0
  52. package/dist/kernel/index.d.ts.map +1 -0
  53. package/dist/kernel/index.js +10 -0
  54. package/dist/kernel/index.js.map +1 -0
  55. package/dist/kernel/ir/canonical.d.ts +5 -0
  56. package/dist/kernel/ir/canonical.d.ts.map +1 -0
  57. package/dist/kernel/ir/canonical.js +47 -0
  58. package/dist/kernel/ir/canonical.js.map +1 -0
  59. package/dist/kernel/ir/domains.d.ts +9 -0
  60. package/dist/kernel/ir/domains.d.ts.map +1 -0
  61. package/dist/kernel/ir/domains.js +102 -0
  62. package/dist/kernel/ir/domains.js.map +1 -0
  63. package/dist/kernel/ir/types.d.ts +224 -0
  64. package/dist/kernel/ir/types.d.ts.map +1 -0
  65. package/dist/kernel/ir/types.js +2 -0
  66. package/dist/kernel/ir/types.js.map +1 -0
  67. package/dist/kernel/ir/validator.d.ts +11 -0
  68. package/dist/kernel/ir/validator.d.ts.map +1 -0
  69. package/dist/kernel/ir/validator.js +674 -0
  70. package/dist/kernel/ir/validator.js.map +1 -0
  71. package/dist/kernel/overlay/index.d.ts +18 -0
  72. package/dist/kernel/overlay/index.d.ts.map +1 -0
  73. package/dist/kernel/overlay/index.js +59 -0
  74. package/dist/kernel/overlay/index.js.map +1 -0
  75. package/dist/kernel/props/index.d.ts +71 -0
  76. package/dist/kernel/props/index.d.ts.map +1 -0
  77. package/dist/kernel/props/index.js +122 -0
  78. package/dist/kernel/props/index.js.map +1 -0
  79. package/dist/kernel/report/types.d.ts +115 -0
  80. package/dist/kernel/report/types.d.ts.map +1 -0
  81. package/dist/kernel/report/types.js +2 -0
  82. package/dist/kernel/report/types.js.map +1 -0
  83. package/dist/kernel/trace/types.d.ts +19 -0
  84. package/dist/kernel/trace/types.d.ts.map +1 -0
  85. package/dist/kernel/trace/types.js +2 -0
  86. package/dist/kernel/trace/types.js.map +1 -0
  87. package/dist/modality/check.d.ts +3 -0
  88. package/dist/modality/check.d.ts.map +1 -0
  89. package/dist/modality/check.js +2 -0
  90. package/dist/modality/check.js.map +1 -0
  91. package/dist/modality/ci.d.ts +3 -0
  92. package/dist/modality/ci.d.ts.map +1 -0
  93. package/dist/modality/ci.js +2 -0
  94. package/dist/modality/ci.js.map +1 -0
  95. package/dist/modality/cli.d.ts +3 -0
  96. package/dist/modality/cli.d.ts.map +1 -0
  97. package/dist/modality/cli.js +223 -0
  98. package/dist/modality/cli.js.map +1 -0
  99. package/dist/modality/codegen/model.d.ts +3 -0
  100. package/dist/modality/codegen/model.d.ts.map +1 -0
  101. package/dist/modality/codegen/model.js +59 -0
  102. package/dist/modality/codegen/model.js.map +1 -0
  103. package/dist/modality/codegen/replay-test.d.ts +10 -0
  104. package/dist/modality/codegen/replay-test.d.ts.map +1 -0
  105. package/dist/modality/codegen/replay-test.js +104 -0
  106. package/dist/modality/codegen/replay-test.js.map +1 -0
  107. package/dist/modality/conform.d.ts +3 -0
  108. package/dist/modality/conform.d.ts.map +1 -0
  109. package/dist/modality/conform.js +2 -0
  110. package/dist/modality/conform.js.map +1 -0
  111. package/dist/modality/export-tla.d.ts +3 -0
  112. package/dist/modality/export-tla.d.ts.map +1 -0
  113. package/dist/modality/export-tla.js +2 -0
  114. package/dist/modality/export-tla.js.map +1 -0
  115. package/dist/modality/extract.d.ts +3 -0
  116. package/dist/modality/extract.d.ts.map +1 -0
  117. package/dist/modality/extract.js +2 -0
  118. package/dist/modality/extract.js.map +1 -0
  119. package/dist/modality/features/check/command.d.ts +23 -0
  120. package/dist/modality/features/check/command.d.ts.map +1 -0
  121. package/dist/modality/features/check/command.js +174 -0
  122. package/dist/modality/features/check/command.js.map +1 -0
  123. package/dist/modality/features/check/index.d.ts +3 -0
  124. package/dist/modality/features/check/index.d.ts.map +1 -0
  125. package/dist/modality/features/check/index.js +2 -0
  126. package/dist/modality/features/check/index.js.map +1 -0
  127. package/dist/modality/features/ci/command.d.ts +23 -0
  128. package/dist/modality/features/ci/command.d.ts.map +1 -0
  129. package/dist/modality/features/ci/command.js +176 -0
  130. package/dist/modality/features/ci/command.js.map +1 -0
  131. package/dist/modality/features/ci/index.d.ts +3 -0
  132. package/dist/modality/features/ci/index.d.ts.map +1 -0
  133. package/dist/modality/features/ci/index.js +2 -0
  134. package/dist/modality/features/ci/index.js.map +1 -0
  135. package/dist/modality/features/conform/command.d.ts +35 -0
  136. package/dist/modality/features/conform/command.d.ts.map +1 -0
  137. package/dist/modality/features/conform/command.js +162 -0
  138. package/dist/modality/features/conform/command.js.map +1 -0
  139. package/dist/modality/features/conform/index.d.ts +3 -0
  140. package/dist/modality/features/conform/index.d.ts.map +1 -0
  141. package/dist/modality/features/conform/index.js +2 -0
  142. package/dist/modality/features/conform/index.js.map +1 -0
  143. package/dist/modality/features/export/command.d.ts +13 -0
  144. package/dist/modality/features/export/command.d.ts.map +1 -0
  145. package/dist/modality/features/export/command.js +250 -0
  146. package/dist/modality/features/export/command.js.map +1 -0
  147. package/dist/modality/features/export/index.d.ts +3 -0
  148. package/dist/modality/features/export/index.d.ts.map +1 -0
  149. package/dist/modality/features/export/index.js +2 -0
  150. package/dist/modality/features/export/index.js.map +1 -0
  151. package/dist/modality/features/extract/command.d.ts +37 -0
  152. package/dist/modality/features/extract/command.d.ts.map +1 -0
  153. package/dist/modality/features/extract/command.js +443 -0
  154. package/dist/modality/features/extract/command.js.map +1 -0
  155. package/dist/modality/features/extract/index.d.ts +3 -0
  156. package/dist/modality/features/extract/index.d.ts.map +1 -0
  157. package/dist/modality/features/extract/index.js +2 -0
  158. package/dist/modality/features/extract/index.js.map +1 -0
  159. package/dist/modality/features/replay/command.d.ts +16 -0
  160. package/dist/modality/features/replay/command.d.ts.map +1 -0
  161. package/dist/modality/features/replay/command.js +50 -0
  162. package/dist/modality/features/replay/command.js.map +1 -0
  163. package/dist/modality/features/replay/index.d.ts +3 -0
  164. package/dist/modality/features/replay/index.d.ts.map +1 -0
  165. package/dist/modality/features/replay/index.js +2 -0
  166. package/dist/modality/features/replay/index.js.map +1 -0
  167. package/dist/modality/overlay.d.ts +3 -0
  168. package/dist/modality/overlay.d.ts.map +1 -0
  169. package/dist/modality/overlay.js +9 -0
  170. package/dist/modality/overlay.js.map +1 -0
  171. package/dist/modality/registry/index.d.ts +22 -0
  172. package/dist/modality/registry/index.d.ts.map +1 -0
  173. package/dist/modality/registry/index.js +89 -0
  174. package/dist/modality/registry/index.js.map +1 -0
  175. package/dist/modality/replay.d.ts +3 -0
  176. package/dist/modality/replay.d.ts.map +1 -0
  177. package/dist/modality/replay.js +2 -0
  178. package/dist/modality/replay.js.map +1 -0
  179. package/dist/runtime/index.d.ts +53 -0
  180. package/dist/runtime/index.d.ts.map +1 -0
  181. package/dist/runtime/index.js +83 -0
  182. package/dist/runtime/index.js.map +1 -0
  183. package/dist/sources/jotai/harness.d.ts +13 -0
  184. package/dist/sources/jotai/harness.d.ts.map +1 -0
  185. package/dist/sources/jotai/harness.js +20 -0
  186. package/dist/sources/jotai/harness.js.map +1 -0
  187. package/dist/sources/jotai/index.d.ts +11 -0
  188. package/dist/sources/jotai/index.d.ts.map +1 -0
  189. package/dist/sources/jotai/index.js +405 -0
  190. package/dist/sources/jotai/index.js.map +1 -0
  191. package/dist/sources/router/harness.d.ts +9 -0
  192. package/dist/sources/router/harness.d.ts.map +1 -0
  193. package/dist/sources/router/harness.js +32 -0
  194. package/dist/sources/router/harness.js.map +1 -0
  195. package/dist/sources/router/index.d.ts +15 -0
  196. package/dist/sources/router/index.d.ts.map +1 -0
  197. package/dist/sources/router/index.js +41 -0
  198. package/dist/sources/router/index.js.map +1 -0
  199. package/dist/sources/swr/harness.d.ts +12 -0
  200. package/dist/sources/swr/harness.d.ts.map +1 -0
  201. package/dist/sources/swr/harness.js +25 -0
  202. package/dist/sources/swr/harness.js.map +1 -0
  203. package/dist/sources/swr/index.d.ts +51 -0
  204. package/dist/sources/swr/index.d.ts.map +1 -0
  205. package/dist/sources/swr/index.js +428 -0
  206. package/dist/sources/swr/index.js.map +1 -0
  207. package/dist/sources/use-state/harness.d.ts +12 -0
  208. package/dist/sources/use-state/harness.d.ts.map +1 -0
  209. package/dist/sources/use-state/harness.js +19 -0
  210. package/dist/sources/use-state/harness.js.map +1 -0
  211. package/dist/sources/use-state/index.d.ts +9 -0
  212. package/dist/sources/use-state/index.d.ts.map +1 -0
  213. package/dist/sources/use-state/index.js +248 -0
  214. package/dist/sources/use-state/index.js.map +1 -0
  215. package/package.json +136 -0
@@ -0,0 +1,443 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { createHash } from "node:crypto";
3
+ import { dirname, join, parse } from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { extractUseStateSkeleton, runExtractionPipeline } from "modality-ts/extraction";
6
+ import { canonicalJson, parseModelArtifact } from "modality-ts/kernel";
7
+ import { emitAppModel } from "../../codegen/model.js";
8
+ import { loadAndApplyOverlay } from "../../overlay.js";
9
+ import { createBuiltinModalityRegistry } from "../../registry/index.js";
10
+ export async function runExtractCommand(options) {
11
+ const config = await loadModalityConfig(options.configPath ?? await findNearestConfig(dirname(options.sourcePath)));
12
+ const source = await readFile(options.sourcePath, "utf8");
13
+ const route = options.route ?? config.route ?? "/";
14
+ const appModelPath = options.appModelPath ?? `${dirname(options.modelPath)}/app.model.ts`;
15
+ const packageJsonPath = options.packageJsonPath ?? config.packageJsonPath ?? await findNearestPackageJson(dirname(options.sourcePath));
16
+ const dependencies = await readPackageDependencies(packageJsonPath);
17
+ const registry = createBuiltinModalityRegistry({
18
+ dependencies,
19
+ disabledPlugins: [...(config.disabledPlugins ?? []), ...(options.disabledPlugins ?? [])],
20
+ extraSourcePlugins: [...(config.plugins ?? []), ...(options.sourcePlugins ?? [])],
21
+ routerPlugin: options.routerPlugin ?? config.routerPlugin
22
+ });
23
+ const effectApis = uniqueStrings([...(config.effectApis ?? []), ...(options.effectApis ?? [])]);
24
+ const bounds = { maxDepth: 12, maxPending: 3, maxInternalSteps: 16, ...(config.bounds ?? {}), ...(options.bounds ?? {}) };
25
+ const pipeline = runExtractionPipeline({
26
+ sourceText: source,
27
+ fileName: options.sourcePath,
28
+ route,
29
+ effectApis,
30
+ sourcePlugins: registry.sourcePlugins,
31
+ routerPlugin: registry.routerPlugin,
32
+ extractHandlers: (sourceText, handlerOptions) => extractUseStateSkeleton(sourceText, handlerOptions)
33
+ });
34
+ const transitions = [...pipeline.transitions];
35
+ const extractedModel = {
36
+ schemaVersion: 1,
37
+ id: "extracted-model",
38
+ bounds,
39
+ metadata: { sourceHashes: { [options.sourcePath]: sha256(source) }, plugins: pluginProvenance(pipeline.plugins) },
40
+ vars: [...pipeline.routeVars, ...pendingVars(effectApis, transitions, [...pipeline.routeVars, ...pipeline.stateVars, ...pipeline.templateFragments.flatMap((fragment) => fragment.vars)], bounds.maxPending), ...pipeline.stateVars, ...pipeline.templateFragments.flatMap((fragment) => fragment.vars)],
41
+ transitions
42
+ };
43
+ const overlaySpec = options.explainDrift && options.overlayPath ? await readOverlaySpec(options.overlayPath) : undefined;
44
+ const driftLines = overlaySpec ? explainOverlayDrift(extractedModel, overlaySpec) : [];
45
+ const overlay = await loadAndApplyOverlay(extractedModel, options.overlayPath);
46
+ if (overlay.errors.length > 0) {
47
+ throw new Error([`Overlay merge failed: ${overlay.errors.join("; ")}`, ...driftLines].join("\n"));
48
+ }
49
+ const warnings = [
50
+ ...pipeline.warnings,
51
+ ...overlay.warnings,
52
+ ...pluginConformanceWarnings(registry.sourcePlugins, dependencies)
53
+ ];
54
+ const extractionCaveats = createExtractionCaveats(warnings);
55
+ const model = {
56
+ ...overlay.model,
57
+ metadata: {
58
+ ...overlay.model.metadata,
59
+ extractionCaveats
60
+ }
61
+ };
62
+ const report = createExtractionReport(options.sourcePath, model, warnings, overlay.ignoredVars, options.now ?? new Date());
63
+ await mkdir(dirname(options.modelPath), { recursive: true });
64
+ await writeFile(options.modelPath, `${canonicalJson(model)}\n`, "utf8");
65
+ await mkdir(dirname(appModelPath), { recursive: true });
66
+ await writeFile(appModelPath, emitAppModel(model), "utf8");
67
+ if (options.reportPath) {
68
+ await mkdir(dirname(options.reportPath), { recursive: true });
69
+ await writeFile(options.reportPath, `${canonicalJson(report)}\n`, "utf8");
70
+ }
71
+ if (options.expectModelPath) {
72
+ await assertMatchesExpectedModel(model, options.expectModelPath);
73
+ }
74
+ return {
75
+ model,
76
+ report,
77
+ lines: [
78
+ `extracted vars=${pipeline.stateVars.length + pipeline.templateFragments.flatMap((fragment) => fragment.vars).length} transitions=${transitions.length}`,
79
+ `plugins=${registry.plugins.map((plugin) => `${plugin.kind}:${plugin.id}@${plugin.version}`).join(",") || "none"}`,
80
+ `model=${options.modelPath}`,
81
+ `appModel=${appModelPath}`,
82
+ ...(options.overlayPath ? [`overlay=${options.overlayPath}`] : []),
83
+ ...(options.explainDrift ? (driftLines.length > 0 ? driftLines : ["overlay-drift=none"]) : []),
84
+ ...(options.configPath ? [`config=${options.configPath}`] : []),
85
+ ...(options.expectModelPath ? [`expectedModel=${options.expectModelPath}`] : []),
86
+ ...(options.reportPath ? [`report=${options.reportPath}`] : [])
87
+ ]
88
+ };
89
+ }
90
+ async function readOverlaySpec(overlayPath) {
91
+ return JSON.parse(await readFile(overlayPath, "utf8"));
92
+ }
93
+ async function loadModalityConfig(configPath) {
94
+ if (!configPath)
95
+ return {};
96
+ const module = (await import(`${pathToFileURL(configPath).href}?t=${Date.now()}`));
97
+ const exported = module.default ?? module.config ?? {};
98
+ return typeof exported === "function" ? await exported() : exported;
99
+ }
100
+ async function findNearestConfig(startDir) {
101
+ const names = ["modality.config.ts", "modality.config.mts", "modality.config.js", "modality.config.mjs"];
102
+ let dir = startDir;
103
+ while (true) {
104
+ for (const name of names) {
105
+ const candidate = join(dir, name);
106
+ try {
107
+ await readFile(candidate, "utf8");
108
+ return candidate;
109
+ }
110
+ catch (error) {
111
+ if (error.code !== "ENOENT")
112
+ throw error;
113
+ }
114
+ }
115
+ const parent = dirname(dir);
116
+ if (parent === dir || dir === parse(dir).root)
117
+ return undefined;
118
+ dir = parent;
119
+ }
120
+ }
121
+ function uniqueStrings(values) {
122
+ return [...new Set(values)].sort();
123
+ }
124
+ async function findNearestPackageJson(startDir) {
125
+ let dir = startDir;
126
+ while (true) {
127
+ const candidate = join(dir, "package.json");
128
+ try {
129
+ await readFile(candidate, "utf8");
130
+ return candidate;
131
+ }
132
+ catch (error) {
133
+ if (error.code !== "ENOENT")
134
+ throw error;
135
+ }
136
+ const parent = dirname(dir);
137
+ if (parent === dir || dir === parse(dir).root)
138
+ return undefined;
139
+ dir = parent;
140
+ }
141
+ }
142
+ async function readPackageDependencies(packageJsonPath) {
143
+ if (!packageJsonPath)
144
+ return undefined;
145
+ const manifest = JSON.parse(await readFile(packageJsonPath, "utf8"));
146
+ return {
147
+ ...(manifest.peerDependencies ?? {}),
148
+ ...(manifest.devDependencies ?? {}),
149
+ ...(manifest.dependencies ?? {})
150
+ };
151
+ }
152
+ function sha256(value) {
153
+ return createHash("sha256").update(value).digest("hex");
154
+ }
155
+ async function assertMatchesExpectedModel(model, expectedModelPath) {
156
+ const expected = parseModelArtifact(await readFile(expectedModelPath, "utf8"));
157
+ const actualText = canonicalJson(model);
158
+ const expectedText = canonicalJson(expected);
159
+ if (actualText !== expectedText) {
160
+ throw new Error(`Extracted model differs from expected snapshot ${expectedModelPath}`);
161
+ }
162
+ }
163
+ function createExtractionReport(sourcePath, model, warnings, ignoredVars, now) {
164
+ const caveats = model.metadata?.extractionCaveats ?? emptyExtractionCaveats();
165
+ const transitionHandlers = model.transitions.map((transition) => ({
166
+ id: transition.id,
167
+ classification: transition.confidence === "manual" ? "overlay" : transition.confidence,
168
+ reasons: transition.confidence === "over-approx" ? overApproxReasons(transition) : []
169
+ }));
170
+ const transitionIds = new Set(transitionHandlers.map((handler) => handler.id));
171
+ const unextractableHandlers = warnings
172
+ .map(unextractableHandlerFromWarning)
173
+ .filter((handler) => Boolean(handler))
174
+ .filter((handler) => !transitionIds.has(handler.id))
175
+ .map((handler) => ({
176
+ id: handler.id,
177
+ classification: "unextractable",
178
+ reasons: [handler.reason]
179
+ }));
180
+ const handlers = [...transitionHandlers, ...unextractableHandlers];
181
+ const exactOrOverlay = handlers.filter((handler) => handler.classification === "exact" || handler.classification === "overlay").length;
182
+ const unextractable = handlers.filter((handler) => handler.classification === "unextractable").length;
183
+ return {
184
+ schemaVersion: 1,
185
+ kind: "extraction-report",
186
+ generatedAt: now.toISOString(),
187
+ sourceFiles: [sourcePath],
188
+ plugins: model.metadata?.plugins ?? [],
189
+ handlers,
190
+ globalTaints: caveats.globalTaints,
191
+ staleReads: caveats.staleReads,
192
+ unhandledRejections: caveats.unhandledRejections,
193
+ domains: model.vars.map((decl) => ({
194
+ varId: decl.id,
195
+ domainKind: decl.domain.kind,
196
+ provenance: model.metadata?.domainProvenance?.[decl.id] ?? (decl.origin === "system" ? "system" : decl.origin === "library-template" ? "template" : decl.domain.kind === "tokens" ? "default-token" : "type-derived")
197
+ })),
198
+ coverage: {
199
+ handlersTotal: handlers.length,
200
+ exactOrOverlay,
201
+ unextractable,
202
+ ignoredVars: ignoredVars.length,
203
+ percentExactOrOverlay: handlers.length === 0 ? 1 : exactOrOverlay / handlers.length
204
+ },
205
+ warnings
206
+ };
207
+ }
208
+ function emptyExtractionCaveats() {
209
+ return { globalTaints: [], staleReads: [], unhandledRejections: [], unextractableHandlers: [] };
210
+ }
211
+ function createExtractionCaveats(warnings) {
212
+ return {
213
+ globalTaints: warnings.map(globalTaintFromWarning).filter(isCaveat).sort(compareCaveats),
214
+ staleReads: warnings.map(staleReadFromWarning).filter(isCaveat).sort(compareCaveats),
215
+ unhandledRejections: warnings.map(unhandledRejectionFromWarning).filter(isCaveat).sort(compareCaveats),
216
+ unextractableHandlers: warnings.map(unextractableHandlerFromWarning).filter(isCaveat).sort(compareCaveats)
217
+ };
218
+ }
219
+ function globalTaintFromWarning(warning) {
220
+ const match = /^Global taint (.+)$/.exec(warning);
221
+ return match?.[1] ? { id: match[1], reason: warning } : undefined;
222
+ }
223
+ function staleReadFromWarning(warning) {
224
+ const match = /^Stale-read risk (.+)$/.exec(warning);
225
+ return match?.[1] ? { id: match[1], reason: warning } : undefined;
226
+ }
227
+ function unhandledRejectionFromWarning(warning) {
228
+ const match = /^Unhandled rejection (.+)$/.exec(warning);
229
+ return match?.[1] ? { id: match[1], reason: warning } : undefined;
230
+ }
231
+ function isCaveat(value) {
232
+ return Boolean(value);
233
+ }
234
+ function compareCaveats(left, right) {
235
+ return left.id.localeCompare(right.id) || left.reason.localeCompare(right.reason);
236
+ }
237
+ function pluginConformanceWarnings(sourcePlugins, dependencies) {
238
+ if (!dependencies)
239
+ return [];
240
+ const warnings = [];
241
+ for (const plugin of sourcePlugins) {
242
+ const testedVersions = plugin.conformance?.testedVersions;
243
+ if (!testedVersions)
244
+ continue;
245
+ const requirement = parseTestedVersionRange(testedVersions);
246
+ if (!requirement) {
247
+ warnings.push(`Plugin ${plugin.id} has unsupported testedVersions range ${testedVersions}`);
248
+ continue;
249
+ }
250
+ const packageName = plugin.packageNames.find((candidate) => candidate === requirement.packageName) ?? plugin.packageNames[0];
251
+ const actual = packageName ? dependencies[packageName] : undefined;
252
+ if (!packageName || actual === undefined) {
253
+ warnings.push(`Plugin ${plugin.id} tested against ${testedVersions}, but no matching app dependency was found`);
254
+ continue;
255
+ }
256
+ const actualMajor = firstSemverMajor(actual);
257
+ if (actualMajor === undefined) {
258
+ warnings.push(`Plugin ${plugin.id} tested against ${testedVersions}, but app dependency ${packageName}@${actual} could not be parsed`);
259
+ continue;
260
+ }
261
+ if (actualMajor < requirement.minimumMajor) {
262
+ warnings.push(`Plugin ${plugin.id} tested against ${testedVersions}, but app uses ${packageName}@${actual}`);
263
+ }
264
+ }
265
+ return warnings.sort();
266
+ }
267
+ function parseTestedVersionRange(range) {
268
+ const match = /^([a-zA-Z0-9@/_-]+)>=([0-9]+)/.exec(range.trim());
269
+ if (!match?.[1] || !match[2])
270
+ return undefined;
271
+ return { packageName: match[1], minimumMajor: Number(match[2]) };
272
+ }
273
+ function firstSemverMajor(range) {
274
+ const match = /[0-9]+/.exec(range);
275
+ return match ? Number(match[0]) : undefined;
276
+ }
277
+ function pluginProvenance(plugins) {
278
+ return [...plugins.sources, ...(plugins.router ? [plugins.router] : [])].sort((left, right) => left.kind.localeCompare(right.kind) || left.id.localeCompare(right.id));
279
+ }
280
+ function overApproxReasons(transition) {
281
+ const reasons = new Set();
282
+ if (transition.id.endsWith(".escaped"))
283
+ reasons.add("setter escaped to unanalyzed call");
284
+ for (const variable of havocWrites(transition.effect))
285
+ reasons.add(`havoc write to ${variable}`);
286
+ if (reasons.size === 0)
287
+ reasons.add("transition confidence is over-approx");
288
+ return [...reasons].sort();
289
+ }
290
+ function explainOverlayDrift(model, overlay) {
291
+ const transitionIds = model.transitions.map((transition) => transition.id).sort();
292
+ const varIds = model.vars.map((decl) => decl.id).sort();
293
+ const lines = [];
294
+ for (const transition of overlay.transitions ?? []) {
295
+ if (transitionIds.includes(transition.id))
296
+ continue;
297
+ lines.push(formatDrift("transition", transition.id, transitionIds));
298
+ }
299
+ for (const refinement of overlay.domains ?? []) {
300
+ if (varIds.includes(refinement.var))
301
+ continue;
302
+ lines.push(formatDrift("domain", refinement.var, varIds));
303
+ }
304
+ for (const varId of overlay.ignoreVars ?? []) {
305
+ if (varIds.includes(varId))
306
+ continue;
307
+ lines.push(formatDrift("ignoreVar", varId, varIds));
308
+ }
309
+ return lines.sort();
310
+ }
311
+ function formatDrift(kind, id, candidates) {
312
+ const suggestions = nearestCandidates(id, candidates);
313
+ return suggestions.length > 0
314
+ ? `overlay-drift: ${kind} ${id} has no match; nearest=${suggestions.join(",")}`
315
+ : `overlay-drift: ${kind} ${id} has no match; nearest=none`;
316
+ }
317
+ function nearestCandidates(id, candidates) {
318
+ return candidates
319
+ .map((candidate) => ({ candidate, distance: editDistance(normalizeId(id), normalizeId(candidate)) }))
320
+ .sort((left, right) => left.distance - right.distance || left.candidate.localeCompare(right.candidate))
321
+ .slice(0, 3)
322
+ .map(({ candidate, distance }) => `${candidate}(${distance})`);
323
+ }
324
+ function normalizeId(id) {
325
+ return id.toLowerCase().replace(/[^a-z0-9]+/g, "");
326
+ }
327
+ function editDistance(left, right) {
328
+ const previous = Array.from({ length: right.length + 1 }, (_, index) => index);
329
+ for (let leftIndex = 1; leftIndex <= left.length; leftIndex += 1) {
330
+ let diagonal = previous[0];
331
+ previous[0] = leftIndex;
332
+ for (let rightIndex = 1; rightIndex <= right.length; rightIndex += 1) {
333
+ const up = previous[rightIndex] + 1;
334
+ const leftCost = previous[rightIndex - 1] + 1;
335
+ const subst = diagonal + (left[leftIndex - 1] === right[rightIndex - 1] ? 0 : 1);
336
+ diagonal = previous[rightIndex];
337
+ previous[rightIndex] = Math.min(up, leftCost, subst);
338
+ }
339
+ }
340
+ return previous[right.length];
341
+ }
342
+ function havocWrites(effect) {
343
+ if (effect.kind === "havoc")
344
+ return [effect.var];
345
+ if (effect.kind === "seq")
346
+ return effect.effects.flatMap(havocWrites);
347
+ if (effect.kind === "if")
348
+ return [...havocWrites(effect.then), ...havocWrites(effect.else)];
349
+ return [];
350
+ }
351
+ function unextractableHandlerFromWarning(warning) {
352
+ const match = /^Unextractable handler (.+)$/.exec(warning);
353
+ return match?.[1] ? { id: match[1], reason: warning } : undefined;
354
+ }
355
+ function pendingVars(effectApis, transitions = [], vars = [], maxPending = 3) {
356
+ const enqueues = transitions.flatMap((transition) => enqueueOps(transition.effect));
357
+ const opValues = new Set(effectApis);
358
+ const continuationValues = new Set();
359
+ const argFields = {};
360
+ const varsById = new Map(vars.map((decl) => [decl.id, decl]));
361
+ for (const op of effectApis) {
362
+ continuationValues.add(`App.onClick.${op}.cont`);
363
+ continuationValues.add(`App.onSubmit.${op}.cont`);
364
+ continuationValues.add(`App.onChange.${op}.cont`);
365
+ }
366
+ for (const enqueue of enqueues) {
367
+ opValues.add(enqueue.op);
368
+ continuationValues.add(enqueue.continuation);
369
+ for (const [name, expr] of Object.entries(enqueue.args)) {
370
+ const domain = pendingArgDomain(expr, varsById);
371
+ if (domain)
372
+ argFields[name] = mergeArgDomains(argFields[name], domain);
373
+ }
374
+ }
375
+ if (opValues.size === 0)
376
+ opValues.add("noop");
377
+ if (continuationValues.size === 0)
378
+ continuationValues.add("noop");
379
+ const ops = [...opValues].sort();
380
+ const continuations = [...continuationValues].sort();
381
+ return [
382
+ {
383
+ id: "sys:pending",
384
+ domain: {
385
+ kind: "boundedList",
386
+ inner: {
387
+ kind: "record",
388
+ fields: {
389
+ opId: { kind: "enum", values: ops },
390
+ continuation: { kind: "enum", values: continuations },
391
+ args: { kind: "record", fields: argFields }
392
+ }
393
+ },
394
+ maxLen: maxPending
395
+ },
396
+ origin: "system",
397
+ scope: { kind: "global" },
398
+ initial: []
399
+ }
400
+ ];
401
+ }
402
+ function enqueueOps(effect) {
403
+ if (effect.kind === "enqueue")
404
+ return [{ op: effect.op, continuation: effect.continuation, args: effect.args }];
405
+ if (effect.kind === "seq")
406
+ return effect.effects.flatMap(enqueueOps);
407
+ if (effect.kind === "if")
408
+ return [...enqueueOps(effect.then), ...enqueueOps(effect.else)];
409
+ return [];
410
+ }
411
+ function pendingArgDomain(expr, varsById) {
412
+ if (expr.kind === "lit")
413
+ return domainForLiteral(expr.value);
414
+ if (expr.kind !== "read")
415
+ return { kind: "tokens", count: 1 };
416
+ const domain = varsById.get(expr.var)?.domain;
417
+ if (!domain)
418
+ return { kind: "tokens", count: 1 };
419
+ return expr.path?.length ? { kind: "tokens", count: 1 } : domain;
420
+ }
421
+ function domainForLiteral(value) {
422
+ if (typeof value === "boolean")
423
+ return { kind: "bool" };
424
+ if (typeof value === "number")
425
+ return { kind: "boundedInt", min: value, max: value };
426
+ if (typeof value === "string")
427
+ return { kind: "enum", values: [value] };
428
+ if (value === null)
429
+ return { kind: "option", inner: { kind: "tokens", count: 1 } };
430
+ return { kind: "tokens", count: 1 };
431
+ }
432
+ function mergeArgDomains(left, right) {
433
+ if (!left)
434
+ return right;
435
+ if (left.kind === "enum" && right.kind === "enum")
436
+ return { kind: "enum", values: [...new Set([...left.values, ...right.values])].sort() };
437
+ if (left.kind === "boundedInt" && right.kind === "boundedInt")
438
+ return { kind: "boundedInt", min: Math.min(left.min, right.min), max: Math.max(left.max, right.max) };
439
+ if (left.kind === right.kind)
440
+ return left;
441
+ return { kind: "tokens", count: 1 };
442
+ }
443
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/modality/features/extract/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { runExtractCommand } from "./command.js";
2
+ export type { ExtractCommandOptions, ExtractCommandResult, ModalityConfig } from "./command.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modality/features/extract/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { runExtractCommand } from "./command.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modality/features/extract/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type ReplayReport } from "modality-ts/kernel";
2
+ export interface ReplayCommandOptions {
3
+ tracePath: string;
4
+ statesPath?: string;
5
+ observedPath?: string;
6
+ reportPath?: string;
7
+ now?: Date;
8
+ }
9
+ export interface ReplayCommandResult {
10
+ report: ReplayReport;
11
+ exitCode: number;
12
+ lines: string[];
13
+ }
14
+ export declare function runReplayCommand(options: ReplayCommandOptions): Promise<ReplayCommandResult>;
15
+ export declare function renderReplayReport(report: ReplayReport): string[];
16
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/modality/features/replay/command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsD,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3G,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqBlG;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAKjE"}
@@ -0,0 +1,50 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { replayTrace, StateSequenceDriver, statesFromTrace } from "modality-ts/harness";
4
+ import { canonicalJson, parseTraceArtifact } from "modality-ts/kernel";
5
+ export async function runReplayCommand(options) {
6
+ const trace = parseTraceArtifact(await readFile(options.tracePath, "utf8"));
7
+ const states = await replayStates(options, trace);
8
+ const verdict = await replayTrace(trace, new StateSequenceDriver(states), {
9
+ compareState: options.observedPath ? compareObservedState : undefined
10
+ });
11
+ const report = {
12
+ schemaVersion: 1,
13
+ kind: "replay-report",
14
+ generatedAt: (options.now ?? new Date()).toISOString(),
15
+ verdict
16
+ };
17
+ if (options.reportPath) {
18
+ await mkdir(dirname(options.reportPath), { recursive: true });
19
+ await writeFile(options.reportPath, `${canonicalJson(report)}\n`, "utf8");
20
+ }
21
+ return {
22
+ report,
23
+ exitCode: verdict.status === "reproduced" ? 0 : verdict.status === "not-reproduced" ? 2 : 3,
24
+ lines: renderReplayReport(report)
25
+ };
26
+ }
27
+ async function replayStates(options, trace) {
28
+ if (options.observedPath)
29
+ return JSON.parse(await readFile(options.observedPath, "utf8"));
30
+ if (options.statesPath)
31
+ return JSON.parse(await readFile(options.statesPath, "utf8"));
32
+ return statesFromTrace(trace);
33
+ }
34
+ function compareObservedState(expected, observed) {
35
+ for (const key of Object.keys(observed).sort()) {
36
+ if (JSON.stringify(expected[key]) !== JSON.stringify(observed[key])) {
37
+ return `${key}: expected ${JSON.stringify(expected[key])}, got ${JSON.stringify(observed[key])}`;
38
+ }
39
+ }
40
+ return undefined;
41
+ }
42
+ export function renderReplayReport(report) {
43
+ const lines = [`replay: ${report.verdict.status}`, `stepsRun=${report.verdict.stepsRun}`];
44
+ if (report.verdict.divergenceStep !== undefined)
45
+ lines.push(`divergenceStep=${report.verdict.divergenceStep}`);
46
+ if (report.verdict.reason)
47
+ lines.push(`reason=${report.verdict.reason}`);
48
+ return lines;
49
+ }
50
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/modality/features/replay/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { runReplayCommand } from "./command.js";
2
+ export type { ReplayCommandOptions, ReplayCommandResult } from "./command.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modality/features/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { runReplayCommand } from "./command.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modality/features/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Model, type OverlayMergeResult } from "modality-ts/kernel";
2
+ export declare function loadAndApplyOverlay(model: Model, overlayPath: string | undefined): Promise<OverlayMergeResult>;
3
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/modality/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,KAAK,EAAE,KAAK,kBAAkB,EAAoB,MAAM,oBAAoB,CAAC;AAEzG,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIpH"}
@@ -0,0 +1,9 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { applyOverlay } from "modality-ts/kernel";
3
+ export async function loadAndApplyOverlay(model, overlayPath) {
4
+ if (!overlayPath)
5
+ return { model, warnings: [], errors: [], ignoredVars: [] };
6
+ const overlay = JSON.parse(await readFile(overlayPath, "utf8"));
7
+ return applyOverlay(model, overlay);
8
+ }
9
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../src/modality/overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAyD,MAAM,oBAAoB,CAAC;AAEzG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAY,EAAE,WAA+B;IACrF,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAgB,CAAC;IAC/E,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { PluginProvenance } from "modality-ts/kernel";
2
+ import type { RouterPlugin, StateSourcePlugin } from "modality-ts/extraction/spi";
3
+ export interface ModalityPluginRegistry {
4
+ sourcePlugins: readonly StateSourcePlugin[];
5
+ routerPlugin?: RouterPlugin;
6
+ }
7
+ export interface BuiltinRegistryOptions {
8
+ dependencies?: Readonly<Record<string, string>>;
9
+ disabledPlugins?: readonly string[];
10
+ extraSourcePlugins?: readonly StateSourcePlugin[];
11
+ routerPlugin?: RouterPlugin | false;
12
+ }
13
+ export interface RegistrySummary {
14
+ sourcePluginIds: readonly string[];
15
+ routerPluginId?: string;
16
+ sourcePlugins: readonly StateSourcePlugin[];
17
+ routerPlugin?: RouterPlugin;
18
+ plugins: readonly PluginProvenance[];
19
+ }
20
+ export declare function createBuiltinModalityRegistry(options?: BuiltinRegistryOptions): RegistrySummary;
21
+ export declare function createModalityRegistry(options?: ModalityPluginRegistry): RegistrySummary;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modality/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAMlF,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,YAAY,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACtC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAanG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,sBAA8C,GAAG,eAAe,CAwB/G"}