@automaton-labs/aib 0.0.7 → 0.0.9

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 +21 -578
  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 +217 -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,360 @@
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.SEMANTIC_MOVE_POLICY_TESTING = void 0;
40
+ exports.semanticMovePreferences = semanticMovePreferences;
41
+ exports.findDetachedTopFileHeader = findDetachedTopFileHeader;
42
+ exports.applySemanticMoveImportPolicies = applySemanticMoveImportPolicies;
43
+ const node_module_1 = require("node:module");
44
+ const path = __importStar(require("node:path"));
45
+ const typescript_1 = __importDefault(require("typescript"));
46
+ const import_rules_1 = require("../config/import-rules");
47
+ const typescript_preferences_1 = require("../config/typescript-preferences");
48
+ const import_specifier_policy_1 = require("../commands/import-specifier-policy");
49
+ const targeted_import_canonicalizer_1 = require("./targeted-import-canonicalizer");
50
+ const BUILTIN_MODULES = new Set([
51
+ ...node_module_1.builtinModules,
52
+ ...node_module_1.builtinModules.map((item) => item.startsWith("node:") ? item.slice("node:".length) : `node:${item}`)
53
+ ]);
54
+ function semanticMovePreferences(targetFile, importRules, overrides, workspacePreferences) {
55
+ const rule = resolveEffectiveImportRule(targetFile, path.dirname(targetFile), importRules, workspacePreferences);
56
+ return {
57
+ quotePreference: "auto",
58
+ ...(overrides ?? {}),
59
+ ...(rule?.specifier ? { importModuleSpecifierPreference: rule.specifier } : {}),
60
+ ...(rule?.ending ? { importModuleSpecifierEnding: rule.ending } : {})
61
+ };
62
+ }
63
+ function findDetachedTopFileHeader(file, text, firstMovedName) {
64
+ const source = createSourceFile(file, text);
65
+ const firstStatement = source.statements[0];
66
+ if (!firstStatement || firstStatementName(firstStatement) !== firstMovedName)
67
+ return null;
68
+ const end = firstStatement.getStart(source);
69
+ if (end <= 0)
70
+ return null;
71
+ const headerText = text.slice(0, end);
72
+ if (!/\/\//.test(headerText) && !/\/\*/.test(headerText))
73
+ return null;
74
+ if (!/\r?\n[ \t]*\r?\n[ \t]*$/.test(headerText))
75
+ return null;
76
+ return { start: 0, end, text: headerText };
77
+ }
78
+ function applySemanticMoveImportPolicies(input) {
79
+ const tsConfigCache = new Map();
80
+ return input.edits.map((edit) => {
81
+ const rendered = applyTextChanges(edit.expectedText, edit.textChanges);
82
+ const rule = resolveEffectiveImportRule(edit.fileName, input.workspaceRoot, input.importRules, input.workspacePreferences);
83
+ let nextText = normalizeDeltaImportSpecifiers({
84
+ workspaceRoot: input.workspaceRoot,
85
+ file: edit.fileName,
86
+ beforeText: edit.expectedText,
87
+ text: rendered,
88
+ rule,
89
+ tsConfigCache,
90
+ ...(input.acceptsModuleSpecifier ? { acceptsModuleSpecifier: input.acceptsModuleSpecifier } : {}),
91
+ ...(input.resolveVirtualModuleTarget ? { resolveVirtualModuleTarget: input.resolveVirtualModuleTarget } : {})
92
+ });
93
+ nextText = removeSemanticMoveSelfImports({
94
+ workspaceRoot: input.workspaceRoot,
95
+ file: edit.fileName,
96
+ text: nextText,
97
+ tsConfigCache
98
+ });
99
+ nextText = (0, targeted_import_canonicalizer_1.formatChangedNamedImports)(edit.expectedText, nextText, edit.fileName).text;
100
+ nextText = normalizeDeltaNamedImportTypes(edit.expectedText, nextText, edit.fileName);
101
+ if (nextText === rendered)
102
+ return edit;
103
+ return {
104
+ ...edit,
105
+ textChanges: [{ span: { start: 0, length: edit.expectedText.length }, newText: nextText }]
106
+ };
107
+ });
108
+ }
109
+ function normalizeDeltaNamedImportTypes(beforeText, text, file) {
110
+ const before = createSourceFile(file, beforeText);
111
+ const source = createSourceFile(file, text);
112
+ const beforeNames = new Map();
113
+ for (const statement of before.statements) {
114
+ if (!typescript_1.default.isImportDeclaration(statement) || !typescript_1.default.isStringLiteralLike(statement.moduleSpecifier))
115
+ continue;
116
+ const names = beforeNames.get(statement.moduleSpecifier.text) ?? new Set();
117
+ for (const name of importLocalNames(statement))
118
+ names.add(name);
119
+ beforeNames.set(statement.moduleSpecifier.text, names);
120
+ }
121
+ const replacements = [];
122
+ for (const statement of source.statements) {
123
+ if (!typescript_1.default.isImportDeclaration(statement) || !typescript_1.default.isStringLiteralLike(statement.moduleSpecifier))
124
+ continue;
125
+ const clause = statement.importClause;
126
+ const bindings = clause?.namedBindings;
127
+ if (!clause || !bindings || !typescript_1.default.isNamedImports(bindings))
128
+ continue;
129
+ const previousNames = beforeNames.get(statement.moduleSpecifier.text) ?? new Set();
130
+ if (!bindings.elements.some((element) => !previousNames.has(element.name.text)))
131
+ continue;
132
+ const elements = bindings.elements.map((element) => ({
133
+ text: element.getText(source).replace(/^type\s+/, ""),
134
+ isTypeOnly: clause.isTypeOnly || element.isTypeOnly || (!previousNames.has(element.name.text) && isUsedOnlyInTypePositions(source, element.name.text))
135
+ })).sort((left, right) => Number(left.isTypeOnly) - Number(right.isTypeOnly));
136
+ const replacement = (0, targeted_import_canonicalizer_1.renderTargetedNamedImportLike)({
137
+ sourceText: text,
138
+ sourceFile: source,
139
+ statement,
140
+ elements,
141
+ specifier: statement.moduleSpecifier.text,
142
+ clauseTypeOnly: elements.every((element) => element.isTypeOnly)
143
+ });
144
+ if (replacement !== text.slice(statement.getStart(source), statement.getEnd())) {
145
+ replacements.push({ start: statement.getStart(source), end: statement.getEnd(), text: replacement });
146
+ }
147
+ }
148
+ let output = text;
149
+ for (const replacement of replacements.sort((left, right) => right.start - left.start)) {
150
+ output = `${output.slice(0, replacement.start)}${replacement.text}${output.slice(replacement.end)}`;
151
+ }
152
+ return output;
153
+ }
154
+ function isUsedOnlyInTypePositions(source, name) {
155
+ const uses = [];
156
+ const visit = (node) => {
157
+ if (typescript_1.default.isImportDeclaration(node))
158
+ return;
159
+ if (typescript_1.default.isIdentifier(node) && node.text === name)
160
+ uses.push(node);
161
+ typescript_1.default.forEachChild(node, visit);
162
+ };
163
+ visit(source);
164
+ return uses.length > 0 && uses.every((identifier) => typescript_1.default.isPartOfTypeNode(identifier));
165
+ }
166
+ function removeSemanticMoveSelfImports(input) {
167
+ const source = createSourceFile(input.file, input.text);
168
+ const config = (0, import_specifier_policy_1.readNearestTsConfig)(input.file, input.workspaceRoot, input.tsConfigCache);
169
+ const changes = [];
170
+ for (const statement of source.statements) {
171
+ if (!typescript_1.default.isImportDeclaration(statement) || !typescript_1.default.isStringLiteralLike(statement.moduleSpecifier))
172
+ continue;
173
+ const resolved = (0, import_specifier_policy_1.resolveImportSpecifier)(input.file, statement.moduleSpecifier.text, config);
174
+ if (!resolved || !samePath(resolved, input.file))
175
+ continue;
176
+ const line = source.getLineAndCharacterOfPosition(statement.getStart(source)).line;
177
+ const start = source.getPositionOfLineAndCharacter(line, 0);
178
+ let end = statement.getEnd();
179
+ if (input.text.startsWith("\r\n", end))
180
+ end += 2;
181
+ else if (input.text[end] === "\n" || input.text[end] === "\r")
182
+ end += 1;
183
+ changes.push({ span: { start, length: end - start }, newText: "" });
184
+ }
185
+ return changes.length > 0 ? applyTextChanges(input.text, changes) : input.text;
186
+ }
187
+ function normalizeDeltaImportSpecifiers(input) {
188
+ const rule = input.rule;
189
+ if (!rule || !rule.specifier && !rule.ending && !rule.builtin)
190
+ return input.text;
191
+ const before = createSourceFile(input.file, input.beforeText);
192
+ const current = createSourceFile(input.file, input.text);
193
+ const beforeImports = collectImportEvidence(before);
194
+ const replacements = [];
195
+ const config = (0, import_specifier_policy_1.readNearestTsConfig)(input.file, input.workspaceRoot, input.tsConfigCache);
196
+ for (const statement of current.statements) {
197
+ const moduleSpecifier = moduleSpecifierOf(statement);
198
+ if (!moduleSpecifier || !isImportRuleDelta(statement, current, beforeImports))
199
+ continue;
200
+ const original = moduleSpecifier.text;
201
+ let next = normalizeBuiltinSpecifier(original, rule.builtin) ?? original;
202
+ if (!isBuiltinSpecifier(next) && (rule.specifier || rule.ending)) {
203
+ const resolved = (0, import_specifier_policy_1.resolveImportSpecifier)(input.file, next, config) ??
204
+ input.resolveVirtualModuleTarget?.({ fileName: input.file, specifier: next }) ?? null;
205
+ if (resolved) {
206
+ const effectiveRule = (0, import_specifier_policy_1.materializeAutoImportEnding)(rule, original);
207
+ const preferred = (0, import_specifier_policy_1.chooseImportSpecifier)({
208
+ fromFile: input.file,
209
+ targetFile: resolved,
210
+ config,
211
+ rule: effectiveRule,
212
+ allowIndexCollapse: true
213
+ });
214
+ if (!input.acceptsModuleSpecifier || input.acceptsModuleSpecifier({
215
+ fileName: input.file,
216
+ specifier: preferred,
217
+ targetFile: resolved
218
+ })) {
219
+ next = preferred;
220
+ }
221
+ else {
222
+ const relative = (0, import_specifier_policy_1.chooseImportSpecifier)({
223
+ fromFile: input.file,
224
+ targetFile: resolved,
225
+ config,
226
+ rule: { ...effectiveRule, specifier: "relative" },
227
+ allowIndexCollapse: true
228
+ });
229
+ next = input.acceptsModuleSpecifier({
230
+ fileName: input.file,
231
+ specifier: relative,
232
+ targetFile: resolved
233
+ })
234
+ ? relative
235
+ : input.acceptsModuleSpecifier({
236
+ fileName: input.file,
237
+ specifier: original,
238
+ targetFile: resolved
239
+ })
240
+ ? original
241
+ : preferred;
242
+ }
243
+ }
244
+ }
245
+ if (next !== original) {
246
+ replacements.push({ start: moduleSpecifier.getStart(current) + 1, length: original.length, text: next });
247
+ }
248
+ }
249
+ let output = input.text;
250
+ for (const replacement of replacements.sort((left, right) => right.start - left.start)) {
251
+ output = `${output.slice(0, replacement.start)}${replacement.text}${output.slice(replacement.start + replacement.length)}`;
252
+ }
253
+ return output;
254
+ }
255
+ function resolveEffectiveImportRule(file, workspaceRoot, importRules, workspacePreferences) {
256
+ if (importRules.length > 0) {
257
+ return (0, import_rules_1.resolveImportRuleForFile)(file, importRules);
258
+ }
259
+ const editor = workspacePreferences
260
+ ? (0, typescript_preferences_1.resolveWorkspaceImportPreferences)(workspacePreferences, file)
261
+ : {};
262
+ if (!editor.specifier && !editor.ending)
263
+ return null;
264
+ return {
265
+ scope: ".",
266
+ scopePath: workspaceRoot,
267
+ ...editor
268
+ };
269
+ }
270
+ function collectImportEvidence(source) {
271
+ return source.statements.flatMap((statement) => {
272
+ const specifier = moduleSpecifierOf(statement);
273
+ if (!specifier)
274
+ return [];
275
+ return [{
276
+ kind: typescript_1.default.isImportDeclaration(statement) ? "import" : "export",
277
+ specifier: specifier.text,
278
+ localNames: importLocalNames(statement)
279
+ }];
280
+ });
281
+ }
282
+ function isImportRuleDelta(statement, source, before) {
283
+ const specifier = moduleSpecifierOf(statement);
284
+ if (!specifier)
285
+ return false;
286
+ const kind = typescript_1.default.isImportDeclaration(statement) ? "import" : "export";
287
+ const sameSpecifier = before.filter((item) => item.kind === kind && item.specifier === specifier.text);
288
+ if (sameSpecifier.length === 0)
289
+ return true;
290
+ const beforeNames = new Set(before.filter((item) => item.kind === kind).flatMap((item) => [...item.localNames]));
291
+ return [...importLocalNames(statement)].some((name) => !beforeNames.has(name));
292
+ }
293
+ function importLocalNames(statement) {
294
+ const names = new Set();
295
+ if (typescript_1.default.isImportDeclaration(statement)) {
296
+ const clause = statement.importClause;
297
+ if (clause?.name)
298
+ names.add(clause.name.text);
299
+ const bindings = clause?.namedBindings;
300
+ if (bindings && typescript_1.default.isNamespaceImport(bindings))
301
+ names.add(bindings.name.text);
302
+ if (bindings && typescript_1.default.isNamedImports(bindings)) {
303
+ for (const element of bindings.elements)
304
+ names.add(element.name.text);
305
+ }
306
+ }
307
+ else if (typescript_1.default.isExportDeclaration(statement) && statement.exportClause && typescript_1.default.isNamedExports(statement.exportClause)) {
308
+ for (const element of statement.exportClause.elements)
309
+ names.add(element.name.text);
310
+ }
311
+ return names;
312
+ }
313
+ function moduleSpecifierOf(statement) {
314
+ return (typescript_1.default.isImportDeclaration(statement) || typescript_1.default.isExportDeclaration(statement)) && statement.moduleSpecifier && typescript_1.default.isStringLiteralLike(statement.moduleSpecifier)
315
+ ? statement.moduleSpecifier
316
+ : null;
317
+ }
318
+ function normalizeBuiltinSpecifier(specifier, preference) {
319
+ if ((preference !== "node" && preference !== "bare") || !isBuiltinSpecifier(specifier))
320
+ return null;
321
+ const bare = specifier.startsWith("node:") ? specifier.slice("node:".length) : specifier;
322
+ return preference === "node" ? `node:${bare}` : bare;
323
+ }
324
+ function isBuiltinSpecifier(specifier) {
325
+ return BUILTIN_MODULES.has(specifier);
326
+ }
327
+ function samePath(left, right, platform = process.platform) {
328
+ const normalize = (value) => {
329
+ const normalized = path.resolve(value).replace(/\\/g, "/");
330
+ return platform === "win32" ? normalized.toLowerCase() : normalized;
331
+ };
332
+ return normalize(left) === normalize(right);
333
+ }
334
+ exports.SEMANTIC_MOVE_POLICY_TESTING = { samePath };
335
+ function firstStatementName(statement) {
336
+ if ((typescript_1.default.isTypeAliasDeclaration(statement) || typescript_1.default.isInterfaceDeclaration(statement) || typescript_1.default.isClassDeclaration(statement) ||
337
+ typescript_1.default.isFunctionDeclaration(statement) || typescript_1.default.isEnumDeclaration(statement) || typescript_1.default.isModuleDeclaration(statement)) &&
338
+ statement.name && typescript_1.default.isIdentifier(statement.name))
339
+ return statement.name.text;
340
+ if (typescript_1.default.isVariableStatement(statement)) {
341
+ const declaration = statement.declarationList.declarations[0];
342
+ return declaration && typescript_1.default.isIdentifier(declaration.name) ? declaration.name.text : null;
343
+ }
344
+ return null;
345
+ }
346
+ function applyTextChanges(text, changes) {
347
+ let output = text;
348
+ for (const change of [...changes].sort((left, right) => right.span.start - left.span.start || right.span.length - left.span.length)) {
349
+ output = `${output.slice(0, change.span.start)}${change.newText}${output.slice(change.span.start + change.span.length)}`;
350
+ }
351
+ return output;
352
+ }
353
+ function createSourceFile(file, text) {
354
+ const extension = path.extname(file).toLowerCase();
355
+ const scriptKind = extension === ".tsx" ? typescript_1.default.ScriptKind.TSX
356
+ : extension === ".jsx" ? typescript_1.default.ScriptKind.JSX
357
+ : [".js", ".mjs", ".cjs"].includes(extension) ? typescript_1.default.ScriptKind.JS
358
+ : typescript_1.default.ScriptKind.TS;
359
+ return typescript_1.default.createSourceFile(file, text, typescript_1.default.ScriptTarget.Latest, true, scriptKind);
360
+ }
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSemanticMoveConfigWorker = runSemanticMoveConfigWorker;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const semantic_worker_retry_1 = require("./semantic-worker-retry");
6
+ const EXIT_GRACE_MS = 1_000;
7
+ const EXIT_FORCE_MS = 2_000;
8
+ async function runSemanticMoveConfigWorker(input) {
9
+ return (0, semantic_worker_retry_1.runSemanticWorkerWithRetry)(() => runSemanticMoveConfigWorkerAttempt(input));
10
+ }
11
+ async function runSemanticMoveConfigWorkerAttempt(input) {
12
+ const startedAt = Date.now();
13
+ const metricsEnabled = input.request.metricsEnabled === true;
14
+ const spawnStartedAt = metricsEnabled ? Date.now() : 0;
15
+ const child = (0, node_child_process_1.fork)(input.modulePath, [], {
16
+ windowsHide: true,
17
+ detached: false,
18
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
19
+ env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" }
20
+ });
21
+ const spawnMs = metricsEnabled ? Date.now() - spawnStartedAt : 0;
22
+ const pid = child.pid ?? null;
23
+ if (!pid) {
24
+ const terminationConfirmed = await terminateChild(child, null);
25
+ throw workerError(terminationConfirmed ? "SEMANTIC_MOVE_WORKER_START_FAILED" : "SEMANTIC_MOVE_WORKER_TERMINATION_FAILED", terminationConfirmed ? "Semantic move config worker did not publish a PID." : "PID-less worker exit was not confirmed.");
26
+ }
27
+ let timer = null;
28
+ try {
29
+ const result = await new Promise((resolve, reject) => {
30
+ let settled = false;
31
+ const settle = (error, value) => {
32
+ if (settled)
33
+ return;
34
+ settled = true;
35
+ if (timer)
36
+ clearTimeout(timer);
37
+ child.removeAllListeners("message");
38
+ child.removeAllListeners("error");
39
+ child.removeAllListeners("exit");
40
+ if (error)
41
+ reject(error);
42
+ else
43
+ resolve(value);
44
+ };
45
+ timer = setTimeout(() => settle(workerError("SEMANTIC_MOVE_WORKER_DEADLINE", `Semantic move config worker exceeded ${input.deadlineMs}ms.`)), input.deadlineMs);
46
+ timer.unref();
47
+ child.once("error", (error) => settle(workerError("SEMANTIC_MOVE_WORKER_START_FAILED", error.message)));
48
+ child.once("exit", (code, signal) => settle(workerError("SEMANTIC_MOVE_WORKER_CRASHED", `Semantic move config worker exited before a result (code=${String(code)}, signal=${String(signal)}).`)));
49
+ child.once("message", (raw) => {
50
+ if (!isCompatibleResult(raw, input.request, pid)) {
51
+ settle(workerError("SEMANTIC_MOVE_WORKER_PROTOCOL", "Semantic move config worker returned malformed or mismatched evidence."));
52
+ return;
53
+ }
54
+ settle(null, raw);
55
+ });
56
+ child.send(input.request, (error) => {
57
+ if (error)
58
+ settle(workerError("SEMANTIC_MOVE_WORKER_START_FAILED", error.message));
59
+ });
60
+ });
61
+ const terminateStartedAt = metricsEnabled ? Date.now() : 0;
62
+ const terminationConfirmed = await terminateChild(child, pid);
63
+ const terminateMs = metricsEnabled ? Date.now() - terminateStartedAt : 0;
64
+ if (!terminationConfirmed) {
65
+ throw workerError("SEMANTIC_MOVE_WORKER_TERMINATION_FAILED", `Worker process-tree exit was not confirmed for PID ${pid}.`);
66
+ }
67
+ return {
68
+ result,
69
+ durationMs: Date.now() - startedAt,
70
+ terminationConfirmed: true,
71
+ ...(metricsEnabled ? { metrics: { spawnMs, terminateMs } } : {})
72
+ };
73
+ }
74
+ catch (error) {
75
+ const terminationConfirmed = await terminateChild(child, pid);
76
+ if (!terminationConfirmed) {
77
+ throw workerError("SEMANTIC_MOVE_WORKER_TERMINATION_FAILED", `Worker failure was followed by unconfirmed process-tree exit for PID ${pid}.`);
78
+ }
79
+ throw error;
80
+ }
81
+ finally {
82
+ if (timer)
83
+ clearTimeout(timer);
84
+ }
85
+ }
86
+ function isCompatibleResult(raw, request, pid) {
87
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
88
+ return false;
89
+ const value = raw;
90
+ return value.type === "semanticMoveConfigResult" && value.id === request.id &&
91
+ value.configFilePath === request.configFilePath && value.pid === pid &&
92
+ typeof value.ok === "boolean" && typeof value.containsSource === "boolean" &&
93
+ Array.isArray(value.rootFiles) && value.rootFiles.every((item) => typeof item === "string") &&
94
+ Array.isArray(value.edits) && value.edits.every(isCompatibleFileEdit) &&
95
+ isStringRecord(value.beforeHashes) && typeof value.configHash === "string" &&
96
+ (value.exportStarProofs === undefined || Array.isArray(value.exportStarProofs) && value.exportStarProofs.every(isCompatibleExportStarProof)) &&
97
+ typeof value.rssMiB === "number" && Number.isFinite(value.rssMiB) &&
98
+ (value.failureKind === undefined || ["provider-unsupported", "changes-overlap", "provider-failed", "owner-incomplete", "worker-error"].includes(value.failureKind)) &&
99
+ (value.providerCode === undefined || ["TS_MOVE_TO_FILE_UNSUPPORTED_BY_ENGINE", "TS_MOVE_TO_FILE_REFACTOR_FAILED", "SEMANTIC_MOVE_PROVIDER_FAILED"].includes(value.providerCode)) &&
100
+ (value.error === undefined || typeof value.error === "string") &&
101
+ (value.metrics === undefined || isCompatibleMetrics(value.metrics));
102
+ }
103
+ function isCompatibleExportStarProof(value) {
104
+ if (!value || typeof value !== "object" || Array.isArray(value))
105
+ return false;
106
+ const proof = value;
107
+ return typeof proof.barrelFile === "string" && typeof proof.moduleSpecifier === "string" &&
108
+ Number.isSafeInteger(proof.specifierStart) && proof.specifierStart >= 0 &&
109
+ typeof proof.entity === "string" && proof.entity.length > 0 &&
110
+ typeof proof.checked === "boolean" &&
111
+ typeof proof.matchesSourceSymbol === "boolean" && typeof proof.typeOnly === "boolean";
112
+ }
113
+ function isCompatibleMetrics(value) {
114
+ if (!value || typeof value !== "object" || Array.isArray(value))
115
+ return false;
116
+ const metrics = value;
117
+ return Boolean(metrics.phasesMs) && typeof metrics.phasesMs === "object" && !Array.isArray(metrics.phasesMs) &&
118
+ Object.entries(metrics.phasesMs).every(([key, duration]) => ["config", "program", "refactor", "cleanupScan", "cleanupRefresh", "cleanupOracle", "cleanupRender", "serialize"].includes(key) &&
119
+ typeof duration === "number" && Number.isFinite(duration) && duration >= 0) &&
120
+ (metrics.unusedImportCleanup === undefined || isCompatibleCleanupMetrics(metrics.unusedImportCleanup)) &&
121
+ typeof metrics.peakRssMiB === "number" && Number.isFinite(metrics.peakRssMiB) && metrics.peakRssMiB >= 0 &&
122
+ typeof metrics.endingRssMiB === "number" && Number.isFinite(metrics.endingRssMiB) && metrics.endingRssMiB >= 0;
123
+ }
124
+ function isCompatibleCleanupMetrics(value) {
125
+ if (!value || typeof value !== "object" || Array.isArray(value))
126
+ return false;
127
+ const metrics = value;
128
+ return [metrics.candidateFiles, metrics.candidateBindings, metrics.oracleFiles, metrics.removedBindings]
129
+ .every((item) => Number.isSafeInteger(item) && item >= 0);
130
+ }
131
+ function isCompatibleFileEdit(value) {
132
+ if (!value || typeof value !== "object" || Array.isArray(value))
133
+ return false;
134
+ const edit = value;
135
+ return typeof edit.fileName === "string" && typeof edit.isNewFile === "boolean" &&
136
+ Array.isArray(edit.textChanges) && edit.textChanges.every(isCompatibleTextChange);
137
+ }
138
+ function isCompatibleTextChange(value) {
139
+ if (!value || typeof value !== "object" || Array.isArray(value))
140
+ return false;
141
+ const change = value;
142
+ return Boolean(change.span) && typeof change.span === "object" && !Array.isArray(change.span) &&
143
+ Number.isSafeInteger(change.span.start) && change.span.start >= 0 &&
144
+ Number.isSafeInteger(change.span.length) && change.span.length >= 0 &&
145
+ typeof change.newText === "string";
146
+ }
147
+ function isStringRecord(value) {
148
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value) &&
149
+ Object.entries(value).every(([key, item]) => key !== "" && typeof item === "string");
150
+ }
151
+ async function terminateChild(child, pid) {
152
+ if (child.connected)
153
+ child.disconnect();
154
+ if (pid === null) {
155
+ try {
156
+ child.kill("SIGKILL");
157
+ }
158
+ catch { /* already gone */ }
159
+ return waitForExit(child, EXIT_FORCE_MS);
160
+ }
161
+ if (!isAlive(pid) && hasExited(child))
162
+ return true;
163
+ if (process.platform === "win32") {
164
+ (0, node_child_process_1.spawnSync)("taskkill.exe", ["/PID", String(pid), "/T", "/F"], {
165
+ windowsHide: true,
166
+ stdio: "ignore",
167
+ timeout: EXIT_FORCE_MS
168
+ });
169
+ return waitForDead(child, pid, EXIT_FORCE_MS);
170
+ }
171
+ try {
172
+ child.kill("SIGTERM");
173
+ }
174
+ catch { /* already gone */ }
175
+ if (await waitForDead(child, pid, EXIT_GRACE_MS))
176
+ return true;
177
+ try {
178
+ child.kill("SIGKILL");
179
+ }
180
+ catch { /* already gone */ }
181
+ return waitForDead(child, pid, EXIT_FORCE_MS);
182
+ }
183
+ async function waitForDead(child, pid, timeoutMs) {
184
+ const deadline = Date.now() + timeoutMs;
185
+ while (Date.now() <= deadline) {
186
+ if (!isAlive(pid) && hasExited(child))
187
+ return true;
188
+ await delay(20);
189
+ }
190
+ return !isAlive(pid) && hasExited(child);
191
+ }
192
+ async function waitForExit(child, timeoutMs) {
193
+ const deadline = Date.now() + timeoutMs;
194
+ while (Date.now() <= deadline) {
195
+ if (hasExited(child))
196
+ return true;
197
+ await delay(20);
198
+ }
199
+ return hasExited(child);
200
+ }
201
+ function hasExited(child) {
202
+ return child.exitCode !== null || child.signalCode !== null;
203
+ }
204
+ function isAlive(pid) {
205
+ try {
206
+ process.kill(pid, 0);
207
+ return true;
208
+ }
209
+ catch {
210
+ return false;
211
+ }
212
+ }
213
+ function delay(ms) {
214
+ return new Promise((resolve) => setTimeout(resolve, ms));
215
+ }
216
+ function workerError(code, message) {
217
+ return Object.assign(new Error(message), { code });
218
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifySemanticMoveProviderException = classifySemanticMoveProviderException;
4
+ function classifySemanticMoveProviderException(error) {
5
+ const message = error instanceof Error ? error.message : String(error);
6
+ if (/Expected symbol to be a module/i.test(message)) {
7
+ return {
8
+ failureKind: "provider-unsupported",
9
+ code: "TS_MOVE_TO_FILE_UNSUPPORTED_BY_ENGINE",
10
+ error: "TypeScript move-to-file cannot move this selection; manual extraction is required."
11
+ };
12
+ }
13
+ if (/Changes overlap/i.test(message)) {
14
+ return {
15
+ failureKind: "changes-overlap",
16
+ code: "TS_MOVE_TO_FILE_REFACTOR_FAILED",
17
+ error: "Changes overlap"
18
+ };
19
+ }
20
+ const rawName = error instanceof Error ? error.name : "Error";
21
+ const safeName = /^[A-Za-z][A-Za-z0-9]*$/.test(rawName) ? rawName : "Error";
22
+ return {
23
+ failureKind: "provider-failed",
24
+ code: "SEMANTIC_MOVE_PROVIDER_FAILED",
25
+ error: `TypeScript refactor provider threw an exception (${safeName}).`
26
+ };
27
+ }