@automaton-labs/aib 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (586) hide show
  1. package/README.md +36 -257
  2. package/config/agent-dx-policy.default.json +31 -0
  3. package/config/control-plane-client.default.json +3 -0
  4. package/dist/agent-dx/agent-dx.js +805 -0
  5. package/dist/agent-dx/presentation.js +32 -0
  6. package/dist/alias-advisor/analyze.js +982 -0
  7. package/dist/alias-advisor/exact-text-cost.js +74 -0
  8. package/dist/alias-advisor/lexical.js +240 -0
  9. package/dist/alias-advisor/model.js +2 -0
  10. package/dist/alias-advisor/path-identity.js +49 -0
  11. package/dist/alias-advisor/ranking.js +171 -0
  12. package/dist/alias-advisor/token-estimator.js +85 -0
  13. package/dist/bin/aib.js +5 -1
  14. package/dist/bin/cli.js +811 -2
  15. package/dist/commands/add-missing-imports-preview-cache.js +99 -2
  16. package/dist/commands/add-missing-imports.js +241 -2
  17. package/dist/commands/apply-module-plan.js +1319 -3
  18. package/dist/commands/background-command.js +378 -0
  19. package/dist/commands/captured-input.js +74 -2
  20. package/dist/commands/config-command.js +314 -2
  21. package/dist/commands/config-output.js +357 -10
  22. package/dist/commands/control-plane-command.js +183 -0
  23. package/dist/commands/declaration-command.js +1209 -0
  24. package/dist/commands/declaration-execution-cache.js +79 -0
  25. package/dist/commands/declaration-format.js +221 -0
  26. package/dist/commands/declaration-preview-cache.js +114 -0
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -2
  29. package/dist/commands/execution-command.js +117 -1
  30. package/dist/commands/exports-star-collapse-command.js +178 -0
  31. package/dist/commands/exports-star-command.js +252 -0
  32. package/dist/commands/exports-star-preview-cache.js +84 -0
  33. package/dist/commands/feedback-command.js +176 -3
  34. package/dist/commands/file-move-to-dir-execution-cache.js +92 -0
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -0
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -0
  38. package/dist/commands/file-mutation-runtime.js +102 -0
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -0
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -0
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -0
  44. package/dist/commands/file-rename-execution-cache.js +92 -0
  45. package/dist/commands/file-rename-preview-cache.js +125 -0
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -0
  48. package/dist/commands/file-text-edit-executor.js +205 -0
  49. package/dist/commands/find-importers.js +52 -1
  50. package/dist/commands/find-unused-imports.js +55 -1
  51. package/dist/commands/generate-docs-command.js +244 -6
  52. package/dist/commands/help-command.js +460 -7
  53. package/dist/commands/import-specifier-policy.js +391 -0
  54. package/dist/commands/imports-command.js +68 -1
  55. package/dist/commands/imports-rebase.js +1138 -0
  56. package/dist/commands/init-skill-usage.js +92 -3
  57. package/dist/commands/init-workspace.js +30 -1
  58. package/dist/commands/inspect-alias-candidates.js +413 -0
  59. package/dist/commands/inspect-cycles.js +811 -5
  60. package/dist/commands/inspect-direct-usages.js +98 -0
  61. package/dist/commands/inspect-duplicates-format.js +229 -0
  62. package/dist/commands/inspect-format-primitives.js +127 -0
  63. package/dist/commands/inspect-format.js +1590 -18
  64. package/dist/commands/inspect-graph.js +1553 -9
  65. package/dist/commands/inspect-imports.js +339 -2
  66. package/dist/commands/inspect-mixed-format.js +524 -0
  67. package/dist/commands/inspect-module-plan-format.js +216 -0
  68. package/dist/commands/inspect-module-plan-serialization.js +402 -0
  69. package/dist/commands/inspect-reference-path-format.js +157 -0
  70. package/dist/commands/inspect-request-values.js +599 -0
  71. package/dist/commands/inspect-selector-kind.js +21 -0
  72. package/dist/commands/inspect-selector.js +50 -0
  73. package/dist/commands/inspect-symbol-format.js +90 -0
  74. package/dist/commands/inspect-topology.js +435 -0
  75. package/dist/commands/inspect-tree.js +827 -5
  76. package/dist/commands/inspect-usages-detail.js +793 -0
  77. package/dist/commands/inspect-usages-evidence.js +31 -0
  78. package/dist/commands/inspect-usages-format.js +367 -0
  79. package/dist/commands/inspect.js +1450 -16
  80. package/dist/commands/internal-command.js +64 -0
  81. package/dist/commands/json-file-input.js +60 -1
  82. package/dist/commands/module-plan-cache.js +156 -2
  83. package/dist/commands/module-plan-standalone.js +208 -0
  84. package/dist/commands/module-plan-timeout.js +77 -1
  85. package/dist/commands/move-preview-cache.js +101 -2
  86. package/dist/commands/mutate-aggregate-output.js +996 -0
  87. package/dist/commands/mutate-child-execution.js +374 -0
  88. package/dist/commands/mutate-command.js +1394 -0
  89. package/dist/commands/mutate-declaration-output.js +313 -0
  90. package/dist/commands/mutate-domain-adapters.js +638 -0
  91. package/dist/commands/mutate-execution-cache.js +114 -0
  92. package/dist/commands/mutate-execution-status.js +598 -0
  93. package/dist/commands/mutate-failure-output.js +531 -0
  94. package/dist/commands/mutate-file-view.js +151 -0
  95. package/dist/commands/mutate-object-output.js +91 -0
  96. package/dist/commands/mutate-output-values.js +97 -0
  97. package/dist/commands/mutate-preview-cache.js +86 -0
  98. package/dist/commands/mutate-response-replay.js +153 -0
  99. package/dist/commands/mutate-result-projection.js +818 -0
  100. package/dist/commands/mutation-eta.js +28 -0
  101. package/dist/commands/mutation-execution-cache.js +140 -3
  102. package/dist/commands/mutation-recovery-journal.js +195 -0
  103. package/dist/commands/normalize-imports.js +1120 -4
  104. package/dist/commands/object-pack-command.js +546 -0
  105. package/dist/commands/object-pack-preview-cache.js +88 -0
  106. package/dist/commands/observability-command.js +47 -3
  107. package/dist/commands/ota-command.js +403 -0
  108. package/dist/commands/print-config.js +10 -1
  109. package/dist/commands/quick-read.js +1113 -11
  110. package/dist/commands/refactor-batch-builder.js +265 -1
  111. package/dist/commands/refactor-batch-execution-cache.js +85 -1
  112. package/dist/commands/refactor-batch-preview-cache.js +96 -2
  113. package/dist/commands/refactor-batch.js +461 -4
  114. package/dist/commands/rename-entities.js +794 -4
  115. package/dist/commands/rename-execution-cache.js +49 -1
  116. package/dist/commands/rename-input.js +22 -1
  117. package/dist/commands/rename-polling-policy.js +68 -0
  118. package/dist/commands/rename-preview-cache.js +96 -2
  119. package/dist/commands/result-view.js +993 -6
  120. package/dist/commands/reveal-command.js +445 -5
  121. package/dist/commands/selector-suggestions.js +93 -0
  122. package/dist/commands/session-workspace.js +1836 -31
  123. package/dist/commands/shared.js +2 -1
  124. package/dist/commands/skills-command.js +315 -0
  125. package/dist/commands/sync-command.js +59 -2
  126. package/dist/commands/worker-command.js +173 -0
  127. package/dist/commands/workspace-cache.js +55 -1
  128. package/dist/config/defaults.js +26 -1
  129. package/dist/config/env-vars.js +77 -1
  130. package/dist/config/glob-match.js +44 -1
  131. package/dist/config/import-rules.js +165 -1
  132. package/dist/config/local-config.js +293 -3
  133. package/dist/config/mutation-comments.js +51 -1
  134. package/dist/config/path-aliases.js +165 -1
  135. package/dist/config/path-display.js +84 -1
  136. package/dist/config/product-storage.js +37 -1
  137. package/dist/config/request-env.js +21 -0
  138. package/dist/config/request-routing-context.js +23 -0
  139. package/dist/config/resolve-command-alias.js +74 -1
  140. package/dist/config/resolve.js +24 -1
  141. package/dist/config/tsconfig-discovery.js +113 -1
  142. package/dist/config/typescript-preferences.js +131 -0
  143. package/dist/config/workspace-root.js +310 -3
  144. package/dist/config/workspace-state.js +254 -1
  145. package/dist/content/content-bundle.js +88 -1
  146. package/dist/diagnostics/module-plan-timeline.js +75 -2
  147. package/dist/diagnostics/readiness-text.js +45 -8
  148. package/dist/dsl/aib-dsl.js +838 -1
  149. package/dist/dsl/declaration-dsl.js +264 -0
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -0
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -0
  152. package/dist/dsl/file-rename-dsl.js +135 -0
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +742 -0
  155. package/dist/help/bootstrap.md +236 -437
  156. package/dist/help/bootstrap.pwsh.md +742 -0
  157. package/dist/help/docs/basics.md +1 -1
  158. package/dist/help/docs/config-setup.import-normalize.md +65 -65
  159. package/dist/help/docs/config-setup.import-rules.md +6 -5
  160. package/dist/help/docs/dsl.md +4 -3
  161. package/dist/help/docs/first-setup.md +6 -5
  162. package/dist/help/docs/help-protocol.md +4 -3
  163. package/dist/help/docs/import.base.md +38 -0
  164. package/dist/help/docs/import.rebase.md +85 -0
  165. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  166. package/dist/help/docs/inspect.code.md +5 -11
  167. package/dist/help/docs/inspect.deps.md +7 -7
  168. package/dist/help/docs/inspect.file.md +10 -18
  169. package/dist/help/docs/inspect.graph.md +6 -20
  170. package/dist/help/docs/{inspect.md → inspect.shared.md} +18 -17
  171. package/dist/help/docs/modulePlan.md +24 -28
  172. package/dist/help/docs/move.md +19 -22
  173. package/dist/help/docs/moveToDir.md +46 -0
  174. package/dist/help/docs/mutate.mixed.md +34 -0
  175. package/dist/help/docs/mutation.shared.md +55 -0
  176. package/dist/help/docs/patterns.md +3 -16
  177. package/dist/help/docs/qr.md +13 -22
  178. package/dist/help/docs/quick-map.md +36 -23
  179. package/dist/help/docs/recipe.file-layout.md +15 -0
  180. package/dist/help/docs/recipe.import-boundary.md +92 -0
  181. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  182. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  183. package/dist/help/docs/recipes.md +20 -0
  184. package/dist/help/docs/rename.md +19 -27
  185. package/dist/help/docs/renameFile.md +36 -0
  186. package/dist/help/docs/rg.md +22 -0
  187. package/dist/help/docs/rules.md +26 -0
  188. package/dist/help/docs/selectors.md +3 -2
  189. package/dist/help/docs/session.md +1 -1
  190. package/dist/help/dsl/bootstrap.bash.md +742 -0
  191. package/dist/help/dsl/bootstrap.md +236 -437
  192. package/dist/help/dsl/bootstrap.pwsh.md +742 -0
  193. package/dist/help/dsl/docs/basics.md +1 -1
  194. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  195. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  196. package/dist/help/dsl/docs/dsl.md +4 -3
  197. package/dist/help/dsl/docs/first-setup.md +6 -5
  198. package/dist/help/dsl/docs/help-protocol.md +4 -3
  199. package/dist/help/dsl/docs/import.base.md +38 -0
  200. package/dist/help/dsl/docs/import.rebase.md +85 -0
  201. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  202. package/dist/help/dsl/docs/inspect.code.md +5 -11
  203. package/dist/help/dsl/docs/inspect.deps.md +7 -7
  204. package/dist/help/dsl/docs/inspect.file.md +10 -18
  205. package/dist/help/dsl/docs/inspect.graph.md +6 -20
  206. package/dist/help/dsl/docs/{inspect.md → inspect.shared.md} +18 -17
  207. package/dist/help/dsl/docs/modulePlan.md +24 -28
  208. package/dist/help/dsl/docs/move.md +19 -22
  209. package/dist/help/dsl/docs/moveToDir.md +46 -0
  210. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  211. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  212. package/dist/help/dsl/docs/patterns.md +3 -16
  213. package/dist/help/dsl/docs/qr.md +13 -22
  214. package/dist/help/dsl/docs/quick-map.md +36 -23
  215. package/dist/help/dsl/docs/recipe.file-layout.md +15 -0
  216. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  217. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  218. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  219. package/dist/help/dsl/docs/recipes.md +20 -0
  220. package/dist/help/dsl/docs/rename.md +19 -27
  221. package/dist/help/dsl/docs/renameFile.md +36 -0
  222. package/dist/help/dsl/docs/rg.md +22 -0
  223. package/dist/help/dsl/docs/rules.md +26 -0
  224. package/dist/help/dsl/docs/selectors.md +3 -2
  225. package/dist/help/dsl/docs/session.md +1 -1
  226. package/dist/help/dsl/full.md +236 -437
  227. package/dist/help/dsl/help-index.md +49 -0
  228. package/dist/help/dsl/snippets/agents.md +2 -2
  229. package/dist/help/dsl/tokens/qr.inline.examples.md +2 -0
  230. package/dist/help/dsl/tokens/stdin.examples.bash.md +8 -0
  231. package/dist/help/dsl/tokens/stdin.examples.pwsh.md +8 -0
  232. package/dist/help/dsl/tokens/stdin.examples.with-qr.bash.md +12 -0
  233. package/dist/help/dsl/tokens/stdin.examples.with-qr.pwsh.md +12 -0
  234. package/dist/help/dsl/topics/basics.md +1 -1
  235. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  236. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  237. package/dist/help/dsl/topics/dsl.md +4 -3
  238. package/dist/help/dsl/topics/first-setup.md +6 -5
  239. package/dist/help/dsl/topics/help-protocol.md +4 -3
  240. package/dist/help/dsl/topics/import.base.md +36 -0
  241. package/dist/help/dsl/topics/import.rebase.md +83 -0
  242. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  243. package/dist/help/dsl/topics/inspect.code.md +5 -11
  244. package/dist/help/dsl/topics/inspect.deps.md +7 -7
  245. package/dist/help/dsl/topics/inspect.file.md +10 -18
  246. package/dist/help/dsl/topics/inspect.graph.md +6 -20
  247. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +18 -17
  248. package/dist/help/dsl/topics/modulePlan.md +21 -26
  249. package/dist/help/dsl/topics/move.md +17 -18
  250. package/dist/help/dsl/topics/moveToDir.md +44 -0
  251. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  252. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  253. package/dist/help/dsl/topics/patterns.md +3 -16
  254. package/dist/help/dsl/topics/qr.md +13 -22
  255. package/dist/help/dsl/topics/quick-map.md +36 -23
  256. package/dist/help/dsl/topics/recipe.file-layout.md +13 -0
  257. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  258. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  259. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  260. package/dist/help/dsl/topics/recipes.md +18 -0
  261. package/dist/help/dsl/topics/rename.md +15 -15
  262. package/dist/help/dsl/topics/renameFile.md +34 -0
  263. package/dist/help/dsl/topics/rg.md +20 -0
  264. package/dist/help/dsl/topics/rules.md +24 -0
  265. package/dist/help/dsl/topics/selectors.md +3 -2
  266. package/dist/help/dsl/topics/session.md +1 -1
  267. package/dist/help/full.md +236 -437
  268. package/dist/help/help-index.md +49 -0
  269. package/dist/help/help-meta.json +114 -48
  270. package/dist/help/index.md +76 -87
  271. package/dist/help/snippets/agents.md +2 -2
  272. package/dist/help/tokens/qr.inline.examples.md +2 -0
  273. package/dist/help/tokens/stdin.examples.bash.md +8 -0
  274. package/dist/help/tokens/stdin.examples.pwsh.md +8 -0
  275. package/dist/help/tokens/stdin.examples.with-qr.bash.md +12 -0
  276. package/dist/help/tokens/stdin.examples.with-qr.pwsh.md +12 -0
  277. package/dist/help/topics/basics.md +1 -1
  278. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  279. package/dist/help/topics/config-setup.import-rules.md +6 -5
  280. package/dist/help/topics/dsl.md +4 -3
  281. package/dist/help/topics/first-setup.md +6 -5
  282. package/dist/help/topics/help-protocol.md +4 -3
  283. package/dist/help/topics/import.base.md +36 -0
  284. package/dist/help/topics/import.rebase.md +83 -0
  285. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  286. package/dist/help/topics/inspect.code.md +5 -11
  287. package/dist/help/topics/inspect.deps.md +7 -7
  288. package/dist/help/topics/inspect.file.md +10 -18
  289. package/dist/help/topics/inspect.graph.md +6 -20
  290. package/dist/help/topics/{inspect.md → inspect.shared.md} +18 -17
  291. package/dist/help/topics/modulePlan.md +21 -26
  292. package/dist/help/topics/move.md +17 -18
  293. package/dist/help/topics/moveToDir.md +44 -0
  294. package/dist/help/topics/mutate.mixed.md +32 -0
  295. package/dist/help/topics/mutation.shared.md +53 -0
  296. package/dist/help/topics/patterns.md +3 -16
  297. package/dist/help/topics/qr.md +13 -22
  298. package/dist/help/topics/quick-map.md +36 -23
  299. package/dist/help/topics/recipe.file-layout.md +13 -0
  300. package/dist/help/topics/recipe.import-boundary.md +90 -0
  301. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  302. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  303. package/dist/help/topics/recipes.md +18 -0
  304. package/dist/help/topics/rename.md +15 -15
  305. package/dist/help/topics/renameFile.md +34 -0
  306. package/dist/help/topics/rg.md +20 -0
  307. package/dist/help/topics/rules.md +24 -0
  308. package/dist/help/topics/selectors.md +3 -2
  309. package/dist/help/topics/session.md +1 -1
  310. package/dist/host/capabilities.js +56 -0
  311. package/dist/imports/standalone-import-analysis.js +602 -0
  312. package/dist/imports/standalone-import-model.js +2 -0
  313. package/dist/imports/standalone-import-process.js +66 -0
  314. package/dist/imports/standalone-import-worker.js +27 -0
  315. package/dist/imports/standalone-ts-project.js +147 -0
  316. package/dist/inspect/inspect-duplicates-service.js +526 -0
  317. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  318. package/dist/inspect/inspect-source-ranges.js +82 -0
  319. package/dist/inspect/inspect-source-shape.js +649 -0
  320. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  321. package/dist/inspect/standalone-inspect-model.js +9 -0
  322. package/dist/inspect/standalone-inspect-process.js +55 -0
  323. package/dist/inspect/standalone-inspect-usages.js +274 -0
  324. package/dist/inspect/standalone-inspect-worker.js +13 -0
  325. package/dist/metrics/central-metrics.js +101 -2
  326. package/dist/mutation/concrete-edit-plan.js +157 -0
  327. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  328. package/dist/mutation/exports-star-expand-apply.js +373 -0
  329. package/dist/mutation/exports-star-expand-preview.js +807 -0
  330. package/dist/mutation/file-impact-scan.js +182 -0
  331. package/dist/mutation/file-mutation-discovery.js +674 -0
  332. package/dist/mutation/file-mutation-eta.js +99 -0
  333. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  334. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  335. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  336. package/dist/mutation/mutation-estimate.js +45 -0
  337. package/dist/mutation/mutation-plan.js +467 -0
  338. package/dist/mutation/object-mutation-foundation.js +2 -0
  339. package/dist/mutation/object-mutation-partition.js +148 -0
  340. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  341. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  342. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  343. package/dist/mutation/package-manifest-impact.js +176 -0
  344. package/dist/mutation/rename-owner-worker-child.js +37 -0
  345. package/dist/mutation/rename-owner-worker.js +122 -0
  346. package/dist/mutation/runtime-cycle-query.js +66 -0
  347. package/dist/mutation/semantic-execution-progress.js +63 -0
  348. package/dist/mutation/semantic-export-index.js +474 -0
  349. package/dist/mutation/semantic-impact-scan.js +434 -0
  350. package/dist/mutation/semantic-model.js +2 -0
  351. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  352. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  353. package/dist/mutation/semantic-move-config-worker.js +449 -0
  354. package/dist/mutation/semantic-move-declarations.js +94 -0
  355. package/dist/mutation/semantic-move-metrics.js +119 -0
  356. package/dist/mutation/semantic-move-model.js +2 -0
  357. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  358. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  359. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  360. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  361. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  362. package/dist/mutation/semantic-move-policy.js +360 -0
  363. package/dist/mutation/semantic-move-process.js +218 -0
  364. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  365. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  366. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  367. package/dist/mutation/semantic-move-transaction.js +639 -0
  368. package/dist/mutation/semantic-mutation-engine.js +478 -0
  369. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  370. package/dist/mutation/semantic-planner-retry.js +26 -0
  371. package/dist/mutation/semantic-program-roots.js +69 -0
  372. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  373. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  374. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  375. package/dist/mutation/semantic-rename-locations.js +192 -0
  376. package/dist/mutation/semantic-rename-model.js +2 -0
  377. package/dist/mutation/semantic-rename-process.js +210 -0
  378. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  379. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  380. package/dist/mutation/semantic-rename-transaction.js +333 -0
  381. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  382. package/dist/mutation/semantic-worker-retry.js +40 -0
  383. package/dist/mutation/semantic-workspace.js +804 -0
  384. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  385. package/dist/observability/config.js +206 -1
  386. package/dist/observability/context.js +59 -1
  387. package/dist/observability/failure-snapshot.js +124 -2
  388. package/dist/observability/recent.js +63 -2
  389. package/dist/payloads/read-stdin-json.js +212 -1
  390. package/dist/rg-wrapper/core.js +714 -0
  391. package/dist/rg-wrapper/options.js +125 -0
  392. package/dist/rtk-wrapper/core.js +144 -0
  393. package/dist/rtk-wrapper/git-safety.js +203 -0
  394. package/dist/rtk-wrapper/output-adapter.js +106 -0
  395. package/dist/runtime/buffered-process.js +114 -0
  396. package/dist/runtime/bundled-node.js +97 -1
  397. package/dist/runtime/command-lifecycle.js +2 -0
  398. package/dist/runtime/input-source.js +238 -1
  399. package/dist/runtime/node-cli-identity.js +37 -0
  400. package/dist/runtime/run-command.js +191 -1
  401. package/dist/selectors/parse-entities.js +84 -1
  402. package/dist/semantic/semantic-context-pool.js +830 -0
  403. package/dist/semantic/semantic-context-provider.js +416 -0
  404. package/dist/semantic/semantic-resident-admission.js +38 -0
  405. package/dist/semantic/semantic-worker-child.js +40 -0
  406. package/dist/semantic/semantic-worker-manager.js +460 -0
  407. package/dist/semantic/semantic-worker-protocol.js +2 -0
  408. package/dist/semantic/semantic-worker-runtime.js +38 -0
  409. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  410. package/dist/session/client.js +359 -1
  411. package/dist/session/daemon-state.js +185 -0
  412. package/dist/session/external-tool-coordinator.js +88 -0
  413. package/dist/session/external-tool-request.js +52 -0
  414. package/dist/session/lane-owner.js +116 -0
  415. package/dist/session/paths.js +71 -1
  416. package/dist/session/runtime-lifecycle.js +225 -0
  417. package/dist/session/runtime-shutdown.js +95 -0
  418. package/dist/session/server.js +1194 -8
  419. package/dist/session/session-health.js +27 -0
  420. package/dist/shared/agent-text.js +29 -1
  421. package/dist/shared/errors.js +496 -30
  422. package/dist/shared/event-loop.js +6 -1
  423. package/dist/shared/hints.js +37 -1
  424. package/dist/shared/metrics.js +43 -1
  425. package/dist/shared/presentation.js +69 -4
  426. package/dist/shared/stdin-examples.js +77 -3
  427. package/dist/shared/stdout.js +6 -2
  428. package/dist/shared/types.js +23 -1
  429. package/dist/tool-runtime/runtime-tools.js +120 -0
  430. package/dist/topology/availability.js +663 -0
  431. package/dist/topology/cache.js +130 -0
  432. package/dist/topology/candidates.js +372 -0
  433. package/dist/topology/core.js +903 -0
  434. package/dist/topology/dependency-snapshot.js +189 -0
  435. package/dist/topology/model.js +2 -0
  436. package/dist/topology/scope.js +100 -0
  437. package/dist/topology/ts-oracle-batch.js +529 -0
  438. package/dist/topology/ts-oracle-host.js +69 -0
  439. package/dist/topology/ts-oracle-model.js +2 -0
  440. package/dist/topology/ts-oracle.js +224 -0
  441. package/dist/topology/tsconfig-loader.js +105 -0
  442. package/dist/topology/workspace-project-index.js +542 -0
  443. package/dist/tracing/config.js +192 -2
  444. package/dist/tracing/failure-summary.js +100 -0
  445. package/dist/tracing/trace.js +318 -5
  446. package/dist/tsc-wrapper/core.js +697 -0
  447. package/dist/workers/control-plane/aib-control-plane-worker.cjs +80 -0
  448. package/dist/workers/control-plane/client-config.default.json +3 -0
  449. package/dist/workers/lexical-worker-child.js +27 -0
  450. package/dist/workers/lexical-worker-manager.js +394 -0
  451. package/dist/workers/lexical-worker-protocol.js +2 -0
  452. package/dist/workers/lexical-worker-runtime.js +25 -0
  453. package/dist/workers/owned-one-shot-process.js +115 -0
  454. package/dist/workers/product-storage.js +23 -0
  455. package/dist/workers/registry.js +241 -0
  456. package/package.json +8 -11
  457. package/runtimes/tools/rg/darwin-arm64/rg +0 -0
  458. package/runtimes/tools/rg/darwin-x64/rg +0 -0
  459. package/runtimes/tools/rg/linux-arm64/rg +0 -0
  460. package/runtimes/tools/rg/linux-x64/rg +0 -0
  461. package/runtimes/tools/rg/manifest.json +36 -0
  462. package/runtimes/tools/rg/win32-x64/rg.exe +0 -0
  463. package/runtimes/tools/rtk/darwin-arm64/rtk +0 -0
  464. package/runtimes/tools/rtk/darwin-x64/rtk +0 -0
  465. package/runtimes/tools/rtk/linux-arm64/rtk +0 -0
  466. package/runtimes/tools/rtk/linux-x64/rtk +0 -0
  467. package/runtimes/tools/rtk/manifest.json +36 -0
  468. package/runtimes/tools/rtk/win32-x64/rtk.exe +0 -0
  469. package/scripts/postinstall.cjs +29 -29
  470. package/scripts/provision-runtime.cjs +411 -459
  471. package/dist/client/http-client.js +0 -1
  472. package/dist/client/transport-options.js +0 -1
  473. package/dist/client/websocket-client.js +0 -1
  474. package/dist/commands/entity-resolution.js +0 -1
  475. package/dist/commands/inspect-symbol-query.js +0 -1
  476. package/dist/commands/list-instances.js +0 -1
  477. package/dist/commands/module-plan-command.js +0 -1
  478. package/dist/commands/move-command.js +0 -1
  479. package/dist/commands/move-to-file.js +0 -2
  480. package/dist/commands/ping.js +0 -1
  481. package/dist/commands/refactor-command.js +0 -1
  482. package/dist/commands/rename-command.js +0 -1
  483. package/dist/commands/runtime-command.js +0 -4
  484. package/dist/commands/runtime-info.js +0 -1
  485. package/dist/commands/validate-module-plan.js +0 -2
  486. package/dist/compatibility/policy.js +0 -1
  487. package/dist/config/auto-start-ide.js +0 -1
  488. package/dist/discovery/registry.js +0 -1
  489. package/dist/discovery/select-instance.js +0 -1
  490. package/dist/help/docs/mutation.md +0 -50
  491. package/dist/help/docs/refactor.batch.md +0 -44
  492. package/dist/help/dsl/docs/mutation.md +0 -50
  493. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  494. package/dist/help/dsl/topics/mutation.md +0 -48
  495. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  496. package/dist/help/json/bootstrap.md +0 -1085
  497. package/dist/help/json/docs/basics.md +0 -15
  498. package/dist/help/json/docs/config-setup.aliases.md +0 -56
  499. package/dist/help/json/docs/config-setup.excludes.md +0 -45
  500. package/dist/help/json/docs/config-setup.import-normalize.md +0 -86
  501. package/dist/help/json/docs/config-setup.import-rules.md +0 -96
  502. package/dist/help/json/docs/config-setup.tsconfigs.md +0 -33
  503. package/dist/help/json/docs/dsl.md +0 -25
  504. package/dist/help/json/docs/first-setup.md +0 -292
  505. package/dist/help/json/docs/help-format.md +0 -9
  506. package/dist/help/json/docs/help-protocol.md +0 -26
  507. package/dist/help/json/docs/imports.normalize.md +0 -47
  508. package/dist/help/json/docs/inspect.code.md +0 -41
  509. package/dist/help/json/docs/inspect.cycles.md +0 -38
  510. package/dist/help/json/docs/inspect.deps.md +0 -46
  511. package/dist/help/json/docs/inspect.duplicates.md +0 -65
  512. package/dist/help/json/docs/inspect.exports.md +0 -40
  513. package/dist/help/json/docs/inspect.file.md +0 -38
  514. package/dist/help/json/docs/inspect.graph.md +0 -139
  515. package/dist/help/json/docs/inspect.imports.md +0 -15
  516. package/dist/help/json/docs/inspect.md +0 -88
  517. package/dist/help/json/docs/inspect.members.md +0 -32
  518. package/dist/help/json/docs/inspect.tree.md +0 -32
  519. package/dist/help/json/docs/inspect.usages.md +0 -61
  520. package/dist/help/json/docs/modulePlan.md +0 -73
  521. package/dist/help/json/docs/move.md +0 -56
  522. package/dist/help/json/docs/mutation.md +0 -65
  523. package/dist/help/json/docs/patterns.md +0 -76
  524. package/dist/help/json/docs/prefs.md +0 -40
  525. package/dist/help/json/docs/qr.md +0 -37
  526. package/dist/help/json/docs/quick-map.md +0 -30
  527. package/dist/help/json/docs/refactor.batch.md +0 -72
  528. package/dist/help/json/docs/rename.md +0 -47
  529. package/dist/help/json/docs/reveal.md +0 -30
  530. package/dist/help/json/docs/selectors.md +0 -23
  531. package/dist/help/json/docs/session.md +0 -77
  532. package/dist/help/json/docs/view.md +0 -30
  533. package/dist/help/json/full.md +0 -1085
  534. package/dist/help/json/snippets/agents.md +0 -14
  535. package/dist/help/json/topics/basics.md +0 -13
  536. package/dist/help/json/topics/config-setup.aliases.md +0 -54
  537. package/dist/help/json/topics/config-setup.excludes.md +0 -43
  538. package/dist/help/json/topics/config-setup.import-normalize.md +0 -84
  539. package/dist/help/json/topics/config-setup.import-rules.md +0 -94
  540. package/dist/help/json/topics/config-setup.tsconfigs.md +0 -31
  541. package/dist/help/json/topics/dsl.md +0 -23
  542. package/dist/help/json/topics/first-setup.md +0 -290
  543. package/dist/help/json/topics/help-format.md +0 -7
  544. package/dist/help/json/topics/help-protocol.md +0 -24
  545. package/dist/help/json/topics/imports.normalize.md +0 -45
  546. package/dist/help/json/topics/inspect.code.md +0 -39
  547. package/dist/help/json/topics/inspect.cycles.md +0 -36
  548. package/dist/help/json/topics/inspect.deps.md +0 -44
  549. package/dist/help/json/topics/inspect.duplicates.md +0 -37
  550. package/dist/help/json/topics/inspect.exports.md +0 -38
  551. package/dist/help/json/topics/inspect.file.md +0 -36
  552. package/dist/help/json/topics/inspect.graph.md +0 -137
  553. package/dist/help/json/topics/inspect.imports.md +0 -13
  554. package/dist/help/json/topics/inspect.md +0 -86
  555. package/dist/help/json/topics/inspect.members.md +0 -30
  556. package/dist/help/json/topics/inspect.tree.md +0 -22
  557. package/dist/help/json/topics/inspect.usages.md +0 -59
  558. package/dist/help/json/topics/modulePlan.md +0 -60
  559. package/dist/help/json/topics/move.md +0 -46
  560. package/dist/help/json/topics/mutation.md +0 -63
  561. package/dist/help/json/topics/patterns.md +0 -74
  562. package/dist/help/json/topics/prefs.md +0 -38
  563. package/dist/help/json/topics/qr.md +0 -35
  564. package/dist/help/json/topics/quick-map.md +0 -28
  565. package/dist/help/json/topics/refactor.batch.md +0 -61
  566. package/dist/help/json/topics/rename.md +0 -42
  567. package/dist/help/json/topics/reveal.md +0 -28
  568. package/dist/help/json/topics/selectors.md +0 -21
  569. package/dist/help/json/topics/session.md +0 -59
  570. package/dist/help/json/topics/view.md +0 -28
  571. package/dist/help/topics/mutation.md +0 -48
  572. package/dist/help/topics/refactor.batch.md +0 -33
  573. package/dist/ide-launch/common.cjs +0 -162
  574. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  575. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  576. package/dist/managed-host/serve-web-autostart.js +0 -1
  577. package/dist/managed-host/serve-web-host.cjs +0 -1904
  578. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  579. package/dist/shared/diagnostic-catalog.js +0 -1
  580. package/dist/shared/diagnostics.js +0 -1
  581. package/dist/shared/operations.js +0 -1
  582. package/dist/shared/protocol.js +0 -1
  583. package/dist/shared/routes.js +0 -1
  584. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  585. package/runtimes/launcher/linux-x64/aib +0 -0
  586. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -1,16 +1,1450 @@
