@automaton-labs/aib 0.0.7 → 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 (477) 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 -4
  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 -2
  19. package/dist/commands/captured-input.js +74 -1
  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 -1
  23. package/dist/commands/declaration-command.js +1209 -7
  24. package/dist/commands/declaration-execution-cache.js +79 -1
  25. package/dist/commands/declaration-format.js +221 -1
  26. package/dist/commands/declaration-preview-cache.js +114 -2
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -3
  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 -1
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -2
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -5
  38. package/dist/commands/file-mutation-runtime.js +102 -1
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -1
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -2
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -5
  44. package/dist/commands/file-rename-execution-cache.js +92 -1
  45. package/dist/commands/file-rename-preview-cache.js +125 -2
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -5
  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 -2
  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 -7
  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 -1
  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 -1
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -1
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -1
  152. package/dist/dsl/file-rename-dsl.js +135 -1
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +176 -341
  155. package/dist/help/bootstrap.md +175 -340
  156. package/dist/help/bootstrap.pwsh.md +176 -341
  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/first-setup.md +6 -5
  161. package/dist/help/docs/help-protocol.md +4 -3
  162. package/dist/help/docs/import.base.md +38 -0
  163. package/dist/help/docs/import.rebase.md +85 -0
  164. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  165. package/dist/help/docs/inspect.code.md +1 -7
  166. package/dist/help/docs/inspect.file.md +10 -19
  167. package/dist/help/docs/inspect.graph.md +3 -17
  168. package/dist/help/{dsl/docs/inspect.md → docs/inspect.shared.md} +13 -12
  169. package/dist/help/docs/modulePlan.md +24 -28
  170. package/dist/help/docs/move.md +19 -22
  171. package/dist/help/{dsl/topics/file.move.md → docs/moveToDir.md} +36 -34
  172. package/dist/help/docs/mutate.mixed.md +34 -0
  173. package/dist/help/docs/mutation.shared.md +55 -0
  174. package/dist/help/docs/patterns.md +3 -12
  175. package/dist/help/docs/qr.md +12 -6
  176. package/dist/help/docs/quick-map.md +36 -24
  177. package/dist/help/docs/recipe.file-layout.md +10 -10
  178. package/dist/help/docs/recipe.import-boundary.md +92 -0
  179. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  180. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  181. package/dist/help/docs/recipes.md +20 -0
  182. package/dist/help/docs/rename.md +19 -27
  183. package/dist/help/docs/renameFile.md +36 -0
  184. package/dist/help/docs/rules.md +26 -0
  185. package/dist/help/dsl/bootstrap.bash.md +176 -341
  186. package/dist/help/dsl/bootstrap.md +175 -340
  187. package/dist/help/dsl/bootstrap.pwsh.md +176 -341
  188. package/dist/help/dsl/docs/basics.md +1 -1
  189. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  190. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  191. package/dist/help/dsl/docs/first-setup.md +6 -5
  192. package/dist/help/dsl/docs/help-protocol.md +4 -3
  193. package/dist/help/dsl/docs/import.base.md +38 -0
  194. package/dist/help/dsl/docs/import.rebase.md +85 -0
  195. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  196. package/dist/help/dsl/docs/inspect.code.md +1 -7
  197. package/dist/help/dsl/docs/inspect.file.md +10 -19
  198. package/dist/help/dsl/docs/inspect.graph.md +3 -17
  199. package/dist/help/{docs/inspect.md → dsl/docs/inspect.shared.md} +13 -12
  200. package/dist/help/dsl/docs/modulePlan.md +24 -28
  201. package/dist/help/dsl/docs/move.md +19 -22
  202. package/dist/help/{topics/file.move.md → dsl/docs/moveToDir.md} +36 -34
  203. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  204. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  205. package/dist/help/dsl/docs/patterns.md +3 -12
  206. package/dist/help/dsl/docs/qr.md +12 -6
  207. package/dist/help/dsl/docs/quick-map.md +36 -24
  208. package/dist/help/dsl/docs/recipe.file-layout.md +10 -10
  209. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  210. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  211. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  212. package/dist/help/dsl/docs/recipes.md +20 -0
  213. package/dist/help/dsl/docs/rename.md +19 -27
  214. package/dist/help/dsl/docs/renameFile.md +36 -0
  215. package/dist/help/dsl/docs/rules.md +26 -0
  216. package/dist/help/dsl/full.md +175 -340
  217. package/dist/help/dsl/help-index.md +48 -43
  218. package/dist/help/dsl/snippets/agents.md +2 -2
  219. package/dist/help/dsl/tokens/qr.inline.examples.md +1 -1
  220. package/dist/help/dsl/topics/basics.md +1 -1
  221. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  222. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  223. package/dist/help/dsl/topics/first-setup.md +6 -5
  224. package/dist/help/dsl/topics/help-protocol.md +4 -3
  225. package/dist/help/dsl/topics/import.base.md +36 -0
  226. package/dist/help/dsl/topics/import.rebase.md +83 -0
  227. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  228. package/dist/help/dsl/topics/inspect.code.md +1 -7
  229. package/dist/help/dsl/topics/inspect.file.md +10 -19
  230. package/dist/help/dsl/topics/inspect.graph.md +3 -17
  231. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +13 -12
  232. package/dist/help/dsl/topics/modulePlan.md +21 -26
  233. package/dist/help/dsl/topics/move.md +17 -18
  234. package/dist/help/{docs/file.move.md → dsl/topics/moveToDir.md} +33 -35
  235. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  236. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  237. package/dist/help/dsl/topics/patterns.md +3 -12
  238. package/dist/help/dsl/topics/qr.md +12 -6
  239. package/dist/help/dsl/topics/quick-map.md +36 -24
  240. package/dist/help/dsl/topics/recipe.file-layout.md +10 -10
  241. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  242. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  243. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  244. package/dist/help/dsl/topics/recipes.md +18 -0
  245. package/dist/help/dsl/topics/rename.md +15 -15
  246. package/dist/help/dsl/topics/renameFile.md +34 -0
  247. package/dist/help/dsl/topics/rules.md +24 -0
  248. package/dist/help/full.md +175 -340
  249. package/dist/help/help-index.md +48 -43
  250. package/dist/help/help-meta.json +98 -48
  251. package/dist/help/index.md +52 -20
  252. package/dist/help/snippets/agents.md +2 -2
  253. package/dist/help/tokens/qr.inline.examples.md +1 -1
  254. package/dist/help/topics/basics.md +1 -1
  255. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  256. package/dist/help/topics/config-setup.import-rules.md +6 -5
  257. package/dist/help/topics/first-setup.md +6 -5
  258. package/dist/help/topics/help-protocol.md +4 -3
  259. package/dist/help/topics/import.base.md +36 -0
  260. package/dist/help/topics/import.rebase.md +83 -0
  261. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  262. package/dist/help/topics/inspect.code.md +1 -7
  263. package/dist/help/topics/inspect.file.md +10 -19
  264. package/dist/help/topics/inspect.graph.md +3 -17
  265. package/dist/help/topics/{inspect.md → inspect.shared.md} +13 -12
  266. package/dist/help/topics/modulePlan.md +21 -26
  267. package/dist/help/topics/move.md +17 -18
  268. package/dist/help/{dsl/docs/file.move.md → topics/moveToDir.md} +33 -35
  269. package/dist/help/topics/mutate.mixed.md +32 -0
  270. package/dist/help/topics/mutation.shared.md +53 -0
  271. package/dist/help/topics/patterns.md +3 -12
  272. package/dist/help/topics/qr.md +12 -6
  273. package/dist/help/topics/quick-map.md +36 -24
  274. package/dist/help/topics/recipe.file-layout.md +10 -10
  275. package/dist/help/topics/recipe.import-boundary.md +90 -0
  276. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  277. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  278. package/dist/help/topics/recipes.md +18 -0
  279. package/dist/help/topics/rename.md +15 -15
  280. package/dist/help/topics/renameFile.md +34 -0
  281. package/dist/help/topics/rules.md +24 -0
  282. package/dist/host/capabilities.js +56 -1
  283. package/dist/imports/standalone-import-analysis.js +602 -0
  284. package/dist/imports/standalone-import-model.js +2 -0
  285. package/dist/imports/standalone-import-process.js +66 -0
  286. package/dist/imports/standalone-import-worker.js +27 -0
  287. package/dist/imports/standalone-ts-project.js +147 -0
  288. package/dist/inspect/inspect-duplicates-service.js +526 -0
  289. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  290. package/dist/inspect/inspect-source-ranges.js +82 -0
  291. package/dist/inspect/inspect-source-shape.js +649 -0
  292. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  293. package/dist/inspect/standalone-inspect-model.js +9 -0
  294. package/dist/inspect/standalone-inspect-process.js +55 -0
  295. package/dist/inspect/standalone-inspect-usages.js +274 -0
  296. package/dist/inspect/standalone-inspect-worker.js +13 -0
  297. package/dist/metrics/central-metrics.js +101 -2
  298. package/dist/mutation/concrete-edit-plan.js +157 -0
  299. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  300. package/dist/mutation/exports-star-expand-apply.js +373 -0
  301. package/dist/mutation/exports-star-expand-preview.js +807 -0
  302. package/dist/mutation/file-impact-scan.js +182 -0
  303. package/dist/mutation/file-mutation-discovery.js +674 -0
  304. package/dist/mutation/file-mutation-eta.js +99 -0
  305. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  306. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  307. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  308. package/dist/mutation/mutation-estimate.js +45 -0
  309. package/dist/mutation/mutation-plan.js +467 -0
  310. package/dist/mutation/object-mutation-foundation.js +2 -0
  311. package/dist/mutation/object-mutation-partition.js +148 -0
  312. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  313. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  314. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  315. package/dist/mutation/package-manifest-impact.js +176 -0
  316. package/dist/mutation/rename-owner-worker-child.js +37 -0
  317. package/dist/mutation/rename-owner-worker.js +122 -0
  318. package/dist/mutation/runtime-cycle-query.js +66 -0
  319. package/dist/mutation/semantic-execution-progress.js +63 -0
  320. package/dist/mutation/semantic-export-index.js +474 -0
  321. package/dist/mutation/semantic-impact-scan.js +434 -0
  322. package/dist/mutation/semantic-model.js +2 -0
  323. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  324. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  325. package/dist/mutation/semantic-move-config-worker.js +449 -0
  326. package/dist/mutation/semantic-move-declarations.js +94 -0
  327. package/dist/mutation/semantic-move-metrics.js +119 -0
  328. package/dist/mutation/semantic-move-model.js +2 -0
  329. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  330. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  331. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  332. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  333. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  334. package/dist/mutation/semantic-move-policy.js +360 -0
  335. package/dist/mutation/semantic-move-process.js +218 -0
  336. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  337. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  338. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  339. package/dist/mutation/semantic-move-transaction.js +639 -0
  340. package/dist/mutation/semantic-mutation-engine.js +478 -0
  341. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  342. package/dist/mutation/semantic-planner-retry.js +26 -0
  343. package/dist/mutation/semantic-program-roots.js +69 -0
  344. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  345. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  346. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  347. package/dist/mutation/semantic-rename-locations.js +192 -0
  348. package/dist/mutation/semantic-rename-model.js +2 -0
  349. package/dist/mutation/semantic-rename-process.js +210 -0
  350. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  351. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  352. package/dist/mutation/semantic-rename-transaction.js +333 -0
  353. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  354. package/dist/mutation/semantic-worker-retry.js +40 -0
  355. package/dist/mutation/semantic-workspace.js +804 -0
  356. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  357. package/dist/observability/config.js +206 -1
  358. package/dist/observability/context.js +59 -1
  359. package/dist/observability/failure-snapshot.js +124 -2
  360. package/dist/observability/recent.js +63 -2
  361. package/dist/payloads/read-stdin-json.js +212 -1
  362. package/dist/rg-wrapper/core.js +714 -6
  363. package/dist/rg-wrapper/options.js +125 -1
  364. package/dist/rtk-wrapper/core.js +144 -2
  365. package/dist/rtk-wrapper/git-safety.js +203 -0
  366. package/dist/rtk-wrapper/output-adapter.js +106 -0
  367. package/dist/runtime/buffered-process.js +114 -0
  368. package/dist/runtime/bundled-node.js +97 -1
  369. package/dist/runtime/command-lifecycle.js +2 -0
  370. package/dist/runtime/input-source.js +238 -1
  371. package/dist/runtime/node-cli-identity.js +37 -0
  372. package/dist/runtime/run-command.js +191 -1
  373. package/dist/selectors/parse-entities.js +84 -1
  374. package/dist/semantic/semantic-context-pool.js +830 -0
  375. package/dist/semantic/semantic-context-provider.js +416 -0
  376. package/dist/semantic/semantic-resident-admission.js +38 -0
  377. package/dist/semantic/semantic-worker-child.js +40 -0
  378. package/dist/semantic/semantic-worker-manager.js +460 -0
  379. package/dist/semantic/semantic-worker-protocol.js +2 -0
  380. package/dist/semantic/semantic-worker-runtime.js +38 -0
  381. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  382. package/dist/session/client.js +359 -1
  383. package/dist/session/daemon-state.js +185 -2
  384. package/dist/session/external-tool-coordinator.js +88 -0
  385. package/dist/session/external-tool-request.js +52 -0
  386. package/dist/session/lane-owner.js +116 -0
  387. package/dist/session/paths.js +71 -1
  388. package/dist/session/runtime-lifecycle.js +225 -0
  389. package/dist/session/runtime-shutdown.js +95 -0
  390. package/dist/session/server.js +1194 -7
  391. package/dist/session/session-health.js +27 -0
  392. package/dist/shared/agent-text.js +29 -1
  393. package/dist/shared/errors.js +496 -30
  394. package/dist/shared/event-loop.js +6 -1
  395. package/dist/shared/hints.js +37 -1
  396. package/dist/shared/metrics.js +43 -1
  397. package/dist/shared/presentation.js +69 -4
  398. package/dist/shared/stdin-examples.js +77 -1
  399. package/dist/shared/stdout.js +6 -2
  400. package/dist/shared/types.js +23 -1
  401. package/dist/tool-runtime/runtime-tools.js +120 -1
  402. package/dist/topology/availability.js +663 -0
  403. package/dist/topology/cache.js +130 -0
  404. package/dist/topology/candidates.js +372 -0
  405. package/dist/topology/core.js +903 -0
  406. package/dist/topology/dependency-snapshot.js +189 -0
  407. package/dist/topology/model.js +2 -0
  408. package/dist/topology/scope.js +100 -0
  409. package/dist/topology/ts-oracle-batch.js +529 -0
  410. package/dist/topology/ts-oracle-host.js +69 -0
  411. package/dist/topology/ts-oracle-model.js +2 -0
  412. package/dist/topology/ts-oracle.js +224 -0
  413. package/dist/topology/tsconfig-loader.js +105 -0
  414. package/dist/topology/workspace-project-index.js +542 -0
  415. package/dist/tracing/config.js +192 -2
  416. package/dist/tracing/failure-summary.js +100 -0
  417. package/dist/tracing/trace.js +318 -5
  418. package/dist/tsc-wrapper/core.js +697 -0
  419. package/dist/workers/control-plane/aib-control-plane-worker.cjs +32 -32
  420. package/dist/workers/control-plane/client-config.default.json +3 -3
  421. package/dist/workers/lexical-worker-child.js +27 -0
  422. package/dist/workers/lexical-worker-manager.js +394 -0
  423. package/dist/workers/lexical-worker-protocol.js +2 -0
  424. package/dist/workers/lexical-worker-runtime.js +25 -0
  425. package/dist/workers/owned-one-shot-process.js +115 -0
  426. package/dist/workers/product-storage.js +23 -1
  427. package/dist/workers/registry.js +241 -1
  428. package/package.json +8 -13
  429. package/scripts/postinstall.cjs +29 -29
  430. package/scripts/provision-runtime.cjs +411 -459
  431. package/dist/client/http-client.js +0 -1
  432. package/dist/client/transport-options.js +0 -1
  433. package/dist/client/websocket-client.js +0 -1
  434. package/dist/commands/entity-resolution.js +0 -1
  435. package/dist/commands/file-command.js +0 -1
  436. package/dist/commands/host-command.js +0 -1
  437. package/dist/commands/inspect-symbol-query.js +0 -1
  438. package/dist/commands/list-instances.js +0 -1
  439. package/dist/commands/module-plan-command.js +0 -1
  440. package/dist/commands/move-command.js +0 -1
  441. package/dist/commands/move-to-file.js +0 -2
  442. package/dist/commands/ping.js +0 -1
  443. package/dist/commands/refactor-command.js +0 -1
  444. package/dist/commands/rename-command.js +0 -1
  445. package/dist/commands/runtime-command.js +0 -4
  446. package/dist/commands/runtime-info.js +0 -1
  447. package/dist/commands/validate-module-plan.js +0 -2
  448. package/dist/compatibility/policy.js +0 -1
  449. package/dist/config/auto-start-ide.js +0 -1
  450. package/dist/discovery/registry.js +0 -1
  451. package/dist/discovery/select-instance.js +0 -1
  452. package/dist/help/docs/file.rename.md +0 -35
  453. package/dist/help/docs/mutation.md +0 -60
  454. package/dist/help/docs/refactor.batch.md +0 -44
  455. package/dist/help/dsl/docs/file.rename.md +0 -35
  456. package/dist/help/dsl/docs/mutation.md +0 -60
  457. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  458. package/dist/help/dsl/topics/file.rename.md +0 -33
  459. package/dist/help/dsl/topics/mutation.md +0 -58
  460. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  461. package/dist/help/topics/file.rename.md +0 -33
  462. package/dist/help/topics/mutation.md +0 -58
  463. package/dist/help/topics/refactor.batch.md +0 -33
  464. package/dist/ide-launch/common.cjs +0 -162
  465. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  466. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  467. package/dist/managed-host/serve-web-autostart.js +0 -1
  468. package/dist/managed-host/serve-web-host.cjs +0 -2115
  469. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  470. package/dist/shared/diagnostic-catalog.js +0 -1
  471. package/dist/shared/diagnostics.js +0 -1
  472. package/dist/shared/operations.js +0 -1
  473. package/dist/shared/protocol.js +0 -1
  474. package/dist/shared/routes.js +0 -1
  475. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  476. package/runtimes/launcher/linux-x64/aib +0 -0
  477. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -0,0 +1,333 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.applyStandaloneSemanticRenameTransaction = applyStandaloneSemanticRenameTransaction;
