@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,807 @@
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.ExportsStarPreviewSession = void 0;
40
+ exports.planExportsStarExpandPreview = planExportsStarExpandPreview;
41
+ const crypto = __importStar(require("node:crypto"));
42
+ const fs = __importStar(require("node:fs"));
43
+ const path = __importStar(require("node:path"));
44
+ const typescript_1 = __importDefault(require("typescript"));
45
+ const semantic_context_provider_1 = require("../semantic/semantic-context-provider");
46
+ const workspace_project_index_1 = require("../topology/workspace-project-index");
47
+ const semantic_export_index_1 = require("./semantic-export-index");
48
+ function planExportsStarExpandPreview(cwd, input) {
49
+ const session = new ExportsStarPreviewSession(cwd);
50
+ try {
51
+ return session.plan(input);
52
+ }
53
+ finally {
54
+ session.dispose();
55
+ }
56
+ }
57
+ class ExportsStarPreviewSession {
58
+ semanticContextPool;
59
+ root;
60
+ projectIndex;
61
+ semanticProvider;
62
+ leases = new Map();
63
+ structuralIndexMs;
64
+ programsBuilt = 0;
65
+ overlaysBuilt = 0;
66
+ poolHits = 0;
67
+ poolMisses = 0;
68
+ poolBypasses = 0;
69
+ poolFallbacks = 0;
70
+ disposed = false;
71
+ constructor(cwd, semanticContextPool) {
72
+ this.semanticContextPool = semanticContextPool;
73
+ this.root = path.resolve(cwd);
74
+ const structuralStarted = performance.now();
75
+ this.projectIndex = new workspace_project_index_1.WorkspaceProjectIndex(this.root);
76
+ this.structuralIndexMs = roundMs(performance.now() - structuralStarted);
77
+ this.semanticProvider = new semantic_context_provider_1.SemanticContextProvider(this.root, this.projectIndex);
78
+ }
79
+ get resources() {
80
+ return {
81
+ structuralIndexesBuilt: 1,
82
+ semanticProvidersCreated: 1,
83
+ distinctContextsAcquired: this.leases.size,
84
+ programsBuilt: this.programsBuilt,
85
+ overlaysBuilt: this.overlaysBuilt,
86
+ poolHits: this.poolHits,
87
+ poolMisses: this.poolMisses,
88
+ poolBypasses: this.poolBypasses,
89
+ poolFallbacks: this.poolFallbacks
90
+ };
91
+ }
92
+ plan(input) {
93
+ if (this.disposed)
94
+ throw new Error("ExportsStarPreviewSession is disposed.");
95
+ const totalStarted = performance.now();
96
+ const root = this.root;
97
+ const projectIndex = this.projectIndex;
98
+ const semanticProvider = this.semanticProvider;
99
+ const leases = this.leases;
100
+ const absoluteSource = path.resolve(root, input.sourceFile);
101
+ const sourceFile = repoPath(root, absoluteSource);
102
+ if (!isInside(root, absoluteSource) || !fs.existsSync(absoluteSource)) {
103
+ return emptyPreview(sourceFile, "sourceNotFound", "The requested barrel is not an existing workspace file.", { structuralIndexMs: this.structuralIndexMs }, this.resources, totalStarted);
104
+ }
105
+ if (!/\.(?:ts|tsx|mts|cts)$/i.test(sourceFile) || /\.d\.ts$/i.test(sourceFile)) {
106
+ return emptyPreview(sourceFile, "sourceKindUnsupported", "exports.star.expand preview supports TypeScript source modules only.", { structuralIndexMs: this.structuralIndexMs }, this.resources, totalStarted);
107
+ }
108
+ const timings = { structuralIndexMs: this.structuralIndexMs };
109
+ const semanticStarted = performance.now();
110
+ const barrelOwners = projectIndex.exactOwnersForFile(sourceFile);
111
+ if (barrelOwners.length === 0) {
112
+ return emptyPreview(sourceFile, "barrelNotOwned", "No exact TypeScript project owns the barrel.", timings, this.resources, totalStarted);
113
+ }
114
+ for (const owner of barrelOwners) {
115
+ acquireOwner(root, semanticProvider, sourceFile, owner, leases, this.semanticContextPool, (acquisition) => {
116
+ if (acquisition.source === "request-local") {
117
+ this.programsBuilt += 1;
118
+ }
119
+ else if (acquisition.source === "pool-fallback") {
120
+ this.programsBuilt += 1;
121
+ this.poolFallbacks += 1;
122
+ }
123
+ else if (acquisition.cache.status === "hit") {
124
+ this.poolHits += 1;
125
+ }
126
+ else if (acquisition.cache.status === "miss") {
127
+ this.programsBuilt += 1;
128
+ this.poolMisses += 1;
129
+ }
130
+ else {
131
+ this.programsBuilt += 1;
132
+ this.poolBypasses += 1;
133
+ }
134
+ });
135
+ }
136
+ const barrelRecords = barrelOwners.map((owner) => leases.get(owner.identity.key));
137
+ const source = barrelRecords[0]?.lease.program.getSourceFile(path.resolve(root, sourceFile));
138
+ if (!source) {
139
+ return emptyPreview(sourceFile, "barrelMissingFromProgram", "The barrel is missing from its owning TypeScript program.", timings, this.resources, totalStarted);
140
+ }
141
+ timings.semanticContextsMs = roundMs(performance.now() - semanticStarted);
142
+ const coverageStarted = performance.now();
143
+ const rawSelected = selectRawStarEdges(source, input.selectors, sourceFile);
144
+ const consumerEvidence = collectConsumerEvidence(root, sourceFile, barrelOwners, leases, projectIndex);
145
+ const publicBarrel = isPackageExportedBarrel(root, sourceFile, projectIndex);
146
+ const cjs = isCommonJsSource(source, barrelRecords[0].lease.program.getCompilerOptions());
147
+ const relevantCoverageIssue = consumerEvidence.flatMap((evidence) => [
148
+ ...evidence.unresolved.map((item) => retainedReason(sourceFile, "*", "relevantCoverageIncomplete", `Relevant consumer ${item.file} has unresolved ${item.specifier}.`)),
149
+ ...evidence.multiOwnerFiles.map((item) => retainedReason(sourceFile, "*", "consumerMultipleOwners", `Relevant consumer ${item.file} has multiple owners: ${item.owners.join(", ")}.`))
150
+ ])[0];
151
+ const namespaceFiles = unique(consumerEvidence.flatMap((item) => item.namespaceFiles));
152
+ const dynamicFiles = unique(consumerEvidence.flatMap((item) => item.dynamicFiles));
153
+ const barrelOwnerKeys = new Set(barrelOwners.map((owner) => owner.identity.key));
154
+ const uncoveredConfig = projectIndex.snapshot.configs.find((config) => !barrelOwnerKeys.has(config.identity.key));
155
+ const decisive = cjs && namespaceFiles.length + dynamicFiles.length > 0
156
+ ? retainedReason(sourceFile, "*", "namespaceShapeObserved", `CJS namespace shape is observed by ${[...namespaceFiles, ...dynamicFiles].slice(0, 3).join(", ")}.`)
157
+ : cjs && publicBarrel && input.namespaceShape !== "allow"
158
+ ? retainedReason(sourceFile, "*", "namespaceShapeConsentRequired", "Public/package CJS barrel requires namespaceShape=allow.")
159
+ : relevantCoverageIssue
160
+ ? relevantCoverageIssue
161
+ : cjs && uncoveredConfig
162
+ ? retainedReason(sourceFile, "*", "consumerCoverageIncomplete", `CJS consumer coverage is not proven outside barrel owners; uncovered project ${repoPath(root, uncoveredConfig.identity.lexicalPath)}.`)
163
+ : null;
164
+ if (rawSelected.specifiers.length === 0 || decisive) {
165
+ timings.exportIndexMs = 0;
166
+ timings.coveragePlannerMs = roundMs(performance.now() - coverageStarted);
167
+ timings.totalMs = roundMs(this.structuralIndexMs + performance.now() - totalStarted);
168
+ return earlyRetainedPreview({
169
+ sourceFile,
170
+ requestedCount: rawSelected.requestedCount,
171
+ selectedSpecifiers: rawSelected.specifiers,
172
+ retained: decisive
173
+ ? [...rawSelected.retained, ...rawSelected.specifiers.map((specifier) => ({ ...decisive, selector: specifier }))]
174
+ : rawSelected.retained,
175
+ owners: barrelOwners.map((owner) => repoPath(root, owner.identity.lexicalPath)).sort(),
176
+ consumers: consumerEvidence,
177
+ timings,
178
+ resources: this.resources,
179
+ input
180
+ });
181
+ }
182
+ const exportProvider = createExportProvider(root, barrelRecords);
183
+ const exportStarted = performance.now();
184
+ const index = (0, semantic_export_index_1.buildSemanticExportIndexFromProvider)(exportProvider, { barrelFiles: [sourceFile] });
185
+ timings.exportIndexMs = roundMs(performance.now() - exportStarted);
186
+ const barrel = index.barrels[0];
187
+ const selected = selectEdges(barrel, input.selectors, sourceFile);
188
+ const retained = [...selected.retained];
189
+ const replacements = [];
190
+ const surfaces = [];
191
+ const renderedNames = new Set();
192
+ for (const edge of selected.edges) {
193
+ const local = validateEdge(edge, sourceFile);
194
+ if (local) {
195
+ retained.push(local);
196
+ continue;
197
+ }
198
+ const rendered = renderEdge(source, edge, renderedNames);
199
+ if (!rendered) {
200
+ retained.push(retainedReason(sourceFile, edge.specifier, "runtimeEvaluationWouldBeLost", "The selected runtime star has no exposed runtime binding; expansion would remove target evaluation."));
201
+ continue;
202
+ }
203
+ replacements.push({ edge, text: rendered });
204
+ for (const binding of edge.bindings.filter((item) => item.exposed && !item.shadowed && !item.collision && !item.isDefault)) {
205
+ renderedNames.add(binding.publicName);
206
+ }
207
+ surfaces.push({
208
+ selector: selected.selectorByEdge.get(edge.id) ?? edge.specifier,
209
+ specifier: edge.specifier,
210
+ ...(edge.resolvedFile ? { target: edge.resolvedFile } : {}),
211
+ runtime: edge.bindings.filter(isExposedRuntime).map((item) => item.publicName).sort(),
212
+ typeOnly: edge.bindings.filter(isExposedTypeOnly).map((item) => item.publicName).sort()
213
+ });
214
+ }
215
+ let nextText = applyReplacements(source.text, replacements);
216
+ let addedDiagnostics = [];
217
+ if (replacements.length > 0) {
218
+ addedDiagnostics = collectAddedDiagnostics(root, sourceFile, nextText, barrelOwners, semanticProvider, leases, consumerEvidence, () => { this.overlaysBuilt += 1; });
219
+ if (addedDiagnostics.length > 0) {
220
+ for (const replacement of replacements) {
221
+ retained.push(retainedReason(sourceFile, replacement.edge.specifier, "virtualDiagnosticsAdded", `Combined barrel rewrite adds diagnostic TS${addedDiagnostics[0].code} in ${addedDiagnostics[0].file}.`));
222
+ }
223
+ replacements.length = 0;
224
+ surfaces.length = 0;
225
+ nextText = source.text;
226
+ }
227
+ }
228
+ timings.coveragePlannerMs = roundMs(performance.now() - coverageStarted);
229
+ const filesTouched = replacements.length > 0 ? [sourceFile] : [];
230
+ const edits = replacements.length > 0
231
+ ? [{ file: sourceFile, start: 0, end: source.text.length, text: nextText, reason: "exports.star.expand preview" }]
232
+ : [];
233
+ const beforeHashes = replacements.length > 0
234
+ ? [{ file: sourceFile, beforeHash: sha256(source.text) }]
235
+ : [];
236
+ const requestedCount = selected.requestedCount;
237
+ const retainedRows = dedupeRetained(retained).filter((item) => item.selector !== "*" || requestedCount === 0);
238
+ const plannedCount = replacements.length;
239
+ timings.totalMs = roundMs(this.structuralIndexMs + performance.now() - totalStarted);
240
+ const evidence = {
241
+ sourceFile,
242
+ owners: barrel.owners,
243
+ selectors: input.selectors ?? [],
244
+ replacements: replacements.map((item) => ({ id: item.edge.id, specifier: item.edge.specifier, text: item.text })),
245
+ retained: retainedRows,
246
+ surfaces,
247
+ consumers: consumerEvidence,
248
+ diagnostics: addedDiagnostics,
249
+ beforeHashes
250
+ };
251
+ return {
252
+ ok: true,
253
+ operation: "exports.star.expand.preview",
254
+ applyAvailable: false,
255
+ partial: plannedCount > 0 && retainedRows.length > 0,
256
+ sourceFile,
257
+ requestedCount,
258
+ plannedCount,
259
+ retainedCount: retainedRows.length,
260
+ filesTouched,
261
+ filesWritten: [],
262
+ retained: retainedRows,
263
+ rows: [{ ok: true, sourceFile, requestedCount, plannedCount, retainedCount: retainedRows.length }],
264
+ edits,
265
+ beforeHashes,
266
+ owners: barrel.owners,
267
+ surfaces,
268
+ diagnostics: { added: addedDiagnostics },
269
+ cycleEvidence: { status: "available", runtimeEdgesChanged: false, cyclesAdded: [] },
270
+ consumers: consumerEvidence.map(({ unresolved: _unresolved, multiOwnerFiles: _multiOwnerFiles, ...item }) => item),
271
+ timings,
272
+ resources: this.resources,
273
+ semanticFingerprint: sha256(stableStringify(evidence)),
274
+ next: "Review exports.star.expand view evidence; apply/execute is not available yet."
275
+ };
276
+ }
277
+ dispose() {
278
+ if (this.disposed)
279
+ return;
280
+ this.disposed = true;
281
+ for (const record of this.leases.values())
282
+ record.lease.release();
283
+ this.leases.clear();
284
+ this.semanticProvider.dispose();
285
+ this.projectIndex.dispose();
286
+ }
287
+ }
288
+ exports.ExportsStarPreviewSession = ExportsStarPreviewSession;
289
+ function emptyPreview(sourceFile, code, reason, timings, resources, totalStarted) {
290
+ timings.totalMs = roundMs((timings.structuralIndexMs ?? 0) + performance.now() - totalStarted);
291
+ const retained = [retainedReason(sourceFile, "*", code, reason)];
292
+ return {
293
+ ok: true,
294
+ operation: "exports.star.expand.preview",
295
+ applyAvailable: false,
296
+ partial: false,
297
+ sourceFile,
298
+ requestedCount: 0,
299
+ plannedCount: 0,
300
+ retainedCount: 1,
301
+ filesTouched: [],
302
+ filesWritten: [],
303
+ retained,
304
+ rows: [{ ok: true, sourceFile, requestedCount: 0, plannedCount: 0, retainedCount: 1 }],
305
+ edits: [],
306
+ beforeHashes: [],
307
+ owners: [],
308
+ surfaces: [],
309
+ diagnostics: { added: [] },
310
+ cycleEvidence: { status: "available", runtimeEdgesChanged: false, cyclesAdded: [] },
311
+ consumers: [],
312
+ timings,
313
+ resources,
314
+ semanticFingerprint: sha256(stableStringify({ sourceFile, retained })),
315
+ next: "Review retained exports.star.expand evidence; apply/execute is not available yet."
316
+ };
317
+ }
318
+ function acquireOwner(root, provider, focusFile, owner, leases, pool, onAcquired) {
319
+ const existing = leases.get(owner.identity.key);
320
+ if (existing) {
321
+ return existing;
322
+ }
323
+ let lease;
324
+ let acquisition;
325
+ if (pool) {
326
+ try {
327
+ const pooled = pool.acquireProgram({
328
+ focusFile,
329
+ ownerConfig: owner.identity.lexicalPath,
330
+ projectScope: "owner-with-forward-references"
331
+ });
332
+ lease = pooled;
333
+ acquisition = { source: "pool", cache: pooled.cache };
334
+ }
335
+ catch (error) {
336
+ lease = provider.acquireProgram({ focusFile, ownerConfig: owner.identity.lexicalPath, projectScope: "owner-with-forward-references" });
337
+ acquisition = { source: "pool-fallback", error: error instanceof Error ? error.message : String(error) };
338
+ }
339
+ }
340
+ else {
341
+ lease = provider.acquireProgram({ focusFile, ownerConfig: owner.identity.lexicalPath, projectScope: "owner-with-forward-references" });
342
+ acquisition = { source: "request-local" };
343
+ }
344
+ onAcquired(acquisition);
345
+ const handle = {
346
+ id: repoPath(root, owner.identity.lexicalPath),
347
+ checker: lease.checker,
348
+ getSourceFile: (file) => lease.program.getSourceFile(path.resolve(file)),
349
+ resolveModule: (fromFile, specifier) => resolveModule(lease.program, fromFile, specifier),
350
+ symbolIdentity: (symbol) => symbolIdentity(root, lease.checker, symbol),
351
+ diagnosticsForFile: (file) => {
352
+ const source = lease.program.getSourceFile(path.resolve(file));
353
+ return source ? lease.program.getSemanticDiagnostics(source) : [];
354
+ }
355
+ };
356
+ const record = { owner, lease, handle, acquisition };
357
+ leases.set(owner.identity.key, record);
358
+ return record;
359
+ }
360
+ function createExportProvider(root, records) {
361
+ return {
362
+ root,
363
+ projectsForFile: (file) => records
364
+ .filter((record) => Boolean(record.lease.program.getSourceFile(path.resolve(file))))
365
+ .map((record) => record.handle)
366
+ };
367
+ }
368
+ function selectRawStarEdges(source, selectors, sourceFile) {
369
+ const specifiers = collectStarSpecifiers(source);
370
+ if (!selectors || selectors.length === 0) {
371
+ return {
372
+ specifiers,
373
+ retained: specifiers.length === 0
374
+ ? [retainedReason(sourceFile, "*", "starEdgeNotFound", "The barrel has no export-star edges to expand.")]
375
+ : [],
376
+ requestedCount: specifiers.length
377
+ };
378
+ }
379
+ const selected = [];
380
+ const retained = [];
381
+ const requested = unique(selectors.map((item) => item.trim()).filter(Boolean));
382
+ for (const selector of requested) {
383
+ const exact = specifiers.filter((specifier) => specifier === selector);
384
+ const matches = exact.length > 0
385
+ ? exact
386
+ : specifiers.filter((specifier) => (0, semantic_export_index_1.normalizeExportEdgeSelector)(specifier) === (0, semantic_export_index_1.normalizeExportEdgeSelector)(selector));
387
+ if (matches.length === 1) {
388
+ if (!selected.includes(matches[0]))
389
+ selected.push(matches[0]);
390
+ }
391
+ else if (matches.length > 1) {
392
+ retained.push({
393
+ ...retainedReason(sourceFile, selector, "selectorAmbiguous", "Selector matches multiple existing export-star edges."),
394
+ candidates: [...matches].sort()
395
+ });
396
+ }
397
+ else {
398
+ retained.push(retainedReason(sourceFile, selector, "selectorNotFound", "No existing export-star edge matches this selector."));
399
+ }
400
+ }
401
+ return { specifiers: selected, retained, requestedCount: requested.length };
402
+ }
403
+ function earlyRetainedPreview(input) {
404
+ const retained = dedupeRetained(input.retained);
405
+ const evidence = {
406
+ sourceFile: input.sourceFile,
407
+ selectors: input.input.selectors ?? [],
408
+ selectedSpecifiers: input.selectedSpecifiers,
409
+ owners: input.owners,
410
+ retained,
411
+ consumers: input.consumers
412
+ };
413
+ return {
414
+ ok: true,
415
+ operation: "exports.star.expand.preview",
416
+ applyAvailable: false,
417
+ partial: false,
418
+ sourceFile: input.sourceFile,
419
+ requestedCount: input.requestedCount,
420
+ plannedCount: 0,
421
+ retainedCount: retained.length,
422
+ filesTouched: [],
423
+ filesWritten: [],
424
+ retained,
425
+ rows: [{ ok: true, sourceFile: input.sourceFile, requestedCount: input.requestedCount, plannedCount: 0, retainedCount: retained.length }],
426
+ edits: [],
427
+ beforeHashes: [],
428
+ owners: input.owners,
429
+ surfaces: [],
430
+ diagnostics: { added: [] },
431
+ cycleEvidence: { status: "available", runtimeEdgesChanged: false, cyclesAdded: [] },
432
+ consumers: input.consumers.map(({ unresolved: _unresolved, multiOwnerFiles: _multiOwnerFiles, ...item }) => item),
433
+ timings: input.timings,
434
+ resources: input.resources,
435
+ semanticFingerprint: sha256(stableStringify(evidence)),
436
+ next: "Review retained exports.star.expand evidence; apply/execute is not available yet."
437
+ };
438
+ }
439
+ function selectEdges(barrel, selectors, sourceFile) {
440
+ const selectorByEdge = new Map();
441
+ if (!selectors || selectors.length === 0) {
442
+ const edges = barrel.edges.filter((edge) => edge.mode === "runtime-star" || edge.mode === "type-star");
443
+ for (const edge of edges) {
444
+ selectorByEdge.set(edge.id, edge.specifier);
445
+ }
446
+ return {
447
+ edges,
448
+ retained: edges.length === 0
449
+ ? [retainedReason(sourceFile, "*", "starEdgeNotFound", "The barrel has no export-star edges to expand.")]
450
+ : [],
451
+ requestedCount: edges.length,
452
+ selectorByEdge
453
+ };
454
+ }
455
+ const edges = [];
456
+ const retained = [];
457
+ for (const selector of unique(selectors.map((item) => item.trim()).filter(Boolean))) {
458
+ const resolved = (0, semantic_export_index_1.resolveSemanticExportEdgeSelector)(barrel, selector);
459
+ if (resolved.status === "resolved") {
460
+ if (!selectorByEdge.has(resolved.edge.id)) {
461
+ edges.push(resolved.edge);
462
+ selectorByEdge.set(resolved.edge.id, selector);
463
+ }
464
+ }
465
+ else if (resolved.status === "ambiguous") {
466
+ retained.push({
467
+ ...retainedReason(sourceFile, selector, "selectorAmbiguous", "Selector matches multiple existing export-star edges."),
468
+ candidates: resolved.candidates.map((item) => item.specifier).sort()
469
+ });
470
+ }
471
+ else {
472
+ retained.push(retainedReason(sourceFile, selector, "selectorNotFound", "No existing export-star edge matches this selector."));
473
+ }
474
+ }
475
+ return { edges, retained, requestedCount: unique(selectors).length, selectorByEdge };
476
+ }
477
+ function validateEdge(edge, sourceFile) {
478
+ if (edge.resolution !== "resolved" || !edge.resolvedFile) {
479
+ return retainedReason(sourceFile, edge.specifier, "edgeUnresolved", "The selected export-star target is not resolved equivalently for every owner.");
480
+ }
481
+ if (/\.(?:jsx?|mjs|cjs)$/i.test(edge.resolvedFile)) {
482
+ return retainedReason(sourceFile, edge.specifier, "targetKindUnsupported", "Raw JavaScript/CommonJS export targets are unsupported.");
483
+ }
484
+ if (edge.collisions.length > 0) {
485
+ return retainedReason(sourceFile, edge.specifier, "exportCollision", `Colliding exports: ${edge.collisions.join(", ")}.`);
486
+ }
487
+ if (edge.issues.length > 0) {
488
+ return retainedReason(sourceFile, edge.specifier, edge.issues[0].code, "The selected edge has unresolved semantic evidence.");
489
+ }
490
+ return null;
491
+ }
492
+ function renderEdge(source, edge, excludedNames) {
493
+ const statement = source.statements.find((item) => item.getStart(source) === edge.start && item.end === edge.end);
494
+ if (!statement || !typescript_1.default.isExportDeclaration(statement) || !statement.moduleSpecifier) {
495
+ return null;
496
+ }
497
+ const exposed = edge.bindings.filter((binding) => binding.exposed && !binding.shadowed && !binding.collision && !binding.isDefault && !excludedNames.has(binding.publicName));
498
+ const runtime = exposed.filter(isExposedRuntime);
499
+ const typeOnly = exposed.filter(isExposedTypeOnly);
500
+ if (edge.mode === "runtime-star" && runtime.length === 0) {
501
+ return null;
502
+ }
503
+ if (exposed.length === 0) {
504
+ return null;
505
+ }
506
+ const moduleText = source.text.slice(statement.moduleSpecifier.getStart(source), statement.moduleSpecifier.end);
507
+ const tail = source.text.slice(statement.moduleSpecifier.end, statement.end);
508
+ const names = edge.mode === "type-star"
509
+ ? exposed.map((binding) => renderExportName(binding.publicName))
510
+ : [
511
+ ...runtime.map((binding) => renderExportName(binding.publicName)),
512
+ ...typeOnly.map((binding) => `type ${renderExportName(binding.publicName)}`)
513
+ ];
514
+ const prefix = edge.mode === "type-star" ? "export type" : "export";
515
+ return `${prefix} { ${names.join(", ")} } from ${moduleText}${tail}`;
516
+ }
517
+ function applyReplacements(text, replacements) {
518
+ let result = text;
519
+ for (const replacement of [...replacements].sort((left, right) => right.edge.start - left.edge.start)) {
520
+ result = result.slice(0, replacement.edge.start) + replacement.text + result.slice(replacement.edge.end);
521
+ }
522
+ return result;
523
+ }
524
+ function collectConsumerEvidence(root, sourceFile, owners, leases, projectIndex) {
525
+ const absoluteBarrel = path.resolve(root, sourceFile);
526
+ const barrelOwnerKeys = new Set(owners.map((owner) => owner.identity.key));
527
+ return owners.map((owner) => {
528
+ const record = leases.get(owner.identity.key);
529
+ const graph = buildModuleGraph(root, record.lease.program);
530
+ const closure = reverseClosure(graph.resolved, absoluteBarrel);
531
+ const closureKeys = new Set([...closure].map((file) => canonical(file)));
532
+ const files = [...closure].filter((file) => file !== absoluteBarrel).map((file) => repoPath(root, file)).sort();
533
+ const namespaceFiles = files.filter((file) => hasNamespaceImportOf(record.lease.program.getSourceFile(path.resolve(root, file)), absoluteBarrel, record.lease.program));
534
+ const dynamicFiles = files.filter((file) => hasDynamicImportOf(record.lease.program.getSourceFile(path.resolve(root, file)), absoluteBarrel, record.lease.program));
535
+ const unresolved = graph.unresolved
536
+ .filter((item) => closureKeys.has(canonical(item.file)))
537
+ .map((item) => ({ file: repoPath(root, item.file), specifier: item.specifier }));
538
+ const multiOwnerFiles = files.flatMap((file) => {
539
+ const fileOwners = projectIndex.exactOwnersForFile(file);
540
+ const uncoveredOwners = fileOwners.filter((item) => !barrelOwnerKeys.has(item.identity.key));
541
+ return fileOwners.length > 1 && uncoveredOwners.length > 0
542
+ ? [{ file, owners: fileOwners.map((item) => repoPath(root, item.identity.lexicalPath)).sort() }]
543
+ : [];
544
+ });
545
+ return {
546
+ owner: repoPath(root, owner.identity.lexicalPath),
547
+ files,
548
+ namespaceFiles,
549
+ dynamicFiles,
550
+ unresolved,
551
+ multiOwnerFiles
552
+ };
553
+ });
554
+ }
555
+ function buildModuleGraph(root, program) {
556
+ const resolved = new Map();
557
+ const unresolved = [];
558
+ for (const source of program.getSourceFiles()) {
559
+ if (!isInside(root, source.fileName) || source.isDeclarationFile) {
560
+ continue;
561
+ }
562
+ for (const specifier of collectModuleSpecifiers(source)) {
563
+ const target = resolveModule(program, source.fileName, specifier);
564
+ if (target) {
565
+ const targets = resolved.get(source.fileName) ?? new Set();
566
+ targets.add(path.resolve(target));
567
+ resolved.set(source.fileName, targets);
568
+ }
569
+ else if (specifier.startsWith(".") || specifier.startsWith("@")) {
570
+ unresolved.push({ file: source.fileName, specifier });
571
+ }
572
+ }
573
+ }
574
+ return { resolved, unresolved };
575
+ }
576
+ function reverseClosure(graph, seed) {
577
+ const result = new Set([path.resolve(seed)]);
578
+ let changed = true;
579
+ while (changed) {
580
+ changed = false;
581
+ for (const [from, targets] of graph) {
582
+ if (![...targets].some((target) => result.has(path.resolve(target))) || result.has(path.resolve(from))) {
583
+ continue;
584
+ }
585
+ result.add(path.resolve(from));
586
+ changed = true;
587
+ }
588
+ }
589
+ return result;
590
+ }
591
+ function collectAddedDiagnostics(root, sourceFile, afterText, owners, provider, leases, consumers, onOverlayBuilt) {
592
+ const added = [];
593
+ for (const owner of owners) {
594
+ const relevant = new Set([sourceFile, ...(consumers.find((item) => item.owner === repoPath(root, owner.identity.lexicalPath))?.files ?? [])]);
595
+ const baseline = leases.get(owner.identity.key).lease.program;
596
+ const overlay = provider.acquireProgram({
597
+ focusFile: sourceFile,
598
+ ownerConfig: owner.identity.lexicalPath,
599
+ overlays: [{ file: sourceFile, text: afterText }]
600
+ });
601
+ onOverlayBuilt();
602
+ try {
603
+ const before = diagnosticKeys(root, baseline, relevant);
604
+ for (const diagnostic of diagnosticsForFiles(root, overlay.program, relevant)) {
605
+ const key = diagnosticKey(root, diagnostic);
606
+ if (!before.has(key)) {
607
+ added.push({
608
+ owner: repoPath(root, owner.identity.lexicalPath),
609
+ file: diagnostic.file ? repoPath(root, diagnostic.file.fileName) : sourceFile,
610
+ code: diagnostic.code,
611
+ message: typescript_1.default.flattenDiagnosticMessageText(diagnostic.messageText, " ")
612
+ });
613
+ }
614
+ }
615
+ }
616
+ finally {
617
+ overlay.release();
618
+ }
619
+ }
620
+ return added.sort((left, right) => left.owner.localeCompare(right.owner) || left.file.localeCompare(right.file) || left.code - right.code);
621
+ }
622
+ function diagnosticsForFiles(root, program, files) {
623
+ return [...files].flatMap((file) => {
624
+ const source = program.getSourceFile(path.resolve(root, file));
625
+ return source ? [...program.getSyntacticDiagnostics(source), ...program.getSemanticDiagnostics(source)] : [];
626
+ });
627
+ }
628
+ function diagnosticKeys(root, program, files) {
629
+ return new Set(diagnosticsForFiles(root, program, files).map((item) => diagnosticKey(root, item)));
630
+ }
631
+ function diagnosticKey(root, diagnostic) {
632
+ return [
633
+ diagnostic.file ? repoPath(root, diagnostic.file.fileName) : "",
634
+ diagnostic.start ?? -1,
635
+ diagnostic.length ?? -1,
636
+ diagnostic.code,
637
+ typescript_1.default.flattenDiagnosticMessageText(diagnostic.messageText, " ")
638
+ ].join(":");
639
+ }
640
+ function collectStarSpecifiers(source) {
641
+ return source.statements.flatMap((statement) => typescript_1.default.isExportDeclaration(statement) && !statement.exportClause && statement.moduleSpecifier && typescript_1.default.isStringLiteralLike(statement.moduleSpecifier)
642
+ ? [statement.moduleSpecifier.text]
643
+ : []);
644
+ }
645
+ function collectModuleSpecifiers(source) {
646
+ const result = [];
647
+ const visit = (node) => {
648
+ if ((typescript_1.default.isImportDeclaration(node) || typescript_1.default.isExportDeclaration(node)) && node.moduleSpecifier && typescript_1.default.isStringLiteralLike(node.moduleSpecifier)) {
649
+ result.push(node.moduleSpecifier.text);
650
+ }
651
+ else if (typescript_1.default.isImportEqualsDeclaration(node) && typescript_1.default.isExternalModuleReference(node.moduleReference) && node.moduleReference.expression && typescript_1.default.isStringLiteralLike(node.moduleReference.expression)) {
652
+ result.push(node.moduleReference.expression.text);
653
+ }
654
+ else if (typescript_1.default.isCallExpression(node) && node.expression.kind === typescript_1.default.SyntaxKind.ImportKeyword && node.arguments[0] && typescript_1.default.isStringLiteralLike(node.arguments[0])) {
655
+ result.push(node.arguments[0].text);
656
+ }
657
+ else if (typescript_1.default.isCallExpression(node) && typescript_1.default.isIdentifier(node.expression) && node.expression.text === "require" && node.arguments[0] && typescript_1.default.isStringLiteralLike(node.arguments[0])) {
658
+ result.push(node.arguments[0].text);
659
+ }
660
+ typescript_1.default.forEachChild(node, visit);
661
+ };
662
+ visit(source);
663
+ return unique(result);
664
+ }
665
+ function hasNamespaceImportOf(source, target, program) {
666
+ if (!source)
667
+ return false;
668
+ let found = false;
669
+ const visit = (node) => {
670
+ const namespaceImport = typescript_1.default.isImportDeclaration(node) &&
671
+ Boolean(node.importClause?.namedBindings && typescript_1.default.isNamespaceImport(node.importClause.namedBindings)) &&
672
+ typescript_1.default.isStringLiteralLike(node.moduleSpecifier)
673
+ ? node.moduleSpecifier.text
674
+ : null;
675
+ const namespaceExport = typescript_1.default.isExportDeclaration(node) && node.exportClause && typescript_1.default.isNamespaceExport(node.exportClause) && node.moduleSpecifier && typescript_1.default.isStringLiteralLike(node.moduleSpecifier)
676
+ ? node.moduleSpecifier.text
677
+ : null;
678
+ const importEquals = typescript_1.default.isImportEqualsDeclaration(node) && typescript_1.default.isExternalModuleReference(node.moduleReference) && node.moduleReference.expression && typescript_1.default.isStringLiteralLike(node.moduleReference.expression)
679
+ ? node.moduleReference.expression.text
680
+ : null;
681
+ const requireCall = typescript_1.default.isCallExpression(node) && typescript_1.default.isIdentifier(node.expression) && node.expression.text === "require" && node.arguments[0] && typescript_1.default.isStringLiteralLike(node.arguments[0])
682
+ ? node.arguments[0].text
683
+ : null;
684
+ const specifier = namespaceImport ?? namespaceExport ?? importEquals ?? requireCall;
685
+ if (specifier && canonical(resolveModule(program, source.fileName, specifier)) === canonical(target))
686
+ found = true;
687
+ if (!found)
688
+ typescript_1.default.forEachChild(node, visit);
689
+ };
690
+ visit(source);
691
+ return found;
692
+ }
693
+ function hasDynamicImportOf(source, target, program) {
694
+ if (!source)
695
+ return false;
696
+ let found = false;
697
+ const visit = (node) => {
698
+ if (typescript_1.default.isCallExpression(node) && node.expression.kind === typescript_1.default.SyntaxKind.ImportKeyword && node.arguments[0] && typescript_1.default.isStringLiteralLike(node.arguments[0])) {
699
+ found ||= canonical(resolveModule(program, source.fileName, node.arguments[0].text)) === canonical(target);
700
+ }
701
+ if (!found)
702
+ typescript_1.default.forEachChild(node, visit);
703
+ };
704
+ visit(source);
705
+ return found;
706
+ }
707
+ function resolveModule(program, fromFile, specifier) {
708
+ return typescript_1.default.resolveModuleName(specifier, fromFile, program.getCompilerOptions(), typescript_1.default.sys).resolvedModule?.resolvedFileName ?? null;
709
+ }
710
+ function symbolIdentity(root, checker, symbol) {
711
+ const target = (symbol.flags & typescript_1.default.SymbolFlags.Alias) !== 0 ? safeAliasedSymbol(checker, symbol) : symbol;
712
+ const declaration = target.valueDeclaration ?? target.declarations?.[0];
713
+ if (!declaration)
714
+ return null;
715
+ const declarationFile = repoPath(root, declaration.getSourceFile().fileName);
716
+ const declarationStart = declaration.getStart(declaration.getSourceFile());
717
+ const declarationEnd = declaration.end;
718
+ return {
719
+ key: `${canonical(declarationFile)}:${declarationStart}:${declarationEnd}:${target.flags}`,
720
+ name: target.getName(),
721
+ declarationFile,
722
+ declarationStart,
723
+ declarationEnd,
724
+ flags: target.flags
725
+ };
726
+ }
727
+ function safeAliasedSymbol(checker, symbol) {
728
+ try {
729
+ return checker.getAliasedSymbol(symbol);
730
+ }
731
+ catch {
732
+ return symbol;
733
+ }
734
+ }
735
+ function isCommonJsSource(source, options) {
736
+ if (source.fileName.toLowerCase().endsWith(".cts"))
737
+ return true;
738
+ if (source.fileName.toLowerCase().endsWith(".mts"))
739
+ return false;
740
+ if (options.module === typescript_1.default.ModuleKind.CommonJS)
741
+ return true;
742
+ return source.impliedNodeFormat === typescript_1.default.ModuleKind.CommonJS;
743
+ }
744
+ function isPackageExportedBarrel(root, sourceFile, index) {
745
+ const pkg = index.packageForFile(sourceFile);
746
+ if (!pkg?.exports)
747
+ return false;
748
+ const relative = `./${path.relative(pkg.identity.lexicalPath, path.resolve(root, sourceFile)).replace(/\\/g, "/")}`;
749
+ const emitted = relative.replace(/\.(?:tsx?|mts|cts)$/i, (suffix) => suffix === ".mts" ? ".mjs" : suffix === ".cts" ? ".cjs" : ".js");
750
+ return collectJsonStrings(pkg.exports).some((value) => value === relative || value === emitted || value.endsWith(`/${path.basename(emitted)}`));
751
+ }
752
+ function collectJsonStrings(value) {
753
+ if (typeof value === "string")
754
+ return [value];
755
+ if (Array.isArray(value))
756
+ return value.flatMap(collectJsonStrings);
757
+ if (value && typeof value === "object")
758
+ return Object.values(value).flatMap(collectJsonStrings);
759
+ return [];
760
+ }
761
+ function isExposedRuntime(binding) {
762
+ return binding.exposed && !binding.shadowed && !binding.collision && !binding.isDefault && binding.exposure === "runtime";
763
+ }
764
+ function isExposedTypeOnly(binding) {
765
+ return binding.exposed && !binding.shadowed && !binding.collision && !binding.isDefault && binding.exposure === "typeOnly";
766
+ }
767
+ function renderExportName(name) {
768
+ return /^[$A-Z_a-z][$\w]*$/u.test(name) ? name : JSON.stringify(name);
769
+ }
770
+ function retainedReason(sourceFile, selector, code, reason) {
771
+ return { sourceFile, selector, code, reason };
772
+ }
773
+ function dedupeRetained(items) {
774
+ const map = new Map();
775
+ for (const item of items)
776
+ map.set(stableStringify(item), item);
777
+ return [...map.values()].sort((left, right) => left.selector.localeCompare(right.selector) || left.code.localeCompare(right.code));
778
+ }
779
+ function repoPath(root, file) {
780
+ const relative = path.relative(root, path.resolve(file));
781
+ return relative && !relative.startsWith("..") && !path.isAbsolute(relative)
782
+ ? relative.replace(/\\/g, "/")
783
+ : path.resolve(file).replace(/\\/g, "/");
784
+ }
785
+ function isInside(root, file) {
786
+ const relative = path.relative(root, path.resolve(file));
787
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
788
+ }
789
+ function canonical(file) {
790
+ return file ? path.resolve(file).replace(/\\/g, "/").toLowerCase() : "";
791
+ }
792
+ function unique(items) {
793
+ return [...new Set(items)];
794
+ }
795
+ function sha256(value) {
796
+ return crypto.createHash("sha256").update(value).digest("hex");
797
+ }
798
+ function stableStringify(value) {
799
+ if (value === null || typeof value !== "object")
800
+ return JSON.stringify(value);
801
+ if (Array.isArray(value))
802
+ return `[${value.map(stableStringify).join(",")}]`;
803
+ return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`).join(",")}}`;
804
+ }
805
+ function roundMs(value) {
806
+ return Math.round(value * 100) / 100;
807
+ }