1
- "use strict";var ht=exports&&exports.__createBinding||(Object.create?(function(e,t,n,s){s===void 0&&(s=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,s,i)}):(function(e,t,n,s){s===void 0&&(s=n),e[s]=t[n]})),gt=exports&&exports.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),ve=exports&&exports.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var s=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(s[s.length]=i);return s},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var s=e(t),i=0;i<s.length;i++)s[i]!=="default"&&ht(n,t,s[i]);return gt(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runInspect=Ce;const L=ve(require("node:path")),ye=ve(require("node:fs")),bt=require("node:crypto"),It=require("../client/http-client"),xt=require("../shared/routes"),At=require("../shared/protocol"),E=require("../shared/errors"),V=require("../shared/agent-text"),ie=require("./shared"),$=require("./inspect-format"),w=require("./module-plan-cache"),he=require("./json-file-input"),ge=require("./inspect-graph"),De=require("./inspect-cycles"),be=require("./inspect-imports"),oe=require("./inspect-tree"),Y=require("../config/path-display"),S=require("./session-workspace"),St=require("./entity-resolution");async function Ce(e,t,n,s={},i={}){if(Et(t))return Nt(e,t);if((0,ge.isInspectGraphRequest)(t,n))return(0,ge.runInspectGraph)(e,t,n);if((0,De.isInspectCyclesRequest)(t,n))return(0,De.runInspectCycles)(e,t,n);if((0,oe.isInspectTreeRequest)(t,n))return(0,oe.runInspectTree)(e,t,n);if(t[0]==="imports")return(0,be.runInspectImports)(e,t,n);const o=Xt(e,t,n);if(o&&Yt(o))return qt(e,t,o,s,i);i.allowModulePlan!==!0&&Un(t,n)&&ct();const l=await(0,ie.resolveCompatibleTargetInstance)(e,At.CLI_COMMAND_IDS.inspect,s),r=await(0,ie.fetchEffectiveConfig)(l.entry,s),c=mn(e,t,n,r,i.allowModulePlan===!0,i.forceResults===!0);an(e,c),await _t(l.entry,c.payload,r,s),sn(e,c);const u=await(0,It.postJson)(l.entry,xt.EXTENSION_ROUTES.inspect,c.payload,(0,ie.extensionRequestOptions)(s));on(e,c,u);const d=(0,$.formatInspectResponse)(u,r,c.formatOptions);return Ct(rn(vt(e,u,d,c),c.revision),c)}async function _t(e,t,n,s){const i=Array.isArray(t.requests)?t.requests.filter(p):[],o=new Map;for(const l of i){const r=a(l.op);if(r!=="code"&&r!=="slice"&&r!=="dependencies"&&r!=="members"&&r!=="usages")continue;const c=a(l.sourceFile),u=a(l.symbolName);if(!c||!u)continue;const d=a(l.symbolKind);if(d==="constructor")continue;const m={raw:u,symbolName:u,symbolKind:d},y=o.get(c)??[];y.push(m),o.set(c,y)}for(const[l,r]of o)await(0,St.ensureSelectorsResolvable)(e,l,r,n,(0,ie.extensionRequestOptions)(s))}function Et(e){return e[0]==="usages"&&F(e,"--from-file")!==null}function Nt(e,t){const n=F(t,"--from-file");if(!n)throw new E.CliError("USAGES_FROM_FILE_REQUIRED","inspect usages --from-file expects a saved usages handle or JSON file.");const s=(0,S.resolveSessionFileArgument)(e,n),i=(0,he.readJsonObjectFile)(e,s,"INVALID_USAGES_ARTIFACT"),o=R(t,"--focus"),l=Ie(e,{detail:F(t,"--detail")??"locations",all:t.includes("--all"),limit:H(t,"--limit"),maxCodeLines:H(t,"--max-code-lines")??H(t,"--maxCodeLines")});if(l.detail==="summary")throw new E.CliError("INVALID_USAGES_DETAIL","inspect usages --from-file --detail expects locations or code.");if(l.detail!=="locations"&&l.detail!=="code")throw new E.CliError("INVALID_USAGES_DETAIL","inspect usages --detail expects locations or code.");const r=Oe(e,i,o,l);return(0,V.attachAgentText)(r,xe(e,r))}function vt(e,t,n,s){const i=s.usagesDetails??[],o=Dt(n,s);if(i.length===0||i.every(m=>m===null||m.detail==="summary"))return o;const l=Array.isArray(t.results)?t.results.filter(p):[];if(l.length===0)return o;const r=Array.isArray(o.results)?o.results.filter(p):[o],c=Array.isArray(s.payload.requests)?s.payload.requests.filter(p):[],u=l.map((m,y)=>{const h=i[y],A=r[y]??{};if(c[y]?.targetLocalUsagesHidden===!0&&(m.targetLocalUsagesHidden=!0),m.op!=="usages"||h===void 0||h===null||h.detail==="summary")return A;const I=Oe(e,m,[],h,!0);return Tt(A,I),I});Mt(e,u),Ut(u);const d=u.length===1?u[0]:{results:u};return(0,V.attachAgentText)(d,Bt(e,d,o))}function Dt(e,t){const n=Array.isArray(t.payload.requests)?t.payload.requests.filter(p):[],s=Array.isArray(e.results)?e.results.filter(p):null;return s?(s.forEach((i,o)=>Pe(i,n[o])),e):(Pe(e,n[0]),e)}function Pe(e,t){t?.targetLocalUsagesHidden===!0&&(e.targetLocalUsagesHidden=!0,e.scope==="excluding target"&&delete e.scope)}function Ct(e,t){return Fe(e,t.dslDiagnostics??[])}function Fe(e,t){if(t.length===0)return e;const n=(0,V.readAgentText)(e),s=Pt(t);return(0,V.attachAgentText)({...e,dslDiagnostics:t.map(i=>({line:i.line,message:i.message}))},n?`${n.trimEnd()}
2
-
3
- ${s}`:s)}function Pt(e){return["dsl errors:",...e.map(t=>`line ${t.line}: ${t.message}`)].join(`
4
- `)}function Le(e){const t=e.dslDiagnostics;if(!Array.isArray(t))return{};const n=t.flatMap(s=>{if(!p(s))return[];const i=typeof s.line=="number"&&Number.isFinite(s.line)?s.line:null,o=typeof s.message=="string"&&s.message.length>0?s.message:null;return i!==null&&o!==null?[{line:i,message:o}]:[]});return n.length>0?{dslDiagnostics:n}:{}}function Oe(e,t,n,s,i=!1){const o=s.detail==="code"?Kt(e,t,n,s):jt(e,t,n,s);return $t(e,o,i),o}function Ft(e,t){return Ot(t??(0,S.readSessionStringPref)(e,"inspect.usages.detail","locations"))}function Ie(e,t){const n=t.all===!0,s=n?Number.MAX_SAFE_INTEGER:t.limit??(0,S.readSessionNumberPref)(e,"inspect.usages.maxLocations",12),i=n?Number.MAX_SAFE_INTEGER:t.limit??(0,S.readSessionNumberPref)(e,"inspect.usages.maxCodeBlocks",8);return{detail:Ft(e,t.detail),locationLimit:s,codeBlockLimit:i,maxCodeLines:t.maxCodeLines??(0,S.readSessionNumberPref)(e,"inspect.code.maxNonEmptyLines",120),all:n}}function Lt(e){return typeof e=="string"?e:null}function Ot(e){const t=e.trim().toLowerCase();if(t==="location")return"locations";if(t==="locations"||t==="code"||t==="summary")return t;throw new E.CliError("INVALID_USAGES_DETAIL","usages detail expects summary, locations, or code.",{detail:e})}function Tt(e,t){for(const n of["summary","saved","next","input","targetLocalUsagesHidden"])e[n]!==void 0&&(t[n]=e[n])}function $t(e,t,n){const s=Array.isArray(t.__viewItems)?t.__viewItems.filter(p):[];if(delete t.__viewItems,s.length===0)return;const i=Z({version:1,kind:"usages",source:"inspect",detail:a(t.detail)??"locations",target:a(t.target)??"",items:s}),o=(0,S.saveSessionResultViewJson)(e,Te(i),i);o&&(t.view=o.saved,n&&(t.__viewRecord=i))}function Mt(e,t){const n=t.map(r=>p(r.__viewRecord)?r.__viewRecord:null).filter(r=>r!==null&&a(r.kind)==="usages");if(n.length<=1)return;const s=Array.from(new Set(n.map(r=>a(r.detail)??"").filter(r=>r!==""))),i=n.flatMap(r=>Array.isArray(r.items)?r.items.filter(p):[]);if(i.length===0)return;const o=Z({version:1,kind:"usages",source:"inspect",detail:s.length===1?s[0]:"mixed",items:i}),l=(0,S.saveSessionResultViewJson)(e,Te(o),o);if(l)for(const r of t)p(r.__viewRecord)&&a(r.__viewRecord.kind)==="usages"&&(r.viewAllUsages=l.saved)}function Ut(e){for(const t of e)delete t.__viewRecord,delete t.__viewItems}function Te(e){return`res_${(0,bt.createHash)("sha256").update(JSON.stringify(e)).digest("hex").slice(0,8)}`}function Z(e){const t={};for(const[n,s]of Object.entries(e))s!==void 0&&s!==""&&(t[n]=s);return t}function Bt(e,t,n){if(Array.isArray(t.results)){const i=[],o=t.results.filter(p);let l=[];const r=()=>{if(l.length===0)return;const c=(0,$.formatInspectMixedAgentText)({results:l});c&&i.push(c),l=[]};for(const c of o){const u=a(c.detail);if(u==="locations"||u==="code"){r();const d=xe(e,c);d&&i.push(d);continue}if(a(c.op)==="usages"){r();const d=Rt(c);d&&i.push(d);continue}l.push(c)}return r(),kt(i,o),i.length>0?i.join(`
5
-
6
- `):null}const s=a(t.detail);return s==="locations"||s==="code"?xe(e,t):(0,V.readAgentText)(n)}function kt(e,t){const n=Array.from(new Set(t.map(i=>a(i.viewAllUsages)??"").filter(i=>i!=="")));if(n.length===0)return;const s=t.every(i=>a(i.op)==="usages");e.push(s?`view all: ${n[0]}`:["view all:",`usages: ${n[0]}`].join(`
7
- `))}function Rt(e){const t=[],n=a(e.target);t.push(n?`usages ${n}`:"usages");const s=a(e.summary);s&&t.push(s),Ae(t,e);const i=Array.isArray(e.items)?e.items.filter(p):[];for(const o of i){const l=a(o.entity)??"",r=a(o.summary)??"";t.push(`${l}: ${r}`.trim());const c=Array.isArray(o.usedBy)?o.usedBy.filter(u=>typeof u=="string"):[];t.push(...c)}return t.length>1?t.join(`
8
- `):null}function jt(e,t,n,s){const i=$e(t,n),o=[],r=i.map(c=>{const u=re(c);let d=0,m=0;const y=[],h=Array.isArray(c.usedBy)?c.usedBy.filter(p).flatMap(I=>{const O=Array.isArray(I.locations)?I.locations.filter(p):[],v=Q(e,a(I.file)??""),b=[],_=O.flatMap(D=>{const P=typeof D.line=="number"?D.line:0,f=p(D.container)?le(D.container):"";return d>=s.locationLimit?(m+=1,b.push({line:P,...f!==""?{container:f}:{}}),o.push(Z({name:u,text:f?`${v}:${P} ${f}`:`${v}:${P}`})),[]):(d+=1,[{line:P,...f!==""?{container:f}:{}}])});return b.length>0&&y.push({file:v,locations:b}),_.length>0?[{file:v,locations:_}]:[]}):[],A={entity:u,referenceCount:j(c.referenceCount),usedBy:h,...m>0?{hidden:`+ ${m} more locations`}:{}},C=y.length>0?{entity:u,referenceCount:m,usedBy:y}:null;return{displayItem:A,hiddenItem:C}}).map(c=>c.displayItem);return{op:"usages",detail:"locations",target:Q(e,a(t.targetPath)??""),summary:a(t.summary)??"",referenceCount:j(t.referenceCount),itemCount:j(t.itemCount),fileCount:j(t.fileCount),scopeLabel:Ue(e,t),targetMode:a(t.targetMode)??"",queryMode:a(t.queryMode)??"",targetLocalUsagesHidden:t.targetLocalUsagesHidden===!0,unused:Me(i),items:r,...o.length>0?{__viewItems:o}:{}}}function Kt(e,t,n,s){const i=s.maxCodeLines,o=[],l=new Set,r=new Map,c=new Map,u=[],d=$e(t,n);for(const m of d){const y=re(m),h=Array.isArray(m.usedBy)?m.usedBy.filter(p):[];for(const A of h){const C=a(A.file);if(!C)continue;const I=Array.isArray(A.locations)?A.locations.filter(p):[];for(const O of I){const v=p(O.container)?O.container:null,b=v&&p(v.range)?v.range:null,_=b&&p(b.start)?b.start:null,D=b&&p(b.end)?b.end:null;if(!_||!D||typeof _.line!="number"||typeof _.character!="number"||typeof D.line!="number"||typeof D.character!="number")continue;const P=`${y}:${C}:${_.line}:${_.character}:${D.line}:${D.character}`;if(l.has(P))continue;l.add(P);const f=r.get(y)??0,M=Wt(C,_.line,_.character,D.line,D.character),U=_.line+1,G={entity:y,file:Q(e,C),container:v?le(v):"",line:U,code:M};if(f>=s.codeBlockLimit){c.set(y,(c.get(y)??0)+1),u.push(Z({name:y,text:Ke(G,!1).join(`
9
- `).trim()}));continue}r.set(y,f+1);const x=Qt(M),ee=`code omitted: ${x} non-empty lines; exceeds inspect.code.maxNonEmptyLines=${i}`;x>i&&u.push(Z({name:y,text:Ke(G,!1).join(`
10
- `).trim()})),o.push({entity:y,file:Q(e,C),container:v?le(v):"",line:U,...x<=i?{code:M}:{omitted:ee,compactCode:wt(M)}})}}}return{op:"usages",detail:"code",target:Q(e,a(t.targetPath)??""),summary:a(t.summary)??"",referenceCount:j(t.referenceCount),itemCount:j(t.itemCount),fileCount:j(t.fileCount),scopeLabel:Ue(e,t),targetMode:a(t.targetMode)??"",queryMode:a(t.queryMode)??"",targetLocalUsagesHidden:t.targetLocalUsagesHidden===!0,unused:Me(d),blocks:o,hiddenBlocks:Array.from(c.entries()).map(([m,y])=>({entity:m,hidden:`+ ${y} more code blocks`})),...u.length>0?{__viewItems:u}:{}}}function $e(e,t){const n=Array.isArray(e.items)?e.items.filter(p):[];if(t.length===0)return n;const s=new Set(t.map(i=>i.trim()).filter(Boolean));return n.filter(i=>{const o=Vt(i),l=re(i);return s.has(o)||s.has(l)})}function Vt(e){return p(e.entity)?a(e.entity.name)??"":""}function re(e){return p(e.entity)?le(e.entity):""}function Me(e){return e.filter(t=>j(t.referenceCount)===0).map(t=>re(t)).filter(t=>t!=="")}function Ue(e,t){const n=K(t.usageScopes)??[];return n.length===0?"project":n.length===1?Q(e,n[0]):`${n.length} scopes`}function wt(e){const n=e.trim().split(/\r?\n/).map(i=>i.trimEnd()).filter(i=>i.trim()!=="")[0]??"";if(!n)return"";const s=n.indexOf("{");return s>=0?`${n.slice(0,s+1)}...}`:`${n} ...`}function Gt(e,t,n){const s=e.slice(0,t),i=e.length-s.length;return i>0?`${s.join(", ")}, + ${i} ${n}`:s.join(", ")}function j(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function le(e){const t=Array.isArray(e.path)?e.path.filter(n=>typeof n=="string"&&n.trim()!==""):[];return t.length>0?t.join("."):a(e.name)??""}function xe(e,t){const n=a(t.detail);if(j(t.referenceCount)===0){const r=a(t.target),c=a(t.scopeLabel)??"project",u=[r?`usages ${r}`:"usages",`0 refs in ${c}`];Ae(u,t);const d=j(t.itemCount);return(a(t.targetMode)==="directory"||a(t.queryMode)!=="explicit")&&d>0&&u.push(`symbols checked: ${d}`),u.join(`
11
- `)}const s=[`usages ${n??"detail"}`];if(Ae(s,t),n==="code"){const r=Array.isArray(t.blocks)?t.blocks.filter(p):[],{ownerGroups:c,standalone:u}=ae(r,d=>a(d.entity)??"");for(const[d,m]of c){s.push(""),s.push(`// ${d}:`);for(const[y,h]of Se(m,A=>ce(a(A.entity)??"").name))y&&s.push(`// ${y}`),s.push(...Re(e,t,h))}if(u.length>0){c.length>0&&s.push("");for(const[d,m]of Se(u,y=>a(y.entity)??""))d&&s.push(`// ${d}`),s.push(...Re(e,t,m))}return ke(s,t),Be(s,t),s.join(`
12
- `).replace(/\n{3,}/g,`
13
-
14
- `).trimEnd()}const i=Array.isArray(t.items)?t.items.filter(p).filter(r=>j(r.referenceCount)>0):[],{ownerGroups:o,standalone:l}=ae(i,r=>a(r.entity)??"");for(const[r,c]of o){s.push(""),s.push(`// ${r}:`);for(const u of c)s.push(...Ve(u,!1))}l.length>0&&o.length>0&&s.push("");for(const r of l)s.push(...Ve(r,!0));return ke(s,t),Be(s,t),s.join(`
15
- `).trimEnd()}function Be(e,t){const n=a(t.view);n&&(e.length>0&&e[e.length-1]!==""&&e.push(""),e.push(`view: ${n}`))}function ke(e,t){const n=Array.isArray(t.unused)?t.unused.filter(s=>typeof s=="string"&&s!==""):[];if(n.length!==0){if(a(t.queryMode)==="explicit"){e.push(""),e.push(`unused: ${Gt(n,2,"more")}`);return}a(t.targetMode)==="file"&&(e.push(""),e.push(`unused symbols: ${n.length}`))}}function Ae(e,t){t.targetLocalUsagesHidden===!0&&e.push("target-local usages hidden; use +includeTarget to show")}function Re(e,t,n){const s=[],i=Se(n,r=>a(r.file)??"");for(const[r,c]of i)r&&s.push(`// ${r}`),s.push(...zt(e,c));const o=a(n[0]?.entity)??"",l=Jt(t,"hiddenBlocks",o);return l&&s.push(`// ${l}`),s}function zt(e,t){const n=[],{ownerGroups:s,standalone:i}=ae(t,o=>a(o.container)??"");for(const[o,l]of s)n.push(`// ${o}:`),n.push(...je(e,l));return i.length>0&&n.push(...je(e,i)),n}function je(e,t){const n=[];for(const s of t){if(typeof s.code=="string")n.push(s.code.trimEnd());else if(typeof s.omitted=="string"){const i=(0,S.useSessionGuidance)(e,"inspect.usages.codeOmitted",s.omitted)??"code omitted";n.push(`// ${i}`),typeof s.compactCode=="string"&&s.compactCode!==""&&n.push(s.compactCode)}n.push("")}return n}function Ke(e,t=!0){const n=[],s=a(e.entity);t&&s&&n.push(`// ${s}`);const i=a(e.file)??"",o=typeof e.line=="number"?` l${e.line}`:"";(i||o)&&n.push(`// ${i}${o}`.trim());const l=a(e.code);return l&&n.push(l.trimEnd()),n}function Ve(e,t){const n=a(e.entity)??"",s=ce(n),i=[`${t?n:s.name}:`],o=Array.isArray(e.usedBy)?e.usedBy.filter(p):[];for(const r of o){const c=a(r.file)??"",u=Array.isArray(r.locations)?r.locations.filter(p):[];if(u.length!==0){if(u.length===1){const[d]=u,m=typeof d?.line=="number"?d.line:0,y=a(d?.container);i.push(y?`${c}:${m} ${y}`:`${c}:${m}`);continue}i.push(`${c}:`),i.push(...Ht(u))}}const l=a(e.hidden);return l&&i.push(l),i}function Ht(e){const t=[],{ownerGroups:n,standalone:s}=ae(e,i=>a(i.container)??"");for(const[i,o]of n){t.push(`// ${i}:`);for(const l of o){const r=typeof l.line=="number"?l.line:0,c=ce(a(l.container)??"").name;t.push(c?`${c} l${r}`:`l${r}`)}}for(const i of s){const o=typeof i.line=="number"?i.line:0,l=a(i.container);t.push(l?`${l} l${o}`:`l${o}`)}return t}function Jt(e,t,n){const i=(Array.isArray(e[t])?e[t].filter(p):[]).find(o=>a(o.entity)===n);return i?a(i.hidden):null}function ae(e,t){const n=new Map,s=[];for(const i of e){const o=ce(t(i));if(!o.owner){s.push(i);continue}const l=n.get(o.owner)??[];l.push(i),n.set(o.owner,l)}return{ownerGroups:Array.from(n.entries()),standalone:s}}function ce(e){const t=e.lastIndexOf(".");return t<=0||t>=e.length-1?{owner:null,name:e}:{owner:e.slice(0,t),name:e.slice(t+1)}}function Se(e,t){const n=new Map;for(const s of e){const i=t(s),o=n.get(i)??[];o.push(s),n.set(i,o)}return Array.from(n.entries())}function Wt(e,t,n,s,i){const o=ye.readFileSync(e,"utf8"),l=we(o,t,n),r=we(o,s,i);return o.slice(l,r)}function we(e,t,n){let s=0,i=0;for(;i<e.length&&s<t;){const o=e.charCodeAt(i);o===13?(i+=e.charCodeAt(i+1)===10?2:1,s+=1):o===10?(i+=1,s+=1):i+=1}return Math.max(0,Math.min(i+n,e.length))}function Qt(e){return e.split(/\r?\n/).filter(t=>t.trim()!=="").length}function Q(e,t){const n=L.relative(e,t);return(n&&!n.startsWith("..")&&!L.isAbsolute(n)?n:t).replace(/\\/g,"/")}async function qt(e,t,n,s,i){const o=pe(n),l=[],r=[],c=[],u=(0,Y.buildDisplayPathAliases)(e,(0,S.readEffectiveSessionPathAliases)(e)),d=[];for(const b of o){if(!p(b))throw new E.CliError("INVALID_INSPECT_REQUEST","Inspect request must be an object.");a(b.op)==="graph"?(r.push(Zt(b)),d.push("graph")):a(b.op)==="imports"?(c.push(b),d.push("imports")):(l.push(b),d.push("inspect"))}const m=l.length>0?en((0,V.stripAgentText)(await Ce(e,["--stdin"],{requests:l},s,{...i,forceResults:!0}))):[],y=r.length>0?tn((0,V.stripAgentText)((0,ge.runInspectGraph)(e,["graph","--stdin"],{requests:r}))):[],h=c.map(b=>(0,be.buildInspectImportsResult)(e,{file:a(b.file)??a(b.fromFile)??a(b.sourceFile)??a(n.file)??"",ranges:B(b.ranges)!==!1,dynamic:B(b.dynamic)!==!1},u)),A=[];let C=0,I=0,O=0;for(const b of d)if(b==="graph"){const _=y[I++];_&&A.push(_)}else if(b==="imports"){const _=h[O++];_&&A.push(_)}else{const _=m[C++];_&&A.push(_)}const v={results:(0,be.mergeDirectoryFallbackResults)(A)};return Fe((0,V.attachAgentText)(v,(0,$.formatInspectMixedAgentText)(v)),Le(n).dslDiagnostics??[])}function Xt(e,t,n){if(t[0]==="graph")return null;if(t.includes("--stdin"))return p(n)?n:null;const s=F(t,"--from-json");return s?(0,he.readJsonObjectFile)(e,s,"INVALID_INSPECT_JSON_FILE"):null}function Yt(e){return pe(e).some(t=>p(t)&&(a(t.op)==="graph"||a(t.op)==="imports"))}function Zt(e){const t={...e};return delete t.op,delete t.sourceFile,t}function en(e){return Array.isArray(e.results)?e.results.filter(p).map(Ge):[Ge(e)]}function Ge(e){return e.op==="dependencies"?{...e,op:"deps"}:e}function tn(e){return Array.isArray(e.results)?e.results.filter(p).map(t=>({op:"graph",...t})):[{op:"graph",...nn(e)}]}function nn(e){const t={...e};return delete t.operation,delete t.next,delete t.last,typeof t.saved=="string"&&delete t.graphFile,t}function sn(e,t){(Array.isArray(t.payload.requests)?t.payload.requests:[]).forEach((s,i)=>{if(!p(s)||s.op!=="modulePlan"||s.previewFiles!==!0)return;const o=(0,w.normalizeModulePlanCacheRequest)(s),l=(0,w.buildModulePlanId)(o),r=a(s.previewDir),c=(0,w.resolveModulePlanPreviewDir)(e,l,r??void 0);s.previewDir=c,s.previewPatch=s.previewPatch!==!1,t.cachePlans.push({index:i,planId:l,normalizedRequest:o,previewDir:c})})}function on(e,t,n){if(!(t.cachePlans.length===0||!Array.isArray(n.results)))for(const s of t.cachePlans){const i=n.results[s.index];if(!p(i))continue;const o=a(s.normalizedRequest.sourceFile);if(!o)continue;const l=(0,w.hashFile)(o),r=(0,w.buildModulePlanHash)(s.normalizedRequest,l,i),c={planId:s.planId,planHash:r,createdAt:new Date().toISOString(),cwd:L.resolve(e),sourceFile:o,sourceHash:l,executable:i.ok!==!1,normalizedRequest:s.normalizedRequest,inspectPayload:t.payload,previewDir:s.previewDir,previewResult:i};(0,w.writeModulePlanRecord)(e,c),i.planId=s.planId,i.planHash=r,i.cached=!0,i.executable=i.ok!==!1,i.next=i.ok===!1?`Revise with: aib modulePlan revise --plan ${s.planId} --stdin`:`Run modulePlan apply ${s.planId} if the plan matches intent.`}}function rn(e,t){if(!t||!Array.isArray(e.results)||!p(e.results[0]))return e;const n=e.results[0];n.operation="modulePlan.revise",n.fromPlanId=t.fromPlanId,n.changes=t.changes;const s=En(n),i=t.previousBlocking.filter(o=>!s.includes(o));return i.length>0&&(n.resolved=i),n.remainingBlocking=Array.isArray(n.blocking)?n.blocking:[],delete n.blocking,delete n.boundary,delete n.targets,delete n.moduleCount,delete n.preview,delete n.facade,n.next=n.ok===!1||n.executable===!1?`Revise again from ${typeof n.planId=="string"?n.planId:t.fromPlanId}.`:`aib modulePlan apply ${typeof n.planId=="string"?n.planId:t.fromPlanId}`,(0,V.attachAgentText)(e,ln(n))}function ln(e){const t=[`modulePlan.revise ${typeof e.planId=="string"?e.planId:""}`.trim()];if(typeof e.fromPlanId=="string"&&t.push(`from: ${e.fromPlanId}`),typeof e.integrity=="string"&&t.push(e.integrity),p(e.api)&&typeof e.api.status=="string"){const n=typeof e.api.before=="number"?e.api.before:null,s=typeof e.api.after=="number"?e.api.after:null;t.push(n!==null&&s!==null?`api: ${e.api.status} ${n}->${s}`:`api: ${e.api.status}`)}if(typeof e.cycles=="string"&&t.push(`cycles: ${e.cycles}`),Array.isArray(e.changes)&&e.changes.length>0){t.push("changes:");for(const n of e.changes.filter(s=>typeof s=="string"))t.push(n)}return Array.isArray(e.resolved)&&e.resolved.length>0&&t.push(`resolved: ${e.resolved.length}`),Array.isArray(e.remainingBlocking)&&t.push(`remainingBlocking: ${e.remainingBlocking.length}`),typeof e.next=="string"&&t.push(`next: ${e.next}`),t.join(`
16
- `)}function an(e,t){if(!Array.isArray(t.payload.requests))return;const n=t.payload.requests.filter(p),s=new Map,i=[],o=new Map;for(let l=0;l<n.length;l+=1){const r=n[l],c=a(r.sourceFile);if(!c||!cn(a(r.op))||!Pn(c)){o.set(l,i.length),i.push(r);continue}let u=s.get(c);u?o.set(l,i.findIndex(m=>a(m.sourceFile)===c&&m.op==="directoryFallback")):(u=un(e,c),s.set(c,u),o.set(l,i.length),i.push(fn(u)));const d=dn(a(r.op));u.ops.includes(d)||u.ops.push(d)}s.size!==0&&(t.payload.requests=i,t.formatOptions.toFiles&&(t.formatOptions.toFiles=ue(t.formatOptions.toFiles,o,i.length)),t.formatOptions.saves&&(t.formatOptions.saves=ue(t.formatOptions.saves,o,i.length)),t.formatOptions.shows&&(t.formatOptions.shows=ze(t.formatOptions.shows,o,i.length)),t.formatOptions.ranges&&(t.formatOptions.ranges=ze(t.formatOptions.ranges,o,i.length)),t.formatOptions.parentNames&&(t.formatOptions.parentNames=ue(t.formatOptions.parentNames,o,i.length)),t.usagesDetails&&(t.usagesDetails=ue(t.usagesDetails,o,i.length)))}function cn(e){return e==="file"||e==="exports"||e==="members"||e==="code"||e==="dependencies"||e==="slice"}function un(e,t){const n=pn(e,t),s=(0,S.readEffectiveSessionPathAliases)(e),i=(0,Y.compactDisplayPath)(e,t,(0,Y.buildDisplayPathAliases)(e,s)),o=(0,oe.buildInspectTreeResult)(e,{scope:t,displayScope:i,depth:n,limit:40,aliases:s}),l=[];return{sourceFile:t,displayPath:i,ops:l,command:`aib inspect tree ${i} --depth ${n}`,result:{op:"directoryFallback",ok:!0,sourceFile:t,directory:i,skippedOps:l,command:`aib inspect tree ${i} --depth ${n}`,tree:o,lines:Array.isArray(o.lines)?o.lines:[]}}}function fn(e){return{op:"directoryFallback",sourceFile:e.sourceFile,fallback:e.result}}function pn(e,t){for(let n=1;n<=4;n+=1){const s=(0,oe.buildInspectTreeResult)(e,{scope:t,depth:n,limit:1});if(typeof s.files=="number"&&s.files>0)return n}return 2}function ue(e,t,n){const s=Array.from({length:n},()=>null);for(const[i,o]of t.entries())s[o]===null&&(s[o]=e[i]??null);return s}function ze(e,t,n){const s=Array.from({length:n},()=>!1);for(const[i,o]of t.entries())s[o]=s[o]||(e[i]??!1);return s}function dn(e){return e==="dependencies"?"deps":e??"inspect"}function mn(e,t,n,s,i,o){const l=Je(t),c=!(t.includes("--no-ranges")||t.includes("--noRanges"))&&(l==="code"||l==="file")||t.includes("--ranges")||l==="exports"&&(0,S.readSessionBooleanPref)(e,"inspect.exports.ranges",!1),u=t.includes("--details"),d=t.includes("--resolve-star")||l==="exports"&&(0,S.readSessionBooleanPref)(e,"inspect.exports.resolveStar",!1),m=t.includes("--local-only"),y=Fn(e,t),h=nt(t,"--offset"),A=H(t,"--limit")??(l==="members"?(0,S.readSessionNumberPref)(e,"inspect.members.maxItems",20):null),C=t.includes("--all")||l==="members"&&(0,S.readSessionBooleanPref)(e,"inspect.members.all",!1),I=F(t,"--to-file")??void 0,O=F(t,"--save")??void 0,v=l==="code"&&(t.includes("--no-show")||t.includes("--noShow")),b=t.includes("--show"),_=v?!1:b||l==="code"&&(0,S.readSessionBooleanPref)(e,"inspect.code.show",!0),D=(0,S.readSessionBooleanPref)(e,"inspect.code.meta",!0),P=l==="usages"?Ie(e,{detail:F(t,"--detail"),all:t.includes("--all"),limit:H(t,"--limit"),maxCodeLines:H(t,"--max-code-lines")??H(t,"--maxCodeLines")}):null,f=F(t,"--bundle-save")??void 0,M=F(t,"--preview-dir")??void 0,U=F(t,"--from-json")??void 0,G=F(t,"--parent")??void 0,x=G?(0,$.parseInspectSelector)(G,s).symbolName:void 0,ee=(0,Y.buildDisplayPathAliases)(e,(0,S.readEffectiveSessionPathAliases)(e)),te=[];if(I!==void 0&&O!==void 0)throw new E.CliError("INSPECT_OUTPUT_TARGET_CONFLICT","Use either --to-file or --save, not both.");const q={cwd:e,includeRanges:c,displayPathAliases:ee,pathAliasHints:te,details:u,localOnly:m,maxCodeLines:y,forceResults:o,show:_,codeMeta:D,...x!==void 0?{parentName:x,parentNames:[x]}:{},...I!==void 0?{toFile:I}:{},...O!==void 0?{save:O}:{},...f!==void 0?{bundleSave:f}:{},...M!==void 0?{previewDir:k(e,M)}:{}};if(U!==void 0){if(t.includes("--stdin")||n!==void 0)throw new E.CliError("INSPECT_INPUT_SOURCE_CONFLICT","Use either inspect --stdin or inspect --from-json, not both.");if(t.includes("--revise"))throw new E.CliError("INSPECT_REVISE_FROM_JSON_UNSUPPORTED","modulePlan revise currently expects --stdin.");const g=He((0,he.readJsonObjectFile)(e,U,"INVALID_INSPECT_JSON_FILE"),Je(t)),z=c||st(g),N=We(e,g,s,z,d,m,{memberOffset:h,memberLimit:A,memberAll:C},i);return{payload:N.payload,cachePlans:[],formatOptions:{...q,includeRanges:z,toFiles:N.toFiles,saves:N.saves,shows:N.shows,ranges:N.ranges,parentNames:N.parentNames,...f===void 0&&N.bundleSave!==void 0?{bundleSave:N.bundleSave}:{}},usagesDetails:N.usagesDetails}}if(n!==void 0){if(!p(n))throw new E.CliError("INVALID_INSPECT_STDIN","inspect input expects a JSON object payload.");if(t.includes("--revise"))return yn(e,t,n,s);const g=He(n,l),z=c||st(g),N=We(e,g,s,z,d,m,{memberOffset:h,memberLimit:A,memberAll:C},i);return{payload:N.payload,cachePlans:[],formatOptions:{...q,includeRanges:z,toFiles:N.toFiles,saves:N.saves,shows:N.shows,ranges:N.ranges,parentNames:N.parentNames,...f===void 0&&N.bundleSave!==void 0?{bundleSave:N.bundleSave}:{}},usagesDetails:N.usagesDetails,...Le(n)}}return{payload:hn(e,t,s,c,d,m,{memberOffset:h,memberLimit:A,memberAll:C},i),formatOptions:q,cachePlans:[],...P!==null?{usagesDetails:[P]}:{}}}function He(e,t){return!t||e.op!==void 0?e:{op:t,...e}}function Je(e){return e.filter(n=>!n.startsWith("--")&&!it(e,n))[0]??null}function yn(e,t,n,s){const i=F(t,"--plan");if(!i)throw new E.CliError("MODULE_PLAN_REVISE_PLAN_REQUIRED","modulePlan revise expects --plan <planId>.");const o=(0,w.readModulePlanRecord)(e,i),l=gn(e,o.previewResult,o.normalizedRequest,n,s),r=(0,w.buildModulePlanId)(l),c=(0,w.resolveModulePlanPreviewDir)(e,r);return{payload:{requests:[{...l,previewFiles:!0,previewPatch:!0,previewDir:c}]},formatOptions:{cwd:e,includeRanges:!1,displayPathAliases:(0,Y.buildDisplayPathAliases)(e,(0,S.readEffectiveSessionPathAliases)(e)),pathAliasHints:[],localOnly:!1,details:!1,maxCodeLines:(0,S.readSessionNumberPref)(e,"inspect.code.maxNonEmptyLines",120),codeMeta:(0,S.readSessionBooleanPref)(e,"inspect.code.meta",!0),previewDir:c},cachePlans:[{index:0,planId:r,normalizedRequest:l,previewDir:c}],revision:{fromPlanId:i,changes:Sn(e,o.normalizedRequest,l),previousBlocking:_n(o.previewResult,s)}}}function hn(e,t,n,s,i,o,l,r){const c=t.filter(I=>!I.startsWith("--")&&!it(t,I)),[u,d,m]=c;if(!u||!d)throw new E.CliError("INVALID_INSPECT_COMMAND","Expected: aib inspect <file|imports|exports|members|code|slice|deps|usages|duplicates> <file-or-dir> [entity].",{examples:["aib inspect file src/example.ts","aib inspect imports src/example.ts","aib inspect exports src/example.ts","aib inspect members src/example.ts c:Example","aib inspect code src/example.ts f:helper","aib inspect deps src/example.ts c:Example","aib inspect usages src/example.ts f:helper --scope src/main","aib inspect duplicates src/scripts --detail code"]});if(!rt(u))throw new E.CliError("INVALID_INSPECT_OP","Expected inspect op to be file, imports, exports, members, code, slice, deps, usages, duplicates, graph, tree, or cycles.");if(at(u,r),F(t,"--save")&&u!=="code"&&u!=="slice"&&u!=="usages"&&u!=="duplicate"&&u!=="duplicates")throw new E.CliError("INVALID_INSPECT_SAVE","inspect --save can be used only with code, slice, usages, or duplicates operations.");const y=lt(u),h={op:y,sourceFile:k(e,d),ranges:s||y==="code"||y==="slice",resolveStar:i,localOnly:y==="file"&&o};if(tt(h,l),y==="members"||y==="code"||y==="dependencies"||y==="slice"){if(!m)throw new E.CliError("INSPECT_ENTITY_REQUIRED",`inspect ${u} expects an entity selector.`);_e(h,m,n)}if(y==="usages"&&m&&_e(h,m,n),y==="duplicates"){h.detail=F(t,"--detail")??"locations",h.mode=F(t,"--mode")??"both";const I=H(t,"--limit"),O=nt(t,"--offset");I!==null&&(h.limit=I),O!==null&&(h.offset=O);const v=Bn(t,n);v.length>0&&(h.kinds=v);const b=de([...m?[m]:[],...R(t,"--entity"),...R(t,"--entities").flatMap(P=>P.split(","))],n);b.length>0&&(h.duplicateEntities=b);const _=de([...R(t,"--exclude"),...R(t,"--excludes").flatMap(P=>P.split(","))],n);_.length>0&&(h.duplicateExclude=_);const D=ft(e,[...R(t,"--path-exclude"),...R(t,"--path-excludes").flatMap(P=>P.split(",")),...R(t,"--exclude-path"),...R(t,"--exclude-paths").flatMap(P=>P.split(","))]);D.length>0&&(h.duplicatePathExclude=D)}const A=R(t,"--scope");if(y==="usages"&&A.length>0&&(h.scope=A.map(I=>k(e,I))),y==="duplicates"&&A.length>0&&(h.scope=A.map(I=>k(e,I))),y==="usages"){h.excludeTarget=t.includes("--exclude-target")||t.includes("--excludeTarget")||!1;const I=t.includes("--include-target")||t.includes("--includeTarget"),O=(0,S.readSessionBooleanPref)(e,"inspect.usages.excludeTarget",!1);I?h.excludeTarget=!1:h.excludeTarget===!0||O?h.excludeTarget=!0:Ze(e,a(h.sourceFile)??"",K(h.scope)??[])&&(h.excludeTarget=!0,h.targetLocalUsagesHidden=!0)}const C=F(t,"--parent");if(C){const I=(0,$.parseInspectSelector)(C,n);h.parentName=I.symbolName,I.symbolKind&&(h.parentKind=I.symbolKind)}return{requests:[h]}}function We(e,t,n,s,i,o,l,r){const c=pe(t),u=[],d=[],m=[],y=[],h=[],A=[],C=Lt(t.detail),I=B(t.all),O=J(t.limit),v=J(t.maxCodeLines),b=B(t.excludeTarget),_=B(t.includeTarget),D=a(t.bundleSave)??a(t.bundle)??a(t.saveBundle)??void 0;return{payload:{requests:c.map((f,M)=>{if(!p(f))throw new E.CliError("INVALID_INSPECT_REQUEST",`Inspect request at index ${M} must be an object.`);const U=a(f.op),G=a(f.sourceFile)??a(f.file)??(U==="usages"?a(f.target)??a(f.usageTarget)??a(f.dir):null)??(U==="duplicate"||U==="duplicates"?a(f.target)??a(f.dir)??ut(f.scope)??ut(f.scopes):null);if(!U||!rt(U))throw new E.CliError("INVALID_INSPECT_OP",`Inspect request at index ${M} has invalid op.`);if(at(U,r),!G)throw new E.CliError("SOURCE_FILE_REQUIRED",`Inspect request at index ${M} requires sourceFile or file.`);const x=lt(U),te=B(f.ranges)??B(f.includeRanges)??(x==="code"||x==="slice"||x==="file"?!0:x==="exports"?(0,S.readSessionBooleanPref)(e,"inspect.exports.ranges",!1):s),q=te||x==="code"||x==="slice",g={op:x,sourceFile:k(e,G),ranges:q,resolveStar:B(f.resolveStar)??(x==="exports"?(0,S.readSessionBooleanPref)(e,"inspect.exports.resolveStar",!1):i),localOnly:x==="file"&&(f.localOnly===!0||o)};if(x==="usages"){A.push(Ie(e,{detail:a(f.detail)??C,all:B(f.all)??I,limit:J(f.limit)??O,maxCodeLines:J(f.maxCodeLines)??v}));const T=K(f.scope)??K(f.scopes);T&&T.length>0&&(g.scope=T.map(se=>k(e,se)));const W=B(f.includeTarget)??_,X=B(f.excludeTarget)??b,ne=(0,S.readSessionBooleanPref)(e,"inspect.usages.excludeTarget",!1);W===!0?g.excludeTarget=!1:X!==null?g.excludeTarget=X:ne?g.excludeTarget=!0:Ze(e,g.sourceFile,K(g.scope)??[])&&(g.excludeTarget=!0,g.targetLocalUsagesHidden=!0),Array.isArray(f.entities)&&(g.usageEntities=$n(f.entities,n))}else A.push(null);if(x==="duplicates"){g.detail=a(f.detail)??a(t.detail)??"locations",g.mode=a(f.mode)??a(t.mode)??"both",g.limit=J(f.limit)??J(t.limit)??10,g.offset=fe(f.offset)??fe(t.offset)??0;const T=K(f.scope)??K(f.scopes)??K(t.scope)??K(t.scopes);T&&T.length>0&&(g.scope=T.map(yt=>k(e,yt)));const W=kn(f.kinds??t.kinds,n);W.length>0&&(g.kinds=W);const X=de(f.entities??f.entity??t.entities??t.entity,n);X.length>0&&(g.duplicateEntities=X);const ne=de(f.exclude??f.excludes??t.exclude??t.excludes,n);ne.length>0&&(g.duplicateExclude=ne);const se=ft(e,f.pathExclude??f.pathExcludes??f.excludePath??f.excludePaths??t.pathExclude??t.pathExcludes??t.excludePath??t.excludePaths);se.length>0&&(g.duplicatePathExclude=se)}if(x==="modulePlan"){g.modules=Tn(e,f.modules,n);const T=a(f.facade)??a(f.facadeFile);if(T&&(g.facadeFile=k(e,T)),f.previewFiles===!0||f.preview==="files"){g.previewFiles=!0;const W=a(f.previewDir)??a(f.outputDir);W&&(g.previewDir=k(e,W)),g.previewPatch=f.previewPatch!==!1}}tt(g,{memberOffset:fe(f.offset)??fe(f.memberOffset)??l.memberOffset,memberLimit:J(f.limit)??J(f.memberLimit)??l.memberLimit??(x==="members"?(0,S.readSessionNumberPref)(e,"inspect.members.maxItems",20):null),memberAll:B(f.all)??B(f.memberAll)??(x==="members"?(0,S.readSessionBooleanPref)(e,"inspect.members.all",!1):l.memberAll)});const z=a(f.id);z&&(g.id=z);const N=x==="modulePlan"?null:a(f.toFile)??a(f.outputFile),me=x==="modulePlan"?null:a(f.save);if(N&&x!=="code"&&x!=="slice")throw new E.CliError("INVALID_INSPECT_TO_FILE",`Inspect request at index ${M} can use toFile only with code or slice operations.`);if(me&&x!=="code"&&x!=="slice"&&x!=="usages"&&x!=="duplicates")throw new E.CliError("INVALID_INSPECT_SAVE",`Inspect request at index ${M} can use save only with code, slice, usages, or duplicates operations.`);if(N&&me)throw new E.CliError("INSPECT_OUTPUT_TARGET_CONFLICT",`Inspect request at index ${M} must use either toFile or save, not both.`);u.push(N),d.push(me);const mt=typeof f.show=="boolean"?f.show:null;m.push(mt??(x==="code"&&(0,S.readSessionBooleanPref)(e,"inspect.code.show",!0))),y.push(te);const Ee=a(f.entity);Ee&&_e(g,Ee,n);const Ne=a(f.parent);if(Ne){const T=(0,$.parseInspectSelector)(Ne,n);g.parentName=T.symbolName,T.symbolKind&&(g.parentKind=T.symbolKind),h.push(T.symbolName)}else h.push(null);return g})},toFiles:u,saves:d,shows:m,ranges:y,parentNames:h,usagesDetails:A,...D!==void 0?{bundleSave:D}:{}}}function _e(e,t,n){const s=(0,$.parseInspectSelector)(t,n);e.symbolName=s.symbolName,s.symbolKind&&(e.symbolKind=s.symbolKind)}function gn(e,t,n,s,i){const o=Nn(n),l=[...bn(e,s),...In(e,t,s,i)];if(l.length===0)throw new E.CliError("MODULE_PLAN_REVISE_MOVES_REQUIRED","modulePlan revise expects moves or applySuggestedFixes.");for(const r of l)An(o,r,i);return o}function bn(e,t){return(Array.isArray(t.moves)?t.moves:[]).filter(p).map(s=>{const i=a(s.entity)??a(s.symbol)??a(s.selector),o=a(s.to)??a(s.target)??a(s.toFile)??a(s.targetFile);return i&&o?{selector:i,toFile:k(e,o)}:null}).filter(s=>s!==null)}function In(e,t,n,s){const i=n.applySuggestedFixes,o=xn(t,s),l=i===!0||i==="all"?o.map((r,c)=>c):Array.isArray(i)?i:[];return l.length===0?[]:l.map(r=>typeof r=="number"?r:typeof r=="string"?Number(r):NaN).filter(r=>Number.isInteger(r)&&r>=0&&r<o.length).map(r=>({selector:o[r].selector,toFile:k(e,o[r].toFile)}))}function xn(e,t){const n=p(e.boundary)?e.boundary:{},s=Array.isArray(n.nonExportedImports)?n.nonExportedImports.filter(p):[],i=[];for(const o of s){const l=Array.isArray(o.suggestedFixes)?o.suggestedFixes.filter(p):[];for(const r of l){if(r.kind!=="moveSymbol")continue;const c=Qe(r.symbol,t),u=a(r.toFile);c&&u&&i.push({selector:c,toFile:u})}}return i}function Qe(e,t){if(!p(e))return null;const n=a(e.name),s=a(e.kind);if(!n||!s)return null;const i=t.entityKindAliases[s];return i?`${i}${t.selectorSeparator}${n}`:`${s}:${n}`}function An(e,t,n){const s=Array.isArray(e.modules)?e.modules.filter(p):[],i=(0,$.parseInspectSelector)(t.selector,n);let o=null;for(const c of s){const u=Array.isArray(c.symbols)?c.symbols:[],d=[];for(const m of u)o===null&&qe(m,i)?o=m:d.push(m);c.symbols=d}if(o===null)throw new E.CliError("MODULE_PLAN_REVISE_SYMBOL_NOT_FOUND",`Symbol not found in cached module plan: ${t.selector}`,{symbol:t.selector});let l=s.find(c=>a(c.targetFile)===t.toFile);l||(l={targetFile:t.toFile,symbols:[]},s.push(l));const r=Array.isArray(l.symbols)?l.symbols:[];r.some(c=>qe(c,i))||r.push(o),l.symbols=r,e.modules=s.filter(c=>Array.isArray(c.symbols)&&c.symbols.length>0)}function qe(e,t){if(!p(e))return!1;const n=a(e.raw),s=a(e.symbolName),i=a(e.symbolKind);return n===t.raw||s===t.symbolName&&(!t.symbolKind||i===t.symbolKind)}function Sn(e,t,n){const s=Ye(t),i=Ye(n),o=[];for(const[l,r]of i.entries()){const c=s.get(l);c&&c!==r&&o.push(`${l}: ${Xe(e,c)} -> ${Xe(e,r)}`)}return o}function _n(e,t){const n=p(e.boundary)?e.boundary:{};return(Array.isArray(n.nonExportedImports)?n.nonExportedImports.filter(p):[]).flatMap(i=>{const o=a(i.code)??"MODULE_PLAN_BOUNDARY_WARNING";return(Array.isArray(i.symbols)?i.symbols.filter(p):[]).map(r=>Qe(r,t)).filter(r=>typeof r=="string").map(r=>`${o}: ${r}`)})}function En(e){return(Array.isArray(e.blocking)?e.blocking.filter(p):[]).flatMap(n=>{const s=a(n.code)??"MODULE_PLAN_BOUNDARY_WARNING";return(Array.isArray(n.symbols)?n.symbols.filter(o=>typeof o=="string"):[]).map(o=>`${s}: ${o}`)})}function Xe(e,t){return L.relative(e,t).replace(/\\/g,"/")}function Ye(e){const t=new Map,n=Array.isArray(e.modules)?e.modules.filter(p):[];for(const s of n){const i=a(s.targetFile);if(!i)continue;const o=Array.isArray(s.symbols)?s.symbols.filter(p):[];for(const l of o){const r=a(l.raw),c=a(l.symbolName),u=a(l.symbolKind),d=r??(c?`${u??"symbol"}:${c}`:null);d&&t.set(d,i)}}return t}function Nn(e){return JSON.parse(JSON.stringify(e))}function k(e,t){return L.normalize(L.isAbsolute(t)?t:L.resolve(e,t))}function Ze(e,t,n){const s=L.normalize(t);return n.length===0?!et(s,e):n.some(i=>vn(i,s))}function vn(e,t){const n=L.normalize(e),s=L.normalize(t);return et(n,s)||Cn(n)?!1:Dn(s,n)}function Dn(e,t){const n=L.relative(L.normalize(t),L.normalize(e));return n!==""&&!n.startsWith("..")&&!L.isAbsolute(n)}function et(e,t){return L.normalize(e).toLowerCase()===L.normalize(t).toLowerCase()}function Cn(e){try{return ye.statSync(e).isFile()}catch{return!1}}function Pn(e){try{return ye.statSync(e).isDirectory()}catch{return!1}}function tt(e,t){if(t.memberAll){e.memberAll=!0;return}typeof t.memberOffset=="number"&&(e.memberOffset=t.memberOffset),typeof t.memberLimit=="number"&&(e.memberLimit=t.memberLimit)}function Fn(e,t){const n=F(t,"--max-lines");if(!n)return(0,S.readSessionNumberPref)(e,"inspect.code.maxNonEmptyLines",120);const s=Number(n);if(!Number.isInteger(s)||s<1)throw new E.CliError("INVALID_MAX_LINES","Expected --max-lines to be a positive integer.");return s}function H(e,t){const n=F(e,t);if(!n)return null;const s=Number(n);if(!Number.isInteger(s)||s<1)throw new E.CliError("INVALID_INSPECT_LIMIT",`Expected ${t} to be a positive integer.`);return s}function nt(e,t){const n=F(e,t);if(!n)return null;const s=Number(n);if(!Number.isInteger(s)||s<0)throw new E.CliError("INVALID_INSPECT_OFFSET",`Expected ${t} to be a non-negative integer.`);return s}function J(e){const t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:null}function fe(e){const t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>=0?t:null}function B(e){return typeof e=="boolean"?e:null}function st(e){return pe(e).some(n=>p(n)&&(n.ranges===!0||n.includeRanges===!0))}function pe(e){const t=On(e),n=Array.isArray(e.requests)?e.requests:[e],s=[];for(const i of n){if(!p(i)){s.push(i);continue}const o={...t,...i};delete o.requests;const l=Array.isArray(o.entities)?o.entities:null;if(!l){delete o.entities,s.push(o);continue}const r=a(o.op);if(r==="usages"||r==="duplicate"||r==="duplicates"){s.push(o);continue}delete o.entities;for(const c of l){if(p(c)){const u=Array.isArray(c.entities)?c.entities:null;if(u){const d={...c};delete d.entities;for(const m of u)s.push(Ln(o,d,m));continue}s.push({...o,...c});continue}if(typeof c!="string"||c.trim()===""){s.push({...o,entity:c});continue}s.push({...o,entity:c.trim()})}}return s}function Ln(e,t,n){return p(n)?{...e,...t,...n}:typeof n=="string"&&n.trim()!==""?{...e,...t,entity:n.trim()}:{...e,...t,entity:n}}function On(e){const t={};for(const n of["op","sourceFile","file","target","usageTarget","dir","scope","scopes","excludeTarget","includeTarget","ranges","includeRanges","resolveStar","localOnly","parent","offset","limit","all","memberOffset","memberLimit","memberAll","detail","mode","kinds","entities","entity","exclude","excludes","pathExclude","pathExcludes","excludePath","excludePaths","toFile","outputFile","save","show","bundleSave","bundle","saveBundle","previewFiles","preview","previewDir","outputDir","previewPatch","modules","facade","facadeFile"])e[n]!==void 0&&(t[n]=e[n]);return t}function F(e,t){const n=e.indexOf(t);if(n<0)return null;const s=e[n+1];return s&&!s.startsWith("--")?s:null}function R(e,t){const n=[];for(let s=0;s<e.length;s+=1){if(e[s]!==t)continue;const i=e[s+1];i&&!i.startsWith("--")&&n.push(i)}return n}function it(e,t){const n=e.indexOf(t);return n>0&&(e[n-1]==="--parent"||e[n-1]==="--max-lines"||e[n-1]==="--to-file"||e[n-1]==="--save"||e[n-1]==="--bundle-save"||e[n-1]==="--preview-dir"||e[n-1]==="--from-json"||e[n-1]==="--from-dsl"||e[n-1]==="--from"||e[n-1]==="--offset"||e[n-1]==="--limit"||e[n-1]==="--max-code-lines"||e[n-1]==="--maxCodeLines"||e[n-1]==="--scope"||e[n-1]==="--detail"||e[n-1]==="--mode"||e[n-1]==="--kind"||e[n-1]==="--kinds"||e[n-1]==="--entity"||e[n-1]==="--entities"||e[n-1]==="--exclude"||e[n-1]==="--excludes"||e[n-1]==="--path-exclude"||e[n-1]==="--path-excludes"||e[n-1]==="--exclude-path"||e[n-1]==="--exclude-paths")}function Tn(e,t,n){return Array.isArray(t)?t.filter(p).map(s=>{const i=a(s.target)??a(s.targetFile)??a(s.file),o=Array.isArray(s.entities)?s.entities:Array.isArray(s.symbols)?s.symbols:[];return{...i?{targetFile:k(e,i)}:{},symbols:o.map(l=>Mn(l,n)).filter(p)}}):[]}function $n(e,t){return e.flatMap(n=>ot(n,t,{})).filter(p)}function ot(e,t,n){if(typeof e=="string"&&e.trim()!==""){const c=(0,$.parseInspectSelector)(e,t);return[{...n,raw:e.trim(),symbolName:c.symbolName,...c.symbolKind?{symbolKind:c.symbolKind}:{}}]}if(!p(e))return[];const s=a(e.parent),i={...n};if(s){const c=(0,$.parseInspectSelector)(s,t);i.parentName=c.symbolName,c.symbolKind&&(i.parentKind=c.symbolKind)}const o=Array.isArray(e.entities)?e.entities:null;if(o)return o.flatMap(c=>ot(c,t,i));const l=a(e.entity)??a(e.selector)??a(e.raw);if(!l)return[];const r=(0,$.parseInspectSelector)(l,t);return[{...i,raw:l,symbolName:r.symbolName,...r.symbolKind?{symbolKind:r.symbolKind}:{}}]}function Mn(e,t){if(typeof e=="string"&&e.trim()!==""){const s=(0,$.parseInspectSelector)(e,t);return{raw:e.trim(),symbolName:s.symbolName,...s.symbolKind?{symbolKind:s.symbolKind}:{}}}if(!p(e))return null;const n=a(e.entity)??a(e.selector)??a(e.raw);if(n){const s=(0,$.parseInspectSelector)(n,t);return{raw:n,symbolName:s.symbolName,...s.symbolKind?{symbolKind:s.symbolKind}:{}}}return e}function rt(e){return e==="file"||e==="exports"||e==="imports"||e==="members"||e==="code"||e==="deps"||e==="slice"||e==="modulePlan"||e==="usages"||e==="duplicate"||e==="duplicates"||e==="tree"||e==="cycles"}function lt(e){return e==="deps"?"dependencies":e==="duplicate"?"duplicates":e==="cycles"?"cycles":e==="imports"?"imports":e}function at(e,t){e!=="modulePlan"||t||ct()}function ct(){throw new E.CliError("INSPECT_MODULE_PLAN_UNSUPPORTED","inspect is limited to file, exports, members, code, slice, deps, usages, duplicates, graph, tree, cycles, and imports. Use modulePlan preview/revise/apply/validate for module extraction plans.")}function Un(e,t){return e[0]==="modulePlan"?!0:!e.includes("--stdin")||!p(t)?!1:a(t.op)==="modulePlan"?!0:(Array.isArray(t.requests)?t.requests:[]).some(i=>p(i)&&a(i.op)==="modulePlan")}function a(e){return typeof e=="string"&&e.trim()!==""?e.trim():null}function K(e){return typeof e=="string"&&e.trim()!==""?[e.trim()]:Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim()!=="").map(t=>t.trim()):null}function ut(e){if(typeof e=="string"&&e.trim()!=="")return e.trim();if(!Array.isArray(e))return null;const t=e.find(n=>typeof n=="string"&&n.trim()!=="");return typeof t=="string"?t.trim():null}function Bn(e,t){const n=[...R(e,"--kind"),...R(e,"--kinds").flatMap(s=>s.split(","))];return dt(n,t)}function kn(e,t){const n=K(e)??[];return dt(n.flatMap(s=>s.split(",")),t)}function de(e,t){return(Array.isArray(e)?e:typeof e=="string"?e.split(","):e&&typeof e=="object"&&!Array.isArray(e)?[e]:[]).flatMap(s=>{if(typeof s=="string"){const l=s.trim();if(!l)return[];const r=(0,$.parseInspectSelector)(l,t);return[pt(r.symbolName,r.symbolKind??null)]}if(!p(s))return[];const i=a(s.entity)??a(s.selector)??a(s.name);if(!i)return[];const o=(0,$.parseInspectSelector)(i,t);return[pt(o.symbolName,o.symbolKind??null)]})}function ft(e,t){return(Array.isArray(t)?t:typeof t=="string"?t.split(","):[]).filter(s=>typeof s=="string").map(s=>s.trim()).filter(s=>s.length>0).map(s=>L.isAbsolute(s)?s:L.resolve(e,s)).map(s=>s.replace(/\\/g,"/"))}function pt(e,t){return t?{symbolName:e,symbolKind:t}:{symbolName:e}}function dt(e,t){const n=new Map;for(const[i,o]of Object.entries(t.entityKindAliases))n.set(i.toLowerCase(),i),n.set(String(o).toLowerCase(),i);const s=e.map(i=>n.get(i.trim().toLowerCase())??"").filter(i=>i!=="");return Array.from(new Set(s))}function p(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}
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.runInspect = runInspect;
37
+ exports.buildInspectRequest = buildInspectRequest;
38
+ const path = __importStar(require("node:path"));
39
+ const fs = __importStar(require("node:fs"));
40
+ const node_crypto_1 = require("node:crypto");
41
+ const resolve_1 = require("../config/resolve");
42
+ const env_vars_1 = require("../config/env-vars");
43
+ const request_env_1 = require("../config/request-env");
44
+ const standalone_inspect_analysis_1 = require("../inspect/standalone-inspect-analysis");
45
+ const standalone_inspect_process_1 = require("../inspect/standalone-inspect-process");
46
+ const inspect_source_shape_1 = require("../inspect/inspect-source-shape");
47
+ const agent_dx_1 = require("../agent-dx/agent-dx");
48
+ const errors_1 = require("../shared/errors");
49
+ const agent_text_1 = require("../shared/agent-text");
50
+ const inspect_format_1 = require("./inspect-format");
51
+ const inspect_selector_1 = require("./inspect-selector");
52
+ const module_plan_cache_1 = require("./module-plan-cache");
53
+ const json_file_input_1 = require("./json-file-input");
54
+ const inspect_graph_1 = require("./inspect-graph");
55
+ const inspect_cycles_1 = require("./inspect-cycles");
56
+ const inspect_imports_1 = require("./inspect-imports");
57
+ const inspect_tree_1 = require("./inspect-tree");
58
+ const inspect_topology_1 = require("./inspect-topology");
59
+ const inspect_alias_candidates_1 = require("./inspect-alias-candidates");
60
+ const path_display_1 = require("../config/path-display");
61
+ const session_workspace_1 = require("./session-workspace");
62
+ const inspect_usages_detail_1 = require("./inspect-usages-detail");
63
+ const inspect_direct_usages_1 = require("./inspect-direct-usages");
64
+ const inspect_request_values_1 = require("./inspect-request-values");
65
+ async function runInspect(cwd, restArgs, stdinPayload, options = {}, commandOptions = {}) {
66
+ const observationSignals = (0, agent_dx_1.collectAgentDxObservationSignals)(cwd, buildInspectObservation(restArgs, stdinPayload));
67
+ if (isInspectUsagesSavedDetailRequest(restArgs)) {
68
+ return runInspectUsagesSavedDetail(cwd, restArgs);
69
+ }
70
+ const inlinePayload = readInlineInspectPayload(cwd, restArgs, stdinPayload);
71
+ if (inlinePayload && isGraphOnlyInlinePayload(inlinePayload)) {
72
+ const runInProcess = () => runInspectWithInlineLocal(cwd, restArgs, inlinePayload, options, commandOptions);
73
+ return commandOptions.lexicalGraph
74
+ ? commandOptions.lexicalGraph.executeInspectGraph(cwd, restArgs, stdinPayload, runInProcess)
75
+ : runInProcess();
76
+ }
77
+ if (inlinePayload && inspectPayloadContainsLocal(inlinePayload)) {
78
+ return runInspectWithInlineLocal(cwd, restArgs, inlinePayload, options, commandOptions);
79
+ }
80
+ if ((0, inspect_graph_1.isInspectGraphRequest)(restArgs, stdinPayload)) {
81
+ const runInProcess = async () => (0, inspect_graph_1.runInspectGraph)(cwd, restArgs, stdinPayload);
82
+ return commandOptions.lexicalGraph
83
+ ? commandOptions.lexicalGraph.executeInspectGraph(cwd, restArgs, stdinPayload, runInProcess)
84
+ : runInProcess();
85
+ }
86
+ if ((0, inspect_topology_1.isInspectTopologyRequest)(restArgs, stdinPayload)) {
87
+ const runInProcess = () => (0, inspect_topology_1.runInspectTopology)(cwd, restArgs, commandOptions.semanticContextPool);
88
+ const result = restArgs[0] === "boundaries" && commandOptions.semanticBoundaries
89
+ ? await commandOptions.semanticBoundaries.executeInspectBoundaries(cwd, restArgs, runInProcess)
90
+ : runInProcess();
91
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, result, observationSignals);
92
+ }
93
+ if ((0, inspect_cycles_1.isInspectCyclesRequest)(restArgs, stdinPayload)) {
94
+ return (0, inspect_cycles_1.runInspectCycles)(cwd, restArgs, stdinPayload);
95
+ }
96
+ if ((0, inspect_tree_1.isInspectTreeRequest)(restArgs, stdinPayload)) {
97
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, (0, inspect_tree_1.runInspectTree)(cwd, restArgs, stdinPayload), observationSignals);
98
+ }
99
+ if ((0, inspect_alias_candidates_1.isInspectAliasCandidatesRequest)(restArgs, stdinPayload)) {
100
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, (0, inspect_alias_candidates_1.runInspectAliasCandidates)(cwd, restArgs, stdinPayload), observationSignals);
101
+ }
102
+ if (restArgs[0] === "imports") {
103
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, (0, inspect_imports_1.runInspectImports)(cwd, restArgs, stdinPayload), [
104
+ ...observationSignals,
105
+ ...collectInspectAgentDxSignals(restArgs)
106
+ ]);
107
+ }
108
+ if (commandOptions.allowModulePlan !== true && (0, inspect_request_values_1.inspectArgsContainModulePlan)(restArgs, stdinPayload)) {
109
+ (0, inspect_request_values_1.throwInspectModulePlanUnsupported)();
110
+ }
111
+ const standaloneConfig = (0, resolve_1.resolveCliConfig)(null);
112
+ const standaloneRequest = buildInspectRequest(cwd, restArgs, stdinPayload, standaloneConfig, commandOptions.allowModulePlan === true, commandOptions.forceResults === true);
113
+ applyDirectoryInspectFallbacks(cwd, standaloneRequest);
114
+ ensureStandaloneInspectSelectorsResolvable(standaloneRequest.payload, standaloneConfig);
115
+ prepareExecutableModulePlanRequests(cwd, standaloneRequest);
116
+ const workspaceContextDebug = inspectWorkspaceContextDebugEnabled(restArgs);
117
+ applyInspectWorkspaceContextDebugFlag(standaloneRequest.payload, workspaceContextDebug);
118
+ const payload = inspectBuiltRequestNeedsWorker(standaloneRequest)
119
+ ? await (0, standalone_inspect_process_1.runStandaloneInspectWorker)(cwd, standaloneRequest.payload)
120
+ : await (0, standalone_inspect_analysis_1.runStandaloneInspectPayload)(cwd, standaloneRequest.payload);
121
+ writeInspectWorkspaceContextDebugArtifact(cwd, workspaceContextDebug, standaloneRequest.payload, payload);
122
+ cacheExecutableModulePlans(cwd, standaloneRequest, payload);
123
+ const response = (0, inspect_format_1.formatInspectResponse)(payload, standaloneConfig, standaloneRequest.formatOptions);
124
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, applyInspectDslDiagnostics(applyUsagesDetails(cwd, payload, response, standaloneRequest), standaloneRequest), [...observationSignals, ...(standaloneRequest.agentDxSignals ?? [])]);
125
+ }
126
+ function inspectBuiltRequestNeedsWorker(request) {
127
+ const rows = Array.isArray(request.payload.requests) ? request.payload.requests.filter(inspect_usages_detail_1.isObject) : [request.payload];
128
+ return rows.some((row) => (0, inspect_usages_detail_1.readString)(row.op) === "usages" || (0, inspect_usages_detail_1.readString)(row.op) === "duplicates");
129
+ }
130
+ function ensureStandaloneInspectSelectorsResolvable(payload, config) {
131
+ const requests = Array.isArray(payload.requests) ? payload.requests.filter(inspect_usages_detail_1.isObject) : [payload];
132
+ const ambiguities = [];
133
+ const symbolsByFile = new Map();
134
+ for (const request of requests) {
135
+ const op = (0, inspect_usages_detail_1.readString)(request.op);
136
+ const sourceFile = (0, inspect_usages_detail_1.readString)(request.sourceFile);
137
+ const symbolName = (0, inspect_usages_detail_1.readString)(request.symbolName);
138
+ if (!sourceFile || !symbolName || (0, inspect_usages_detail_1.readString)(request.symbolKind) || !["code", "slice", "dependencies", "members", "usages"].includes(op ?? "")) {
139
+ continue;
140
+ }
141
+ if (!fs.existsSync(sourceFile) || !fs.statSync(sourceFile).isFile()) {
142
+ continue;
143
+ }
144
+ let symbols = symbolsByFile.get(sourceFile);
145
+ if (!symbols) {
146
+ symbols = (0, inspect_source_shape_1.collectInspectSymbols)(sourceFile, fs.readFileSync(sourceFile, "utf8"));
147
+ symbolsByFile.set(sourceFile, symbols);
148
+ }
149
+ const matches = symbols.filter((symbol) => symbol.name === symbolName);
150
+ if (matches.length <= 1) {
151
+ continue;
152
+ }
153
+ ambiguities.push({
154
+ entity: symbolName,
155
+ suggestions: matches.map((symbol) => {
156
+ const alias = config.entityKindAliases[symbol.kind] ?? symbol.kind;
157
+ return `${alias}${config.selectorSeparator}${symbolName}`;
158
+ })
159
+ });
160
+ }
161
+ if (ambiguities.length === 0) {
162
+ return;
163
+ }
164
+ const first = ambiguities[0];
165
+ throw new errors_1.CliError("AMBIGUOUS_ENTITY_SELECTOR", ambiguities.length === 1 ? `Ambiguity detected for entity "${first.entity}".` : `Ambiguity detected for ${ambiguities.length} entities.`, { ambiguities, suggestions: first.suggestions });
166
+ }
167
+ function isGraphOnlyInlinePayload(payload) {
168
+ const requests = (0, inspect_request_values_1.expandInspectStdinRequests)(payload);
169
+ return requests.length > 0 && requests.every((request) => (0, inspect_usages_detail_1.isObject)(request) && (0, inspect_usages_detail_1.readString)(request.op) === "graph");
170
+ }
171
+ function inspectWorkspaceContextDebugEnabled(restArgs) {
172
+ return restArgs.includes("--debug-workspace-context") ||
173
+ process.argv.includes("--debug-workspace-context");
174
+ }
175
+ function applyInspectWorkspaceContextDebugFlag(payload, enabled) {
176
+ if (!enabled) {
177
+ return;
178
+ }
179
+ if (typeof payload.op === "string") {
180
+ payload.debugWorkspaceContext = true;
181
+ }
182
+ if (!Array.isArray(payload.requests)) {
183
+ return;
184
+ }
185
+ for (const request of payload.requests) {
186
+ if ((0, inspect_usages_detail_1.isObject)(request)) {
187
+ request.debugWorkspaceContext = true;
188
+ }
189
+ }
190
+ }
191
+ function writeInspectWorkspaceContextDebugArtifact(cwd, enabled, request, response) {
192
+ if (!enabled) {
193
+ return;
194
+ }
195
+ try {
196
+ const dir = path.join(cwd, ".aib-debug", "workspace-context");
197
+ fs.mkdirSync(dir, { recursive: true });
198
+ const hash = (0, node_crypto_1.createHash)("sha1").update(JSON.stringify(request)).digest("hex").slice(0, 10);
199
+ const fileName = `${new Date().toISOString().replace(/[:.]/g, "-")}-inspect-${hash}.json`;
200
+ fs.writeFileSync(path.join(dir, fileName), `${JSON.stringify({
201
+ schemaVersion: 1,
202
+ kind: "inspect.workspaceContext",
203
+ cwd: path.resolve(cwd),
204
+ request,
205
+ response
206
+ }, null, 2)}\n`);
207
+ }
208
+ catch {
209
+ // Debug artifacts are best-effort and must never change inspect behavior.
210
+ }
211
+ }
212
+ function isInspectUsagesSavedDetailRequest(restArgs) {
213
+ return restArgs[0] === "usages" && (0, inspect_request_values_1.readFlagValue)(restArgs, "--from-file") !== null;
214
+ }
215
+ function runInspectUsagesSavedDetail(cwd, restArgs) {
216
+ const fromFile = (0, inspect_request_values_1.readFlagValue)(restArgs, "--from-file");
217
+ if (!fromFile) {
218
+ throw new errors_1.CliError("USAGES_FROM_FILE_REQUIRED", "inspect usages --from-file expects a saved usages handle or JSON file.");
219
+ }
220
+ const file = (0, session_workspace_1.resolveSessionFileArgument)(cwd, fromFile);
221
+ const artifact = (0, json_file_input_1.readJsonObjectFile)(cwd, file, "INVALID_USAGES_ARTIFACT");
222
+ const focus = (0, inspect_request_values_1.readFlagValues)(restArgs, "--focus");
223
+ const detailOptions = (0, inspect_usages_detail_1.readUsagesDetailOptions)(cwd, {
224
+ detail: (0, inspect_request_values_1.readFlagValue)(restArgs, "--detail") ?? "locations",
225
+ all: restArgs.includes("--all"),
226
+ limit: (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--limit"),
227
+ maxCodeLines: (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--max-code-lines") ?? (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--maxCodeLines")
228
+ });
229
+ if (detailOptions.detail === "summary") {
230
+ throw new errors_1.CliError("INVALID_USAGES_DETAIL", "inspect usages --from-file --detail expects locations or code.");
231
+ }
232
+ if (detailOptions.detail !== "locations" && detailOptions.detail !== "code") {
233
+ throw new errors_1.CliError("INVALID_USAGES_DETAIL", "inspect usages --detail expects locations or code.");
234
+ }
235
+ const result = (0, inspect_usages_detail_1.buildUsagesDetail)(cwd, artifact, focus, detailOptions);
236
+ return (0, agent_text_1.attachAgentText)(result, (0, inspect_usages_detail_1.formatUsagesDetailAgentText)(cwd, result));
237
+ }
238
+ function applyUsagesDetails(cwd, payload, response, builtRequest) {
239
+ const details = builtRequest.usagesDetails ?? [];
240
+ const responseWithMetadata = applyUsagesRequestMetadata(response, builtRequest);
241
+ if (details.length === 0 || details.every((detail) => detail === null || detail.detail === "summary")) {
242
+ return responseWithMetadata;
243
+ }
244
+ const rawResults = Array.isArray(payload.results) ? payload.results.filter(inspect_usages_detail_1.isObject) : [];
245
+ if (rawResults.length === 0) {
246
+ return responseWithMetadata;
247
+ }
248
+ const responseRows = Array.isArray(responseWithMetadata.results) ? responseWithMetadata.results.filter(inspect_usages_detail_1.isObject) : [responseWithMetadata];
249
+ const requestRows = Array.isArray(builtRequest.payload.requests) ? builtRequest.payload.requests.filter(inspect_usages_detail_1.isObject) : [];
250
+ const rows = rawResults.map((rawResult, index) => {
251
+ const detail = details[index];
252
+ const row = responseRows[index] ?? {};
253
+ const requestRow = requestRows[index];
254
+ if (requestRow?.targetLocalUsagesHidden === true) {
255
+ rawResult.targetLocalUsagesHidden = true;
256
+ }
257
+ if (rawResult.op !== "usages" || detail === undefined || detail === null || detail.detail === "summary") {
258
+ return row;
259
+ }
260
+ const detailResult = (0, inspect_usages_detail_1.buildUsagesDetail)(cwd, rawResult, [], detail, true);
261
+ if (typeof row.id === "string") {
262
+ detailResult.id = row.id;
263
+ }
264
+ detailResult.op = "usages";
265
+ (0, inspect_usages_detail_1.copyUsageDetailSummaryFields)(row, detailResult);
266
+ if ((0, inspect_usages_detail_1.isObject)(rawResult.debug)) {
267
+ detailResult.debug = rawResult.debug;
268
+ }
269
+ return detailResult;
270
+ });
271
+ (0, inspect_usages_detail_1.attachUsagesViewAll)(cwd, rows);
272
+ (0, inspect_usages_detail_1.stripUsagesViewRecords)(rows);
273
+ const result = rows.length === 1 ? rows[0] : { results: rows };
274
+ return (0, agent_text_1.attachAgentText)(result, (0, inspect_usages_detail_1.formatUsagesDetailResponseAgentText)(cwd, result, responseWithMetadata));
275
+ }
276
+ function applyUsagesRequestMetadata(response, builtRequest) {
277
+ const requestRows = Array.isArray(builtRequest.payload.requests) ? builtRequest.payload.requests.filter(inspect_usages_detail_1.isObject) : [];
278
+ const responseRows = Array.isArray(response.results) ? response.results.filter(inspect_usages_detail_1.isObject) : null;
279
+ if (responseRows) {
280
+ responseRows.forEach((row, index) => applyUsageRequestMetadata(row, requestRows[index]));
281
+ return response;
282
+ }
283
+ applyUsageRequestMetadata(response, requestRows[0]);
284
+ return response;
285
+ }
286
+ function applyUsageRequestMetadata(row, request) {
287
+ if (request?.targetLocalUsagesHidden !== true) {
288
+ return;
289
+ }
290
+ row.targetLocalUsagesHidden = true;
291
+ if (row.scope === "excluding target") {
292
+ delete row.scope;
293
+ }
294
+ }
295
+ function applyInspectDslDiagnostics(response, builtRequest) {
296
+ return applyDslDiagnosticsToResponse(response, builtRequest.dslDiagnostics ?? []);
297
+ }
298
+ function applyDslDiagnosticsToResponse(response, diagnostics) {
299
+ if (diagnostics.length === 0) {
300
+ return response;
301
+ }
302
+ const text = (0, agent_text_1.readAgentText)(response);
303
+ const diagnosticText = formatDslDiagnosticsAgentText(diagnostics);
304
+ return (0, agent_text_1.attachAgentText)({
305
+ ...response,
306
+ dslDiagnostics: diagnostics.map((diagnostic) => ({
307
+ line: diagnostic.line,
308
+ message: diagnostic.message
309
+ }))
310
+ }, text ? `${text.trimEnd()}\n\n${diagnosticText}` : diagnosticText);
311
+ }
312
+ function formatDslDiagnosticsAgentText(diagnostics) {
313
+ return [
314
+ "dsl errors:",
315
+ ...diagnostics.map((diagnostic) => `line ${diagnostic.line}: ${diagnostic.message}`)
316
+ ].join("\n");
317
+ }
318
+ function readDslDiagnosticsProperty(payload) {
319
+ const raw = payload.dslDiagnostics;
320
+ if (!Array.isArray(raw)) {
321
+ return {};
322
+ }
323
+ const diagnostics = raw.flatMap((item) => {
324
+ if (!(0, inspect_usages_detail_1.isObject)(item)) {
325
+ return [];
326
+ }
327
+ const line = typeof item.line === "number" && Number.isFinite(item.line) ? item.line : null;
328
+ const message = typeof item.message === "string" && item.message.length > 0 ? item.message : null;
329
+ return line !== null && message !== null ? [{ line, message }] : [];
330
+ });
331
+ return diagnostics.length > 0 ? { dslDiagnostics: diagnostics } : {};
332
+ }
333
+ async function runInspectWithInlineLocal(cwd, restArgs, rawPayload, options, commandOptions) {
334
+ const expandedRequests = (0, inspect_request_values_1.expandInspectStdinRequests)(rawPayload);
335
+ const inspectRequests = [];
336
+ const graphRequests = [];
337
+ const importsRequests = [];
338
+ const treeRequests = [];
339
+ const cyclesRequests = [];
340
+ const aliasCandidatesRequests = [];
341
+ const agentDxSignals = [];
342
+ const displayPathAliases = (0, path_display_1.buildDisplayPathAliases)(cwd, (0, session_workspace_1.readEffectiveSessionPathAliases)(cwd));
343
+ const order = [];
344
+ for (const rawRequest of expandedRequests) {
345
+ if (!(0, inspect_usages_detail_1.isObject)(rawRequest)) {
346
+ throw new errors_1.CliError("INVALID_INSPECT_REQUEST", "Inspect request must be an object.");
347
+ }
348
+ const op = (0, inspect_usages_detail_1.readString)(rawRequest.op);
349
+ const dslSignal = op ? collectInspectDslAgentDxSignal(op, rawRequest) : null;
350
+ if (dslSignal) {
351
+ agentDxSignals.push(dslSignal);
352
+ }
353
+ if (op === "graph") {
354
+ graphRequests.push(stripInlineGraphOp(rawRequest));
355
+ order.push("graph");
356
+ }
357
+ else if (op === "imports") {
358
+ importsRequests.push(rawRequest);
359
+ order.push("imports");
360
+ }
361
+ else if (op === "tree") {
362
+ treeRequests.push(rawRequest);
363
+ order.push("tree");
364
+ }
365
+ else if (op === "cycles") {
366
+ cyclesRequests.push(rawRequest);
367
+ order.push("cycles");
368
+ }
369
+ else if (op === "aliasCandidates" || op === "alias-candidates") {
370
+ aliasCandidatesRequests.push(rawRequest);
371
+ order.push("aliasCandidates");
372
+ }
373
+ else {
374
+ inspectRequests.push(rawRequest);
375
+ order.push("inspect");
376
+ }
377
+ }
378
+ const inspectResults = await runRuntimeInspectRequests(cwd, inspectRequests, options, commandOptions);
379
+ const graphResults = graphRequests.length > 0
380
+ ? readGraphResponseResults((0, agent_text_1.stripAgentText)((0, inspect_graph_1.runInspectGraph)(cwd, ["graph", "--stdin"], {
381
+ requests: graphRequests
382
+ })))
383
+ : [];
384
+ const importsResults = importsRequests.map((request) => (0, inspect_imports_1.buildInspectImportsResult)(cwd, {
385
+ file: (0, inspect_usages_detail_1.readString)(request.file) ?? (0, inspect_usages_detail_1.readString)(request.fromFile) ?? (0, inspect_usages_detail_1.readString)(request.sourceFile) ?? (0, inspect_usages_detail_1.readString)(rawPayload.file) ?? "",
386
+ ranges: (0, inspect_request_values_1.readBoolean)(request.ranges) !== false
387
+ }, displayPathAliases));
388
+ const treeResults = treeRequests.map((request) => (0, inspect_tree_1.buildInspectTreeResult)(cwd, buildInlineTreeInput(request)));
389
+ const cyclesResults = cyclesRequests.length > 0
390
+ ? readResponseResults((0, agent_text_1.stripAgentText)((0, inspect_cycles_1.runInspectCycles)(cwd, ["--stdin"], {
391
+ requests: cyclesRequests
392
+ })))
393
+ : [];
394
+ const aliasCandidatesResults = aliasCandidatesRequests.map((request) => (0, inspect_alias_candidates_1.buildInspectAliasCandidatesResult)(cwd, buildInlineAliasCandidatesInput(request)));
395
+ const results = [];
396
+ let inspectIndex = 0;
397
+ let graphIndex = 0;
398
+ let importsIndex = 0;
399
+ let treeIndex = 0;
400
+ let cyclesIndex = 0;
401
+ let aliasCandidatesIndex = 0;
402
+ for (const item of order) {
403
+ if (item === "graph") {
404
+ const graphResult = graphResults[graphIndex++];
405
+ if (graphResult) {
406
+ results.push(graphResult);
407
+ }
408
+ }
409
+ else if (item === "imports") {
410
+ const importsResult = importsResults[importsIndex++];
411
+ if (importsResult) {
412
+ results.push(importsResult);
413
+ }
414
+ }
415
+ else if (item === "tree") {
416
+ const treeResult = treeResults[treeIndex++];
417
+ if (treeResult) {
418
+ results.push(treeResult);
419
+ }
420
+ }
421
+ else if (item === "cycles") {
422
+ const cyclesResult = cyclesResults[cyclesIndex++];
423
+ if (cyclesResult) {
424
+ results.push(cyclesResult);
425
+ }
426
+ }
427
+ else if (item === "aliasCandidates") {
428
+ const aliasCandidatesResult = aliasCandidatesResults[aliasCandidatesIndex++];
429
+ if (aliasCandidatesResult) {
430
+ results.push(aliasCandidatesResult);
431
+ }
432
+ }
433
+ else {
434
+ const inspectResult = inspectResults[inspectIndex++];
435
+ if (inspectResult) {
436
+ results.push(inspectResult);
437
+ }
438
+ }
439
+ }
440
+ const response = {
441
+ ok: results.some((result) => result.ok === false) ? false : true,
442
+ ...(results.some((result) => result.op === "runtimeFailure") ? { partial: true } : {}),
443
+ results: (0, inspect_imports_1.mergeDirectoryFallbackResults)(results)
444
+ };
445
+ return (0, agent_dx_1.applyAgentDxSignals)(cwd, applyDslDiagnosticsToResponse((0, agent_text_1.attachAgentText)(response, (0, inspect_format_1.formatInspectMixedAgentText)(response)), readDslDiagnosticsProperty(rawPayload).dslDiagnostics ?? []), agentDxSignals);
446
+ }
447
+ function readInlineInspectPayload(cwd, restArgs, stdinPayload) {
448
+ if (restArgs[0] === "graph") {
449
+ return null;
450
+ }
451
+ if (restArgs.includes("--stdin")) {
452
+ if (!(0, inspect_usages_detail_1.isObject)(stdinPayload)) {
453
+ return null;
454
+ }
455
+ return stdinPayload;
456
+ }
457
+ const fromJson = (0, inspect_request_values_1.readFlagValue)(restArgs, "--from-json");
458
+ return fromJson ? (0, json_file_input_1.readJsonObjectFile)(cwd, fromJson, "INVALID_INSPECT_JSON_FILE") : null;
459
+ }
460
+ function inspectPayloadContainsLocal(rawPayload) {
461
+ return (0, inspect_request_values_1.expandInspectStdinRequests)(rawPayload).some((request) => (0, inspect_usages_detail_1.isObject)(request) && ((0, inspect_usages_detail_1.readString)(request.op) === "graph" ||
462
+ (0, inspect_usages_detail_1.readString)(request.op) === "imports" ||
463
+ (0, inspect_usages_detail_1.readString)(request.op) === "tree" ||
464
+ (0, inspect_usages_detail_1.readString)(request.op) === "cycles" ||
465
+ (0, inspect_usages_detail_1.readString)(request.op) === "aliasCandidates" ||
466
+ (0, inspect_usages_detail_1.readString)(request.op) === "alias-candidates"));
467
+ }
468
+ async function runRuntimeInspectRequests(cwd, inspectRequests, options, commandOptions) {
469
+ if (inspectRequests.length === 0) {
470
+ return [];
471
+ }
472
+ try {
473
+ if ((0, request_env_1.readRequestEnv)(env_vars_1.CLI_ENV.testInspectWorkerFailure) === "deadline") {
474
+ throw new errors_1.CliError("STANDALONE_INSPECT_WORKER_DEADLINE", "Standalone inspect worker did not finish before the injected test deadline.");
475
+ }
476
+ return readResponseResults((0, agent_text_1.stripAgentText)(await runInspect(cwd, ["--stdin"], {
477
+ requests: inspectRequests
478
+ }, options, {
479
+ ...commandOptions,
480
+ forceResults: true
481
+ })));
482
+ }
483
+ catch (error) {
484
+ return inspectRequests.map((request) => buildRuntimeInspectFailureResult(cwd, request, error));
485
+ }
486
+ }
487
+ function buildRuntimeInspectFailureResult(cwd, request, error) {
488
+ const details = (0, inspect_usages_detail_1.isObject)(error) && (0, inspect_usages_detail_1.isObject)(error.details) ? error.details : {};
489
+ const code = error instanceof errors_1.CliError ? error.code : "RUNTIME_INSPECT_FAILED";
490
+ const message = error instanceof Error ? error.message : String(error);
491
+ const file = (0, inspect_usages_detail_1.readString)(request.file) ??
492
+ (0, inspect_usages_detail_1.readString)(request.sourceFile) ??
493
+ (0, inspect_usages_detail_1.readString)(request.fromFile) ??
494
+ (0, inspect_usages_detail_1.readString)(request.target) ??
495
+ "";
496
+ const absoluteFile = file ? path.resolve(cwd, file) : "";
497
+ return {
498
+ ok: false,
499
+ op: "runtimeFailure",
500
+ requestedOp: (0, inspect_usages_detail_1.readString)(request.op) ?? "file",
501
+ ...((0, inspect_usages_detail_1.readString)(request.entity) ? { entity: (0, inspect_usages_detail_1.readString)(request.entity) } : {}),
502
+ ...(absoluteFile ? { sourceFile: absoluteFile, file: (0, inspect_usages_detail_1.displayPath)(cwd, absoluteFile) } : {}),
503
+ code,
504
+ error: message,
505
+ ...(Array.isArray(details.hints) ? { hints: details.hints } : {})
506
+ };
507
+ }
508
+ function buildInlineTreeInput(request) {
509
+ const input = {
510
+ scope: (0, inspect_usages_detail_1.readString)(request.scope) ?? (0, inspect_usages_detail_1.readString)(request.file) ?? (0, inspect_usages_detail_1.readString)(request.dir) ?? (0, inspect_usages_detail_1.readString)(request.directory) ?? ""
511
+ };
512
+ const displayScope = (0, inspect_usages_detail_1.readString)(request.displayScope) ?? (0, inspect_usages_detail_1.readString)(request.display_scope);
513
+ const depth = (0, inspect_request_values_1.readPositiveInteger)(request.depth);
514
+ const minDepth = (0, inspect_request_values_1.readNonNegativeInteger)(request.minDepth) ?? (0, inspect_request_values_1.readNonNegativeInteger)(request.min_depth);
515
+ const limit = (0, inspect_request_values_1.readPositiveInteger)(request.limit);
516
+ const exclude = (0, inspect_usages_detail_1.readStringArray)(request.exclude) ?? (0, inspect_usages_detail_1.readStringArray)(request.excludes);
517
+ const only = (0, inspect_usages_detail_1.readStringArray)(request.only);
518
+ const onlyDirs = (0, inspect_request_values_1.readBoolean)(request.onlyDirs) ?? (0, inspect_request_values_1.readBoolean)(request.only_dirs);
519
+ if (displayScope !== null) {
520
+ input.displayScope = displayScope;
521
+ }
522
+ if (depth !== null) {
523
+ input.depth = depth;
524
+ }
525
+ if (minDepth !== null) {
526
+ input.minDepth = minDepth;
527
+ }
528
+ if (limit !== null) {
529
+ input.limit = limit;
530
+ }
531
+ if (exclude !== null) {
532
+ input.exclude = exclude;
533
+ }
534
+ if (only !== null) {
535
+ input.only = only;
536
+ }
537
+ if (onlyDirs !== null) {
538
+ input.onlyDirs = onlyDirs;
539
+ }
540
+ return input;
541
+ }
542
+ function buildInlineAliasCandidatesInput(request) {
543
+ const input = {
544
+ scope: (0, inspect_usages_detail_1.readString)(request.scope) ?? (0, inspect_usages_detail_1.readString)(request.dir) ?? (0, inspect_usages_detail_1.readString)(request.directory) ?? ""
545
+ };
546
+ const displayScope = (0, inspect_usages_detail_1.readString)(request.displayScope) ?? (0, inspect_usages_detail_1.readString)(request.display_scope);
547
+ const limit = (0, inspect_request_values_1.readPositiveInteger)(request.limit);
548
+ const minImports = (0, inspect_request_values_1.readPositiveInteger)(request.minImports) ?? (0, inspect_request_values_1.readPositiveInteger)(request.min_imports);
549
+ const minFiles = (0, inspect_request_values_1.readPositiveInteger)(request.minFiles) ?? (0, inspect_request_values_1.readPositiveInteger)(request.min_files);
550
+ const detail = (0, inspect_usages_detail_1.readString)(request.detail);
551
+ const candidate = (0, inspect_usages_detail_1.readString)(request.candidate);
552
+ const include = (0, inspect_usages_detail_1.readStringArray)(request.include) ?? (0, inspect_usages_detail_1.readStringArray)(request.only);
553
+ const exclude = (0, inspect_usages_detail_1.readStringArray)(request.exclude) ?? (0, inspect_usages_detail_1.readStringArray)(request.excludes);
554
+ if (displayScope !== null) {
555
+ input.displayScope = displayScope;
556
+ }
557
+ if (limit !== null) {
558
+ input.limit = limit;
559
+ }
560
+ if (minImports !== null) {
561
+ input.minImports = minImports;
562
+ }
563
+ if (minFiles !== null) {
564
+ input.minFiles = minFiles;
565
+ }
566
+ if (detail !== null) {
567
+ input.detail = detail;
568
+ }
569
+ if (candidate !== null) {
570
+ input.candidate = candidate;
571
+ }
572
+ if (include !== null) {
573
+ input.include = include;
574
+ }
575
+ if (exclude !== null) {
576
+ input.exclude = exclude;
577
+ }
578
+ return input;
579
+ }
580
+ function stripInlineGraphOp(request) {
581
+ const graphRequest = { ...request };
582
+ delete graphRequest.op;
583
+ delete graphRequest.sourceFile;
584
+ return graphRequest;
585
+ }
586
+ function readResponseResults(response) {
587
+ if (Array.isArray(response.results)) {
588
+ return response.results.filter(inspect_usages_detail_1.isObject).map(normalizeComposedInspectResult);
589
+ }
590
+ return [normalizeComposedInspectResult(response)];
591
+ }
592
+ function normalizeComposedInspectResult(result) {
593
+ return result.op === "dependencies"
594
+ ? {
595
+ ...result,
596
+ op: "deps"
597
+ }
598
+ : result;
599
+ }
600
+ function readGraphResponseResults(response) {
601
+ if (Array.isArray(response.results)) {
602
+ return response.results.filter(inspect_usages_detail_1.isObject).map((result) => ({
603
+ op: "graph",
604
+ ...result
605
+ }));
606
+ }
607
+ return [{
608
+ op: "graph",
609
+ ...compactGraphResult(response)
610
+ }];
611
+ }
612
+ function compactGraphResult(response) {
613
+ const result = { ...response };
614
+ delete result.operation;
615
+ delete result.next;
616
+ delete result.last;
617
+ if (typeof result.saved === "string") {
618
+ delete result.graphFile;
619
+ }
620
+ return result;
621
+ }
622
+ function prepareExecutableModulePlanRequests(cwd, builtRequest) {
623
+ const requests = Array.isArray(builtRequest.payload.requests) ? builtRequest.payload.requests : [];
624
+ requests.forEach((request, index) => {
625
+ if (!(0, inspect_usages_detail_1.isObject)(request) || request.op !== "modulePlan" || request.previewFiles !== true) {
626
+ return;
627
+ }
628
+ const normalizedRequest = (0, module_plan_cache_1.normalizeModulePlanCacheRequest)(request);
629
+ const planId = (0, module_plan_cache_1.buildModulePlanId)(normalizedRequest);
630
+ const rawPreviewDir = (0, inspect_usages_detail_1.readString)(request.previewDir);
631
+ const previewDir = (0, module_plan_cache_1.resolveModulePlanPreviewDir)(cwd, planId, rawPreviewDir ?? undefined);
632
+ request.previewDir = previewDir;
633
+ request.previewPatch = request.previewPatch !== false;
634
+ builtRequest.cachePlans.push({
635
+ index,
636
+ planId,
637
+ normalizedRequest,
638
+ previewDir
639
+ });
640
+ });
641
+ }
642
+ function cacheExecutableModulePlans(cwd, builtRequest, response) {
643
+ if (builtRequest.cachePlans.length === 0 || !Array.isArray(response.results)) {
644
+ return;
645
+ }
646
+ for (const candidate of builtRequest.cachePlans) {
647
+ const result = response.results[candidate.index];
648
+ if (!(0, inspect_usages_detail_1.isObject)(result)) {
649
+ continue;
650
+ }
651
+ const sourceFile = (0, inspect_usages_detail_1.readString)(candidate.normalizedRequest.sourceFile);
652
+ if (!sourceFile) {
653
+ continue;
654
+ }
655
+ const sourceHash = (0, module_plan_cache_1.hashFile)(sourceFile);
656
+ const planHash = (0, module_plan_cache_1.buildModulePlanHash)(candidate.normalizedRequest, sourceHash, result);
657
+ const record = {
658
+ planId: candidate.planId,
659
+ planHash,
660
+ createdAt: new Date().toISOString(),
661
+ cwd: path.resolve(cwd),
662
+ sourceFile,
663
+ sourceHash,
664
+ executable: result.ok !== false,
665
+ normalizedRequest: candidate.normalizedRequest,
666
+ inspectPayload: builtRequest.payload,
667
+ previewDir: candidate.previewDir,
668
+ previewResult: result
669
+ };
670
+ (0, module_plan_cache_1.writeModulePlanRecord)(cwd, record);
671
+ result.planId = candidate.planId;
672
+ result.planHash = planHash;
673
+ result.cached = true;
674
+ result.executable = result.ok !== false;
675
+ result.next = result.ok === false
676
+ ? "Adjust the modulePlan segment and rerun aib mutate preview or execute."
677
+ : "Run aib mutate execute --stdin with the matching modulePlan segment if the plan matches intent.";
678
+ }
679
+ }
680
+ function applyDirectoryInspectFallbacks(cwd, builtRequest) {
681
+ if (!Array.isArray(builtRequest.payload.requests)) {
682
+ return;
683
+ }
684
+ const requests = builtRequest.payload.requests.filter(inspect_usages_detail_1.isObject);
685
+ const fallbackBySource = new Map();
686
+ const newRequests = [];
687
+ const indexMap = new Map();
688
+ for (let index = 0; index < requests.length; index += 1) {
689
+ const request = requests[index];
690
+ const sourceFile = (0, inspect_usages_detail_1.readString)(request.sourceFile);
691
+ if (!sourceFile || !isFileInspectOp((0, inspect_usages_detail_1.readString)(request.op)) || !(0, inspect_request_values_1.isExistingDirectory)(sourceFile)) {
692
+ indexMap.set(index, newRequests.length);
693
+ newRequests.push(request);
694
+ continue;
695
+ }
696
+ let fallback = fallbackBySource.get(sourceFile);
697
+ if (!fallback) {
698
+ fallback = buildDirectoryInspectFallback(cwd, sourceFile);
699
+ fallbackBySource.set(sourceFile, fallback);
700
+ indexMap.set(index, newRequests.length);
701
+ newRequests.push(directoryInspectFallbackRequest(fallback));
702
+ }
703
+ else {
704
+ indexMap.set(index, newRequests.findIndex((item) => (0, inspect_usages_detail_1.readString)(item.sourceFile) === sourceFile && item.op === "directoryFallback"));
705
+ }
706
+ const op = formatInspectOpForFallback((0, inspect_usages_detail_1.readString)(request.op));
707
+ if (!fallback.ops.includes(op)) {
708
+ fallback.ops.push(op);
709
+ }
710
+ }
711
+ if (fallbackBySource.size === 0) {
712
+ return;
713
+ }
714
+ builtRequest.payload.requests = newRequests;
715
+ if (builtRequest.formatOptions.toFiles) {
716
+ builtRequest.formatOptions.toFiles = remapNullableArray(builtRequest.formatOptions.toFiles, indexMap, newRequests.length);
717
+ }
718
+ if (builtRequest.formatOptions.saves) {
719
+ builtRequest.formatOptions.saves = remapNullableArray(builtRequest.formatOptions.saves, indexMap, newRequests.length);
720
+ }
721
+ if (builtRequest.formatOptions.shows) {
722
+ builtRequest.formatOptions.shows = remapBooleanArray(builtRequest.formatOptions.shows, indexMap, newRequests.length);
723
+ }
724
+ if (builtRequest.formatOptions.ranges) {
725
+ builtRequest.formatOptions.ranges = remapBooleanArray(builtRequest.formatOptions.ranges, indexMap, newRequests.length);
726
+ }
727
+ if (builtRequest.formatOptions.parentNames) {
728
+ builtRequest.formatOptions.parentNames = remapNullableArray(builtRequest.formatOptions.parentNames, indexMap, newRequests.length);
729
+ }
730
+ if (builtRequest.usagesDetails) {
731
+ builtRequest.usagesDetails = remapNullableArray(builtRequest.usagesDetails, indexMap, newRequests.length);
732
+ }
733
+ }
734
+ function isFileInspectOp(op) {
735
+ return op === "file" ||
736
+ op === "exports" ||
737
+ op === "members" ||
738
+ op === "code" ||
739
+ op === "dependencies" ||
740
+ op === "slice";
741
+ }
742
+ function buildDirectoryInspectFallback(cwd, sourceFile) {
743
+ const depth = detectInspectTreeFallbackDepth(cwd, sourceFile);
744
+ const aliases = (0, session_workspace_1.readEffectiveSessionPathAliases)(cwd);
745
+ const directoryDisplayPath = (0, path_display_1.compactDisplayPath)(cwd, sourceFile, (0, path_display_1.buildDisplayPathAliases)(cwd, aliases));
746
+ const tree = (0, inspect_tree_1.buildInspectTreeResult)(cwd, {
747
+ scope: sourceFile,
748
+ displayScope: directoryDisplayPath,
749
+ depth,
750
+ limit: 40,
751
+ aliases
752
+ });
753
+ const ops = [];
754
+ return {
755
+ sourceFile,
756
+ displayPath: directoryDisplayPath,
757
+ ops,
758
+ command: `aib inspect tree ${directoryDisplayPath} --depth ${depth}`,
759
+ result: {
760
+ op: "directoryFallback",
761
+ ok: true,
762
+ sourceFile,
763
+ directory: directoryDisplayPath,
764
+ skippedOps: ops,
765
+ command: `aib inspect tree ${directoryDisplayPath} --depth ${depth}`,
766
+ tree,
767
+ lines: Array.isArray(tree.lines) ? tree.lines : []
768
+ }
769
+ };
770
+ }
771
+ function directoryInspectFallbackRequest(fallback) {
772
+ return {
773
+ op: "directoryFallback",
774
+ sourceFile: fallback.sourceFile,
775
+ fallback: fallback.result
776
+ };
777
+ }
778
+ function detectInspectTreeFallbackDepth(cwd, sourceFile) {
779
+ for (let depth = 1; depth <= 4; depth += 1) {
780
+ const result = (0, inspect_tree_1.buildInspectTreeResult)(cwd, {
781
+ scope: sourceFile,
782
+ depth,
783
+ limit: 1
784
+ });
785
+ if (typeof result.files === "number" && result.files > 0) {
786
+ return depth;
787
+ }
788
+ }
789
+ return 2;
790
+ }
791
+ function remapNullableArray(values, indexMap, length) {
792
+ const remapped = Array.from({ length }, () => null);
793
+ for (const [oldIndex, newIndex] of indexMap.entries()) {
794
+ if (remapped[newIndex] === null) {
795
+ remapped[newIndex] = values[oldIndex] ?? null;
796
+ }
797
+ }
798
+ return remapped;
799
+ }
800
+ function remapBooleanArray(values, indexMap, length) {
801
+ const remapped = Array.from({ length }, () => false);
802
+ for (const [oldIndex, newIndex] of indexMap.entries()) {
803
+ remapped[newIndex] = remapped[newIndex] || (values[oldIndex] ?? false);
804
+ }
805
+ return remapped;
806
+ }
807
+ function formatInspectOpForFallback(op) {
808
+ return op === "dependencies" ? "deps" : op ?? "inspect";
809
+ }
810
+ function buildInspectRequest(cwd, restArgs, stdinPayload, config, allowModulePlan, forceResults) {
811
+ const directOp = readDirectInspectOp(restArgs);
812
+ const directRangesDisabled = restArgs.includes("--no-ranges") || restArgs.includes("--noRanges");
813
+ const includeRanges = (!directRangesDisabled && (directOp === "code" || directOp === "file")) ||
814
+ restArgs.includes("--ranges") ||
815
+ (directOp === "exports" && (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.exports.ranges", false));
816
+ const details = restArgs.includes("--details");
817
+ const resolveStar = restArgs.includes("--resolve-star") ||
818
+ (directOp === "exports" && (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.exports.resolveStar", false));
819
+ const localOnly = restArgs.includes("--local-only");
820
+ const maxCodeLines = (0, inspect_request_values_1.readMaxCodeLines)(cwd, restArgs);
821
+ const memberOffset = (0, inspect_request_values_1.readNonNegativeIntegerFlag)(restArgs, "--offset");
822
+ const memberLimit = (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--limit") ??
823
+ (directOp === "members" ? (0, session_workspace_1.readSessionNumberPref)(cwd, "inspect.members.maxItems", 20) : null);
824
+ const memberAll = restArgs.includes("--all") ||
825
+ (directOp === "members" && (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.members.all", false));
826
+ const toFile = (0, inspect_request_values_1.readFlagValue)(restArgs, "--to-file") ?? undefined;
827
+ const save = (0, inspect_request_values_1.readFlagValue)(restArgs, "--save") ?? undefined;
828
+ const explicitHideShow = directOp === "code" && (restArgs.includes("--no-show") || restArgs.includes("--noShow"));
829
+ const explicitShow = restArgs.includes("--show");
830
+ const show = explicitHideShow
831
+ ? false
832
+ : explicitShow || (directOp === "code" && (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.code.show", true));
833
+ const codeMeta = (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.code.meta", true);
834
+ const directUsagesDetail = directOp === "usages"
835
+ ? (0, inspect_usages_detail_1.readUsagesDetailOptions)(cwd, {
836
+ detail: (0, inspect_request_values_1.readFlagValue)(restArgs, "--detail"),
837
+ all: restArgs.includes("--all"),
838
+ limit: (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--limit"),
839
+ maxCodeLines: (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--max-code-lines") ?? (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--maxCodeLines")
840
+ })
841
+ : null;
842
+ const bundleSave = (0, inspect_request_values_1.readFlagValue)(restArgs, "--bundle-save") ?? undefined;
843
+ const previewDir = (0, inspect_request_values_1.readFlagValue)(restArgs, "--preview-dir") ?? undefined;
844
+ const fromJson = (0, inspect_request_values_1.readFlagValue)(restArgs, "--from-json") ?? undefined;
845
+ const parentSelector = (0, inspect_request_values_1.readFlagValue)(restArgs, "--parent") ?? undefined;
846
+ const parentName = parentSelector ? (0, inspect_selector_1.parseInspectSelector)(parentSelector, config).symbolName : undefined;
847
+ const displayPathAliases = (0, path_display_1.buildDisplayPathAliases)(cwd, (0, session_workspace_1.readEffectiveSessionPathAliases)(cwd));
848
+ const pathAliasHints = [];
849
+ if (toFile !== undefined && save !== undefined) {
850
+ throw new errors_1.CliError("INSPECT_OUTPUT_TARGET_CONFLICT", "Use either --to-file or --save, not both.");
851
+ }
852
+ const formatOptions = {
853
+ cwd,
854
+ includeRanges,
855
+ displayPathAliases,
856
+ pathAliasHints,
857
+ details,
858
+ localOnly,
859
+ maxCodeLines,
860
+ forceResults,
861
+ show,
862
+ codeMeta,
863
+ ...(parentName !== undefined ? { parentName, parentNames: [parentName] } : {}),
864
+ ...(toFile !== undefined ? { toFile } : {}),
865
+ ...(save !== undefined ? { save } : {}),
866
+ ...(bundleSave !== undefined ? { bundleSave } : {}),
867
+ ...(previewDir !== undefined ? { previewDir: (0, inspect_request_values_1.resolveCliFilePath)(cwd, previewDir) } : {})
868
+ };
869
+ if (fromJson !== undefined) {
870
+ if (restArgs.includes("--stdin") || stdinPayload !== undefined) {
871
+ throw new errors_1.CliError("INSPECT_INPUT_SOURCE_CONFLICT", "Use either inspect --stdin or inspect --from-json, not both.");
872
+ }
873
+ if (restArgs.includes("--revise")) {
874
+ throw new errors_1.CliError("LEGACY_MODULE_PLAN_REVISE_REMOVED", "modulePlan revise was removed. Use aib mutate preview or execute with an updated modulePlan segment.");
875
+ }
876
+ const fromJsonPayload = applyDirectInspectOpDefault((0, json_file_input_1.readJsonObjectFile)(cwd, fromJson, "INVALID_INSPECT_JSON_FILE"), readDirectInspectOp(restArgs));
877
+ const fromJsonIncludeRanges = includeRanges || (0, inspect_request_values_1.payloadRequestsRanges)(fromJsonPayload);
878
+ const builtFromJsonPayload = buildInspectStdinPayload(cwd, fromJsonPayload, config, fromJsonIncludeRanges, resolveStar, localOnly, {
879
+ memberOffset,
880
+ memberLimit,
881
+ memberAll
882
+ }, allowModulePlan);
883
+ return {
884
+ payload: builtFromJsonPayload.payload,
885
+ cachePlans: [],
886
+ formatOptions: {
887
+ ...formatOptions,
888
+ includeRanges: fromJsonIncludeRanges,
889
+ toFiles: builtFromJsonPayload.toFiles,
890
+ saves: builtFromJsonPayload.saves,
891
+ shows: builtFromJsonPayload.shows,
892
+ ranges: builtFromJsonPayload.ranges,
893
+ parentNames: builtFromJsonPayload.parentNames,
894
+ ...(bundleSave === undefined && builtFromJsonPayload.bundleSave !== undefined
895
+ ? { bundleSave: builtFromJsonPayload.bundleSave }
896
+ : {})
897
+ },
898
+ usagesDetails: builtFromJsonPayload.usagesDetails,
899
+ agentDxSignals: builtFromJsonPayload.agentDxSignals
900
+ };
901
+ }
902
+ if (stdinPayload !== undefined) {
903
+ if (!(0, inspect_usages_detail_1.isObject)(stdinPayload)) {
904
+ throw new errors_1.CliError("INVALID_INSPECT_STDIN", "inspect input expects a JSON object payload.");
905
+ }
906
+ if (restArgs.includes("--revise")) {
907
+ throw new errors_1.CliError("LEGACY_MODULE_PLAN_REVISE_REMOVED", "modulePlan revise was removed. Use aib mutate preview or execute with an updated modulePlan segment.");
908
+ }
909
+ const normalizedStdinPayload = applyDirectInspectOpDefault(stdinPayload, directOp);
910
+ const stdinIncludeRanges = includeRanges || (0, inspect_request_values_1.payloadRequestsRanges)(normalizedStdinPayload);
911
+ const builtStdinPayload = buildInspectStdinPayload(cwd, normalizedStdinPayload, config, stdinIncludeRanges, resolveStar, localOnly, {
912
+ memberOffset,
913
+ memberLimit,
914
+ memberAll
915
+ }, allowModulePlan);
916
+ return {
917
+ payload: builtStdinPayload.payload,
918
+ cachePlans: [],
919
+ formatOptions: {
920
+ ...formatOptions,
921
+ includeRanges: stdinIncludeRanges,
922
+ toFiles: builtStdinPayload.toFiles,
923
+ saves: builtStdinPayload.saves,
924
+ shows: builtStdinPayload.shows,
925
+ ranges: builtStdinPayload.ranges,
926
+ parentNames: builtStdinPayload.parentNames,
927
+ ...(bundleSave === undefined && builtStdinPayload.bundleSave !== undefined
928
+ ? { bundleSave: builtStdinPayload.bundleSave }
929
+ : {})
930
+ },
931
+ usagesDetails: builtStdinPayload.usagesDetails,
932
+ ...readDslDiagnosticsProperty(stdinPayload),
933
+ agentDxSignals: builtStdinPayload.agentDxSignals
934
+ };
935
+ }
936
+ const directUsagesPayload = (0, inspect_direct_usages_1.parseDirectUsagesKeyValueArgs)(restArgs);
937
+ if (directUsagesPayload !== null) {
938
+ const builtDirectUsages = buildInspectStdinPayload(cwd, directUsagesPayload, config, includeRanges, resolveStar, localOnly, {
939
+ memberOffset,
940
+ memberLimit,
941
+ memberAll
942
+ }, allowModulePlan);
943
+ return {
944
+ payload: builtDirectUsages.payload,
945
+ cachePlans: [],
946
+ formatOptions: {
947
+ ...formatOptions,
948
+ toFiles: builtDirectUsages.toFiles,
949
+ saves: builtDirectUsages.saves,
950
+ shows: builtDirectUsages.shows,
951
+ ranges: builtDirectUsages.ranges,
952
+ parentNames: builtDirectUsages.parentNames
953
+ },
954
+ usagesDetails: builtDirectUsages.usagesDetails,
955
+ agentDxSignals: builtDirectUsages.agentDxSignals
956
+ };
957
+ }
958
+ const directAgentDxSignals = collectInspectAgentDxSignals(restArgs);
959
+ return {
960
+ payload: buildInspectDirectPayload(cwd, restArgs, config, includeRanges, resolveStar, localOnly, {
961
+ memberOffset,
962
+ memberLimit,
963
+ memberAll
964
+ }, allowModulePlan),
965
+ formatOptions,
966
+ cachePlans: [],
967
+ ...(directUsagesDetail !== null ? { usagesDetails: [directUsagesDetail] } : {}),
968
+ ...(directAgentDxSignals.length > 0 ? { agentDxSignals: directAgentDxSignals } : {})
969
+ };
970
+ }
971
+ function applyDirectInspectOpDefault(payload, op) {
972
+ if (!op || payload.op !== undefined) {
973
+ return payload;
974
+ }
975
+ return {
976
+ op,
977
+ ...payload
978
+ };
979
+ }
980
+ function readDirectInspectOp(restArgs) {
981
+ const args = restArgs.filter((arg) => !arg.startsWith("--") && !(0, inspect_request_values_1.isFlagValue)(restArgs, arg));
982
+ return args[0] ?? null;
983
+ }
984
+ const INSPECT_FILE_KNOWN_FLAGS = new Set([
985
+ "--ranges",
986
+ "--no-ranges",
987
+ "--noRanges",
988
+ "--details",
989
+ "--local-only",
990
+ "--debug-workspace-context"
991
+ ]);
992
+ const INSPECT_IMPORTS_KNOWN_FLAGS = new Set(["--ranges", "--no-ranges"]);
993
+ const INSPECT_DSL_OPTION_TOKENS_FIELD = "__aibDslOptionTokens";
994
+ const INSPECT_DSL_KNOWN_OPTIONS = {
995
+ file: new Set(["ranges", "includeRanges", "localOnly"]),
996
+ imports: new Set(["ranges", "includeRanges"]),
997
+ exports: new Set(["ranges", "includeRanges", "resolveStar"]),
998
+ members: new Set(["file", "fromFile", "entity", "entities", "parent", "ranges", "includeRanges", "limit", "offset", "all", "memberLimit", "memberOffset", "memberAll"]),
999
+ code: new Set(["file", "fromFile", "entity", "entities", "parent", "show", "ranges", "includeRanges", "toFile", "outputFile", "save", "maxCodeLines"]),
1000
+ deps: new Set(["file", "fromFile", "entity", "entities", "parent"]),
1001
+ usages: new Set(["target", "usageTarget", "dir", "scope", "scopes", "entity", "entities", "parent", "detail", "limit", "all", "save", "includeTarget", "excludeTarget", "maxCodeLines"]),
1002
+ graph: new Set(["scope", "scopes", "file", "files", "fromFile", "from", "focus", "view", "depth", "symbolUsage", "symbols", "edges", "showEdges", "hubs", "showHubs", "entrypoints", "scopeEntrypoints", "showEntrypoints", "leaves", "scopeLeaves", "showLeaves", "exclude", "excludePatterns", "excludeFrom", "toFile", "outputFile", "save"]),
1003
+ tree: new Set(["scope", "file", "dir", "directory", "depth", "minDepth", "min_depth", "limit", "only", "exclude", "excludes", "onlyDirs", "only_dirs", "noDefaultExclude", "no_default_exclude", "ned", "noConfigExclude", "no_config_exclude", "nec"]),
1004
+ cycles: new Set(["scope", "scopes", "file", "files", "detail", "kind", "exclude", "excludes", "limit"]),
1005
+ aliasCandidates: new Set(["scope", "dir", "directory", "detail", "candidate", "limit", "minImports", "min_imports", "minFiles", "min_files", "include", "only", "exclude", "excludes"]),
1006
+ "alias-candidates": new Set(["scope", "dir", "directory", "detail", "candidate", "limit", "minImports", "min_imports", "minFiles", "min_files", "include", "only", "exclude", "excludes"])
1007
+ };
1008
+ function collectInspectAgentDxSignals(restArgs) {
1009
+ const directOp = readDirectInspectOp(restArgs);
1010
+ if (directOp !== "file" && directOp !== "imports") {
1011
+ return [];
1012
+ }
1013
+ const signal = (0, agent_dx_1.collectUnknownFlagSignal)({
1014
+ command: `inspect ${directOp}`,
1015
+ args: restArgs.slice(1),
1016
+ knownFlags: directOp === "file" ? INSPECT_FILE_KNOWN_FLAGS : INSPECT_IMPORTS_KNOWN_FLAGS,
1017
+ helpRefs: [{ topic: `inspect.${directOp}`, reason: "unknownFlag", priority: 1, mode: "command" }]
1018
+ });
1019
+ return signal ? [signal] : [];
1020
+ }
1021
+ function buildInspectObservation(restArgs, stdinPayload) {
1022
+ const inline = !restArgs.includes("--stdin") && stdinPayload === undefined;
1023
+ const op = readDirectInspectOp(restArgs) ?? "inspect";
1024
+ const targets = inline ? readDirectInspectTargets(restArgs) : [];
1025
+ return {
1026
+ command: op === "inspect" ? "inspect" : `inspect ${op}`,
1027
+ family: "inspect",
1028
+ surface: inline ? "inline" : restArgs.includes("--stdin") ? "stdin-dsl" : "json",
1029
+ targets,
1030
+ batchable: ["file", "exports", "imports", "tree"].includes(op)
1031
+ };
1032
+ }
1033
+ function readDirectInspectTargets(restArgs) {
1034
+ const op = readDirectInspectOp(restArgs);
1035
+ if (!op) {
1036
+ return [];
1037
+ }
1038
+ const args = restArgs.filter((arg) => !arg.startsWith("--") && !(0, inspect_request_values_1.isFlagValue)(restArgs, arg));
1039
+ if (op === "file" || op === "exports" || op === "imports" || op === "tree") {
1040
+ return args.slice(1);
1041
+ }
1042
+ return args[1] ? [args[1]] : [];
1043
+ }
1044
+ function buildInspectDirectPayload(cwd, restArgs, config, includeRanges, resolveStar, localOnly, memberOptions, allowModulePlan) {
1045
+ const args = restArgs.filter((arg) => !arg.startsWith("--") && !(0, inspect_request_values_1.isFlagValue)(restArgs, arg));
1046
+ const [op, sourceFile, entity] = args;
1047
+ if (!op || !sourceFile) {
1048
+ throw new errors_1.CliError("INVALID_INSPECT_COMMAND", "Expected: aib inspect <file|imports|exports|members|code|slice|deps|usages|duplicates> <file-or-dir> [entity].", {
1049
+ examples: [
1050
+ "aib inspect file src/example.ts",
1051
+ "aib inspect imports src/example.ts",
1052
+ "aib inspect exports src/example.ts",
1053
+ "aib inspect members src/example.ts c:Example",
1054
+ "aib inspect code src/example.ts f:helper",
1055
+ "aib inspect deps src/example.ts c:Example",
1056
+ "aib inspect usages src/example.ts f:helper --scope src/main",
1057
+ "aib inspect duplicates src/scripts --detail code"
1058
+ ]
1059
+ });
1060
+ }
1061
+ if (!(0, inspect_request_values_1.isInspectOp)(op)) {
1062
+ throw new errors_1.CliError("INVALID_INSPECT_OP", "Expected inspect op to be file, imports, exports, members, code, slice, deps, usages, duplicates, graph, tree, cycles, aliasCandidates, or imports.");
1063
+ }
1064
+ (0, inspect_request_values_1.assertModulePlanAllowed)(op, allowModulePlan);
1065
+ if ((0, inspect_request_values_1.readFlagValue)(restArgs, "--save") && op !== "code" && op !== "slice" && op !== "usages" && op !== "duplicate" && op !== "duplicates") {
1066
+ throw new errors_1.CliError("INVALID_INSPECT_SAVE", "inspect --save can be used only with code, slice, usages, or duplicates operations.");
1067
+ }
1068
+ const requestOp = (0, inspect_request_values_1.toExtensionInspectOp)(op);
1069
+ if (isMultiTargetDirectInspectOp(op) && args.length > 2) {
1070
+ return {
1071
+ requests: args.slice(1).map((target) => {
1072
+ const request = {
1073
+ op: requestOp,
1074
+ sourceFile: (0, inspect_request_values_1.resolveCliFilePath)(cwd, target),
1075
+ ranges: includeRanges,
1076
+ resolveStar,
1077
+ localOnly: requestOp === "file" && localOnly
1078
+ };
1079
+ (0, inspect_request_values_1.applyInspectMemberOptions)(request, memberOptions);
1080
+ return request;
1081
+ })
1082
+ };
1083
+ }
1084
+ const request = {
1085
+ op: requestOp,
1086
+ sourceFile: (0, inspect_request_values_1.resolveCliFilePath)(cwd, sourceFile),
1087
+ ranges: includeRanges || requestOp === "code" || requestOp === "slice",
1088
+ resolveStar,
1089
+ localOnly: requestOp === "file" && localOnly
1090
+ };
1091
+ (0, inspect_request_values_1.applyInspectMemberOptions)(request, memberOptions);
1092
+ if (requestOp === "members" || requestOp === "code" || requestOp === "dependencies" || requestOp === "slice") {
1093
+ if (!entity) {
1094
+ throw new errors_1.CliError("INSPECT_ENTITY_REQUIRED", `inspect ${op} expects an entity selector.`);
1095
+ }
1096
+ (0, inspect_request_values_1.addSelectorToRequest)(request, entity, config);
1097
+ }
1098
+ if (requestOp === "usages" && entity) {
1099
+ (0, inspect_request_values_1.addSelectorToRequest)(request, entity, config);
1100
+ }
1101
+ if (requestOp === "usages") {
1102
+ request.cwd = path.resolve(cwd);
1103
+ }
1104
+ if (requestOp === "duplicates") {
1105
+ request.detail = (0, inspect_request_values_1.readFlagValue)(restArgs, "--detail") ?? "locations";
1106
+ request.mode = (0, inspect_request_values_1.readFlagValue)(restArgs, "--mode") ?? "both";
1107
+ const limit = (0, inspect_request_values_1.readPositiveIntegerFlag)(restArgs, "--limit");
1108
+ const offset = (0, inspect_request_values_1.readNonNegativeIntegerFlag)(restArgs, "--offset");
1109
+ if (limit !== null) {
1110
+ request.limit = limit;
1111
+ }
1112
+ if (offset !== null) {
1113
+ request.offset = offset;
1114
+ }
1115
+ const kinds = (0, inspect_request_values_1.readDuplicateKindArgs)(restArgs, config);
1116
+ if (kinds.length > 0) {
1117
+ request.kinds = kinds;
1118
+ }
1119
+ const entities = (0, inspect_request_values_1.parseDuplicateEntityFilters)([
1120
+ ...(entity ? [entity] : []),
1121
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--entity"),
1122
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--entities").flatMap((value) => value.split(","))
1123
+ ], config);
1124
+ if (entities.length > 0) {
1125
+ request.duplicateEntities = entities;
1126
+ }
1127
+ const exclude = (0, inspect_request_values_1.parseDuplicateEntityFilters)([
1128
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--exclude"),
1129
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--excludes").flatMap((value) => value.split(","))
1130
+ ], config);
1131
+ if (exclude.length > 0) {
1132
+ request.duplicateExclude = exclude;
1133
+ }
1134
+ const pathExclude = (0, inspect_request_values_1.parseDuplicatePathExcludes)(cwd, [
1135
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--path-exclude"),
1136
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--path-excludes").flatMap((value) => value.split(",")),
1137
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--exclude-path"),
1138
+ ...(0, inspect_request_values_1.readFlagValues)(restArgs, "--exclude-paths").flatMap((value) => value.split(","))
1139
+ ]);
1140
+ if (pathExclude.length > 0) {
1141
+ request.duplicatePathExclude = pathExclude;
1142
+ }
1143
+ }
1144
+ const scopes = (0, inspect_request_values_1.readFlagValues)(restArgs, "--scope");
1145
+ if (requestOp === "usages" && scopes.length > 0) {
1146
+ request.scope = scopes.map((scope) => (0, inspect_request_values_1.resolveCliFilePath)(cwd, scope));
1147
+ }
1148
+ if (requestOp === "duplicates" && scopes.length > 0) {
1149
+ request.scope = scopes.map((scope) => (0, inspect_request_values_1.resolveCliFilePath)(cwd, scope));
1150
+ }
1151
+ if (requestOp === "usages") {
1152
+ request.excludeTarget = restArgs.includes("--exclude-target") ||
1153
+ restArgs.includes("--excludeTarget") ||
1154
+ false;
1155
+ const includeTarget = restArgs.includes("--include-target") || restArgs.includes("--includeTarget");
1156
+ const prefExcludeTarget = (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.usages.excludeTarget", false);
1157
+ if (includeTarget) {
1158
+ request.excludeTarget = false;
1159
+ }
1160
+ else if (request.excludeTarget === true || prefExcludeTarget) {
1161
+ request.excludeTarget = true;
1162
+ }
1163
+ else if ((0, inspect_request_values_1.shouldAutoExcludeUsageTarget)(cwd, (0, inspect_usages_detail_1.readString)(request.sourceFile) ?? "", (0, inspect_usages_detail_1.readStringArray)(request.scope) ?? [])) {
1164
+ request.excludeTarget = true;
1165
+ request.targetLocalUsagesHidden = true;
1166
+ }
1167
+ }
1168
+ const parentSelector = (0, inspect_request_values_1.readFlagValue)(restArgs, "--parent");
1169
+ if (parentSelector) {
1170
+ const parent = (0, inspect_selector_1.parseInspectSelector)(parentSelector, config);
1171
+ request.parentName = parent.symbolName;
1172
+ if (parent.symbolKind) {
1173
+ request.parentKind = parent.symbolKind;
1174
+ }
1175
+ }
1176
+ return {
1177
+ requests: [request]
1178
+ };
1179
+ }
1180
+ function isMultiTargetDirectInspectOp(op) {
1181
+ return op === "file" || op === "exports";
1182
+ }
1183
+ function buildInspectStdinPayload(cwd, rawPayload, config, includeRanges, resolveStar, localOnly, memberOptions, allowModulePlan) {
1184
+ const rawRequests = (0, inspect_request_values_1.expandInspectStdinRequests)(rawPayload);
1185
+ const toFiles = [];
1186
+ const saves = [];
1187
+ const shows = [];
1188
+ const ranges = [];
1189
+ const parentNames = [];
1190
+ const usagesDetails = [];
1191
+ const agentDxSignals = [];
1192
+ const topLevelUsagesDetail = (0, inspect_usages_detail_1.readOptionalUsagesDetail)(rawPayload.detail);
1193
+ const topLevelAll = (0, inspect_request_values_1.readBoolean)(rawPayload.all);
1194
+ const topLevelLimit = (0, inspect_request_values_1.readPositiveInteger)(rawPayload.limit);
1195
+ const topLevelMaxCodeLines = (0, inspect_request_values_1.readPositiveInteger)(rawPayload.maxCodeLines);
1196
+ const topLevelExcludeTarget = (0, inspect_request_values_1.readBoolean)(rawPayload.excludeTarget);
1197
+ const topLevelIncludeTarget = (0, inspect_request_values_1.readBoolean)(rawPayload.includeTarget);
1198
+ const bundleSave = (0, inspect_usages_detail_1.readString)(rawPayload.bundleSave) ??
1199
+ (0, inspect_usages_detail_1.readString)(rawPayload.bundle) ??
1200
+ (0, inspect_usages_detail_1.readString)(rawPayload.saveBundle) ??
1201
+ undefined;
1202
+ const requests = rawRequests.map((rawRequest, index) => {
1203
+ if (!(0, inspect_usages_detail_1.isObject)(rawRequest)) {
1204
+ throw new errors_1.CliError("INVALID_INSPECT_REQUEST", `Inspect request at index ${index} must be an object.`);
1205
+ }
1206
+ const op = (0, inspect_usages_detail_1.readString)(rawRequest.op);
1207
+ const sourceFile = (0, inspect_usages_detail_1.readString)(rawRequest.sourceFile) ??
1208
+ (0, inspect_usages_detail_1.readString)(rawRequest.file) ??
1209
+ (op === "usages" ? (0, inspect_usages_detail_1.readString)(rawRequest.target) ?? (0, inspect_usages_detail_1.readString)(rawRequest.usageTarget) ?? (0, inspect_usages_detail_1.readString)(rawRequest.dir) : null) ??
1210
+ (op === "duplicate" || op === "duplicates" ? (0, inspect_usages_detail_1.readString)(rawRequest.target) ?? (0, inspect_usages_detail_1.readString)(rawRequest.dir) ?? (0, inspect_request_values_1.firstString)(rawRequest.scope) ?? (0, inspect_request_values_1.firstString)(rawRequest.scopes) : null);
1211
+ if (!op || !(0, inspect_request_values_1.isInspectOp)(op)) {
1212
+ throw new errors_1.CliError("INVALID_INSPECT_OP", `Inspect request at index ${index} has invalid op.`);
1213
+ }
1214
+ const dslSignal = collectInspectDslAgentDxSignal(op, rawRequest);
1215
+ if (dslSignal) {
1216
+ agentDxSignals.push(dslSignal);
1217
+ }
1218
+ (0, inspect_request_values_1.assertModulePlanAllowed)(op, allowModulePlan);
1219
+ if (!sourceFile) {
1220
+ throw new errors_1.CliError("SOURCE_FILE_REQUIRED", `Inspect request at index ${index} requires sourceFile or file.`);
1221
+ }
1222
+ const requestOp = (0, inspect_request_values_1.toExtensionInspectOp)(op);
1223
+ const explicitRanges = (0, inspect_request_values_1.readBoolean)(rawRequest.ranges) ??
1224
+ (0, inspect_request_values_1.readBoolean)(rawRequest.includeRanges);
1225
+ const displayRanges = explicitRanges ??
1226
+ (requestOp === "code" || requestOp === "slice"
1227
+ ? true
1228
+ : requestOp === "file"
1229
+ ? true
1230
+ : requestOp === "exports"
1231
+ ? (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.exports.ranges", false)
1232
+ : includeRanges);
1233
+ const requestRanges = displayRanges || requestOp === "code" || requestOp === "slice";
1234
+ const request = {
1235
+ op: requestOp,
1236
+ sourceFile: (0, inspect_request_values_1.resolveCliFilePath)(cwd, sourceFile),
1237
+ ranges: requestRanges,
1238
+ resolveStar: (0, inspect_request_values_1.readBoolean)(rawRequest.resolveStar) ??
1239
+ (requestOp === "exports" ? (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.exports.resolveStar", false) : resolveStar),
1240
+ localOnly: requestOp === "file" && (rawRequest.localOnly === true || localOnly)
1241
+ };
1242
+ if (requestOp === "usages") {
1243
+ request.cwd = path.resolve(cwd);
1244
+ usagesDetails.push((0, inspect_usages_detail_1.readUsagesDetailOptions)(cwd, {
1245
+ detail: (0, inspect_usages_detail_1.readString)(rawRequest.detail) ?? topLevelUsagesDetail,
1246
+ all: (0, inspect_request_values_1.readBoolean)(rawRequest.all) ?? topLevelAll,
1247
+ limit: (0, inspect_request_values_1.readPositiveInteger)(rawRequest.limit) ?? topLevelLimit,
1248
+ maxCodeLines: (0, inspect_request_values_1.readPositiveInteger)(rawRequest.maxCodeLines) ?? topLevelMaxCodeLines
1249
+ }));
1250
+ const scopes = (0, inspect_usages_detail_1.readStringArray)(rawRequest.scope) ?? (0, inspect_usages_detail_1.readStringArray)(rawRequest.scopes);
1251
+ if (scopes && scopes.length > 0) {
1252
+ request.scope = scopes.map((scope) => (0, inspect_request_values_1.resolveCliFilePath)(cwd, scope));
1253
+ }
1254
+ const includeTarget = (0, inspect_request_values_1.readBoolean)(rawRequest.includeTarget) ?? topLevelIncludeTarget;
1255
+ const explicitExcludeTarget = (0, inspect_request_values_1.readBoolean)(rawRequest.excludeTarget) ?? topLevelExcludeTarget;
1256
+ const prefExcludeTarget = (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.usages.excludeTarget", false);
1257
+ if (includeTarget === true) {
1258
+ request.excludeTarget = false;
1259
+ }
1260
+ else if (explicitExcludeTarget !== null) {
1261
+ request.excludeTarget = explicitExcludeTarget;
1262
+ }
1263
+ else if (prefExcludeTarget) {
1264
+ request.excludeTarget = true;
1265
+ }
1266
+ else if ((0, inspect_request_values_1.shouldAutoExcludeUsageTarget)(cwd, request.sourceFile, (0, inspect_usages_detail_1.readStringArray)(request.scope) ?? [])) {
1267
+ request.excludeTarget = true;
1268
+ request.targetLocalUsagesHidden = true;
1269
+ }
1270
+ if (Array.isArray(rawRequest.entities)) {
1271
+ request.usageEntities = (0, inspect_request_values_1.parseUsageEntities)(rawRequest.entities, config);
1272
+ }
1273
+ }
1274
+ else {
1275
+ usagesDetails.push(null);
1276
+ }
1277
+ if (requestOp === "duplicates") {
1278
+ request.detail = (0, inspect_usages_detail_1.readString)(rawRequest.detail) ?? (0, inspect_usages_detail_1.readString)(rawPayload.detail) ?? "locations";
1279
+ request.mode = (0, inspect_usages_detail_1.readString)(rawRequest.mode) ?? (0, inspect_usages_detail_1.readString)(rawPayload.mode) ?? "both";
1280
+ request.limit = (0, inspect_request_values_1.readPositiveInteger)(rawRequest.limit) ?? (0, inspect_request_values_1.readPositiveInteger)(rawPayload.limit) ?? 10;
1281
+ request.offset = (0, inspect_request_values_1.readNonNegativeInteger)(rawRequest.offset) ?? (0, inspect_request_values_1.readNonNegativeInteger)(rawPayload.offset) ?? 0;
1282
+ const scopes = (0, inspect_usages_detail_1.readStringArray)(rawRequest.scope) ?? (0, inspect_usages_detail_1.readStringArray)(rawRequest.scopes) ?? (0, inspect_usages_detail_1.readStringArray)(rawPayload.scope) ?? (0, inspect_usages_detail_1.readStringArray)(rawPayload.scopes);
1283
+ if (scopes && scopes.length > 0) {
1284
+ request.scope = scopes.map((scope) => (0, inspect_request_values_1.resolveCliFilePath)(cwd, scope));
1285
+ }
1286
+ const kinds = (0, inspect_request_values_1.readDuplicateKinds)(rawRequest.kinds ?? rawPayload.kinds, config);
1287
+ if (kinds.length > 0) {
1288
+ request.kinds = kinds;
1289
+ }
1290
+ const entities = (0, inspect_request_values_1.parseDuplicateEntityFilters)(rawRequest.entities ?? rawRequest.entity ?? rawPayload.entities ?? rawPayload.entity, config);
1291
+ if (entities.length > 0) {
1292
+ request.duplicateEntities = entities;
1293
+ }
1294
+ const exclude = (0, inspect_request_values_1.parseDuplicateEntityFilters)(rawRequest.exclude ?? rawRequest.excludes ?? rawPayload.exclude ?? rawPayload.excludes, config);
1295
+ if (exclude.length > 0) {
1296
+ request.duplicateExclude = exclude;
1297
+ }
1298
+ const pathExclude = (0, inspect_request_values_1.parseDuplicatePathExcludes)(cwd, rawRequest.pathExclude ??
1299
+ rawRequest.pathExcludes ??
1300
+ rawRequest.excludePath ??
1301
+ rawRequest.excludePaths ??
1302
+ rawPayload.pathExclude ??
1303
+ rawPayload.pathExcludes ??
1304
+ rawPayload.excludePath ??
1305
+ rawPayload.excludePaths);
1306
+ if (pathExclude.length > 0) {
1307
+ request.duplicatePathExclude = pathExclude;
1308
+ }
1309
+ }
1310
+ if (requestOp === "modulePlan") {
1311
+ request.modules = (0, inspect_request_values_1.parseModulePlanModules)(cwd, rawRequest.modules, config);
1312
+ const facade = (0, inspect_usages_detail_1.readString)(rawRequest.facade) ?? (0, inspect_usages_detail_1.readString)(rawRequest.facadeFile);
1313
+ if (facade) {
1314
+ request.facadeFile = (0, inspect_request_values_1.resolveCliFilePath)(cwd, facade);
1315
+ }
1316
+ if (rawRequest.previewFiles === true || rawRequest.preview === "files") {
1317
+ request.previewFiles = true;
1318
+ const previewDir = (0, inspect_usages_detail_1.readString)(rawRequest.previewDir) ?? (0, inspect_usages_detail_1.readString)(rawRequest.outputDir);
1319
+ if (previewDir) {
1320
+ request.previewDir = (0, inspect_request_values_1.resolveCliFilePath)(cwd, previewDir);
1321
+ }
1322
+ request.previewPatch = rawRequest.previewPatch !== false;
1323
+ }
1324
+ }
1325
+ (0, inspect_request_values_1.applyInspectMemberOptions)(request, {
1326
+ memberOffset: (0, inspect_request_values_1.readNonNegativeInteger)(rawRequest.offset) ?? (0, inspect_request_values_1.readNonNegativeInteger)(rawRequest.memberOffset) ?? memberOptions.memberOffset,
1327
+ memberLimit: (0, inspect_request_values_1.readPositiveInteger)(rawRequest.limit) ??
1328
+ (0, inspect_request_values_1.readPositiveInteger)(rawRequest.memberLimit) ??
1329
+ memberOptions.memberLimit ??
1330
+ (requestOp === "members" ? (0, session_workspace_1.readSessionNumberPref)(cwd, "inspect.members.maxItems", 20) : null),
1331
+ memberAll: (0, inspect_request_values_1.readBoolean)(rawRequest.all) ??
1332
+ (0, inspect_request_values_1.readBoolean)(rawRequest.memberAll) ??
1333
+ (requestOp === "members" ? (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.members.all", false) : memberOptions.memberAll)
1334
+ });
1335
+ const id = (0, inspect_usages_detail_1.readString)(rawRequest.id);
1336
+ if (id) {
1337
+ request.id = id;
1338
+ }
1339
+ const toFile = requestOp === "modulePlan" ? null : (0, inspect_usages_detail_1.readString)(rawRequest.toFile) ?? (0, inspect_usages_detail_1.readString)(rawRequest.outputFile);
1340
+ const save = requestOp === "modulePlan" ? null : (0, inspect_usages_detail_1.readString)(rawRequest.save);
1341
+ if (toFile && requestOp !== "code" && requestOp !== "slice") {
1342
+ throw new errors_1.CliError("INVALID_INSPECT_TO_FILE", `Inspect request at index ${index} can use toFile only with code or slice operations.`);
1343
+ }
1344
+ if (save && requestOp !== "code" && requestOp !== "slice" && requestOp !== "usages" && requestOp !== "duplicates") {
1345
+ throw new errors_1.CliError("INVALID_INSPECT_SAVE", `Inspect request at index ${index} can use save only with code, slice, usages, or duplicates operations.`);
1346
+ }
1347
+ if (toFile && save) {
1348
+ throw new errors_1.CliError("INSPECT_OUTPUT_TARGET_CONFLICT", `Inspect request at index ${index} must use either toFile or save, not both.`);
1349
+ }
1350
+ toFiles.push(toFile);
1351
+ saves.push(save);
1352
+ const rawShow = typeof rawRequest.show === "boolean" ? rawRequest.show : null;
1353
+ shows.push(rawShow ?? (requestOp === "code" && (0, session_workspace_1.readSessionBooleanPref)(cwd, "inspect.code.show", true)));
1354
+ ranges.push(displayRanges);
1355
+ const rawSymbolKind = (0, inspect_usages_detail_1.readString)(rawRequest.symbolKind) ?? (0, inspect_usages_detail_1.readString)(rawRequest.kind);
1356
+ const entity = (0, inspect_usages_detail_1.readString)(rawRequest.entity) ??
1357
+ (0, inspect_usages_detail_1.readString)(rawRequest.selector) ??
1358
+ (0, inspect_usages_detail_1.readString)(rawRequest.symbol) ??
1359
+ (0, inspect_usages_detail_1.readString)(rawRequest.symbolName) ??
1360
+ (0, inspect_usages_detail_1.readString)(rawRequest.name);
1361
+ if (entity) {
1362
+ (0, inspect_request_values_1.addSelectorToRequest)(request, entity, config);
1363
+ }
1364
+ if (rawSymbolKind) {
1365
+ request.symbolKind = rawSymbolKind;
1366
+ }
1367
+ const parent = (0, inspect_usages_detail_1.readString)(rawRequest.parent);
1368
+ if (parent) {
1369
+ const parsedParent = (0, inspect_selector_1.parseInspectSelector)(parent, config);
1370
+ request.parentName = parsedParent.symbolName;
1371
+ if (parsedParent.symbolKind) {
1372
+ request.parentKind = parsedParent.symbolKind;
1373
+ }
1374
+ parentNames.push(parsedParent.symbolName);
1375
+ }
1376
+ else {
1377
+ parentNames.push(null);
1378
+ }
1379
+ return request;
1380
+ });
1381
+ return {
1382
+ payload: {
1383
+ requests
1384
+ },
1385
+ toFiles,
1386
+ saves,
1387
+ shows,
1388
+ ranges,
1389
+ parentNames,
1390
+ usagesDetails,
1391
+ agentDxSignals,
1392
+ ...(bundleSave !== undefined ? { bundleSave } : {})
1393
+ };
1394
+ }
1395
+ function collectInspectDslAgentDxSignal(op, rawRequest) {
1396
+ if (!(op in INSPECT_DSL_KNOWN_OPTIONS)) {
1397
+ return null;
1398
+ }
1399
+ const rawTokens = rawRequest[INSPECT_DSL_OPTION_TOKENS_FIELD];
1400
+ if (!Array.isArray(rawTokens)) {
1401
+ return null;
1402
+ }
1403
+ const knownOptions = INSPECT_DSL_KNOWN_OPTIONS[op];
1404
+ const unsupportedTokens = rawTokens
1405
+ .filter((token) => typeof token === "string" && token.length > 0)
1406
+ .filter((token) => !knownOptions.has(inspectDslOptionName(token)));
1407
+ if (unsupportedTokens.length === 0) {
1408
+ return null;
1409
+ }
1410
+ return {
1411
+ kind: "unknownFlag",
1412
+ command: `inspect ${op}`,
1413
+ flags: uniqueStrings(unsupportedTokens),
1414
+ helpRefs: [{ topic: `inspect.${op}`, reason: "unknownFlag", priority: 1, mode: "command" }]
1415
+ };
1416
+ }
1417
+ function inspectDslOptionName(token) {
1418
+ let rawName = token;
1419
+ if ((token.startsWith("+") || token.startsWith("-")) && token.length > 1) {
1420
+ rawName = token.slice(1);
1421
+ }
1422
+ else {
1423
+ const equalIndex = token.indexOf("=");
1424
+ if (equalIndex > 0) {
1425
+ rawName = token.slice(0, equalIndex);
1426
+ }
1427
+ else if (token.startsWith(">") && token.length > 1) {
1428
+ rawName = "save";
1429
+ }
1430
+ }
1431
+ if (rawName === "from") {
1432
+ return "fromFile";
1433
+ }
1434
+ if (rawName === "no-default-exclude") {
1435
+ return "noDefaultExclude";
1436
+ }
1437
+ if (rawName === "no-config-exclude") {
1438
+ return "noConfigExclude";
1439
+ }
1440
+ if (rawName === "only-dirs") {
1441
+ return "onlyDirs";
1442
+ }
1443
+ if (rawName === "min-depth") {
1444
+ return "minDepth";
1445
+ }
1446
+ return rawName;
1447
+ }
1448
+ function uniqueStrings(values) {
1449
+ return Array.from(new Set(values));
1450
+ }