37
+ const crypto = __importStar(require("node:crypto"));
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const file_text_edit_executor_1 = require("../commands/file-text-edit-executor");
41
+ const file_mutation_discovery_1 = require("./file-mutation-discovery");
42
+ const semantic_rename_locations_1 = require("./semantic-rename-locations");
43
+ const targeted_import_canonicalizer_1 = require("./targeted-import-canonicalizer");
44
+ const defaultDependencies = {
45
+ fs,
46
+ computeWorkspaceFingerprint: file_mutation_discovery_1.computeFileMutationWorkspaceFingerprint
47
+ };
48
+ function applyStandaloneSemanticRenameTransaction(input, dependencies = defaultDependencies) {
49
+ const root = path.resolve(input.workspaceRoot);
50
+ const validation = validatePlan(root, input.plan);
51
+ if (!validation.ok)
52
+ return failure(validation.code, validation.error);
53
+ let prepared;
54
+ try {
55
+ const realRoot = dependencies.fs.realpathSync(root);
56
+ assertWorkspaceFingerprint(root, input.plan, input.computeWorkspaceFingerprint ?? dependencies.computeWorkspaceFingerprint, "SEMANTIC_RENAME_COMMIT_PREFLIGHT_STALE");
57
+ prepared = input.plan.edits.map((edit) => prepareFile(root, realRoot, edit, dependencies.fs));
58
+ }
59
+ catch (error) {
60
+ return failure(errorCode(error, "SEMANTIC_RENAME_COMMIT_PREFLIGHT_FAILED"), errorMessage(error));
61
+ }
62
+ const attempted = [];
63
+ try {
64
+ for (const item of prepared) {
65
+ item.descriptor = dependencies.fs.openSync(item.file, "r+");
66
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed while acquiring transaction ownership.");
67
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed while acquiring transaction ownership.");
68
+ }
69
+ dependencies.onPhase?.("beforeFinalPreflight", null, -1);
70
+ dependencies.checkInterrupted?.();
71
+ assertWorkspaceFingerprint(root, input.plan, input.computeWorkspaceFingerprint ?? dependencies.computeWorkspaceFingerprint, "SEMANTIC_RENAME_COMMIT_PREFLIGHT_STALE");
72
+ for (const item of prepared) {
73
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed at the final transaction boundary.");
74
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed at the final transaction boundary.");
75
+ }
76
+ input.beforeApply?.(prepared.map((item) => item.file));
77
+ for (const [index, item] of prepared.entries()) {
78
+ dependencies.onPhase?.("beforeWrite", item.file, index);
79
+ dependencies.checkInterrupted?.();
80
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "File changed before its transaction write.");
81
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "File path changed before its transaction write.");
82
+ attempted.push(item);
83
+ writeExact(item, item.finalBytes, dependencies.fs);
84
+ dependencies.onPhase?.("afterWrite", item.file, index);
85
+ }
86
+ dependencies.onPhase?.("beforeFinalVerify", null, prepared.length);
87
+ dependencies.checkInterrupted?.();
88
+ for (const item of prepared) {
89
+ assertDescriptorSnapshot(item, dependencies.fs, item.finalBytes, "Written file changed before transaction commit.");
90
+ assertOwnedPath(item, dependencies.fs, item.finalBytes, "Written path was replaced before transaction commit.");
91
+ }
92
+ }
93
+ catch (error) {
94
+ const result = rollback(error, attempted, prepared, dependencies);
95
+ closeAll(prepared, dependencies.fs);
96
+ return result;
97
+ }
98
+ closeAll(prepared, dependencies.fs);
99
+ return {
100
+ ok: true,
101
+ savedFiles: prepared.map((item) => item.file),
102
+ touchedFiles: prepared.map((item) => item.file),
103
+ editCount: input.plan.edits.reduce((sum, edit) => sum + edit.textChanges.length, 0)
104
+ };
105
+ }
106
+ function validatePlan(root, plan) {
107
+ if (!plan.complete) {
108
+ return { ok: false, code: plan.code, error: plan.error ?? "Standalone semantic rename plan is incomplete." };
109
+ }
110
+ if (!samePath(root, plan.workspaceRoot) || !plan.discovery.workspaceFingerprint) {
111
+ return { ok: false, code: "SEMANTIC_RENAME_PLAN_IDENTITY_INVALID", error: "Planner workspace identity is missing or mismatched." };
112
+ }
113
+ if (plan.intents.length === 0 || plan.edits.length === 0 || plan.intents.some((intent) => intent.locations.length === 0)) {
114
+ return { ok: false, code: "SEMANTIC_RENAME_PLAN_EMPTY", error: "Every rename intent must publish at least one edit location." };
115
+ }
116
+ const authorizedLocations = new Map();
117
+ for (const intent of plan.intents) {
118
+ for (const location of intent.locations) {
119
+ const file = path.resolve(location.fileName);
120
+ if (!isInside(root, file) || location.start < 0 || location.length <= 0) {
121
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_OUTSIDE_WORKSPACE", error: `Invalid planned location: ${location.fileName}.` };
122
+ }
123
+ const key = spanKey(file, location.start, location.length);
124
+ if (authorizedLocations.has(key)) {
125
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_DUPLICATE", error: `Duplicate planned location: ${key}.` };
126
+ }
127
+ authorizedLocations.set(key, {
128
+ oldName: intent.oldName,
129
+ replacement: (0, semantic_rename_locations_1.semanticRenameReplacement)(location, intent.newName)
130
+ });
131
+ }
132
+ }
133
+ const files = new Set();
134
+ const editSpans = new Set();
135
+ for (const edit of plan.edits) {
136
+ const file = path.resolve(edit.fileName);
137
+ const fileKey = pathKey(file);
138
+ if (!isInside(root, file)) {
139
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_OUTSIDE_WORKSPACE", error: `Edit is outside the workspace: ${edit.fileName}.` };
140
+ }
141
+ if (files.has(fileKey)) {
142
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_DUPLICATE", error: `Duplicate file edit: ${edit.fileName}.` };
143
+ }
144
+ files.add(fileKey);
145
+ const ordered = [...edit.textChanges].sort((left, right) => left.span.start - right.span.start);
146
+ if (ordered.length === 0) {
147
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_EMPTY", error: `Edit has no text changes: ${edit.fileName}.` };
148
+ }
149
+ for (const [index, change] of ordered.entries()) {
150
+ if (change.span.start < 0 || change.span.length <= 0 || change.span.start + change.span.length > edit.expectedText.length ||
151
+ (index > 0 && ordered[index - 1].span.start + ordered[index - 1].span.length > change.span.start)) {
152
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_OVERLAP", error: `Invalid or overlapping edit in ${edit.fileName}.` };
153
+ }
154
+ const key = spanKey(file, change.span.start, change.span.length);
155
+ const authorized = authorizedLocations.get(key);
156
+ if (!authorized || editSpans.has(key)) {
157
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_UNEXPECTED", error: `Edit span is not authorized by the planner: ${key}.` };
158
+ }
159
+ if (edit.expectedText.slice(change.span.start, change.span.start + change.span.length) !== authorized.oldName ||
160
+ change.newText !== authorized.replacement) {
161
+ return {
162
+ ok: false,
163
+ code: "SEMANTIC_RENAME_EDIT_PAYLOAD_MISMATCH",
164
+ error: `Edit payload does not match the exact rename intent at ${key}.`
165
+ };
166
+ }
167
+ editSpans.add(key);
168
+ }
169
+ }
170
+ if (editSpans.size !== authorizedLocations.size) {
171
+ return { ok: false, code: "SEMANTIC_RENAME_EDIT_MISSING", error: "Not every planned rename location has one exact text edit." };
172
+ }
173
+ return { ok: true };
174
+ }
175
+ function prepareFile(root, realRoot, edit, fsAdapter) {
176
+ const file = path.resolve(edit.fileName);
177
+ if (!isInside(root, file))
178
+ throw typed("SEMANTIC_RENAME_EDIT_OUTSIDE_WORKSPACE", `Edit is outside the workspace: ${file}.`);
179
+ const realFile = fsAdapter.realpathSync(file);
180
+ if (!isInside(realRoot, realFile)) {
181
+ throw typed("SEMANTIC_RENAME_EDIT_OUTSIDE_WORKSPACE", `Edit resolves outside the real workspace root: ${file}.`);
182
+ }
183
+ const stat = fsAdapter.statSync(file);
184
+ const identity = readIdentity(file, stat);
185
+ const mode = stat.mode & 0o7777;
186
+ const originalBytes = fsAdapter.readFileSync(file);
187
+ if (sha256(originalBytes) !== edit.expectedHash || originalBytes.toString("utf8") !== edit.expectedText ||
188
+ !Buffer.from(edit.expectedText, "utf8").equals(originalBytes)) {
189
+ throw typed("SEMANTIC_RENAME_EDIT_SNAPSHOT_CHANGED", `Exact planned bytes changed or are not canonical UTF-8: ${file}.`);
190
+ }
191
+ const renamedText = (0, file_text_edit_executor_1.applyTextChanges)(edit.expectedText, edit.textChanges);
192
+ const finalText = (0, targeted_import_canonicalizer_1.formatChangedNamedImports)(edit.expectedText, renamedText, file).text;
193
+ const finalBytes = Buffer.from(finalText, "utf8");
194
+ if (finalBytes.equals(originalBytes))
195
+ throw typed("SEMANTIC_RENAME_EDIT_NOOP", `Rename edit does not change ${file}.`);
196
+ return { file, originalBytes, finalBytes, identity, mode, realFile, realRoot, workspaceRoot: root, descriptor: null };
197
+ }
198
+ function rollback(cause, attempted, all, dependencies) {
199
+ if (attempted.length === 0) {
200
+ return failure(errorCode(cause, "SEMANTIC_RENAME_TRANSACTION_FAILED"), errorMessage(cause));
201
+ }
202
+ const potentiallyModified = new Map(attempted.map((item) => [pathKey(item.file), item.file]));
203
+ const rollbackErrors = [];
204
+ for (const [reverseIndex, item] of [...attempted].reverse().entries()) {
205
+ try {
206
+ dependencies.onPhase?.("beforeRollback", item.file, reverseIndex);
207
+ writeExact(item, item.originalBytes, dependencies.fs);
208
+ assertDescriptorSnapshot(item, dependencies.fs, item.originalBytes, "Rollback bytes or mode do not match the original snapshot.");
209
+ assertOwnedPath(item, dependencies.fs, item.originalBytes, "Rollback refused a foreign or replaced path.");
210
+ potentiallyModified.delete(pathKey(item.file));
211
+ }
212
+ catch (error) {
213
+ rollbackErrors.push(`${item.file}: ${errorMessage(error)}`);
214
+ }
215
+ }
216
+ const residual = [...potentiallyModified.values()].sort();
217
+ return {
218
+ ok: false,
219
+ code: rollbackErrors.length === 0 ? "SEMANTIC_RENAME_TRANSACTION_FAILED" : "SEMANTIC_RENAME_ROLLBACK_FAILED",
220
+ error: rollbackErrors.length === 0
221
+ ? errorMessage(cause)
222
+ : `${errorMessage(cause)} Rollback failed: ${rollbackErrors.join("; ")}`,
223
+ rollback: rollbackErrors.length === 0 ? "ok" : "failed",
224
+ potentiallyModifiedFiles: residual,
225
+ ...(rollbackErrors.length > 0 ? { rollbackErrors } : {})
226
+ };
227
+ }
228
+ function writeExact(item, bytes, fsAdapter) {
229
+ const descriptor = requireDescriptor(item);
230
+ fsAdapter.ftruncateSync(descriptor, 0);
231
+ let offset = 0;
232
+ while (offset < bytes.length) {
233
+ const written = fsAdapter.writeSync(descriptor, bytes, offset, bytes.length - offset, offset);
234
+ if (written <= 0)
235
+ throw new Error(`Descriptor write made no progress for ${item.file}.`);
236
+ offset += written;
237
+ }
238
+ fsAdapter.fchmodSync(descriptor, item.mode);
239
+ fsAdapter.fsyncSync(descriptor);
240
+ assertDescriptorSnapshot(item, fsAdapter, bytes, "Descriptor bytes or mode do not match the requested transaction state.");
241
+ }
242
+ function assertDescriptorSnapshot(item, fsAdapter, expectedBytes, error) {
243
+ const descriptor = requireDescriptor(item);
244
+ const stat = fsAdapter.fstatSync(descriptor);
245
+ if (!sameIdentity(item.identity, readIdentity(item.file, stat)) || (stat.mode & 0o7777) !== item.mode ||
246
+ !readDescriptor(descriptor, stat.size, fsAdapter).equals(expectedBytes))
247
+ throw new Error(error);
248
+ }
249
+ function assertOwnedPath(item, fsAdapter, expectedBytes, error) {
250
+ const currentRoot = fsAdapter.realpathSync(item.workspaceRoot);
251
+ const currentFile = fsAdapter.realpathSync(item.file);
252
+ if (!samePath(currentRoot, item.realRoot) || !samePath(currentFile, item.realFile) || !isInside(currentRoot, currentFile)) {
253
+ throw new Error(error);
254
+ }
255
+ const before = fsAdapter.statSync(item.file);
256
+ if (!sameIdentity(item.identity, readIdentity(item.file, before)) || (before.mode & 0o7777) !== item.mode)
257
+ throw new Error(error);
258
+ const bytes = fsAdapter.readFileSync(item.file);
259
+ const after = fsAdapter.statSync(item.file);
260
+ if (!sameIdentity(item.identity, readIdentity(item.file, after)) || (after.mode & 0o7777) !== item.mode || !bytes.equals(expectedBytes)) {
261
+ throw new Error(error);
262
+ }
263
+ }
264
+ function assertWorkspaceFingerprint(root, plan, computeWorkspaceFingerprint, code) {
265
+ if (computeWorkspaceFingerprint(root) !== plan.discovery.workspaceFingerprint) {
266
+ throw typed(code, "Workspace files, configs, or package metadata changed before semantic rename apply.");
267
+ }
268
+ }
269
+ function readDescriptor(descriptor, size, fsAdapter) {
270
+ const result = Buffer.alloc(size);
271
+ let offset = 0;
272
+ while (offset < size) {
273
+ const read = fsAdapter.readSync(descriptor, result, offset, size - offset, offset);
274
+ if (read <= 0)
275
+ throw new Error("Descriptor read ended before the expected file size.");
276
+ offset += read;
277
+ }
278
+ return result;
279
+ }
280
+ function closeAll(files, fsAdapter) {
281
+ for (const item of files) {
282
+ if (item.descriptor === null)
283
+ continue;
284
+ try {
285
+ fsAdapter.closeSync(item.descriptor);
286
+ }
287
+ catch { /* content ownership was verified before close */ }
288
+ item.descriptor = null;
289
+ }
290
+ }
291
+ function readIdentity(file, stat) {
292
+ if (!stat.isFile() || !Number.isFinite(stat.dev) || !Number.isFinite(stat.ino) || stat.ino === 0) {
293
+ throw new Error(`Stable regular-file identity is unavailable for ${file}.`);
294
+ }
295
+ return { dev: stat.dev, ino: stat.ino };
296
+ }
297
+ function requireDescriptor(item) {
298
+ if (item.descriptor === null)
299
+ throw new Error(`Transaction descriptor is unavailable for ${item.file}.`);
300
+ return item.descriptor;
301
+ }
302
+ function isInside(root, file) {
303
+ const relative = path.relative(root, file);
304
+ return relative !== "" && !relative.startsWith("..") && !path.isAbsolute(relative);
305
+ }
306
+ function samePath(left, right) {
307
+ return pathKey(left) === pathKey(right);
308
+ }
309
+ function pathKey(file) {
310
+ const normalized = path.resolve(file);
311
+ return process.platform === "win32" ? normalized.toLowerCase() : normalized;
312
+ }
313
+ function spanKey(file, start, length) {
314
+ return `${pathKey(file)}:${start}:${length}`;
315
+ }
316
+ function sameIdentity(left, right) {
317
+ return left.dev === right.dev && left.ino === right.ino;
318
+ }
319
+ function sha256(value) {
320
+ return crypto.createHash("sha256").update(value).digest("hex");
321
+ }
322
+ function typed(code, message) {
323
+ return Object.assign(new Error(message), { code });
324
+ }
325
+ function errorCode(error, fallback) {
326
+ return typeof error === "object" && error !== null && "code" in error && typeof error.code === "string" ? error.code : fallback;
327
+ }
328
+ function errorMessage(error) {
329
+ return error instanceof Error ? error.message : String(error);
330
+ }
331
+ function failure(code, error) {
332
+ return { ok: false, code, error, rollback: "not-needed", potentiallyModifiedFiles: [] };
333
+ }
@@ -0,0 +1,248 @@
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.runSemanticUnusedImportCleanup = runSemanticUnusedImportCleanup;
40
+ const path = __importStar(require("node:path"));
41
+ const node_perf_hooks_1 = require("node:perf_hooks");
42
+ const typescript_1 = __importDefault(require("typescript"));
43
+ const targeted_import_canonicalizer_1 = require("./targeted-import-canonicalizer");
44
+ function runSemanticUnusedImportCleanup(input) {
45
+ const metrics = {
46
+ scanMs: 0,
47
+ refreshMs: 0,
48
+ oracleMs: 0,
49
+ renderMs: 0,
50
+ candidateFiles: 0,
51
+ candidateBindings: 0,
52
+ oracleFiles: 0,
53
+ removedBindings: 0
54
+ };
55
+ const scanStartedAt = node_perf_hooks_1.performance.now();
56
+ const candidates = new Map();
57
+ for (const snapshot of input.snapshots) {
58
+ if (!snapshot.cleanup)
59
+ continue;
60
+ const fileCandidates = collectCandidateKeys(snapshot.fileName, snapshot.text);
61
+ if (fileCandidates.size === 0)
62
+ continue;
63
+ candidates.set(pathKey(snapshot.fileName), fileCandidates);
64
+ metrics.candidateFiles += 1;
65
+ metrics.candidateBindings += fileCandidates.size;
66
+ }
67
+ metrics.scanMs = node_perf_hooks_1.performance.now() - scanStartedAt;
68
+ if (candidates.size === 0) {
69
+ return { texts: new Map(), metrics };
70
+ }
71
+ const refreshStartedAt = node_perf_hooks_1.performance.now();
72
+ input.updateSnapshots(input.snapshots);
73
+ if (!input.languageService.getProgram()) {
74
+ throw new Error("TypeScript LanguageService did not refresh the semantic cleanup Program.");
75
+ }
76
+ metrics.refreshMs = node_perf_hooks_1.performance.now() - refreshStartedAt;
77
+ const texts = new Map();
78
+ for (const snapshot of input.snapshots) {
79
+ const fileCandidates = candidates.get(pathKey(snapshot.fileName));
80
+ if (!fileCandidates)
81
+ continue;
82
+ const oracleStartedAt = node_perf_hooks_1.performance.now();
83
+ const organizedEdits = input.languageService.organizeImports({ type: "file", fileName: snapshot.fileName, skipDestructiveCodeActions: false }, input.formatOptions, input.preferences);
84
+ metrics.oracleMs += node_perf_hooks_1.performance.now() - oracleStartedAt;
85
+ metrics.oracleFiles += 1;
86
+ const organized = organizedEdits.find((edit) => pathKey(edit.fileName) === pathKey(snapshot.fileName));
87
+ const organizedText = organized ? applyTextChanges(snapshot.text, organized.textChanges) : snapshot.text;
88
+ const remaining = new Set(readImportBindings(snapshot.fileName, organizedText).map((binding) => binding.key));
89
+ const confirmed = new Set([...fileCandidates].filter((key) => !remaining.has(key)));
90
+ if (confirmed.size === 0)
91
+ continue;
92
+ const renderStartedAt = node_perf_hooks_1.performance.now();
93
+ const cleaned = removeConfirmedBindings(snapshot.fileName, snapshot.text, confirmed);
94
+ metrics.renderMs += node_perf_hooks_1.performance.now() - renderStartedAt;
95
+ if (cleaned !== snapshot.text) {
96
+ texts.set(pathKey(snapshot.fileName), cleaned);
97
+ metrics.removedBindings += confirmed.size;
98
+ }
99
+ }
100
+ return { texts, metrics };
101
+ }
102
+ function collectCandidateKeys(fileName, text) {
103
+ const source = createSourceFile(fileName, text);
104
+ const referenced = new Set();
105
+ const visit = (node) => {
106
+ if (typescript_1.default.isImportDeclaration(node))
107
+ return;
108
+ if (typescript_1.default.isIdentifier(node))
109
+ referenced.add(node.text);
110
+ typescript_1.default.forEachChild(node, visit);
111
+ };
112
+ visit(source);
113
+ return new Set(readImportBindingsFromSource(source, text)
114
+ .filter((binding) => !referenced.has(binding.localName))
115
+ .map((binding) => binding.key));
116
+ }
117
+ function readImportBindings(fileName, text) {
118
+ return readImportBindingsFromSource(createSourceFile(fileName, text), text);
119
+ }
120
+ function readImportBindingsFromSource(source, text) {
121
+ const bindings = [];
122
+ for (const statement of source.statements) {
123
+ if (!typescript_1.default.isImportDeclaration(statement) || !statement.importClause ||
124
+ !typescript_1.default.isStringLiteralLike(statement.moduleSpecifier) || hasSensitiveComment(statement, source, text)) {
125
+ continue;
126
+ }
127
+ const clause = statement.importClause;
128
+ const specifier = statement.moduleSpecifier.text;
129
+ if (clause.name) {
130
+ bindings.push({ key: bindingKey(specifier, "default", "default", clause.name.text), localName: clause.name.text });
131
+ }
132
+ const named = clause.namedBindings;
133
+ if (named && typescript_1.default.isNamespaceImport(named)) {
134
+ bindings.push({ key: bindingKey(specifier, "namespace", "*", named.name.text), localName: named.name.text });
135
+ }
136
+ else if (named) {
137
+ for (const element of named.elements) {
138
+ const importedName = element.propertyName?.text ?? element.name.text;
139
+ bindings.push({
140
+ key: bindingKey(specifier, "named", importedName, element.name.text),
141
+ localName: element.name.text
142
+ });
143
+ }
144
+ }
145
+ }
146
+ return bindings;
147
+ }
148
+ function removeConfirmedBindings(fileName, text, confirmed) {
149
+ const source = createSourceFile(fileName, text);
150
+ const replacements = [];
151
+ for (const statement of source.statements) {
152
+ if (!typescript_1.default.isImportDeclaration(statement) || !statement.importClause ||
153
+ !typescript_1.default.isStringLiteralLike(statement.moduleSpecifier) || hasSensitiveComment(statement, source, text)) {
154
+ continue;
155
+ }
156
+ const clause = statement.importClause;
157
+ const specifier = statement.moduleSpecifier.text;
158
+ const keepDefault = clause.name && !confirmed.has(bindingKey(specifier, "default", "default", clause.name.text))
159
+ ? clause.name.text
160
+ : null;
161
+ const named = clause.namedBindings;
162
+ const keepNamespace = named && typescript_1.default.isNamespaceImport(named) &&
163
+ !confirmed.has(bindingKey(specifier, "namespace", "*", named.name.text))
164
+ ? named.name.text
165
+ : null;
166
+ const keepNamed = named && typescript_1.default.isNamedImports(named)
167
+ ? named.elements.filter((element) => !confirmed.has(bindingKey(specifier, "named", element.propertyName?.text ?? element.name.text, element.name.text)))
168
+ : [];
169
+ const originalBindingCount = Number(Boolean(clause.name)) +
170
+ Number(Boolean(named && typescript_1.default.isNamespaceImport(named))) +
171
+ (named && typescript_1.default.isNamedImports(named) ? named.elements.length : 0);
172
+ const keptBindingCount = Number(Boolean(keepDefault)) + Number(Boolean(keepNamespace)) + keepNamed.length;
173
+ if (keptBindingCount === originalBindingCount)
174
+ continue;
175
+ if (keptBindingCount === 0) {
176
+ replacements.push({
177
+ start: statement.getStart(source),
178
+ end: includeTrailingBreak(text, statement.getEnd()),
179
+ text: ""
180
+ });
181
+ continue;
182
+ }
183
+ let replacement;
184
+ if (named && typescript_1.default.isNamedImports(named) && keepNamed.length > 0) {
185
+ const elements = keepNamed.map((element) => ({
186
+ text: element.getText(source).replace(/^type\s+/, ""),
187
+ isTypeOnly: clause.isTypeOnly || element.isTypeOnly
188
+ }));
189
+ replacement = (0, targeted_import_canonicalizer_1.renderTargetedNamedImportLike)({
190
+ sourceText: text,
191
+ sourceFile: source,
192
+ statement,
193
+ elements,
194
+ specifier,
195
+ clauseTypeOnly: clause.isTypeOnly,
196
+ defaultBinding: keepDefault
197
+ });
198
+ }
199
+ else {
200
+ const keyword = clause.isTypeOnly ? "import type" : "import";
201
+ const parts = [keepDefault, keepNamespace ? `* as ${keepNamespace}` : null]
202
+ .filter((item) => Boolean(item));
203
+ const moduleText = text.slice(statement.moduleSpecifier.getStart(source), statement.moduleSpecifier.getEnd());
204
+ const suffix = text.slice(statement.moduleSpecifier.getEnd(), statement.getEnd());
205
+ replacement = `${keyword} ${parts.join(", ")} from ${moduleText}${suffix}`;
206
+ }
207
+ replacements.push({ start: statement.getStart(source), end: statement.getEnd(), text: replacement });
208
+ }
209
+ let output = text;
210
+ for (const replacement of replacements.sort((left, right) => right.start - left.start)) {
211
+ output = `${output.slice(0, replacement.start)}${replacement.text}${output.slice(replacement.end)}`;
212
+ }
213
+ return output;
214
+ }
215
+ function applyTextChanges(text, changes) {
216
+ let output = text;
217
+ for (const change of [...changes].sort((left, right) => right.span.start - left.span.start)) {
218
+ output = `${output.slice(0, change.span.start)}${change.newText}${output.slice(change.span.start + change.span.length)}`;
219
+ }
220
+ return output;
221
+ }
222
+ function bindingKey(specifier, kind, importedName, localName) {
223
+ return `${specifier}\0${kind}\0${importedName}\0${localName}`;
224
+ }
225
+ function hasSensitiveComment(statement, source, text) {
226
+ const newline = text.indexOf("\n", statement.getEnd());
227
+ const statementText = text.slice(statement.getStart(source), newline < 0 ? text.length : newline);
228
+ return /\/\*|\/\//.test(statementText);
229
+ }
230
+ function includeTrailingBreak(text, offset) {
231
+ if (text.startsWith("\r\n", offset))
232
+ return offset + 2;
233
+ if (text[offset] === "\n" || text[offset] === "\r")
234
+ return offset + 1;
235
+ return offset;
236
+ }
237
+ function createSourceFile(fileName, text) {
238
+ const extension = fileName.toLowerCase();
239
+ const kind = extension.endsWith(".tsx") ? typescript_1.default.ScriptKind.TSX
240
+ : extension.endsWith(".jsx") || extension.endsWith(".js") || extension.endsWith(".mjs") || extension.endsWith(".cjs")
241
+ ? typescript_1.default.ScriptKind.JS
242
+ : typescript_1.default.ScriptKind.TS;
243
+ return typescript_1.default.createSourceFile(fileName, text, typescript_1.default.ScriptTarget.Latest, true, kind);
244
+ }
245
+ function pathKey(fileName) {
246
+ const normalized = path.normalize(fileName);
247
+ return process.platform === "win32" ? normalized.toLowerCase() : normalized;
248
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEMANTIC_WORKER_RETRY_TESTING = void 0;
4
+ exports.runSemanticWorkerWithRetry = runSemanticWorkerWithRetry;
5
+ exports.isRetryableSemanticWorkerFailure = isRetryableSemanticWorkerFailure;
6
+ const RETRYABLE_WORKER_FAILURE_SUFFIXES = [
7
+ "_WORKER_CRASHED",
8
+ "_WORKER_START_FAILED",
9
+ "_WORKER_DEADLINE"
10
+ ];
11
+ const DEFAULT_MAX_ATTEMPTS = 2;
12
+ async function runSemanticWorkerWithRetry(runAttempt, options = {}) {
13
+ const maxAttempts = Math.max(1, Math.floor(options.maxAttempts ?? DEFAULT_MAX_ATTEMPTS));
14
+ let lastError;
15
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
16
+ try {
17
+ return await runAttempt(attempt);
18
+ }
19
+ catch (error) {
20
+ lastError = error;
21
+ const code = readErrorCode(error);
22
+ options.onFailure?.({ attempt, code });
23
+ if (attempt >= maxAttempts || !isRetryableSemanticWorkerFailure(code))
24
+ throw error;
25
+ }
26
+ }
27
+ throw lastError;
28
+ }
29
+ function isRetryableSemanticWorkerFailure(code) {
30
+ return RETRYABLE_WORKER_FAILURE_SUFFIXES.some((suffix) => code.endsWith(suffix));
31
+ }
32
+ function readErrorCode(error) {
33
+ if (error instanceof Error && typeof error.code === "string") {
34
+ return error.code;
35
+ }
36
+ return "SEMANTIC_WORKER_FAILED";
37
+ }
38
+ exports.SEMANTIC_WORKER_RETRY_TESTING = {
39
+ defaultMaxAttempts: DEFAULT_MAX_ATTEMPTS
40
+ };