@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
@@ -1,3 +1,92 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runInitSkillUsage=I;const f=require("./shared"),C=require("../shared/protocol");function a(e,n,t){const s=e[n];return s&&s.trim().length>0?s.trim():t}function w(e,n,t,s){const i=a(n,"ping","ping"),r=a(n,"printConfig","printConfig"),c=a(n,"inspect","inspect"),l=a(n,"imports","imports"),p=a(n,"move","move"),u=a(n,"rename","rename"),$=t.class??"c",d=t.interface??"i",m=t.function??"f",g=t.type??"t",o=s||"-";return["# aib skill usage","","Используй этот CLI, когда нужно взаимодействовать с живым IDE instance, а не читать код только через shell.","","## Базовая диагностика","",`- \`${e} ${i}\``,`- \`${e} ${r}\``,`- \`${e} listInstances\``,"","## Полезные операции","",`- Показать сущности файла: \`${e} ${c} file src/foo.ts\``,`- Найти importers файла/директории: \`${e} ${l} importers src/utils\``,`- Найти unused imports: \`${e} ${l} unused src/foo.ts\``,"","## Selector DSL","","Используй compact selectors для сущностей, когда это уместно.","",`- class: \`${$}${o}MyClass\``,`- interface: \`${d}${o}IMyClass\``,`- function: \`${m}${o}helper\``,`- type: \`${g}${o}UserShape\``,"","Если имя в рамках файла уникально, можно передавать selector без kind. Если возникает ambiguity, используй kind-prefix.","","## Move","","Preview:","","```powershell","@'",`{"sourceFile":"src/foo.ts","targetFile":"src/bar.ts","entities":["${$}${o}MyClass","${d}${o}IMyClass","${m}${o}helper"]}`,`'@ | ${e} ${p} toFile preview --stdin`,"```","","Execute:","","```powershell",`${e} ${p} toFile apply <previewId>`,"```","","## Rename","","```powershell","@'",'{"sourceFile":"src/foo.ts","renames":[{"entity":"MyClass","newName":"RenamedClass"},{"entity":"helper","newName":"renamedHelper"}]}',`'@ | ${e} ${u} preview --stdin`,`${e} ${u} apply <previewId>`,"```","","## Notes","","- Запускай CLI из директории проекта или передавай `--cwd`, чтобы корректно выбрался нужный IDE instance.","- Если открыто несколько IDE окон, сначала посмотри `listInstances` или используй `--instance`."].join(`
2
- `)}function y(e,n,t,s){return["# aib skill usage diagnostic","",`cliName: ${e}`,`selectorSeparator: ${JSON.stringify(s)}`,`methodAliases: ${JSON.stringify(n)}`,`entityKindAliases: ${JSON.stringify(t)}`,"","Diagnostic mode is intentionally compact. Full production output is in buildSkillMarkdownProd."].join(`
3
- `)}async function I(e){const{cwd:n,resolveOptions:t={},cliName:s="aib"}=e,i=await(0,f.resolveCompatibleTargetInstance)(n,C.CLI_COMMAND_IDS.initSkillUsage,t),r=await(0,f.fetchEffectiveConfig)(i.entry),c=y(s,r.methodAliases,r.entityKindAliases,r.selectorSeparator);return{ok:!0,selectedInstance:{instanceId:i.entry.instanceId,reason:i.reason,matchedWorkspace:i.matchedWorkspace,port:i.entry.port},cliName:s,effectiveConfig:r,markdown:c}}
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runInitSkillUsage = runInitSkillUsage;
4
+ const resolve_1 = require("../config/resolve");
5
+ function getCommandName(methodAliases, canonicalName, fallbackName) {
6
+ const aliasName = methodAliases[canonicalName];
7
+ return aliasName && aliasName.trim().length > 0 ? aliasName.trim() : fallbackName;
8
+ }
9
+ function buildSkillMarkdownProd(cliName, methodAliases, entityKindAliases, selectorSeparator) {
10
+ const printConfigCommand = getCommandName(methodAliases, "printConfig", "printConfig");
11
+ const inspectCommand = getCommandName(methodAliases, "inspect", "inspect");
12
+ const importsCommand = getCommandName(methodAliases, "imports", "imports");
13
+ const mutateCommand = getCommandName(methodAliases, "mutate", "mutate");
14
+ const classAlias = entityKindAliases.class ?? "c";
15
+ const interfaceAlias = entityKindAliases.interface ?? "i";
16
+ const functionAlias = entityKindAliases.function ?? "f";
17
+ const typeAlias = entityKindAliases.type ?? "t";
18
+ const join = selectorSeparator || "-";
19
+ return [
20
+ "# aib skill usage",
21
+ "",
22
+ "Используй этот CLI для анализа и изменения TypeScript/JavaScript workspace.",
23
+ "",
24
+ "## Базовая диагностика",
25
+ "",
26
+ `- \`${cliName} ${printConfigCommand}\``,
27
+ `- \`${cliName} doctor\``,
28
+ "",
29
+ "## Полезные операции",
30
+ "",
31
+ `- Показать сущности файла: \`${cliName} ${inspectCommand} file src/foo.ts\``,
32
+ `- Найти importers файла/директории: \`${cliName} ${importsCommand} importers src/utils\``,
33
+ `- Найти unused imports: \`${cliName} ${importsCommand} unused src/foo.ts\``,
34
+ "",
35
+ "## Selector DSL",
36
+ "",
37
+ "Используй compact selectors для сущностей, когда это уместно.",
38
+ "",
39
+ `- class: \`${classAlias}${join}MyClass\``,
40
+ `- interface: \`${interfaceAlias}${join}IMyClass\``,
41
+ `- function: \`${functionAlias}${join}helper\``,
42
+ `- type: \`${typeAlias}${join}UserShape\``,
43
+ "",
44
+ "Если имя в рамках файла уникально, можно передавать selector без kind. Если возникает ambiguity, используй kind-prefix.",
45
+ "",
46
+ "## Mutate",
47
+ "",
48
+ "Preview:",
49
+ "",
50
+ "```powershell",
51
+ `@'`,
52
+ "@source src/foo.ts",
53
+ `move src/bar.ts: ${classAlias}${join}MyClass ${interfaceAlias}${join}IMyClass ${functionAlias}${join}helper`,
54
+ "rename OldName->NewName",
55
+ `'@ | ${cliName} ${mutateCommand} preview --stdin`,
56
+ "```",
57
+ "",
58
+ "Apply:",
59
+ "",
60
+ "```powershell",
61
+ `${cliName} ${mutateCommand} apply <previewId>`,
62
+ "```",
63
+ "",
64
+ "## Notes",
65
+ "",
66
+ "- Запускай CLI из директории проекта или передавай `--cwd`, чтобы корректно определился workspace.",
67
+ "- Для долгой серии команд создай CLI session один раз и переиспользуй её."
68
+ ].join("\n");
69
+ }
70
+ function buildSkillMarkdown(cliName, methodAliases, entityKindAliases, selectorSeparator) {
71
+ return [
72
+ "# aib skill usage diagnostic",
73
+ "",
74
+ `cliName: ${cliName}`,
75
+ `selectorSeparator: ${JSON.stringify(selectorSeparator)}`,
76
+ `methodAliases: ${JSON.stringify(methodAliases)}`,
77
+ `entityKindAliases: ${JSON.stringify(entityKindAliases)}`,
78
+ "",
79
+ "Diagnostic mode is intentionally compact. Full production output is in buildSkillMarkdownProd."
80
+ ].join("\n");
81
+ }
82
+ async function runInitSkillUsage(options) {
83
+ const { cliName = "aib" } = options;
84
+ const effectiveConfig = (0, resolve_1.resolveCliConfig)(null);
85
+ const markdown = buildSkillMarkdown(cliName, effectiveConfig.methodAliases, effectiveConfig.entityKindAliases, effectiveConfig.selectorSeparator);
86
+ return {
87
+ ok: true,
88
+ cliName,
89
+ effectiveConfig,
90
+ markdown
91
+ };
92
+ }
@@ -1 +1,30 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runInitWorkspace=_;const i=require("../shared/errors"),s=require("../shared/agent-text"),c=require("../config/workspace-root"),u=require("./config-output"),a=require("./config-command");function _(e,r){const t=p(r),n=(0,c.initWorkspaceRoot)(e,t);return(0,s.attachAgentText)(n,(0,u.formatInitText)((0,a.readConfigTextInput)(e),String(n.status??"created")))}function p(e){const r={};for(let t=0;t<e.length;t+=1){if(e[t]==="--session-dir"){const o=e[t+1];if(!o||o.startsWith("--"))throw new i.CliError("MISSING_FLAG_VALUE","Expected a value after --session-dir.");r.sessionDir=o,t+=1;continue}throw new i.CliError("INIT_USAGE","Usage: aib init [--session-dir .tmp/aib]")}return r}
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runInitWorkspace = runInitWorkspace;
4
+ const errors_1 = require("../shared/errors");
5
+ const agent_text_1 = require("../shared/agent-text");
6
+ const workspace_root_1 = require("../config/workspace-root");
7
+ const config_output_1 = require("./config-output");
8
+ const config_command_1 = require("./config-command");
9
+ function runInitWorkspace(cwd, restArgs) {
10
+ const options = parseInitArgs(restArgs);
11
+ const result = (0, workspace_root_1.initWorkspaceRoot)(cwd, options);
12
+ return (0, agent_text_1.attachAgentText)(result, (0, config_output_1.formatInitText)((0, config_command_1.readConfigTextInput)(cwd), String(result.status ?? "created")));
13
+ }
14
+ function parseInitArgs(args) {
15
+ const options = {};
16
+ for (let index = 0; index < args.length; index += 1) {
17
+ const current = args[index];
18
+ if (current === "--session-dir") {
19
+ const next = args[index + 1];
20
+ if (!next || next.startsWith("--")) {
21
+ throw new errors_1.CliError("MISSING_FLAG_VALUE", "Expected a value after --session-dir.");
22
+ }
23
+ options.sessionDir = next;
24
+ index += 1;
25
+ continue;
26
+ }
27
+ throw new errors_1.CliError("INIT_USAGE", "Usage: aib init [--session-dir .tmp/aib]");
28
+ }
29
+ return options;
30
+ }
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isInspectAliasCandidatesRequest = isInspectAliasCandidatesRequest;
37
+ exports.runInspectAliasCandidates = runInspectAliasCandidates;
38
+ exports.buildInspectAliasCandidatesResult = buildInspectAliasCandidatesResult;
39
+ exports.formatAliasCandidatesResponse = formatAliasCandidatesResponse;
40
+ const fs = __importStar(require("node:fs"));
41
+ const path = __importStar(require("node:path"));
42
+ const agent_text_1 = require("../shared/agent-text");
43
+ const errors_1 = require("../shared/errors");
44
+ const path_display_1 = require("../config/path-display");
45
+ const session_workspace_1 = require("./session-workspace");
46
+ const analyze_1 = require("../alias-advisor/analyze");
47
+ const lexical_1 = require("../alias-advisor/lexical");
48
+ const DEFAULT_LIMIT = 12;
49
+ const DEFAULT_MIN_IMPORTS = 2;
50
+ const DEFAULT_MIN_FILES = 1;
51
+ function isInspectAliasCandidatesRequest(restArgs, stdinPayload) {
52
+ if (restArgs[0] === "aliasCandidates" || restArgs[0] === "alias-candidates") {
53
+ return true;
54
+ }
55
+ if (!restArgs.includes("--stdin") || !isObject(stdinPayload)) {
56
+ return false;
57
+ }
58
+ const requests = expandAliasPayloadRequests(stdinPayload);
59
+ return requests.length > 0 && requests.some((request) => isAliasCandidatesOp(readString(request.op)));
60
+ }
61
+ function runInspectAliasCandidates(cwd, restArgs, stdinPayload) {
62
+ const aliases = (0, path_display_1.buildDisplayPathAliases)(cwd, (0, session_workspace_1.readEffectiveSessionPathAliases)(cwd));
63
+ const requests = buildAliasCandidateRequests(cwd, restArgs, stdinPayload, aliases);
64
+ const results = requests.map((request) => runAliasCandidateRequest(cwd, request, aliases));
65
+ const response = buildAliasCandidateResponse(results);
66
+ return (0, agent_text_1.attachAgentText)(response, formatAliasCandidatesResponse(response));
67
+ }
68
+ function buildInspectAliasCandidatesResult(cwd, input) {
69
+ const aliases = (0, path_display_1.buildDisplayPathAliases)(cwd, (0, session_workspace_1.readEffectiveSessionPathAliases)(cwd));
70
+ const partial = {
71
+ scope: input.scope,
72
+ include: input.include ?? [],
73
+ exclude: input.exclude ?? []
74
+ };
75
+ if (input.displayScope !== undefined) {
76
+ partial.displayScope = input.displayScope;
77
+ }
78
+ if (input.limit !== undefined) {
79
+ partial.limit = input.limit;
80
+ }
81
+ if (input.minImports !== undefined) {
82
+ partial.minImports = input.minImports;
83
+ }
84
+ if (input.minFiles !== undefined) {
85
+ partial.minFiles = input.minFiles;
86
+ }
87
+ if (input.detail !== undefined) {
88
+ partial.detail = input.detail;
89
+ }
90
+ if (input.candidate !== undefined) {
91
+ partial.candidate = input.candidate;
92
+ }
93
+ const request = finalizeAliasCandidateRequest(cwd, partial, aliases);
94
+ return runAliasCandidateRequest(cwd, request, aliases);
95
+ }
96
+ function formatAliasCandidatesResponse(response) {
97
+ if (Array.isArray(response.results)) {
98
+ const chunks = response.results
99
+ .filter(isObject)
100
+ .map((item) => formatAliasCandidatesResponse(item))
101
+ .filter((item) => typeof item === "string" && item.length > 0);
102
+ return chunks.length > 0 ? chunks.join("\n\n") : null;
103
+ }
104
+ if (response.ok === false) {
105
+ return [`alias candidates errors:`, `${String(response.scope ?? "")}: ${String(response.error ?? "failed")}`].join("\n");
106
+ }
107
+ const scope = readString(response.scope) ?? "";
108
+ const lines = [`alias advisor ${scope}`.trim()];
109
+ lines.push(`mode: ${readString(response.mode) ?? "topology-aware-advisor"}`);
110
+ const ranking = isObject(response.ranking) ? response.ranking : {};
111
+ const estimator = isObject(ranking.estimatorProfile) ? ranking.estimatorProfile : {};
112
+ lines.push(`ranking: ${readString(ranking.policyVersion) ?? "alias-ranking-v2-text-primary"}; exact text primary; ${readString(estimator.id) ?? "path-lexical-v1"} secondary, not billing`);
113
+ const evidenceFilter = isObject(response.evidenceFilter) ? response.evidenceFilter : {};
114
+ const decisionPolicy = isObject(response.decisionPolicy) ? response.decisionPolicy : {};
115
+ lines.push(`policy: evidence >=${readNumber(evidenceFilter.minImports)} imports/${readNumber(evidenceFilter.minFiles)} files; decision >=${readNumber(decisionPolicy.minImports)}/${readNumber(decisionPolicy.minFiles)}, exact text net >=${readNumber(decisionPolicy.materialNetCharacters)} chars`);
116
+ lines.push(`analyzed: ${readNumber(response.analyzedSpecifiers)} import specifiers, ${readNumber(response.analyzedFiles)} files`);
117
+ const topology = isObject(response.topology) ? response.topology : {};
118
+ lines.push(topology.available === true
119
+ ? `topology: ${readNumber(topology.tsconfigs)} tsconfigs, ${readNumber(topology.packages)} packages, dependencies ${readString(topology.dependencyState) ?? "unknown"}`
120
+ : "topology: unavailable; evidence is fail-closed");
121
+ const timings = isObject(response.timings) ? response.timings : {};
122
+ if (typeof timings.totalMs === "number") {
123
+ lines.push(`time: ${timings.totalMs}ms (lexical ${readNumber(timings.lexicalMs)}, topology ${readNumber(timings.topologyMs)}, resolution ${readNumber(timings.resolutionMs)})`);
124
+ }
125
+ const candidates = readObjectArray(response.candidates);
126
+ if (candidates.length === 0) {
127
+ lines.push("");
128
+ lines.push("no alias evidence matched thresholds");
129
+ lines.push("recommendation: none; current aliases are adequate under the provisional policy");
130
+ return lines.join("\n");
131
+ }
132
+ const categoryCounts = isObject(ranking.categoryCounts) ? ranking.categoryCounts : {};
133
+ if (readNumber(categoryCounts.recommended) === 0) {
134
+ lines.push(readNumber(categoryCounts.review) + readNumber(categoryCounts.optional) > 0
135
+ ? "recommendation: no confident recommendation; review candidates available"
136
+ : "recommendation: none; no eligible candidate passed M2 gates");
137
+ }
138
+ const outputLimit = response.candidate ? 6 : 5;
139
+ const displayedCandidates = candidates.slice(0, outputLimit);
140
+ const groups = [
141
+ ["recommended", displayedCandidates.filter((candidate) => readRankingCategory(candidate) === "recommended")],
142
+ ["review", displayedCandidates.filter((candidate) => readRankingCategory(candidate) === "review")],
143
+ ["optional", displayedCandidates.filter((candidate) => readRankingCategory(candidate) === "optional")],
144
+ ["rejected evidence", displayedCandidates.filter((candidate) => readRankingCategory(candidate) === "rejected")]
145
+ ];
146
+ for (const [label, items] of groups) {
147
+ if (items.length === 0) {
148
+ continue;
149
+ }
150
+ lines.push("");
151
+ lines.push(`${label}:`);
152
+ for (const candidate of items) {
153
+ appendAdvisorCandidate(lines, candidate, response.detail === "examples" || Boolean(response.candidate));
154
+ }
155
+ }
156
+ const hidden = readNumber(response.hiddenCandidates) + Math.max(0, candidates.length - displayedCandidates.length);
157
+ if (hidden > 0) {
158
+ lines.push("");
159
+ lines.push(`+ ${hidden} more candidates available in JSON`);
160
+ }
161
+ return lines.join("\n");
162
+ }
163
+ function buildAliasCandidateRequests(cwd, restArgs, stdinPayload, aliases) {
164
+ if (restArgs[0] === "aliasCandidates" || restArgs[0] === "alias-candidates") {
165
+ return aliasRequestsFromArgs(cwd, restArgs.slice(1), aliases);
166
+ }
167
+ if (!restArgs.includes("--stdin") || !isObject(stdinPayload)) {
168
+ throw aliasScopeRequiredError();
169
+ }
170
+ const rawRequests = expandAliasPayloadRequests(stdinPayload);
171
+ if (rawRequests.some((request) => !isAliasCandidatesOp(readString(request.op)))) {
172
+ throw new errors_1.CliError("INSPECT_ALIAS_CANDIDATES_MIXED_BATCH_UNSUPPORTED", "inspect aliasCandidates --stdin expects only aliasCandidates requests.");
173
+ }
174
+ return rawRequests.map((request, index) => aliasRequestFromObject(cwd, request, index, aliases));
175
+ }
176
+ function aliasRequestsFromArgs(cwd, args, aliases) {
177
+ const positionals = args.filter((arg) => !arg.startsWith("--") && !isFlagValue(args, arg));
178
+ if (positionals.length === 0) {
179
+ throw aliasScopeRequiredError();
180
+ }
181
+ const options = {
182
+ limit: readPositiveIntegerFlag(args, "--limit"),
183
+ minImports: readPositiveIntegerFlag(args, "--min-imports") ?? readPositiveIntegerFlag(args, "--minImports"),
184
+ minFiles: readPositiveIntegerFlag(args, "--min-files") ?? readPositiveIntegerFlag(args, "--minFiles"),
185
+ detail: readFlagValue(args, "--detail"),
186
+ candidate: readFlagValue(args, "--candidate"),
187
+ include: readFlagValues(args, "--include"),
188
+ exclude: readFlagValues(args, "--exclude")
189
+ };
190
+ return positionals.map((scope) => finalizeAliasCandidateRequest(cwd, {
191
+ scope,
192
+ ...options
193
+ }, aliases));
194
+ }
195
+ function aliasRequestFromObject(cwd, raw, index, aliases) {
196
+ const scope = readString(raw.scope) ?? readString(raw.dir) ?? readString(raw.directory);
197
+ if (!scope) {
198
+ throw new errors_1.CliError("INSPECT_ALIAS_CANDIDATES_SCOPE_REQUIRED", `Inspect aliasCandidates request at index ${index} expects a directory scope.`);
199
+ }
200
+ return finalizeAliasCandidateRequest(cwd, {
201
+ scope,
202
+ limit: readPositiveInteger(raw.limit),
203
+ minImports: readPositiveInteger(raw.minImports) ?? readPositiveInteger(raw.min_imports),
204
+ minFiles: readPositiveInteger(raw.minFiles) ?? readPositiveInteger(raw.min_files),
205
+ detail: readString(raw.detail),
206
+ candidate: readString(raw.candidate),
207
+ include: readStringArray(raw.include) ?? readStringArray(raw.only) ?? [],
208
+ exclude: readStringArray(raw.exclude) ?? readStringArray(raw.excludes) ?? []
209
+ }, aliases);
210
+ }
211
+ function finalizeAliasCandidateRequest(cwd, partial, aliases) {
212
+ const scope = resolveCliPath(cwd, partial.scope);
213
+ const detail = partial.detail === "examples" ? "examples" : "sum";
214
+ return {
215
+ scope,
216
+ displayScope: partial.displayScope ?? (0, path_display_1.compactDisplayPath)(cwd, scope, aliases),
217
+ limit: partial.limit ?? DEFAULT_LIMIT,
218
+ minImports: partial.minImports ?? DEFAULT_MIN_IMPORTS,
219
+ minFiles: partial.minFiles ?? DEFAULT_MIN_FILES,
220
+ detail,
221
+ ...(partial.candidate ? { candidate: partial.candidate } : {}),
222
+ include: partial.include,
223
+ exclude: partial.exclude
224
+ };
225
+ }
226
+ function runAliasCandidateRequest(cwd, request, aliases) {
227
+ const scopeStat = safeStat(request.scope);
228
+ if (!scopeStat) {
229
+ return aliasErrorResult(request, "pathNotFound", "path was not found");
230
+ }
231
+ if (!scopeStat.isDirectory()) {
232
+ return aliasErrorResult(request, "notDirectory", "scope is not a directory");
233
+ }
234
+ const lexical = (0, lexical_1.collectAliasLexicalEvidence)({
235
+ cwd,
236
+ scope: request.scope,
237
+ aliases,
238
+ include: request.include,
239
+ exclude: request.exclude,
240
+ minImports: request.minImports,
241
+ minFiles: request.minFiles
242
+ });
243
+ return JSON.parse(JSON.stringify((0, analyze_1.analyzeAliasAdvisor)({
244
+ cwd,
245
+ request: {
246
+ ...request,
247
+ displayScope: request.displayScope ?? (0, path_display_1.compactDisplayPath)(cwd, request.scope, aliases)
248
+ },
249
+ analyzedFiles: lexical.files.length,
250
+ analyzedSpecifiers: lexical.occurrences.length,
251
+ lexicalEvidence: lexical.evidence,
252
+ lexicalMs: lexical.elapsedMs
253
+ })));
254
+ }
255
+ function appendAdvisorCandidate(lines, candidate, showExamples) {
256
+ const alias = readString(candidate.alias) ?? "<alias>";
257
+ const target = readString(candidate.targetPattern) ?? "unresolved target";
258
+ lines.push(`- ${alias} -> ${target}`);
259
+ const coverage = isObject(candidate.coverage) ? candidate.coverage : {};
260
+ lines.push(` coverage: ${readNumber(coverage.imports)} imports, ${readNumber(coverage.files)} files, ${readNumber(coverage.resolvedInternal)} internal resolved`);
261
+ const tokenCost = isObject(candidate.tokenCost) ? candidate.tokenCost : {};
262
+ const oneTime = isObject(tokenCost.oneTimeConfigTokenCost) ? tokenCost.oneTimeConfigTokenCost : {};
263
+ const payback = typeof tokenCost.paybackOccurrences === "number" ? String(tokenCost.paybackOccurrences) : "n/a";
264
+ lines.push(` tokens est: source ${formatSigned(readNumber(tokenCost.sourceTokenDelta))}, config -${readNumber(oneTime.total)}, net ${formatSigned(readNumber(tokenCost.netTokenSaving))}, payback ${payback} imports`);
265
+ const overlap = isObject(candidate.overlap) ? candidate.overlap : {};
266
+ const dominatedBy = readString(overlap.dominatedBy);
267
+ lines.push(` overlap: ${readNumber(overlap.exclusiveImports)} exclusive, ${readNumber(overlap.marginalImports)} marginal, marginal net ${formatSigned(readNumber(overlap.marginalTokenSaving))}${dominatedBy ? `, dominated by ${dominatedBy}` : ""}`);
268
+ const conflicts = readObjectArray(candidate.conflicts);
269
+ for (const conflict of conflicts.slice(0, showExamples ? 5 : 2)) {
270
+ lines.push(` conflict ${readString(conflict.code) ?? "unknown"}: ${readString(conflict.message) ?? "blocked"}`);
271
+ }
272
+ if (showExamples) {
273
+ const configs = readObjectArray(candidate.applicableTsconfigs);
274
+ if (configs.length > 0) {
275
+ lines.push(` tsconfigs: ${configs.map((item) => readString(item.tsconfig)).filter(Boolean).join(", ")}`);
276
+ }
277
+ }
278
+ if (!showExamples) {
279
+ return;
280
+ }
281
+ const examples = readObjectArray(candidate.examples);
282
+ if (examples.length === 0) {
283
+ return;
284
+ }
285
+ lines.push(" examples:");
286
+ for (const example of examples.slice(0, 6)) {
287
+ const from = readString(example.from) ?? "";
288
+ const to = readString(example.to);
289
+ lines.push(` ${readString(example.importer) ?? ""}`);
290
+ lines.push(` "${from}"${to ? ` -> "${to}"` : ""}`);
291
+ }
292
+ }
293
+ function readRankingCategory(candidate) {
294
+ return isObject(candidate.ranking) ? readString(candidate.ranking.category) ?? "rejected" : "rejected";
295
+ }
296
+ function formatSigned(value) {
297
+ return value > 0 ? `+${value}` : String(value);
298
+ }
299
+ function buildAliasCandidateResponse(results) {
300
+ const failures = results.filter(isAliasCandidateErrorResult);
301
+ const successes = results.filter((result) => !isAliasCandidateErrorResult(result));
302
+ if (results.length === 1 && failures.length === 0) {
303
+ return successes[0];
304
+ }
305
+ if (results.length === 1 && failures.length === 1) {
306
+ return failures[0];
307
+ }
308
+ return {
309
+ ...(successes.length === 0 ? { ok: false } : { ok: failures.length === 0 }),
310
+ op: "aliasCandidates",
311
+ results
312
+ };
313
+ }
314
+ function aliasErrorResult(request, errorKind, error) {
315
+ return {
316
+ ok: false,
317
+ op: "aliasCandidates",
318
+ scope: request.displayScope ?? request.scope,
319
+ errorKind,
320
+ error
321
+ };
322
+ }
323
+ function isAliasCandidateErrorResult(value) {
324
+ return isObject(value) && value.ok === false && value.op === "aliasCandidates" && typeof value.errorKind === "string";
325
+ }
326
+ function isAliasCandidatesOp(value) {
327
+ return value === "aliasCandidates" || value === "alias-candidates";
328
+ }
329
+ function expandAliasPayloadRequests(payload) {
330
+ if (Array.isArray(payload.requests)) {
331
+ return payload.requests.filter(isObject);
332
+ }
333
+ return [payload];
334
+ }
335
+ function aliasScopeRequiredError() {
336
+ return new errors_1.CliError("INSPECT_ALIAS_CANDIDATES_SCOPE_REQUIRED", "inspect aliasCandidates expects a directory scope.");
337
+ }
338
+ function safeStat(filePath) {
339
+ try {
340
+ return fs.statSync(filePath);
341
+ }
342
+ catch {
343
+ return null;
344
+ }
345
+ }
346
+ function resolveCliPath(cwd, filePath) {
347
+ return path.normalize(path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath));
348
+ }
349
+ function readFlagValue(args, flag) {
350
+ const inlinePrefix = `${flag}=`;
351
+ const inline = args.find((arg) => arg.startsWith(inlinePrefix));
352
+ if (inline) {
353
+ return inline.slice(inlinePrefix.length) || null;
354
+ }
355
+ const index = args.indexOf(flag);
356
+ if (index < 0) {
357
+ return null;
358
+ }
359
+ const value = args[index + 1];
360
+ return value && !value.startsWith("--") ? value : null;
361
+ }
362
+ function readFlagValues(args, flag) {
363
+ const values = [];
364
+ const inlinePrefix = `${flag}=`;
365
+ for (let index = 0; index < args.length; index += 1) {
366
+ const inline = args[index];
367
+ if (inline?.startsWith(inlinePrefix)) {
368
+ values.push(...inline.slice(inlinePrefix.length).split(",").map((item) => item.trim()).filter(Boolean));
369
+ continue;
370
+ }
371
+ if (args[index] !== flag) {
372
+ continue;
373
+ }
374
+ const value = args[index + 1];
375
+ if (value && !value.startsWith("--")) {
376
+ values.push(...value.split(",").map((item) => item.trim()).filter(Boolean));
377
+ index += 1;
378
+ }
379
+ }
380
+ return values;
381
+ }
382
+ function isFlagValue(args, value) {
383
+ const index = args.indexOf(value);
384
+ return index > 0 && args[index - 1]?.startsWith("--") === true && !args[index - 1]?.includes("=");
385
+ }
386
+ function readPositiveIntegerFlag(args, flag) {
387
+ return readPositiveInteger(readFlagValue(args, flag));
388
+ }
389
+ function readPositiveInteger(value) {
390
+ const parsed = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
391
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
392
+ }
393
+ function readNumber(value) {
394
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
395
+ }
396
+ function readString(value) {
397
+ return typeof value === "string" && value.length > 0 ? value : null;
398
+ }
399
+ function readStringArray(value) {
400
+ if (typeof value === "string" && value.length > 0) {
401
+ return value.split(",").map((item) => item.trim()).filter(Boolean);
402
+ }
403
+ if (!Array.isArray(value)) {
404
+ return null;
405
+ }
406
+ return value.filter((item) => typeof item === "string" && item.length > 0);
407
+ }
408
+ function readObjectArray(value) {
409
+ return Array.isArray(value) ? value.filter(isObject) : [];
410
+ }
411
+ function isObject(value) {
412
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
413
+ }