@automaton-labs/aib 0.0.6 → 0.0.8

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 (586) hide show
  1. package/README.md +36 -257
  2. package/config/agent-dx-policy.default.json +31 -0
  3. package/config/control-plane-client.default.json +3 -0
  4. package/dist/agent-dx/agent-dx.js +805 -0
  5. package/dist/agent-dx/presentation.js +32 -0
  6. package/dist/alias-advisor/analyze.js +982 -0
  7. package/dist/alias-advisor/exact-text-cost.js +74 -0
  8. package/dist/alias-advisor/lexical.js +240 -0
  9. package/dist/alias-advisor/model.js +2 -0
  10. package/dist/alias-advisor/path-identity.js +49 -0
  11. package/dist/alias-advisor/ranking.js +171 -0
  12. package/dist/alias-advisor/token-estimator.js +85 -0
  13. package/dist/bin/aib.js +5 -1
  14. package/dist/bin/cli.js +811 -2
  15. package/dist/commands/add-missing-imports-preview-cache.js +99 -2
  16. package/dist/commands/add-missing-imports.js +241 -2
  17. package/dist/commands/apply-module-plan.js +1319 -3
  18. package/dist/commands/background-command.js +378 -0
  19. package/dist/commands/captured-input.js +74 -2
  20. package/dist/commands/config-command.js +314 -2
  21. package/dist/commands/config-output.js +357 -10
  22. package/dist/commands/control-plane-command.js +183 -0
  23. package/dist/commands/declaration-command.js +1209 -0
  24. package/dist/commands/declaration-execution-cache.js +79 -0
  25. package/dist/commands/declaration-format.js +221 -0
  26. package/dist/commands/declaration-preview-cache.js +114 -0
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -2
  29. package/dist/commands/execution-command.js +117 -1
  30. package/dist/commands/exports-star-collapse-command.js +178 -0
  31. package/dist/commands/exports-star-command.js +252 -0
  32. package/dist/commands/exports-star-preview-cache.js +84 -0
  33. package/dist/commands/feedback-command.js +176 -3
  34. package/dist/commands/file-move-to-dir-execution-cache.js +92 -0
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -0
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -0
  38. package/dist/commands/file-mutation-runtime.js +102 -0
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -0
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -0
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -0
  44. package/dist/commands/file-rename-execution-cache.js +92 -0
  45. package/dist/commands/file-rename-preview-cache.js +125 -0
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -0
  48. package/dist/commands/file-text-edit-executor.js +205 -0
  49. package/dist/commands/find-importers.js +52 -1
  50. package/dist/commands/find-unused-imports.js +55 -1
  51. package/dist/commands/generate-docs-command.js +244 -6
  52. package/dist/commands/help-command.js +460 -7
  53. package/dist/commands/import-specifier-policy.js +391 -0
  54. package/dist/commands/imports-command.js +68 -1
  55. package/dist/commands/imports-rebase.js +1138 -0
  56. package/dist/commands/init-skill-usage.js +92 -3
  57. package/dist/commands/init-workspace.js +30 -1
  58. package/dist/commands/inspect-alias-candidates.js +413 -0
  59. package/dist/commands/inspect-cycles.js +811 -5
  60. package/dist/commands/inspect-direct-usages.js +98 -0
  61. package/dist/commands/inspect-duplicates-format.js +229 -0
  62. package/dist/commands/inspect-format-primitives.js +127 -0
  63. package/dist/commands/inspect-format.js +1590 -18
  64. package/dist/commands/inspect-graph.js +1553 -9
  65. package/dist/commands/inspect-imports.js +339 -2
  66. package/dist/commands/inspect-mixed-format.js +524 -0
  67. package/dist/commands/inspect-module-plan-format.js +216 -0
  68. package/dist/commands/inspect-module-plan-serialization.js +402 -0
  69. package/dist/commands/inspect-reference-path-format.js +157 -0
  70. package/dist/commands/inspect-request-values.js +599 -0
  71. package/dist/commands/inspect-selector-kind.js +21 -0
  72. package/dist/commands/inspect-selector.js +50 -0
  73. package/dist/commands/inspect-symbol-format.js +90 -0
  74. package/dist/commands/inspect-topology.js +435 -0
  75. package/dist/commands/inspect-tree.js +827 -5
  76. package/dist/commands/inspect-usages-detail.js +793 -0
  77. package/dist/commands/inspect-usages-evidence.js +31 -0
  78. package/dist/commands/inspect-usages-format.js +367 -0
  79. package/dist/commands/inspect.js +1450 -16
  80. package/dist/commands/internal-command.js +64 -0
  81. package/dist/commands/json-file-input.js +60 -1
  82. package/dist/commands/module-plan-cache.js +156 -2
  83. package/dist/commands/module-plan-standalone.js +208 -0
  84. package/dist/commands/module-plan-timeout.js +77 -1
  85. package/dist/commands/move-preview-cache.js +101 -2
  86. package/dist/commands/mutate-aggregate-output.js +996 -0
  87. package/dist/commands/mutate-child-execution.js +374 -0
  88. package/dist/commands/mutate-command.js +1394 -0
  89. package/dist/commands/mutate-declaration-output.js +313 -0
  90. package/dist/commands/mutate-domain-adapters.js +638 -0
  91. package/dist/commands/mutate-execution-cache.js +114 -0
  92. package/dist/commands/mutate-execution-status.js +598 -0
  93. package/dist/commands/mutate-failure-output.js +531 -0
  94. package/dist/commands/mutate-file-view.js +151 -0
  95. package/dist/commands/mutate-object-output.js +91 -0
  96. package/dist/commands/mutate-output-values.js +97 -0
  97. package/dist/commands/mutate-preview-cache.js +86 -0
  98. package/dist/commands/mutate-response-replay.js +153 -0
  99. package/dist/commands/mutate-result-projection.js +818 -0
  100. package/dist/commands/mutation-eta.js +28 -0
  101. package/dist/commands/mutation-execution-cache.js +140 -3
  102. package/dist/commands/mutation-recovery-journal.js +195 -0
  103. package/dist/commands/normalize-imports.js +1120 -4
  104. package/dist/commands/object-pack-command.js +546 -0
  105. package/dist/commands/object-pack-preview-cache.js +88 -0
  106. package/dist/commands/observability-command.js +47 -3
  107. package/dist/commands/ota-command.js +403 -0
  108. package/dist/commands/print-config.js +10 -1
  109. package/dist/commands/quick-read.js +1113 -11
  110. package/dist/commands/refactor-batch-builder.js +265 -1
  111. package/dist/commands/refactor-batch-execution-cache.js +85 -1
  112. package/dist/commands/refactor-batch-preview-cache.js +96 -2
  113. package/dist/commands/refactor-batch.js +461 -4
  114. package/dist/commands/rename-entities.js +794 -4
  115. package/dist/commands/rename-execution-cache.js +49 -1
  116. package/dist/commands/rename-input.js +22 -1
  117. package/dist/commands/rename-polling-policy.js +68 -0
  118. package/dist/commands/rename-preview-cache.js +96 -2
  119. package/dist/commands/result-view.js +993 -6
  120. package/dist/commands/reveal-command.js +445 -5
  121. package/dist/commands/selector-suggestions.js +93 -0
  122. package/dist/commands/session-workspace.js +1836 -31
  123. package/dist/commands/shared.js +2 -1
  124. package/dist/commands/skills-command.js +315 -0
  125. package/dist/commands/sync-command.js +59 -2
  126. package/dist/commands/worker-command.js +173 -0
  127. package/dist/commands/workspace-cache.js +55 -1
  128. package/dist/config/defaults.js +26 -1
  129. package/dist/config/env-vars.js +77 -1
  130. package/dist/config/glob-match.js +44 -1
  131. package/dist/config/import-rules.js +165 -1
  132. package/dist/config/local-config.js +293 -3
  133. package/dist/config/mutation-comments.js +51 -1
  134. package/dist/config/path-aliases.js +165 -1
  135. package/dist/config/path-display.js +84 -1
  136. package/dist/config/product-storage.js +37 -1
  137. package/dist/config/request-env.js +21 -0
  138. package/dist/config/request-routing-context.js +23 -0
  139. package/dist/config/resolve-command-alias.js +74 -1
  140. package/dist/config/resolve.js +24 -1
  141. package/dist/config/tsconfig-discovery.js +113 -1
  142. package/dist/config/typescript-preferences.js +131 -0
  143. package/dist/config/workspace-root.js +310 -3
  144. package/dist/config/workspace-state.js +254 -1
  145. package/dist/content/content-bundle.js +88 -1
  146. package/dist/diagnostics/module-plan-timeline.js +75 -2
  147. package/dist/diagnostics/readiness-text.js +45 -8
  148. package/dist/dsl/aib-dsl.js +838 -1
  149. package/dist/dsl/declaration-dsl.js +264 -0
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -0
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -0
  152. package/dist/dsl/file-rename-dsl.js +135 -0
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +742 -0
  155. package/dist/help/bootstrap.md +236 -437
  156. package/dist/help/bootstrap.pwsh.md +742 -0
  157. package/dist/help/docs/basics.md +1 -1
  158. package/dist/help/docs/config-setup.import-normalize.md +65 -65
  159. package/dist/help/docs/config-setup.import-rules.md +6 -5
  160. package/dist/help/docs/dsl.md +4 -3
  161. package/dist/help/docs/first-setup.md +6 -5
  162. package/dist/help/docs/help-protocol.md +4 -3
  163. package/dist/help/docs/import.base.md +38 -0
  164. package/dist/help/docs/import.rebase.md +85 -0
  165. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  166. package/dist/help/docs/inspect.code.md +5 -11
  167. package/dist/help/docs/inspect.deps.md +7 -7
  168. package/dist/help/docs/inspect.file.md +10 -18
  169. package/dist/help/docs/inspect.graph.md +6 -20
  170. package/dist/help/docs/{inspect.md → inspect.shared.md} +18 -17
  171. package/dist/help/docs/modulePlan.md +24 -28
  172. package/dist/help/docs/move.md +19 -22
  173. package/dist/help/docs/moveToDir.md +46 -0
  174. package/dist/help/docs/mutate.mixed.md +34 -0
  175. package/dist/help/docs/mutation.shared.md +55 -0
  176. package/dist/help/docs/patterns.md +3 -16
  177. package/dist/help/docs/qr.md +13 -22
  178. package/dist/help/docs/quick-map.md +36 -23
  179. package/dist/help/docs/recipe.file-layout.md +15 -0
  180. package/dist/help/docs/recipe.import-boundary.md +92 -0
  181. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  182. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  183. package/dist/help/docs/recipes.md +20 -0
  184. package/dist/help/docs/rename.md +19 -27
  185. package/dist/help/docs/renameFile.md +36 -0
  186. package/dist/help/docs/rg.md +22 -0
  187. package/dist/help/docs/rules.md +26 -0
  188. package/dist/help/docs/selectors.md +3 -2
  189. package/dist/help/docs/session.md +1 -1
  190. package/dist/help/dsl/bootstrap.bash.md +742 -0
  191. package/dist/help/dsl/bootstrap.md +236 -437
  192. package/dist/help/dsl/bootstrap.pwsh.md +742 -0
  193. package/dist/help/dsl/docs/basics.md +1 -1
  194. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  195. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  196. package/dist/help/dsl/docs/dsl.md +4 -3
  197. package/dist/help/dsl/docs/first-setup.md +6 -5
  198. package/dist/help/dsl/docs/help-protocol.md +4 -3
  199. package/dist/help/dsl/docs/import.base.md +38 -0
  200. package/dist/help/dsl/docs/import.rebase.md +85 -0
  201. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  202. package/dist/help/dsl/docs/inspect.code.md +5 -11
  203. package/dist/help/dsl/docs/inspect.deps.md +7 -7
  204. package/dist/help/dsl/docs/inspect.file.md +10 -18
  205. package/dist/help/dsl/docs/inspect.graph.md +6 -20
  206. package/dist/help/dsl/docs/{inspect.md → inspect.shared.md} +18 -17
  207. package/dist/help/dsl/docs/modulePlan.md +24 -28
  208. package/dist/help/dsl/docs/move.md +19 -22
  209. package/dist/help/dsl/docs/moveToDir.md +46 -0
  210. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  211. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  212. package/dist/help/dsl/docs/patterns.md +3 -16
  213. package/dist/help/dsl/docs/qr.md +13 -22
  214. package/dist/help/dsl/docs/quick-map.md +36 -23
  215. package/dist/help/dsl/docs/recipe.file-layout.md +15 -0
  216. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  217. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  218. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  219. package/dist/help/dsl/docs/recipes.md +20 -0
  220. package/dist/help/dsl/docs/rename.md +19 -27
  221. package/dist/help/dsl/docs/renameFile.md +36 -0
  222. package/dist/help/dsl/docs/rg.md +22 -0
  223. package/dist/help/dsl/docs/rules.md +26 -0
  224. package/dist/help/dsl/docs/selectors.md +3 -2
  225. package/dist/help/dsl/docs/session.md +1 -1
  226. package/dist/help/dsl/full.md +236 -437
  227. package/dist/help/dsl/help-index.md +49 -0
  228. package/dist/help/dsl/snippets/agents.md +2 -2
  229. package/dist/help/dsl/tokens/qr.inline.examples.md +2 -0
  230. package/dist/help/dsl/tokens/stdin.examples.bash.md +8 -0
  231. package/dist/help/dsl/tokens/stdin.examples.pwsh.md +8 -0
  232. package/dist/help/dsl/tokens/stdin.examples.with-qr.bash.md +12 -0
  233. package/dist/help/dsl/tokens/stdin.examples.with-qr.pwsh.md +12 -0
  234. package/dist/help/dsl/topics/basics.md +1 -1
  235. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  236. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  237. package/dist/help/dsl/topics/dsl.md +4 -3
  238. package/dist/help/dsl/topics/first-setup.md +6 -5
  239. package/dist/help/dsl/topics/help-protocol.md +4 -3
  240. package/dist/help/dsl/topics/import.base.md +36 -0
  241. package/dist/help/dsl/topics/import.rebase.md +83 -0
  242. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  243. package/dist/help/dsl/topics/inspect.code.md +5 -11
  244. package/dist/help/dsl/topics/inspect.deps.md +7 -7
  245. package/dist/help/dsl/topics/inspect.file.md +10 -18
  246. package/dist/help/dsl/topics/inspect.graph.md +6 -20
  247. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +18 -17
  248. package/dist/help/dsl/topics/modulePlan.md +21 -26
  249. package/dist/help/dsl/topics/move.md +17 -18
  250. package/dist/help/dsl/topics/moveToDir.md +44 -0
  251. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  252. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  253. package/dist/help/dsl/topics/patterns.md +3 -16
  254. package/dist/help/dsl/topics/qr.md +13 -22
  255. package/dist/help/dsl/topics/quick-map.md +36 -23
  256. package/dist/help/dsl/topics/recipe.file-layout.md +13 -0
  257. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  258. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  259. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  260. package/dist/help/dsl/topics/recipes.md +18 -0
  261. package/dist/help/dsl/topics/rename.md +15 -15
  262. package/dist/help/dsl/topics/renameFile.md +34 -0
  263. package/dist/help/dsl/topics/rg.md +20 -0
  264. package/dist/help/dsl/topics/rules.md +24 -0
  265. package/dist/help/dsl/topics/selectors.md +3 -2
  266. package/dist/help/dsl/topics/session.md +1 -1
  267. package/dist/help/full.md +236 -437
  268. package/dist/help/help-index.md +49 -0
  269. package/dist/help/help-meta.json +114 -48
  270. package/dist/help/index.md +76 -87
  271. package/dist/help/snippets/agents.md +2 -2
  272. package/dist/help/tokens/qr.inline.examples.md +2 -0
  273. package/dist/help/tokens/stdin.examples.bash.md +8 -0
  274. package/dist/help/tokens/stdin.examples.pwsh.md +8 -0
  275. package/dist/help/tokens/stdin.examples.with-qr.bash.md +12 -0
  276. package/dist/help/tokens/stdin.examples.with-qr.pwsh.md +12 -0
  277. package/dist/help/topics/basics.md +1 -1
  278. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  279. package/dist/help/topics/config-setup.import-rules.md +6 -5
  280. package/dist/help/topics/dsl.md +4 -3
  281. package/dist/help/topics/first-setup.md +6 -5
  282. package/dist/help/topics/help-protocol.md +4 -3
  283. package/dist/help/topics/import.base.md +36 -0
  284. package/dist/help/topics/import.rebase.md +83 -0
  285. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  286. package/dist/help/topics/inspect.code.md +5 -11
  287. package/dist/help/topics/inspect.deps.md +7 -7
  288. package/dist/help/topics/inspect.file.md +10 -18
  289. package/dist/help/topics/inspect.graph.md +6 -20
  290. package/dist/help/topics/{inspect.md → inspect.shared.md} +18 -17
  291. package/dist/help/topics/modulePlan.md +21 -26
  292. package/dist/help/topics/move.md +17 -18
  293. package/dist/help/topics/moveToDir.md +44 -0
  294. package/dist/help/topics/mutate.mixed.md +32 -0
  295. package/dist/help/topics/mutation.shared.md +53 -0
  296. package/dist/help/topics/patterns.md +3 -16
  297. package/dist/help/topics/qr.md +13 -22
  298. package/dist/help/topics/quick-map.md +36 -23
  299. package/dist/help/topics/recipe.file-layout.md +13 -0
  300. package/dist/help/topics/recipe.import-boundary.md +90 -0
  301. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  302. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  303. package/dist/help/topics/recipes.md +18 -0
  304. package/dist/help/topics/rename.md +15 -15
  305. package/dist/help/topics/renameFile.md +34 -0
  306. package/dist/help/topics/rg.md +20 -0
  307. package/dist/help/topics/rules.md +24 -0
  308. package/dist/help/topics/selectors.md +3 -2
  309. package/dist/help/topics/session.md +1 -1
  310. package/dist/host/capabilities.js +56 -0
  311. package/dist/imports/standalone-import-analysis.js +602 -0
  312. package/dist/imports/standalone-import-model.js +2 -0
  313. package/dist/imports/standalone-import-process.js +66 -0
  314. package/dist/imports/standalone-import-worker.js +27 -0
  315. package/dist/imports/standalone-ts-project.js +147 -0
  316. package/dist/inspect/inspect-duplicates-service.js +526 -0
  317. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  318. package/dist/inspect/inspect-source-ranges.js +82 -0
  319. package/dist/inspect/inspect-source-shape.js +649 -0
  320. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  321. package/dist/inspect/standalone-inspect-model.js +9 -0
  322. package/dist/inspect/standalone-inspect-process.js +55 -0
  323. package/dist/inspect/standalone-inspect-usages.js +274 -0
  324. package/dist/inspect/standalone-inspect-worker.js +13 -0
  325. package/dist/metrics/central-metrics.js +101 -2
  326. package/dist/mutation/concrete-edit-plan.js +157 -0
  327. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  328. package/dist/mutation/exports-star-expand-apply.js +373 -0
  329. package/dist/mutation/exports-star-expand-preview.js +807 -0
  330. package/dist/mutation/file-impact-scan.js +182 -0
  331. package/dist/mutation/file-mutation-discovery.js +674 -0
  332. package/dist/mutation/file-mutation-eta.js +99 -0
  333. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  334. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  335. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  336. package/dist/mutation/mutation-estimate.js +45 -0
  337. package/dist/mutation/mutation-plan.js +467 -0
  338. package/dist/mutation/object-mutation-foundation.js +2 -0
  339. package/dist/mutation/object-mutation-partition.js +148 -0
  340. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  341. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  342. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  343. package/dist/mutation/package-manifest-impact.js +176 -0
  344. package/dist/mutation/rename-owner-worker-child.js +37 -0
  345. package/dist/mutation/rename-owner-worker.js +122 -0
  346. package/dist/mutation/runtime-cycle-query.js +66 -0
  347. package/dist/mutation/semantic-execution-progress.js +63 -0
  348. package/dist/mutation/semantic-export-index.js +474 -0
  349. package/dist/mutation/semantic-impact-scan.js +434 -0
  350. package/dist/mutation/semantic-model.js +2 -0
  351. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  352. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  353. package/dist/mutation/semantic-move-config-worker.js +449 -0
  354. package/dist/mutation/semantic-move-declarations.js +94 -0
  355. package/dist/mutation/semantic-move-metrics.js +119 -0
  356. package/dist/mutation/semantic-move-model.js +2 -0
  357. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  358. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  359. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  360. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  361. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  362. package/dist/mutation/semantic-move-policy.js +360 -0
  363. package/dist/mutation/semantic-move-process.js +218 -0
  364. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  365. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  366. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  367. package/dist/mutation/semantic-move-transaction.js +639 -0
  368. package/dist/mutation/semantic-mutation-engine.js +478 -0
  369. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  370. package/dist/mutation/semantic-planner-retry.js +26 -0
  371. package/dist/mutation/semantic-program-roots.js +69 -0
  372. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  373. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  374. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  375. package/dist/mutation/semantic-rename-locations.js +192 -0
  376. package/dist/mutation/semantic-rename-model.js +2 -0
  377. package/dist/mutation/semantic-rename-process.js +210 -0
  378. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  379. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  380. package/dist/mutation/semantic-rename-transaction.js +333 -0
  381. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  382. package/dist/mutation/semantic-worker-retry.js +40 -0
  383. package/dist/mutation/semantic-workspace.js +804 -0
  384. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  385. package/dist/observability/config.js +206 -1
  386. package/dist/observability/context.js +59 -1
  387. package/dist/observability/failure-snapshot.js +124 -2
  388. package/dist/observability/recent.js +63 -2
  389. package/dist/payloads/read-stdin-json.js +212 -1
  390. package/dist/rg-wrapper/core.js +714 -0
  391. package/dist/rg-wrapper/options.js +125 -0
  392. package/dist/rtk-wrapper/core.js +144 -0
  393. package/dist/rtk-wrapper/git-safety.js +203 -0
  394. package/dist/rtk-wrapper/output-adapter.js +106 -0
  395. package/dist/runtime/buffered-process.js +114 -0
  396. package/dist/runtime/bundled-node.js +97 -1
  397. package/dist/runtime/command-lifecycle.js +2 -0
  398. package/dist/runtime/input-source.js +238 -1
  399. package/dist/runtime/node-cli-identity.js +37 -0
  400. package/dist/runtime/run-command.js +191 -1
  401. package/dist/selectors/parse-entities.js +84 -1
  402. package/dist/semantic/semantic-context-pool.js +830 -0
  403. package/dist/semantic/semantic-context-provider.js +416 -0
  404. package/dist/semantic/semantic-resident-admission.js +38 -0
  405. package/dist/semantic/semantic-worker-child.js +40 -0
  406. package/dist/semantic/semantic-worker-manager.js +460 -0
  407. package/dist/semantic/semantic-worker-protocol.js +2 -0
  408. package/dist/semantic/semantic-worker-runtime.js +38 -0
  409. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  410. package/dist/session/client.js +359 -1
  411. package/dist/session/daemon-state.js +185 -0
  412. package/dist/session/external-tool-coordinator.js +88 -0
  413. package/dist/session/external-tool-request.js +52 -0
  414. package/dist/session/lane-owner.js +116 -0
  415. package/dist/session/paths.js +71 -1
  416. package/dist/session/runtime-lifecycle.js +225 -0
  417. package/dist/session/runtime-shutdown.js +95 -0
  418. package/dist/session/server.js +1194 -8
  419. package/dist/session/session-health.js +27 -0
  420. package/dist/shared/agent-text.js +29 -1
  421. package/dist/shared/errors.js +496 -30
  422. package/dist/shared/event-loop.js +6 -1
  423. package/dist/shared/hints.js +37 -1
  424. package/dist/shared/metrics.js +43 -1
  425. package/dist/shared/presentation.js +69 -4
  426. package/dist/shared/stdin-examples.js +77 -3
  427. package/dist/shared/stdout.js +6 -2
  428. package/dist/shared/types.js +23 -1
  429. package/dist/tool-runtime/runtime-tools.js +120 -0
  430. package/dist/topology/availability.js +663 -0
  431. package/dist/topology/cache.js +130 -0
  432. package/dist/topology/candidates.js +372 -0
  433. package/dist/topology/core.js +903 -0
  434. package/dist/topology/dependency-snapshot.js +189 -0
  435. package/dist/topology/model.js +2 -0
  436. package/dist/topology/scope.js +100 -0
  437. package/dist/topology/ts-oracle-batch.js +529 -0
  438. package/dist/topology/ts-oracle-host.js +69 -0
  439. package/dist/topology/ts-oracle-model.js +2 -0
  440. package/dist/topology/ts-oracle.js +224 -0
  441. package/dist/topology/tsconfig-loader.js +105 -0
  442. package/dist/topology/workspace-project-index.js +542 -0
  443. package/dist/tracing/config.js +192 -2
  444. package/dist/tracing/failure-summary.js +100 -0
  445. package/dist/tracing/trace.js +318 -5
  446. package/dist/tsc-wrapper/core.js +697 -0
  447. package/dist/workers/control-plane/aib-control-plane-worker.cjs +80 -0
  448. package/dist/workers/control-plane/client-config.default.json +3 -0
  449. package/dist/workers/lexical-worker-child.js +27 -0
  450. package/dist/workers/lexical-worker-manager.js +394 -0
  451. package/dist/workers/lexical-worker-protocol.js +2 -0
  452. package/dist/workers/lexical-worker-runtime.js +25 -0
  453. package/dist/workers/owned-one-shot-process.js +115 -0
  454. package/dist/workers/product-storage.js +23 -0
  455. package/dist/workers/registry.js +241 -0
  456. package/package.json +8 -11
  457. package/runtimes/tools/rg/darwin-arm64/rg +0 -0
  458. package/runtimes/tools/rg/darwin-x64/rg +0 -0
  459. package/runtimes/tools/rg/linux-arm64/rg +0 -0
  460. package/runtimes/tools/rg/linux-x64/rg +0 -0
  461. package/runtimes/tools/rg/manifest.json +36 -0
  462. package/runtimes/tools/rg/win32-x64/rg.exe +0 -0
  463. package/runtimes/tools/rtk/darwin-arm64/rtk +0 -0
  464. package/runtimes/tools/rtk/darwin-x64/rtk +0 -0
  465. package/runtimes/tools/rtk/linux-arm64/rtk +0 -0
  466. package/runtimes/tools/rtk/linux-x64/rtk +0 -0
  467. package/runtimes/tools/rtk/manifest.json +36 -0
  468. package/runtimes/tools/rtk/win32-x64/rtk.exe +0 -0
  469. package/scripts/postinstall.cjs +29 -29
  470. package/scripts/provision-runtime.cjs +411 -459
  471. package/dist/client/http-client.js +0 -1
  472. package/dist/client/transport-options.js +0 -1
  473. package/dist/client/websocket-client.js +0 -1
  474. package/dist/commands/entity-resolution.js +0 -1
  475. package/dist/commands/inspect-symbol-query.js +0 -1
  476. package/dist/commands/list-instances.js +0 -1
  477. package/dist/commands/module-plan-command.js +0 -1
  478. package/dist/commands/move-command.js +0 -1
  479. package/dist/commands/move-to-file.js +0 -2
  480. package/dist/commands/ping.js +0 -1
  481. package/dist/commands/refactor-command.js +0 -1
  482. package/dist/commands/rename-command.js +0 -1
  483. package/dist/commands/runtime-command.js +0 -4
  484. package/dist/commands/runtime-info.js +0 -1
  485. package/dist/commands/validate-module-plan.js +0 -2
  486. package/dist/compatibility/policy.js +0 -1
  487. package/dist/config/auto-start-ide.js +0 -1
  488. package/dist/discovery/registry.js +0 -1
  489. package/dist/discovery/select-instance.js +0 -1
  490. package/dist/help/docs/mutation.md +0 -50
  491. package/dist/help/docs/refactor.batch.md +0 -44
  492. package/dist/help/dsl/docs/mutation.md +0 -50
  493. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  494. package/dist/help/dsl/topics/mutation.md +0 -48
  495. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  496. package/dist/help/json/bootstrap.md +0 -1085
  497. package/dist/help/json/docs/basics.md +0 -15
  498. package/dist/help/json/docs/config-setup.aliases.md +0 -56
  499. package/dist/help/json/docs/config-setup.excludes.md +0 -45
  500. package/dist/help/json/docs/config-setup.import-normalize.md +0 -86
  501. package/dist/help/json/docs/config-setup.import-rules.md +0 -96
  502. package/dist/help/json/docs/config-setup.tsconfigs.md +0 -33
  503. package/dist/help/json/docs/dsl.md +0 -25
  504. package/dist/help/json/docs/first-setup.md +0 -292
  505. package/dist/help/json/docs/help-format.md +0 -9
  506. package/dist/help/json/docs/help-protocol.md +0 -26
  507. package/dist/help/json/docs/imports.normalize.md +0 -47
  508. package/dist/help/json/docs/inspect.code.md +0 -41
  509. package/dist/help/json/docs/inspect.cycles.md +0 -38
  510. package/dist/help/json/docs/inspect.deps.md +0 -46
  511. package/dist/help/json/docs/inspect.duplicates.md +0 -65
  512. package/dist/help/json/docs/inspect.exports.md +0 -40
  513. package/dist/help/json/docs/inspect.file.md +0 -38
  514. package/dist/help/json/docs/inspect.graph.md +0 -139
  515. package/dist/help/json/docs/inspect.imports.md +0 -15
  516. package/dist/help/json/docs/inspect.md +0 -88
  517. package/dist/help/json/docs/inspect.members.md +0 -32
  518. package/dist/help/json/docs/inspect.tree.md +0 -32
  519. package/dist/help/json/docs/inspect.usages.md +0 -61
  520. package/dist/help/json/docs/modulePlan.md +0 -73
  521. package/dist/help/json/docs/move.md +0 -56
  522. package/dist/help/json/docs/mutation.md +0 -65
  523. package/dist/help/json/docs/patterns.md +0 -76
  524. package/dist/help/json/docs/prefs.md +0 -40
  525. package/dist/help/json/docs/qr.md +0 -37
  526. package/dist/help/json/docs/quick-map.md +0 -30
  527. package/dist/help/json/docs/refactor.batch.md +0 -72
  528. package/dist/help/json/docs/rename.md +0 -47
  529. package/dist/help/json/docs/reveal.md +0 -30
  530. package/dist/help/json/docs/selectors.md +0 -23
  531. package/dist/help/json/docs/session.md +0 -77
  532. package/dist/help/json/docs/view.md +0 -30
  533. package/dist/help/json/full.md +0 -1085
  534. package/dist/help/json/snippets/agents.md +0 -14
  535. package/dist/help/json/topics/basics.md +0 -13
  536. package/dist/help/json/topics/config-setup.aliases.md +0 -54
  537. package/dist/help/json/topics/config-setup.excludes.md +0 -43
  538. package/dist/help/json/topics/config-setup.import-normalize.md +0 -84
  539. package/dist/help/json/topics/config-setup.import-rules.md +0 -94
  540. package/dist/help/json/topics/config-setup.tsconfigs.md +0 -31
  541. package/dist/help/json/topics/dsl.md +0 -23
  542. package/dist/help/json/topics/first-setup.md +0 -290
  543. package/dist/help/json/topics/help-format.md +0 -7
  544. package/dist/help/json/topics/help-protocol.md +0 -24
  545. package/dist/help/json/topics/imports.normalize.md +0 -45
  546. package/dist/help/json/topics/inspect.code.md +0 -39
  547. package/dist/help/json/topics/inspect.cycles.md +0 -36
  548. package/dist/help/json/topics/inspect.deps.md +0 -44
  549. package/dist/help/json/topics/inspect.duplicates.md +0 -37
  550. package/dist/help/json/topics/inspect.exports.md +0 -38
  551. package/dist/help/json/topics/inspect.file.md +0 -36
  552. package/dist/help/json/topics/inspect.graph.md +0 -137
  553. package/dist/help/json/topics/inspect.imports.md +0 -13
  554. package/dist/help/json/topics/inspect.md +0 -86
  555. package/dist/help/json/topics/inspect.members.md +0 -30
  556. package/dist/help/json/topics/inspect.tree.md +0 -22
  557. package/dist/help/json/topics/inspect.usages.md +0 -59
  558. package/dist/help/json/topics/modulePlan.md +0 -60
  559. package/dist/help/json/topics/move.md +0 -46
  560. package/dist/help/json/topics/mutation.md +0 -63
  561. package/dist/help/json/topics/patterns.md +0 -74
  562. package/dist/help/json/topics/prefs.md +0 -38
  563. package/dist/help/json/topics/qr.md +0 -35
  564. package/dist/help/json/topics/quick-map.md +0 -28
  565. package/dist/help/json/topics/refactor.batch.md +0 -61
  566. package/dist/help/json/topics/rename.md +0 -42
  567. package/dist/help/json/topics/reveal.md +0 -28
  568. package/dist/help/json/topics/selectors.md +0 -21
  569. package/dist/help/json/topics/session.md +0 -59
  570. package/dist/help/json/topics/view.md +0 -28
  571. package/dist/help/topics/mutation.md +0 -48
  572. package/dist/help/topics/refactor.batch.md +0 -33
  573. package/dist/ide-launch/common.cjs +0 -162
  574. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  575. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  576. package/dist/managed-host/serve-web-autostart.js +0 -1
  577. package/dist/managed-host/serve-web-host.cjs +0 -1904
  578. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  579. package/dist/shared/diagnostic-catalog.js +0 -1
  580. package/dist/shared/diagnostics.js +0 -1
  581. package/dist/shared/operations.js +0 -1
  582. package/dist/shared/protocol.js +0 -1
  583. package/dist/shared/routes.js +0 -1
  584. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  585. package/runtimes/launcher/linux-x64/aib +0 -0
  586. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -0,0 +1,639 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.applyStandaloneSemanticMoveTransaction = applyStandaloneSemanticMoveTransaction;
40
+ const crypto = __importStar(require("node:crypto"));
41
+ const fs = __importStar(require("node:fs"));
42
+ const path = __importStar(require("node:path"));
43
+ const typescript_1 = __importDefault(require("typescript"));
44
+ const file_text_edit_executor_1 = require("../commands/file-text-edit-executor");
45
+ const file_mutation_discovery_1 = require("./file-mutation-discovery");
46
+ const semantic_move_plan_hash_1 = require("./semantic-move-plan-hash");
47
+ const semantic_move_declarations_1 = require("./semantic-move-declarations");
48
+ class StagePreparationCleanupError extends Error {
49
+ stageFile;
50
+ cleanupError;
51
+ constructor(cause, stageFile, cleanupError) {
52
+ super(`${errorMessage(cause)} Stage cleanup failed: ${errorMessage(cleanupError)}`);
53
+ this.name = "StagePreparationCleanupError";
54
+ this.stageFile = stageFile;
55
+ this.cleanupError = errorMessage(cleanupError);
56
+ }
57
+ }
58
+ const defaultDependencies = {
59
+ fs,
60
+ computeWorkspaceFingerprint: file_mutation_discovery_1.computeFileMutationWorkspaceFingerprint
61
+ };
62
+ function applyStandaloneSemanticMoveTransaction(input, dependencies = defaultDependencies) {
63
+ const root = path.resolve(input.workspaceRoot);
64
+ const validation = validatePlan(root, input.plan);
65
+ if (!validation.ok)
66
+ return failure(validation.code, validation.error);
67
+ const targetEdit = input.plan.edits.find((edit) => samePath(edit.fileName, input.plan.targetFile));
68
+ const targetExisted = targetEdit.expectedExists;
69
+ const existingEdits = input.plan.edits.filter((edit) => edit.expectedExists);
70
+ const sourceEdit = existingEdits.find((edit) => samePath(edit.fileName, input.plan.sourceFile));
71
+ let existing = [];
72
+ let target = null;
73
+ const createdDirs = [];
74
+ let targetClaimed = false;
75
+ const attempted = [];
76
+ const prepareStartedAt = input.metrics?.start();
77
+ let prepareEnded = false;
78
+ let applyStartedAt;
79
+ let applyEnded = false;
80
+ const endPrepare = () => {
81
+ if (prepareEnded || prepareStartedAt === undefined)
82
+ return;
83
+ prepareEnded = true;
84
+ input.metrics?.end("transaction.prepare", prepareStartedAt);
85
+ };
86
+ const endApply = () => {
87
+ if (applyEnded || applyStartedAt === undefined)
88
+ return;
89
+ applyEnded = true;
90
+ input.metrics?.end("transaction.apply", applyStartedAt);
91
+ };
92
+ try {
93
+ if (dependencies.fs.existsSync(input.plan.targetFile) !== targetExisted) {
94
+ throw typed("SEMANTIC_MOVE_TARGET_CHANGED", "Target existence changed before semantic move apply.");
95
+ }
96
+ const realRoot = dependencies.fs.realpathSync(root);
97
+ assertWorkspaceFingerprint(root, input.plan, input.computeWorkspaceFingerprint ?? dependencies.computeWorkspaceFingerprint, "SEMANTIC_MOVE_COMMIT_PREFLIGHT_STALE");
98
+ existing = existingEdits.map((edit) => prepareExistingFile(root, realRoot, edit, dependencies.fs));
99
+ for (const item of existing) {
100
+ item.descriptor = dependencies.fs.openSync(item.file, "r+");
101
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed while acquiring semantic move ownership.");
102
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed while acquiring semantic move ownership.");
103
+ }
104
+ if (!targetExisted) {
105
+ createdDirs.push(...ensureDirectoryTree(path.dirname(input.plan.targetFile), dependencies.fs));
106
+ const parentAuthority = captureTargetParentAuthority(root, realRoot, input.plan.targetFile, dependencies.fs);
107
+ if (dependencies.fs.existsSync(input.plan.targetFile))
108
+ throw typed("SEMANTIC_MOVE_TARGET_CHANGED", "Target path exists before no-replace claim.");
109
+ const sourceMode = sourceEditMode(sourceEdit.fileName, dependencies.fs);
110
+ const targetBytes = Buffer.from((0, file_text_edit_executor_1.applyTextChanges)(targetEdit.expectedText, targetEdit.textChanges), "utf8");
111
+ target = createOwnedStagedTarget(input.plan.targetFile, targetBytes, sourceMode, parentAuthority, dependencies.fs);
112
+ }
113
+ dependencies.onPhase?.("beforeFinalPreflight", null, -1);
114
+ dependencies.checkInterrupted?.();
115
+ assertWorkspaceFingerprint(root, input.plan, input.computeWorkspaceFingerprint ?? dependencies.computeWorkspaceFingerprint, "SEMANTIC_MOVE_COMMIT_PREFLIGHT_STALE");
116
+ if (dependencies.fs.existsSync(input.plan.targetFile) !== targetExisted)
117
+ throw typed("SEMANTIC_MOVE_TARGET_CHANGED", "Target existence changed at the final boundary.");
118
+ for (const item of existing) {
119
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed at the final semantic move boundary.");
120
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed at the final semantic move boundary.");
121
+ }
122
+ if (target)
123
+ assertStagedTarget(target, dependencies.fs, false, "Staged target changed before no-replace claim.");
124
+ const writeSet = uniquePaths([input.plan.targetFile, ...existing.map((item) => item.file)]);
125
+ input.beforeApply?.(writeSet);
126
+ dependencies.checkInterrupted?.();
127
+ if (dependencies.fs.existsSync(input.plan.targetFile) !== targetExisted)
128
+ throw typed("SEMANTIC_MOVE_TARGET_CHANGED", "Target existence changed after write-set publication.");
129
+ assertWorkspaceFingerprint(root, input.plan, input.computeWorkspaceFingerprint ?? dependencies.computeWorkspaceFingerprint, "SEMANTIC_MOVE_COMMIT_PREFLIGHT_STALE");
130
+ for (const item of existing) {
131
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed after write-set publication.");
132
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed after write-set publication.");
133
+ }
134
+ if (target)
135
+ assertStagedTarget(target, dependencies.fs, false, "Staged target changed after write-set publication.");
136
+ endPrepare();
137
+ applyStartedAt = input.metrics?.start();
138
+ if (target) {
139
+ dependencies.fs.linkSync(target.stageFile, target.targetFile);
140
+ targetClaimed = true;
141
+ assertStagedTarget(target, dependencies.fs, true, "Target ownership claim changed or was replaced.");
142
+ dependencies.onPhase?.("afterTargetClaim", target.targetFile, -1);
143
+ }
144
+ for (const [index, item] of existing.entries()) {
145
+ dependencies.onPhase?.("beforeWrite", item.file, index);
146
+ dependencies.checkInterrupted?.();
147
+ if (target)
148
+ assertStagedTarget(target, dependencies.fs, true, "Target was replaced before an existing-file write.");
149
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed before its semantic move write.");
150
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed before its semantic move write.");
151
+ attempted.push(item);
152
+ writeExact(item, item.finalBytes, dependencies.fs);
153
+ dependencies.onPhase?.("afterWrite", item.file, index);
154
+ }
155
+ dependencies.onPhase?.("beforeFinalVerify", null, existing.length);
156
+ dependencies.checkInterrupted?.();
157
+ for (const item of existing) {
158
+ assertDescriptorSnapshot(item, dependencies.fs, item.finalBytes, "Written file changed before semantic move commit.");
159
+ assertOwnedPath(item, dependencies.fs, item.finalBytes, "Written path was replaced before semantic move commit.");
160
+ }
161
+ if (target) {
162
+ assertStagedTarget(target, dependencies.fs, true, "Target changed before semantic move commit.");
163
+ removeOwnedPath(target.stageFile, target.identity, dependencies.fs);
164
+ assertOwnedTarget(target, dependencies.fs, "Target changed while releasing staged ownership.");
165
+ }
166
+ endApply();
167
+ }
168
+ catch (error) {
169
+ endPrepare();
170
+ endApply();
171
+ const rollbackStartedAt = input.metrics?.start();
172
+ const result = rollback(error, attempted, existing, target, targetClaimed, createdDirs, dependencies);
173
+ if (rollbackStartedAt !== undefined)
174
+ input.metrics?.end("transaction.rollback", rollbackStartedAt);
175
+ closeExisting(existing, dependencies.fs);
176
+ closeTarget(target, dependencies.fs);
177
+ return result;
178
+ }
179
+ closeExisting(existing, dependencies.fs);
180
+ closeTarget(target, dependencies.fs);
181
+ return {
182
+ ok: true,
183
+ savedFiles: uniquePaths([input.plan.targetFile, ...existing.map((item) => item.file)]),
184
+ touchedFiles: uniquePaths([input.plan.targetFile, ...existing.map((item) => item.file)]),
185
+ editCount: input.plan.edits.reduce((sum, edit) => sum + edit.textChanges.length, 0)
186
+ };
187
+ }
188
+ function validatePlan(root, plan) {
189
+ if (!plan.complete)
190
+ return { ok: false, code: plan.code, error: plan.error ?? "Standalone semantic move plan is incomplete." };
191
+ if (!plan.planHash || (0, semantic_move_plan_hash_1.computeSemanticMovePlanHash)(plan) !== plan.planHash) {
192
+ return { ok: false, code: "SEMANTIC_MOVE_PLAN_PAYLOAD_CHANGED", error: "Semantic move plan payload changed after planner authorization." };
193
+ }
194
+ if (!samePath(root, plan.workspaceRoot) || !plan.discovery.workspaceFingerprint || !plan.snapshotHash ||
195
+ !isInside(root, plan.sourceFile) || !isInside(root, plan.targetFile) || samePath(plan.sourceFile, plan.targetFile)) {
196
+ return { ok: false, code: "SEMANTIC_MOVE_PLAN_IDENTITY_INVALID", error: "Planner workspace/source/target identity is missing or mismatched." };
197
+ }
198
+ if (plan.entities.length === 0 || plan.edits.length < 2) {
199
+ return { ok: false, code: "SEMANTIC_MOVE_PLAN_EMPTY", error: "Semantic move requires entities plus source and target edits." };
200
+ }
201
+ const files = new Set();
202
+ let sourceEdit = null;
203
+ let targetEdit = null;
204
+ for (const edit of plan.edits) {
205
+ const file = path.resolve(edit.fileName);
206
+ const key = pathKey(file);
207
+ if (!isInside(root, file) || files.has(key)) {
208
+ return { ok: false, code: "SEMANTIC_MOVE_EDIT_SCOPE_INVALID", error: `Invalid or duplicate semantic move edit: ${edit.fileName}.` };
209
+ }
210
+ files.add(key);
211
+ if (samePath(file, plan.sourceFile))
212
+ sourceEdit = edit;
213
+ if (samePath(file, plan.targetFile))
214
+ targetEdit = edit;
215
+ const isTarget = samePath(file, plan.targetFile);
216
+ if ((isTarget && edit.isNewFile !== !edit.expectedExists) || (!isTarget && (edit.isNewFile || !edit.expectedExists))) {
217
+ return { ok: false, code: "SEMANTIC_MOVE_EDIT_SHAPE_INVALID", error: `New/existing file shape is invalid for ${edit.fileName}.` };
218
+ }
219
+ if (sha256(Buffer.from(edit.expectedText, "utf8")) !== edit.expectedHash || edit.textChanges.length === 0) {
220
+ return { ok: false, code: "SEMANTIC_MOVE_EDIT_SNAPSHOT_INVALID", error: `Expected bytes/hash or changes are invalid for ${edit.fileName}.` };
221
+ }
222
+ const spans = validateTextChanges(edit.expectedText, edit.textChanges);
223
+ if (!spans.ok)
224
+ return spans;
225
+ }
226
+ if (!sourceEdit || !targetEdit) {
227
+ return { ok: false, code: "SEMANTIC_MOVE_REQUIRED_EDIT_MISSING", error: "Exact source and target edits are required." };
228
+ }
229
+ const finalSource = (0, file_text_edit_executor_1.applyTextChanges)(sourceEdit.expectedText, sourceEdit.textChanges);
230
+ const finalTarget = (0, file_text_edit_executor_1.applyTextChanges)(targetEdit.expectedText, targetEdit.textChanges);
231
+ if (!finalTarget)
232
+ return { ok: false, code: "SEMANTIC_MOVE_TARGET_EMPTY", error: "Planned target content is empty." };
233
+ for (const entity of plan.entities) {
234
+ const expectedCount = (0, semantic_move_declarations_1.countSemanticMoveDeclarations)(plan.sourceFile, sourceEdit.expectedText, entity.name, entity.kind);
235
+ if (expectedCount !== entity.declarationStarts.length || (0, semantic_move_declarations_1.countSemanticMoveDeclarations)(plan.sourceFile, finalSource, entity.name, entity.kind) !== 0 ||
236
+ (0, semantic_move_declarations_1.countSemanticMoveDeclarations)(plan.targetFile, finalTarget, entity.name, entity.kind) !== expectedCount) {
237
+ return { ok: false, code: "SEMANTIC_MOVE_STRUCTURE_DIVERGENCE", error: `Move payload does not transfer ${entity.name} exactly.` };
238
+ }
239
+ }
240
+ return { ok: true };
241
+ }
242
+ function prepareExistingFile(root, realRoot, edit, fsAdapter) {
243
+ const file = path.resolve(edit.fileName);
244
+ const realFile = fsAdapter.realpathSync(file);
245
+ if (!isInside(root, file) || !isInside(realRoot, realFile))
246
+ throw typed("SEMANTIC_MOVE_EDIT_OUTSIDE_WORKSPACE", `Edit resolves outside workspace: ${file}.`);
247
+ const stat = fsAdapter.statSync(file);
248
+ const identity = readIdentity(file, stat);
249
+ const mode = stat.mode & 0o7777;
250
+ const originalBytes = fsAdapter.readFileSync(file);
251
+ if (sha256(originalBytes) !== edit.expectedHash || !Buffer.from(edit.expectedText, "utf8").equals(originalBytes)) {
252
+ throw typed("SEMANTIC_MOVE_EDIT_SNAPSHOT_CHANGED", `Exact planned bytes changed: ${file}.`);
253
+ }
254
+ const finalBytes = Buffer.from((0, file_text_edit_executor_1.applyTextChanges)(edit.expectedText, edit.textChanges), "utf8");
255
+ if (finalBytes.equals(originalBytes))
256
+ throw typed("SEMANTIC_MOVE_EDIT_NOOP", `Semantic move edit does not change ${file}.`);
257
+ return { file, originalBytes, finalBytes, identity, mode, realFile, realRoot, workspaceRoot: root, descriptor: null };
258
+ }
259
+ function createOwnedStagedTarget(targetFile, bytes, mode, parent, fsAdapter) {
260
+ for (let attempt = 0; attempt < 4; attempt += 1) {
261
+ const stageFile = path.join(path.dirname(targetFile), `.${path.basename(targetFile)}.aib-semantic-move-${process.pid}-${crypto.randomUUID()}`);
262
+ let descriptor;
263
+ try {
264
+ descriptor = fsAdapter.openSync(stageFile, "wx+", mode);
265
+ }
266
+ catch (error) {
267
+ if (errorCode(error, "") === "EEXIST")
268
+ continue;
269
+ throw error;
270
+ }
271
+ let failed = null;
272
+ let identity = null;
273
+ try {
274
+ const openedStat = fsAdapter.fstatSync(descriptor);
275
+ identity = readIdentity(stageFile, openedStat);
276
+ fsAdapter.fchmodSync(descriptor, mode);
277
+ const stat = fsAdapter.fstatSync(descriptor);
278
+ if (!sameIdentity(identity, readIdentity(stageFile, stat)))
279
+ throw new Error("Staged target identity changed during preparation.");
280
+ if ((stat.mode & 0o7777) !== mode)
281
+ throw new Error("Staged target mode differs from source mode.");
282
+ writeDescriptor(descriptor, bytes, fsAdapter);
283
+ fsAdapter.fsyncSync(descriptor);
284
+ const target = { stageFile, targetFile, bytes, identity, mode, descriptor, parent };
285
+ assertStagedTarget(target, fsAdapter, false, "Staged target changed during preparation.");
286
+ return target;
287
+ }
288
+ catch (error) {
289
+ failed = error;
290
+ }
291
+ try {
292
+ fsAdapter.closeSync(descriptor);
293
+ }
294
+ catch (error) {
295
+ failed ??= error;
296
+ }
297
+ let cleanupFile = stageFile;
298
+ try {
299
+ if (!identity)
300
+ throw new Error(`Opened staged target identity is unavailable for ${stageFile}.`);
301
+ cleanupFile = locateOwnedPreparationPath(parent, stageFile, fsAdapter);
302
+ removeOwnedPath(cleanupFile, identity, fsAdapter);
303
+ }
304
+ catch (cleanupError) {
305
+ throw new StagePreparationCleanupError(failed, cleanupFile, cleanupError);
306
+ }
307
+ throw failed;
308
+ }
309
+ throw new Error(`Could not reserve a staged semantic move target for ${targetFile}.`);
310
+ }
311
+ function rollback(cause, attempted, all, target, targetClaimed, createdDirs, dependencies) {
312
+ if (cause instanceof StagePreparationCleanupError) {
313
+ cleanupDirectories(createdDirs, dependencies.fs);
314
+ return {
315
+ ok: false,
316
+ code: "SEMANTIC_MOVE_ROLLBACK_FAILED",
317
+ error: cause.message,
318
+ rollback: "failed",
319
+ potentiallyModifiedFiles: [cause.stageFile],
320
+ rollbackErrors: [`${cause.stageFile}: ${cause.cleanupError}`]
321
+ };
322
+ }
323
+ const mutated = targetClaimed || attempted.length > 0;
324
+ if (!mutated) {
325
+ cleanupTarget(target, false, dependencies.fs);
326
+ cleanupDirectories(createdDirs, dependencies.fs);
327
+ return failure(errorCode(cause, "SEMANTIC_MOVE_TRANSACTION_FAILED"), errorMessage(cause));
328
+ }
329
+ const potentiallyModified = new Map();
330
+ if (targetClaimed && target)
331
+ potentiallyModified.set(pathKey(target.targetFile), target.targetFile);
332
+ for (const item of attempted)
333
+ potentiallyModified.set(pathKey(item.file), item.file);
334
+ const rollbackErrors = [];
335
+ for (const [reverseIndex, item] of [...attempted].reverse().entries()) {
336
+ try {
337
+ dependencies.onPhase?.("beforeRollback", item.file, reverseIndex);
338
+ writeExact(item, item.originalBytes, dependencies.fs);
339
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "Rollback bytes or mode differ from original.");
340
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "Rollback refused a foreign or replaced path.");
341
+ potentiallyModified.delete(pathKey(item.file));
342
+ }
343
+ catch (error) {
344
+ rollbackErrors.push(`${item.file}: ${errorMessage(error)}`);
345
+ }
346
+ }
347
+ if (targetClaimed && target) {
348
+ try {
349
+ removeOwnedTargetPath(target, target.targetFile, dependencies.fs);
350
+ potentiallyModified.delete(pathKey(target.targetFile));
351
+ }
352
+ catch (error) {
353
+ rollbackErrors.push(`${target.targetFile}: ${errorMessage(error)}`);
354
+ }
355
+ }
356
+ try {
357
+ cleanupTarget(target, true, dependencies.fs);
358
+ }
359
+ catch (error) {
360
+ rollbackErrors.push(`${target?.stageFile ?? "staged target"}: ${errorMessage(error)}`);
361
+ if (target)
362
+ potentiallyModified.set(pathKey(target.stageFile), target.stageFile);
363
+ }
364
+ cleanupDirectories(createdDirs, dependencies.fs);
365
+ const residual = uniquePaths([...potentiallyModified.values()]);
366
+ return {
367
+ ok: false,
368
+ code: rollbackErrors.length === 0 ? "SEMANTIC_MOVE_TRANSACTION_FAILED" : "SEMANTIC_MOVE_ROLLBACK_FAILED",
369
+ error: rollbackErrors.length === 0 ? errorMessage(cause) : `${errorMessage(cause)} Rollback failed: ${rollbackErrors.join("; ")}`,
370
+ rollback: rollbackErrors.length === 0 ? "ok" : "failed",
371
+ potentiallyModifiedFiles: residual,
372
+ ...(rollbackErrors.length > 0 ? { rollbackErrors } : {})
373
+ };
374
+ }
375
+ function writeExact(item, bytes, fsAdapter) {
376
+ const descriptor = requireDescriptor(item);
377
+ fsAdapter.ftruncateSync(descriptor, 0);
378
+ writeDescriptor(descriptor, bytes, fsAdapter);
379
+ fsAdapter.fchmodSync(descriptor, item.mode);
380
+ fsAdapter.fsyncSync(descriptor);
381
+ assertDescriptorSnapshot(item, fsAdapter, bytes, "Descriptor bytes or mode differ from requested semantic move state.");
382
+ }
383
+ function writeDescriptor(descriptor, bytes, fsAdapter) {
384
+ let offset = 0;
385
+ while (offset < bytes.length) {
386
+ const written = fsAdapter.writeSync(descriptor, bytes, offset, bytes.length - offset, offset);
387
+ if (written <= 0)
388
+ throw new Error("Descriptor write made no progress.");
389
+ offset += written;
390
+ }
391
+ }
392
+ function assertDescriptorSnapshot(item, fsAdapter, expectedBytes, error) {
393
+ const descriptor = requireDescriptor(item);
394
+ const stat = fsAdapter.fstatSync(descriptor);
395
+ if (!sameIdentity(item.identity, readIdentity(item.file, stat)) || (stat.mode & 0o7777) !== item.mode ||
396
+ !readDescriptor(descriptor, stat.size, fsAdapter).equals(expectedBytes))
397
+ throw new Error(error);
398
+ }
399
+ function assertOwnedPath(item, fsAdapter, expectedBytes, error) {
400
+ const currentRoot = fsAdapter.realpathSync(item.workspaceRoot);
401
+ const currentFile = fsAdapter.realpathSync(item.file);
402
+ const stat = fsAdapter.statSync(item.file);
403
+ const bytes = fsAdapter.readFileSync(item.file);
404
+ if (!samePath(currentRoot, item.realRoot) || !samePath(currentFile, item.realFile) || !isInside(currentRoot, currentFile) ||
405
+ !sameIdentity(item.identity, readIdentity(item.file, stat)) || (stat.mode & 0o7777) !== item.mode || !bytes.equals(expectedBytes)) {
406
+ throw new Error(error);
407
+ }
408
+ }
409
+ function assertStagedTarget(target, fsAdapter, claimed, error) {
410
+ assertTargetParentAuthority(target.parent, fsAdapter, error);
411
+ const stat = fsAdapter.fstatSync(target.descriptor);
412
+ if (!sameIdentity(target.identity, readIdentity(target.stageFile, stat)) || (stat.mode & 0o7777) !== target.mode ||
413
+ !readDescriptor(target.descriptor, stat.size, fsAdapter).equals(target.bytes))
414
+ throw new Error(error);
415
+ assertExactOwnedFile(target.stageFile, target.identity, target.bytes, target.mode, fsAdapter, error);
416
+ if (claimed)
417
+ assertOwnedTarget(target, fsAdapter, error);
418
+ }
419
+ function assertOwnedTarget(target, fsAdapter, error) {
420
+ assertExactOwnedFile(target.targetFile, target.identity, target.bytes, target.mode, fsAdapter, error);
421
+ }
422
+ function assertExactOwnedFile(file, identity, bytes, mode, fsAdapter, error) {
423
+ if (!fsAdapter.existsSync(file))
424
+ throw new Error(error);
425
+ const stat = fsAdapter.statSync(file);
426
+ if (!sameIdentity(identity, readIdentity(file, stat)) || (stat.mode & 0o7777) !== mode ||
427
+ !fsAdapter.readFileSync(file).equals(bytes))
428
+ throw new Error(error);
429
+ }
430
+ function cleanupTarget(target, strict, fsAdapter) {
431
+ if (!target)
432
+ return;
433
+ try {
434
+ removeOwnedTargetPath(target, target.stageFile, fsAdapter);
435
+ }
436
+ catch (error) {
437
+ if (strict)
438
+ throw error;
439
+ }
440
+ }
441
+ function removeOwnedTargetPath(target, lexicalFile, fsAdapter) {
442
+ const ownedParent = locateOwnedTargetParent(target.parent, fsAdapter);
443
+ if (!ownedParent)
444
+ throw new Error(`Owned target parent is no longer reachable for ${lexicalFile}.`);
445
+ const ownedFile = path.join(ownedParent, path.basename(lexicalFile));
446
+ removeOwnedPath(ownedFile, target.identity, fsAdapter);
447
+ }
448
+ function locateOwnedPreparationPath(parent, lexicalFile, fsAdapter) {
449
+ const ownedParent = locateOwnedTargetParent(parent, fsAdapter);
450
+ if (!ownedParent)
451
+ throw new Error(`Owned target parent is no longer reachable for ${lexicalFile}.`);
452
+ return path.join(ownedParent, path.basename(lexicalFile));
453
+ }
454
+ function removeOwnedPath(file, identity, fsAdapter) {
455
+ if (!fsAdapter.existsSync(file))
456
+ return;
457
+ if (!sameIdentity(readIdentity(file, fsAdapter.statSync(file)), identity))
458
+ throw new Error(`Refusing to remove foreign path ${file}.`);
459
+ fsAdapter.unlinkSync(file);
460
+ if (fsAdapter.existsSync(file))
461
+ throw new Error(`Owned path still exists after cleanup: ${file}.`);
462
+ }
463
+ function validateTextChanges(text, changes) {
464
+ const ordered = [...changes].sort((left, right) => left.span.start - right.span.start || left.span.length - right.span.length);
465
+ for (const [index, change] of ordered.entries()) {
466
+ if (!Number.isSafeInteger(change.span.start) || !Number.isSafeInteger(change.span.length) || change.span.start < 0 ||
467
+ change.span.length < 0 || change.span.start + change.span.length > text.length || typeof change.newText !== "string") {
468
+ return { ok: false, code: "SEMANTIC_MOVE_EDIT_SPAN_INVALID", error: "Semantic move edit has an invalid span or payload." };
469
+ }
470
+ const previous = index > 0 ? ordered[index - 1] : undefined;
471
+ if (previous && previous.span.start + previous.span.length > change.span.start) {
472
+ return { ok: false, code: "SEMANTIC_MOVE_EDIT_OVERLAP", error: "Semantic move edits overlap." };
473
+ }
474
+ }
475
+ return { ok: true };
476
+ }
477
+ function assertWorkspaceFingerprint(root, plan, computeWorkspaceFingerprint, code) {
478
+ if (computeWorkspaceFingerprint(root) !== plan.discovery.workspaceFingerprint) {
479
+ throw typed(code, "Workspace files, configs, packages, or consumers changed before semantic move apply.");
480
+ }
481
+ }
482
+ function ensureDirectoryTree(directory, fsAdapter) {
483
+ const missing = [];
484
+ let current = directory;
485
+ while (!fsAdapter.existsSync(current)) {
486
+ missing.push(current);
487
+ const parent = path.dirname(current);
488
+ if (parent === current)
489
+ break;
490
+ current = parent;
491
+ }
492
+ fsAdapter.mkdirSync(directory, { recursive: true });
493
+ return missing.map((created) => ({ directory: created, identity: readDirectoryIdentity(created, fsAdapter.statSync(created)) }));
494
+ }
495
+ function cleanupDirectories(directories, fsAdapter) {
496
+ for (const item of directories) {
497
+ try {
498
+ if (sameIdentity(item.identity, readDirectoryIdentity(item.directory, fsAdapter.statSync(item.directory)))) {
499
+ fsAdapter.rmdirSync(item.directory);
500
+ }
501
+ }
502
+ catch { /* retained if replaced, non-empty, or concurrently reused */ }
503
+ }
504
+ }
505
+ function captureTargetParentAuthority(workspaceRoot, realWorkspaceRoot, targetFile, fsAdapter) {
506
+ const lexicalParent = path.dirname(targetFile);
507
+ const realParent = fsAdapter.realpathSync(lexicalParent);
508
+ if (!isInside(realWorkspaceRoot, realParent)) {
509
+ throw typed("SEMANTIC_MOVE_TARGET_OUTSIDE_WORKSPACE", "Target parent resolves outside the real workspace root.");
510
+ }
511
+ const stat = fsAdapter.statSync(lexicalParent);
512
+ const authority = {
513
+ workspaceRoot,
514
+ realWorkspaceRoot,
515
+ lexicalParent,
516
+ realParent,
517
+ identity: readDirectoryIdentity(lexicalParent, stat),
518
+ mode: stat.mode & 0o7777
519
+ };
520
+ assertTargetParentAuthority(authority, fsAdapter, "Target parent changed while authority was captured.");
521
+ return authority;
522
+ }
523
+ function assertTargetParentAuthority(authority, fsAdapter, error) {
524
+ const realRoot = fsAdapter.realpathSync(authority.workspaceRoot);
525
+ const realParent = fsAdapter.realpathSync(authority.lexicalParent);
526
+ const stat = fsAdapter.statSync(authority.lexicalParent);
527
+ if (!samePath(realRoot, authority.realWorkspaceRoot) || !samePath(realParent, authority.realParent) ||
528
+ !isInside(realRoot, realParent) || !sameIdentity(authority.identity, readDirectoryIdentity(authority.lexicalParent, stat)) ||
529
+ (stat.mode & 0o7777) !== authority.mode)
530
+ throw new Error(error);
531
+ }
532
+ function locateOwnedTargetParent(authority, fsAdapter) {
533
+ const candidates = [
534
+ authority.lexicalParent,
535
+ ...fsAdapter.readdirSync(path.dirname(authority.lexicalParent)).map((name) => path.join(path.dirname(authority.lexicalParent), name))
536
+ ];
537
+ for (const candidate of candidates) {
538
+ try {
539
+ if (sameIdentity(authority.identity, readDirectoryIdentity(candidate, fsAdapter.statSync(candidate))))
540
+ return candidate;
541
+ }
542
+ catch { /* not the owned directory */ }
543
+ }
544
+ return null;
545
+ }
546
+ function readDescriptor(descriptor, size, fsAdapter) {
547
+ const output = Buffer.alloc(size);
548
+ let offset = 0;
549
+ while (offset < size) {
550
+ const read = fsAdapter.readSync(descriptor, output, offset, size - offset, offset);
551
+ if (read <= 0)
552
+ throw new Error("Descriptor read ended before the expected size.");
553
+ offset += read;
554
+ }
555
+ return output;
556
+ }
557
+ function readIdentity(file, stat) {
558
+ if (!stat.isFile() || !Number.isFinite(stat.dev) || !Number.isFinite(stat.ino) || stat.ino === 0) {
559
+ throw new Error(`Stable regular-file identity is unavailable for ${file}.`);
560
+ }
561
+ return { dev: stat.dev, ino: stat.ino };
562
+ }
563
+ function readDirectoryIdentity(file, stat) {
564
+ if (!stat.isDirectory() || !Number.isFinite(stat.dev) || !Number.isFinite(stat.ino) || stat.ino === 0) {
565
+ throw new Error(`Stable directory identity is unavailable for ${file}.`);
566
+ }
567
+ return { dev: stat.dev, ino: stat.ino };
568
+ }
569
+ function sourceEditMode(file, fsAdapter) {
570
+ return fsAdapter.statSync(file).mode & 0o7777;
571
+ }
572
+ function closeExisting(files, fsAdapter) {
573
+ for (const item of files) {
574
+ if (item.descriptor === null)
575
+ continue;
576
+ try {
577
+ fsAdapter.closeSync(item.descriptor);
578
+ }
579
+ catch { /* result already determined */ }
580
+ item.descriptor = null;
581
+ }
582
+ }
583
+ function closeTarget(target, fsAdapter) {
584
+ if (!target)
585
+ return;
586
+ try {
587
+ fsAdapter.closeSync(target.descriptor);
588
+ }
589
+ catch { /* result already determined */ }
590
+ }
591
+ function requireDescriptor(item) {
592
+ if (item.descriptor === null)
593
+ throw new Error(`Descriptor is unavailable for ${item.file}.`);
594
+ return item.descriptor;
595
+ }
596
+ function sameIdentity(left, right) {
597
+ return left.dev === right.dev && left.ino === right.ino;
598
+ }
599
+ function scriptKindForFile(file) {
600
+ const extension = path.extname(file).toLowerCase();
601
+ if (extension === ".tsx")
602
+ return typescript_1.default.ScriptKind.TSX;
603
+ if (extension === ".jsx")
604
+ return typescript_1.default.ScriptKind.JSX;
605
+ if ([".js", ".mjs", ".cjs"].includes(extension))
606
+ return typescript_1.default.ScriptKind.JS;
607
+ return typescript_1.default.ScriptKind.TS;
608
+ }
609
+ function isInside(root, file) {
610
+ const relative = path.relative(path.resolve(root), path.resolve(file));
611
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
612
+ }
613
+ function samePath(left, right) {
614
+ return pathKey(left) === pathKey(right);
615
+ }
616
+ function pathKey(file) {
617
+ const normalized = path.normalize(file);
618
+ return process.platform === "win32" ? normalized.toLowerCase() : normalized;
619
+ }
620
+ function uniquePaths(files) {
621
+ return [...new Map(files.map((file) => [pathKey(file), path.normalize(file)])).values()].sort();
622
+ }
623
+ function sha256(value) {
624
+ return crypto.createHash("sha256").update(value).digest("hex");
625
+ }
626
+ function typed(code, message) {
627
+ return Object.assign(new Error(message), { code });
628
+ }
629
+ function errorCode(error, fallback) {
630
+ return error && typeof error === "object" && typeof error.code === "string"
631
+ ? error.code
632
+ : fallback;
633
+ }
634
+ function errorMessage(error) {
635
+ return error instanceof Error ? error.message : String(error);
636
+ }
637
+ function failure(code, error) {
638
+ return { ok: false, code, error, rollback: "not-needed", potentiallyModifiedFiles: [] };
639
+ }