@automaton-labs/aib 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/README.md +21 -578
  2. package/config/agent-dx-policy.default.json +31 -0
  3. package/config/control-plane-client.default.json +3 -0
  4. package/dist/agent-dx/agent-dx.js +805 -0
  5. package/dist/agent-dx/presentation.js +32 -0
  6. package/dist/alias-advisor/analyze.js +982 -0
  7. package/dist/alias-advisor/exact-text-cost.js +74 -0
  8. package/dist/alias-advisor/lexical.js +240 -0
  9. package/dist/alias-advisor/model.js +2 -0
  10. package/dist/alias-advisor/path-identity.js +49 -0
  11. package/dist/alias-advisor/ranking.js +171 -0
  12. package/dist/alias-advisor/token-estimator.js +85 -0
  13. package/dist/bin/aib.js +5 -1
  14. package/dist/bin/cli.js +811 -4
  15. package/dist/commands/add-missing-imports-preview-cache.js +99 -2
  16. package/dist/commands/add-missing-imports.js +241 -2
  17. package/dist/commands/apply-module-plan.js +1319 -3
  18. package/dist/commands/background-command.js +378 -2
  19. package/dist/commands/captured-input.js +74 -1
  20. package/dist/commands/config-command.js +314 -2
  21. package/dist/commands/config-output.js +357 -10
  22. package/dist/commands/control-plane-command.js +183 -1
  23. package/dist/commands/declaration-command.js +1209 -7
  24. package/dist/commands/declaration-execution-cache.js +79 -1
  25. package/dist/commands/declaration-format.js +221 -1
  26. package/dist/commands/declaration-preview-cache.js +114 -2
  27. package/dist/commands/diagnostics-command.js +70 -3
  28. package/dist/commands/doctor.js +137 -3
  29. package/dist/commands/execution-command.js +117 -1
  30. package/dist/commands/exports-star-collapse-command.js +178 -0
  31. package/dist/commands/exports-star-command.js +252 -0
  32. package/dist/commands/exports-star-preview-cache.js +84 -0
  33. package/dist/commands/feedback-command.js +176 -3
  34. package/dist/commands/file-move-to-dir-execution-cache.js +92 -1
  35. package/dist/commands/file-move-to-dir-preview-cache.js +125 -2
  36. package/dist/commands/file-move-to-dir-worker.js +54 -0
  37. package/dist/commands/file-move-to-dir.js +1073 -5
  38. package/dist/commands/file-mutation-runtime.js +102 -1
  39. package/dist/commands/file-mutation-worker-apply.js +180 -0
  40. package/dist/commands/file-refactor-batch-execution-cache.js +90 -1
  41. package/dist/commands/file-refactor-batch-preview-cache.js +125 -2
  42. package/dist/commands/file-refactor-batch-worker.js +54 -0
  43. package/dist/commands/file-refactor-batch.js +1154 -5
  44. package/dist/commands/file-rename-execution-cache.js +92 -1
  45. package/dist/commands/file-rename-preview-cache.js +125 -2
  46. package/dist/commands/file-rename-worker.js +54 -0
  47. package/dist/commands/file-rename.js +1053 -5
  48. package/dist/commands/file-text-edit-executor.js +205 -0
  49. package/dist/commands/find-importers.js +52 -1
  50. package/dist/commands/find-unused-imports.js +55 -1
  51. package/dist/commands/generate-docs-command.js +244 -6
  52. package/dist/commands/help-command.js +460 -7
  53. package/dist/commands/import-specifier-policy.js +391 -0
  54. package/dist/commands/imports-command.js +68 -1
  55. package/dist/commands/imports-rebase.js +1138 -0
  56. package/dist/commands/init-skill-usage.js +92 -3
  57. package/dist/commands/init-workspace.js +30 -1
  58. package/dist/commands/inspect-alias-candidates.js +413 -0
  59. package/dist/commands/inspect-cycles.js +811 -5
  60. package/dist/commands/inspect-direct-usages.js +98 -0
  61. package/dist/commands/inspect-duplicates-format.js +229 -0
  62. package/dist/commands/inspect-format-primitives.js +127 -0
  63. package/dist/commands/inspect-format.js +1590 -18
  64. package/dist/commands/inspect-graph.js +1553 -9
  65. package/dist/commands/inspect-imports.js +339 -2
  66. package/dist/commands/inspect-mixed-format.js +524 -0
  67. package/dist/commands/inspect-module-plan-format.js +216 -0
  68. package/dist/commands/inspect-module-plan-serialization.js +402 -0
  69. package/dist/commands/inspect-reference-path-format.js +157 -0
  70. package/dist/commands/inspect-request-values.js +599 -0
  71. package/dist/commands/inspect-selector-kind.js +21 -0
  72. package/dist/commands/inspect-selector.js +50 -0
  73. package/dist/commands/inspect-symbol-format.js +90 -0
  74. package/dist/commands/inspect-topology.js +435 -0
  75. package/dist/commands/inspect-tree.js +827 -5
  76. package/dist/commands/inspect-usages-detail.js +793 -0
  77. package/dist/commands/inspect-usages-evidence.js +31 -0
  78. package/dist/commands/inspect-usages-format.js +367 -0
  79. package/dist/commands/inspect.js +1450 -16
  80. package/dist/commands/internal-command.js +64 -0
  81. package/dist/commands/json-file-input.js +60 -1
  82. package/dist/commands/module-plan-cache.js +156 -2
  83. package/dist/commands/module-plan-standalone.js +208 -0
  84. package/dist/commands/module-plan-timeout.js +77 -1
  85. package/dist/commands/move-preview-cache.js +101 -2
  86. package/dist/commands/mutate-aggregate-output.js +996 -0
  87. package/dist/commands/mutate-child-execution.js +374 -0
  88. package/dist/commands/mutate-command.js +1394 -0
  89. package/dist/commands/mutate-declaration-output.js +313 -0
  90. package/dist/commands/mutate-domain-adapters.js +638 -0
  91. package/dist/commands/mutate-execution-cache.js +114 -0
  92. package/dist/commands/mutate-execution-status.js +598 -0
  93. package/dist/commands/mutate-failure-output.js +531 -0
  94. package/dist/commands/mutate-file-view.js +151 -0
  95. package/dist/commands/mutate-object-output.js +91 -0
  96. package/dist/commands/mutate-output-values.js +97 -0
  97. package/dist/commands/mutate-preview-cache.js +86 -0
  98. package/dist/commands/mutate-response-replay.js +153 -0
  99. package/dist/commands/mutate-result-projection.js +818 -0
  100. package/dist/commands/mutation-eta.js +28 -0
  101. package/dist/commands/mutation-execution-cache.js +140 -3
  102. package/dist/commands/mutation-recovery-journal.js +195 -0
  103. package/dist/commands/normalize-imports.js +1120 -4
  104. package/dist/commands/object-pack-command.js +546 -0
  105. package/dist/commands/object-pack-preview-cache.js +88 -0
  106. package/dist/commands/observability-command.js +47 -3
  107. package/dist/commands/ota-command.js +403 -2
  108. package/dist/commands/print-config.js +10 -1
  109. package/dist/commands/quick-read.js +1113 -11
  110. package/dist/commands/refactor-batch-builder.js +265 -1
  111. package/dist/commands/refactor-batch-execution-cache.js +85 -1
  112. package/dist/commands/refactor-batch-preview-cache.js +96 -2
  113. package/dist/commands/refactor-batch.js +461 -4
  114. package/dist/commands/rename-entities.js +794 -4
  115. package/dist/commands/rename-execution-cache.js +49 -1
  116. package/dist/commands/rename-input.js +22 -1
  117. package/dist/commands/rename-polling-policy.js +68 -0
  118. package/dist/commands/rename-preview-cache.js +96 -2
  119. package/dist/commands/result-view.js +993 -7
  120. package/dist/commands/reveal-command.js +445 -5
  121. package/dist/commands/selector-suggestions.js +93 -0
  122. package/dist/commands/session-workspace.js +1836 -31
  123. package/dist/commands/shared.js +2 -1
  124. package/dist/commands/skills-command.js +315 -0
  125. package/dist/commands/sync-command.js +59 -2
  126. package/dist/commands/worker-command.js +173 -1
  127. package/dist/commands/workspace-cache.js +55 -1
  128. package/dist/config/defaults.js +26 -1
  129. package/dist/config/env-vars.js +77 -1
  130. package/dist/config/glob-match.js +44 -1
  131. package/dist/config/import-rules.js +165 -1
  132. package/dist/config/local-config.js +293 -3
  133. package/dist/config/mutation-comments.js +51 -1
  134. package/dist/config/path-aliases.js +165 -1
  135. package/dist/config/path-display.js +84 -1
  136. package/dist/config/product-storage.js +37 -1
  137. package/dist/config/request-env.js +21 -0
  138. package/dist/config/request-routing-context.js +23 -0
  139. package/dist/config/resolve-command-alias.js +74 -1
  140. package/dist/config/resolve.js +24 -1
  141. package/dist/config/tsconfig-discovery.js +113 -1
  142. package/dist/config/typescript-preferences.js +131 -0
  143. package/dist/config/workspace-root.js +310 -3
  144. package/dist/config/workspace-state.js +254 -1
  145. package/dist/content/content-bundle.js +88 -1
  146. package/dist/diagnostics/module-plan-timeline.js +75 -2
  147. package/dist/diagnostics/readiness-text.js +45 -8
  148. package/dist/dsl/aib-dsl.js +838 -1
  149. package/dist/dsl/declaration-dsl.js +264 -1
  150. package/dist/dsl/file-move-to-dir-dsl.js +123 -1
  151. package/dist/dsl/file-refactor-batch-dsl.js +203 -1
  152. package/dist/dsl/file-rename-dsl.js +135 -1
  153. package/dist/dsl/mutate-dsl.js +746 -0
  154. package/dist/help/bootstrap.bash.md +176 -341
  155. package/dist/help/bootstrap.md +175 -340
  156. package/dist/help/bootstrap.pwsh.md +176 -341
  157. package/dist/help/docs/basics.md +1 -1
  158. package/dist/help/docs/config-setup.import-normalize.md +65 -65
  159. package/dist/help/docs/config-setup.import-rules.md +6 -5
  160. package/dist/help/docs/first-setup.md +6 -5
  161. package/dist/help/docs/help-protocol.md +4 -3
  162. package/dist/help/docs/import.base.md +38 -0
  163. package/dist/help/docs/import.rebase.md +85 -0
  164. package/dist/help/docs/inspect.aliasCandidates.md +39 -0
  165. package/dist/help/docs/inspect.code.md +1 -7
  166. package/dist/help/docs/inspect.file.md +10 -19
  167. package/dist/help/docs/inspect.graph.md +3 -17
  168. package/dist/help/{dsl/docs/inspect.md → docs/inspect.shared.md} +13 -12
  169. package/dist/help/docs/modulePlan.md +24 -28
  170. package/dist/help/docs/move.md +19 -22
  171. package/dist/help/{dsl/topics/file.move.md → docs/moveToDir.md} +36 -34
  172. package/dist/help/docs/mutate.mixed.md +34 -0
  173. package/dist/help/docs/mutation.shared.md +55 -0
  174. package/dist/help/docs/patterns.md +3 -12
  175. package/dist/help/docs/qr.md +12 -6
  176. package/dist/help/docs/quick-map.md +36 -24
  177. package/dist/help/docs/recipe.file-layout.md +10 -10
  178. package/dist/help/docs/recipe.import-boundary.md +92 -0
  179. package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
  180. package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
  181. package/dist/help/docs/recipes.md +20 -0
  182. package/dist/help/docs/rename.md +19 -27
  183. package/dist/help/docs/renameFile.md +36 -0
  184. package/dist/help/docs/rules.md +26 -0
  185. package/dist/help/dsl/bootstrap.bash.md +176 -341
  186. package/dist/help/dsl/bootstrap.md +175 -340
  187. package/dist/help/dsl/bootstrap.pwsh.md +176 -341
  188. package/dist/help/dsl/docs/basics.md +1 -1
  189. package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
  190. package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
  191. package/dist/help/dsl/docs/first-setup.md +6 -5
  192. package/dist/help/dsl/docs/help-protocol.md +4 -3
  193. package/dist/help/dsl/docs/import.base.md +38 -0
  194. package/dist/help/dsl/docs/import.rebase.md +85 -0
  195. package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
  196. package/dist/help/dsl/docs/inspect.code.md +1 -7
  197. package/dist/help/dsl/docs/inspect.file.md +10 -19
  198. package/dist/help/dsl/docs/inspect.graph.md +3 -17
  199. package/dist/help/{docs/inspect.md → dsl/docs/inspect.shared.md} +13 -12
  200. package/dist/help/dsl/docs/modulePlan.md +24 -28
  201. package/dist/help/dsl/docs/move.md +19 -22
  202. package/dist/help/{topics/file.move.md → dsl/docs/moveToDir.md} +36 -34
  203. package/dist/help/dsl/docs/mutate.mixed.md +34 -0
  204. package/dist/help/dsl/docs/mutation.shared.md +55 -0
  205. package/dist/help/dsl/docs/patterns.md +3 -12
  206. package/dist/help/dsl/docs/qr.md +12 -6
  207. package/dist/help/dsl/docs/quick-map.md +36 -24
  208. package/dist/help/dsl/docs/recipe.file-layout.md +10 -10
  209. package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
  210. package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
  211. package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
  212. package/dist/help/dsl/docs/recipes.md +20 -0
  213. package/dist/help/dsl/docs/rename.md +19 -27
  214. package/dist/help/dsl/docs/renameFile.md +36 -0
  215. package/dist/help/dsl/docs/rules.md +26 -0
  216. package/dist/help/dsl/full.md +175 -340
  217. package/dist/help/dsl/help-index.md +48 -43
  218. package/dist/help/dsl/snippets/agents.md +2 -2
  219. package/dist/help/dsl/tokens/qr.inline.examples.md +1 -1
  220. package/dist/help/dsl/topics/basics.md +1 -1
  221. package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
  222. package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
  223. package/dist/help/dsl/topics/first-setup.md +6 -5
  224. package/dist/help/dsl/topics/help-protocol.md +4 -3
  225. package/dist/help/dsl/topics/import.base.md +36 -0
  226. package/dist/help/dsl/topics/import.rebase.md +83 -0
  227. package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
  228. package/dist/help/dsl/topics/inspect.code.md +1 -7
  229. package/dist/help/dsl/topics/inspect.file.md +10 -19
  230. package/dist/help/dsl/topics/inspect.graph.md +3 -17
  231. package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +13 -12
  232. package/dist/help/dsl/topics/modulePlan.md +21 -26
  233. package/dist/help/dsl/topics/move.md +17 -18
  234. package/dist/help/{docs/file.move.md → dsl/topics/moveToDir.md} +33 -35
  235. package/dist/help/dsl/topics/mutate.mixed.md +32 -0
  236. package/dist/help/dsl/topics/mutation.shared.md +53 -0
  237. package/dist/help/dsl/topics/patterns.md +3 -12
  238. package/dist/help/dsl/topics/qr.md +12 -6
  239. package/dist/help/dsl/topics/quick-map.md +36 -24
  240. package/dist/help/dsl/topics/recipe.file-layout.md +10 -10
  241. package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
  242. package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
  243. package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
  244. package/dist/help/dsl/topics/recipes.md +18 -0
  245. package/dist/help/dsl/topics/rename.md +15 -15
  246. package/dist/help/dsl/topics/renameFile.md +34 -0
  247. package/dist/help/dsl/topics/rules.md +24 -0
  248. package/dist/help/full.md +175 -340
  249. package/dist/help/help-index.md +48 -43
  250. package/dist/help/help-meta.json +98 -48
  251. package/dist/help/index.md +52 -20
  252. package/dist/help/snippets/agents.md +2 -2
  253. package/dist/help/tokens/qr.inline.examples.md +1 -1
  254. package/dist/help/topics/basics.md +1 -1
  255. package/dist/help/topics/config-setup.import-normalize.md +65 -65
  256. package/dist/help/topics/config-setup.import-rules.md +6 -5
  257. package/dist/help/topics/first-setup.md +6 -5
  258. package/dist/help/topics/help-protocol.md +4 -3
  259. package/dist/help/topics/import.base.md +36 -0
  260. package/dist/help/topics/import.rebase.md +83 -0
  261. package/dist/help/topics/inspect.aliasCandidates.md +37 -0
  262. package/dist/help/topics/inspect.code.md +1 -7
  263. package/dist/help/topics/inspect.file.md +10 -19
  264. package/dist/help/topics/inspect.graph.md +3 -17
  265. package/dist/help/topics/{inspect.md → inspect.shared.md} +13 -12
  266. package/dist/help/topics/modulePlan.md +21 -26
  267. package/dist/help/topics/move.md +17 -18
  268. package/dist/help/{dsl/docs/file.move.md → topics/moveToDir.md} +33 -35
  269. package/dist/help/topics/mutate.mixed.md +32 -0
  270. package/dist/help/topics/mutation.shared.md +53 -0
  271. package/dist/help/topics/patterns.md +3 -12
  272. package/dist/help/topics/qr.md +12 -6
  273. package/dist/help/topics/quick-map.md +36 -24
  274. package/dist/help/topics/recipe.file-layout.md +10 -10
  275. package/dist/help/topics/recipe.import-boundary.md +90 -0
  276. package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
  277. package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
  278. package/dist/help/topics/recipes.md +18 -0
  279. package/dist/help/topics/rename.md +15 -15
  280. package/dist/help/topics/renameFile.md +34 -0
  281. package/dist/help/topics/rules.md +24 -0
  282. package/dist/host/capabilities.js +56 -1
  283. package/dist/imports/standalone-import-analysis.js +602 -0
  284. package/dist/imports/standalone-import-model.js +2 -0
  285. package/dist/imports/standalone-import-process.js +66 -0
  286. package/dist/imports/standalone-import-worker.js +27 -0
  287. package/dist/imports/standalone-ts-project.js +147 -0
  288. package/dist/inspect/inspect-duplicates-service.js +526 -0
  289. package/dist/inspect/inspect-reverse-module-closure.js +338 -0
  290. package/dist/inspect/inspect-source-ranges.js +82 -0
  291. package/dist/inspect/inspect-source-shape.js +649 -0
  292. package/dist/inspect/standalone-inspect-analysis.js +319 -0
  293. package/dist/inspect/standalone-inspect-model.js +9 -0
  294. package/dist/inspect/standalone-inspect-process.js +55 -0
  295. package/dist/inspect/standalone-inspect-usages.js +274 -0
  296. package/dist/inspect/standalone-inspect-worker.js +13 -0
  297. package/dist/metrics/central-metrics.js +101 -2
  298. package/dist/mutation/concrete-edit-plan.js +157 -0
  299. package/dist/mutation/exports-star-collapse-preview.js +361 -0
  300. package/dist/mutation/exports-star-expand-apply.js +373 -0
  301. package/dist/mutation/exports-star-expand-preview.js +807 -0
  302. package/dist/mutation/file-impact-scan.js +182 -0
  303. package/dist/mutation/file-mutation-discovery.js +674 -0
  304. package/dist/mutation/file-mutation-eta.js +99 -0
  305. package/dist/mutation/file-mutation-standalone-apply.js +584 -0
  306. package/dist/mutation/file-mutation-standalone-planner.js +500 -0
  307. package/dist/mutation/file-mutation-tsserver-session.js +473 -0
  308. package/dist/mutation/mutation-estimate.js +45 -0
  309. package/dist/mutation/mutation-plan.js +467 -0
  310. package/dist/mutation/object-mutation-foundation.js +2 -0
  311. package/dist/mutation/object-mutation-partition.js +148 -0
  312. package/dist/mutation/object-pack-semantic-apply.js +507 -0
  313. package/dist/mutation/object-pack-semantic-preview.js +984 -0
  314. package/dist/mutation/object-unpack-semantic-preview.js +993 -0
  315. package/dist/mutation/package-manifest-impact.js +176 -0
  316. package/dist/mutation/rename-owner-worker-child.js +37 -0
  317. package/dist/mutation/rename-owner-worker.js +122 -0
  318. package/dist/mutation/runtime-cycle-query.js +66 -0
  319. package/dist/mutation/semantic-execution-progress.js +63 -0
  320. package/dist/mutation/semantic-export-index.js +474 -0
  321. package/dist/mutation/semantic-impact-scan.js +434 -0
  322. package/dist/mutation/semantic-model.js +2 -0
  323. package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
  324. package/dist/mutation/semantic-move-config-worker-child.js +61 -0
  325. package/dist/mutation/semantic-move-config-worker.js +449 -0
  326. package/dist/mutation/semantic-move-declarations.js +94 -0
  327. package/dist/mutation/semantic-move-metrics.js +119 -0
  328. package/dist/mutation/semantic-move-model.js +2 -0
  329. package/dist/mutation/semantic-move-owner-authority.js +122 -0
  330. package/dist/mutation/semantic-move-owner-candidates.js +300 -0
  331. package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
  332. package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
  333. package/dist/mutation/semantic-move-plan-hash.js +56 -0
  334. package/dist/mutation/semantic-move-policy.js +360 -0
  335. package/dist/mutation/semantic-move-process.js +218 -0
  336. package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
  337. package/dist/mutation/semantic-move-standalone-engine.js +919 -0
  338. package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
  339. package/dist/mutation/semantic-move-transaction.js +639 -0
  340. package/dist/mutation/semantic-mutation-engine.js +478 -0
  341. package/dist/mutation/semantic-mutation-runtime.js +521 -0
  342. package/dist/mutation/semantic-planner-retry.js +26 -0
  343. package/dist/mutation/semantic-program-roots.js +69 -0
  344. package/dist/mutation/semantic-rename-commonjs.js +229 -0
  345. package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
  346. package/dist/mutation/semantic-rename-config-worker.js +498 -0
  347. package/dist/mutation/semantic-rename-locations.js +192 -0
  348. package/dist/mutation/semantic-rename-model.js +2 -0
  349. package/dist/mutation/semantic-rename-process.js +217 -0
  350. package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
  351. package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
  352. package/dist/mutation/semantic-rename-transaction.js +333 -0
  353. package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
  354. package/dist/mutation/semantic-worker-retry.js +40 -0
  355. package/dist/mutation/semantic-workspace.js +804 -0
  356. package/dist/mutation/targeted-import-canonicalizer.js +359 -0
  357. package/dist/observability/config.js +206 -1
  358. package/dist/observability/context.js +59 -1
  359. package/dist/observability/failure-snapshot.js +124 -2
  360. package/dist/observability/recent.js +63 -2
  361. package/dist/payloads/read-stdin-json.js +212 -1
  362. package/dist/rg-wrapper/core.js +714 -6
  363. package/dist/rg-wrapper/options.js +125 -1
  364. package/dist/rtk-wrapper/core.js +144 -2
  365. package/dist/rtk-wrapper/git-safety.js +203 -0
  366. package/dist/rtk-wrapper/output-adapter.js +106 -0
  367. package/dist/runtime/buffered-process.js +114 -0
  368. package/dist/runtime/bundled-node.js +97 -1
  369. package/dist/runtime/command-lifecycle.js +2 -0
  370. package/dist/runtime/input-source.js +238 -1
  371. package/dist/runtime/node-cli-identity.js +37 -0
  372. package/dist/runtime/run-command.js +191 -1
  373. package/dist/selectors/parse-entities.js +84 -1
  374. package/dist/semantic/semantic-context-pool.js +830 -0
  375. package/dist/semantic/semantic-context-provider.js +416 -0
  376. package/dist/semantic/semantic-resident-admission.js +38 -0
  377. package/dist/semantic/semantic-worker-child.js +40 -0
  378. package/dist/semantic/semantic-worker-manager.js +460 -0
  379. package/dist/semantic/semantic-worker-protocol.js +2 -0
  380. package/dist/semantic/semantic-worker-runtime.js +38 -0
  381. package/dist/semantic/workspace-semantic-context-pools.js +136 -0
  382. package/dist/session/client.js +359 -1
  383. package/dist/session/daemon-state.js +185 -2
  384. package/dist/session/external-tool-coordinator.js +88 -0
  385. package/dist/session/external-tool-request.js +52 -0
  386. package/dist/session/lane-owner.js +116 -0
  387. package/dist/session/paths.js +71 -1
  388. package/dist/session/runtime-lifecycle.js +225 -0
  389. package/dist/session/runtime-shutdown.js +95 -0
  390. package/dist/session/server.js +1194 -7
  391. package/dist/session/session-health.js +27 -0
  392. package/dist/shared/agent-text.js +29 -1
  393. package/dist/shared/errors.js +496 -30
  394. package/dist/shared/event-loop.js +6 -1
  395. package/dist/shared/hints.js +37 -1
  396. package/dist/shared/metrics.js +43 -1
  397. package/dist/shared/presentation.js +69 -4
  398. package/dist/shared/stdin-examples.js +77 -1
  399. package/dist/shared/stdout.js +6 -2
  400. package/dist/shared/types.js +23 -1
  401. package/dist/tool-runtime/runtime-tools.js +120 -1
  402. package/dist/topology/availability.js +663 -0
  403. package/dist/topology/cache.js +130 -0
  404. package/dist/topology/candidates.js +372 -0
  405. package/dist/topology/core.js +903 -0
  406. package/dist/topology/dependency-snapshot.js +189 -0
  407. package/dist/topology/model.js +2 -0
  408. package/dist/topology/scope.js +100 -0
  409. package/dist/topology/ts-oracle-batch.js +529 -0
  410. package/dist/topology/ts-oracle-host.js +69 -0
  411. package/dist/topology/ts-oracle-model.js +2 -0
  412. package/dist/topology/ts-oracle.js +224 -0
  413. package/dist/topology/tsconfig-loader.js +105 -0
  414. package/dist/topology/workspace-project-index.js +542 -0
  415. package/dist/tracing/config.js +192 -2
  416. package/dist/tracing/failure-summary.js +100 -0
  417. package/dist/tracing/trace.js +318 -5
  418. package/dist/tsc-wrapper/core.js +697 -0
  419. package/dist/workers/control-plane/aib-control-plane-worker.cjs +32 -32
  420. package/dist/workers/control-plane/client-config.default.json +3 -3
  421. package/dist/workers/lexical-worker-child.js +27 -0
  422. package/dist/workers/lexical-worker-manager.js +394 -0
  423. package/dist/workers/lexical-worker-protocol.js +2 -0
  424. package/dist/workers/lexical-worker-runtime.js +25 -0
  425. package/dist/workers/owned-one-shot-process.js +115 -0
  426. package/dist/workers/product-storage.js +23 -1
  427. package/dist/workers/registry.js +241 -1
  428. package/package.json +8 -13
  429. package/scripts/postinstall.cjs +29 -29
  430. package/scripts/provision-runtime.cjs +411 -459
  431. package/dist/client/http-client.js +0 -1
  432. package/dist/client/transport-options.js +0 -1
  433. package/dist/client/websocket-client.js +0 -1
  434. package/dist/commands/entity-resolution.js +0 -1
  435. package/dist/commands/file-command.js +0 -1
  436. package/dist/commands/host-command.js +0 -1
  437. package/dist/commands/inspect-symbol-query.js +0 -1
  438. package/dist/commands/list-instances.js +0 -1
  439. package/dist/commands/module-plan-command.js +0 -1
  440. package/dist/commands/move-command.js +0 -1
  441. package/dist/commands/move-to-file.js +0 -2
  442. package/dist/commands/ping.js +0 -1
  443. package/dist/commands/refactor-command.js +0 -1
  444. package/dist/commands/rename-command.js +0 -1
  445. package/dist/commands/runtime-command.js +0 -4
  446. package/dist/commands/runtime-info.js +0 -1
  447. package/dist/commands/validate-module-plan.js +0 -2
  448. package/dist/compatibility/policy.js +0 -1
  449. package/dist/config/auto-start-ide.js +0 -1
  450. package/dist/discovery/registry.js +0 -1
  451. package/dist/discovery/select-instance.js +0 -1
  452. package/dist/help/docs/file.rename.md +0 -35
  453. package/dist/help/docs/mutation.md +0 -60
  454. package/dist/help/docs/refactor.batch.md +0 -44
  455. package/dist/help/dsl/docs/file.rename.md +0 -35
  456. package/dist/help/dsl/docs/mutation.md +0 -60
  457. package/dist/help/dsl/docs/refactor.batch.md +0 -44
  458. package/dist/help/dsl/topics/file.rename.md +0 -33
  459. package/dist/help/dsl/topics/mutation.md +0 -58
  460. package/dist/help/dsl/topics/refactor.batch.md +0 -33
  461. package/dist/help/topics/file.rename.md +0 -33
  462. package/dist/help/topics/mutation.md +0 -58
  463. package/dist/help/topics/refactor.batch.md +0 -33
  464. package/dist/ide-launch/common.cjs +0 -162
  465. package/dist/managed-host/extension-vsix-resolver.js +0 -1
  466. package/dist/managed-host/manage-serve-web-host.cjs +0 -141
  467. package/dist/managed-host/serve-web-autostart.js +0 -1
  468. package/dist/managed-host/serve-web-host.cjs +0 -2115
  469. package/dist/runtime/managed-runtime-provisioning.js +0 -1
  470. package/dist/shared/diagnostic-catalog.js +0 -1
  471. package/dist/shared/diagnostics.js +0 -1
  472. package/dist/shared/operations.js +0 -1
  473. package/dist/shared/protocol.js +0 -1
  474. package/dist/shared/routes.js +0 -1
  475. package/extension/vscode-refactor-bridge-extension.vsix +0 -0
  476. package/runtimes/launcher/linux-x64/aib +0 -0
  477. package/runtimes/launcher/win-x64/aib.exe +0 -0
@@ -1,16 +1,1450 @@
1
- "use strict";var bt=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]})),It=exports&&exports.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Fe=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"&&bt(n,t,s[i]);return It(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runInspect=Ce;const M=Fe(require("node:path")),ye=Fe(require("node:fs")),xt=require("node:crypto"),At=require("../client/http-client"),St=require("../shared/routes"),_t=require("../shared/protocol"),E=require("../shared/errors"),z=require("../shared/agent-text"),re=require("./shared"),k=require("./inspect-format"),w=require("./module-plan-cache"),he=require("./json-file-input"),ge=require("./inspect-graph"),be=require("./inspect-cycles"),Ie=require("./inspect-imports"),ee=require("./inspect-tree"),Q=require("../config/path-display"),A=require("./session-workspace"),Et=require("./entity-resolution");async function Ce(e,t,n,s={},i={}){if(vt(t))return Dt(e,t);const o=qt(e,t,n);if(o&&en(o))return Zt(e,t,o,s,i);if((0,ge.isInspectGraphRequest)(t,n))return(0,ge.runInspectGraph)(e,t,n);if((0,be.isInspectCyclesRequest)(t,n))return(0,be.runInspectCycles)(e,t,n);if((0,ee.isInspectTreeRequest)(t,n))return(0,ee.runInspectTree)(e,t,n);if(t[0]==="imports")return(0,Ie.runInspectImports)(e,t,n);i.allowModulePlan!==!0&&jn(t,n)&&ft();const c=await(0,re.resolveCompatibleTargetInstance)(e,_t.CLI_COMMAND_IDS.inspect,s),l=await(0,re.fetchEffectiveConfig)(c.entry,s),a=bn(e,t,n,l,i.allowModulePlan===!0,i.forceResults===!0);pn(e,a),await Nt(c.entry,a.payload,l,s),cn(e,a);const f=await(0,At.postJson)(c.entry,St.EXTENSION_ROUTES.inspect,a.payload,(0,re.extensionRequestOptions)(s));an(e,a,f);const d=(0,k.formatInspectResponse)(f,l,a.formatOptions);return Pt(un(Ft(e,f,d,a),a.revision),a)}async function Nt(e,t,n,s){const i=Array.isArray(t.requests)?t.requests.filter(p):[],o=new Map;for(const c of i){const l=r(c.op);if(l!=="code"&&l!=="slice"&&l!=="dependencies"&&l!=="members"&&l!=="usages")continue;const a=r(c.sourceFile),f=r(c.symbolName);if(!a||!f)continue;const d=r(c.symbolKind);if(d==="constructor")continue;const y={raw:f,symbolName:f,symbolKind:d},m=o.get(a)??[];m.push(y),o.set(a,m)}for(const[c,l]of o)await(0,Et.ensureSelectorsResolvable)(e,c,l,n,(0,re.extensionRequestOptions)(s))}function vt(e){return e[0]==="usages"&&O(e,"--from-file")!==null}function Dt(e,t){const n=O(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,A.resolveSessionFileArgument)(e,n),i=(0,he.readJsonObjectFile)(e,s,"INVALID_USAGES_ARTIFACT"),o=K(t,"--focus"),c=xe(e,{detail:O(t,"--detail")??"locations",all:t.includes("--all"),limit:J(t,"--limit"),maxCodeLines:J(t,"--max-code-lines")??J(t,"--maxCodeLines")});if(c.detail==="summary")throw new E.CliError("INVALID_USAGES_DETAIL","inspect usages --from-file --detail expects locations or code.");if(c.detail!=="locations"&&c.detail!=="code")throw new E.CliError("INVALID_USAGES_DETAIL","inspect usages --detail expects locations or code.");const l=Te(e,i,o,c);return(0,z.attachAgentText)(l,Ae(e,l))}function Ft(e,t,n,s){const i=s.usagesDetails??[],o=Ct(n,s);if(i.length===0||i.every(y=>y===null||y.detail==="summary"))return o;const c=Array.isArray(t.results)?t.results.filter(p):[];if(c.length===0)return o;const l=Array.isArray(o.results)?o.results.filter(p):[o],a=Array.isArray(s.payload.requests)?s.payload.requests.filter(p):[],f=c.map((y,m)=>{const h=i[m],N=l[m]??{};if(a[m]?.targetLocalUsagesHidden===!0&&(y.targetLocalUsagesHidden=!0),y.op!=="usages"||h===void 0||h===null||h.detail==="summary")return N;const I=Te(e,y,[],h,!0);return Mt(N,I),I});kt(e,f),Bt(f);const d=f.length===1?f[0]:{results:f};return(0,z.attachAgentText)(d,Rt(e,d,o))}function Ct(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 Pt(e,t){return Le(e,t.dslDiagnostics??[])}function Le(e,t){if(t.length===0)return e;const n=(0,z.readAgentText)(e),s=Lt(t);return(0,z.attachAgentText)({...e,dslDiagnostics:t.map(i=>({line:i.line,message:i.message}))},n?`${n.trimEnd()}
2
-
3
- ${s}`:s)}function Lt(e){return["dsl errors:",...e.map(t=>`line ${t.line}: ${t.message}`)].join(`
4
- `)}function Oe(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 Te(e,t,n,s,i=!1){const o=s.detail==="code"?zt(e,t,n,s):Vt(e,t,n,s);return Ut(e,o,i),o}function Ot(e,t){return $t(t??(0,A.readSessionStringPref)(e,"inspect.usages.detail","locations"))}function xe(e,t){const n=t.all===!0,s=n?Number.MAX_SAFE_INTEGER:t.limit??(0,A.readSessionNumberPref)(e,"inspect.usages.maxLocations",12),i=n?Number.MAX_SAFE_INTEGER:t.limit??(0,A.readSessionNumberPref)(e,"inspect.usages.maxCodeBlocks",8);return{detail:Ot(e,t.detail),locationLimit:s,codeBlockLimit:i,maxCodeLines:t.maxCodeLines??(0,A.readSessionNumberPref)(e,"inspect.code.maxNonEmptyLines",120),all:n}}function Tt(e){return typeof e=="string"?e:null}function $t(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 Mt(e,t){for(const n of["summary","saved","next","input","targetLocalUsagesHidden"])e[n]!==void 0&&(t[n]=e[n])}function Ut(e,t,n){const s=Array.isArray(t.__viewItems)?t.__viewItems.filter(p):[];if(delete t.__viewItems,s.length===0)return;const i=te({version:1,kind:"usages",source:"inspect",detail:r(t.detail)??"locations",target:r(t.target)??"",items:s}),o=(0,A.saveSessionResultViewJson)(e,$e(i),i);o&&(t.view=o.saved,n&&(t.__viewRecord=i))}function kt(e,t){const n=t.map(l=>p(l.__viewRecord)?l.__viewRecord:null).filter(l=>l!==null&&r(l.kind)==="usages");if(n.length<=1)return;const s=Array.from(new Set(n.map(l=>r(l.detail)??"").filter(l=>l!==""))),i=n.flatMap(l=>Array.isArray(l.items)?l.items.filter(p):[]);if(i.length===0)return;const o=te({version:1,kind:"usages",source:"inspect",detail:s.length===1?s[0]:"mixed",items:i}),c=(0,A.saveSessionResultViewJson)(e,$e(o),o);if(c)for(const l of t)p(l.__viewRecord)&&r(l.__viewRecord.kind)==="usages"&&(l.viewAllUsages=c.saved)}function Bt(e){for(const t of e)delete t.__viewRecord,delete t.__viewItems}function $e(e){return`res_${(0,xt.createHash)("sha256").update(JSON.stringify(e)).digest("hex").slice(0,8)}`}function te(e){const t={};for(const[n,s]of Object.entries(e))s!==void 0&&s!==""&&(t[n]=s);return t}function Rt(e,t,n){if(Array.isArray(t.results)){const i=[],o=t.results.filter(p);let c=[];const l=()=>{if(c.length===0)return;const a=(0,k.formatInspectMixedAgentText)({results:c});a&&i.push(a),c=[]};for(const a of o){const f=r(a.detail);if(f==="locations"||f==="code"){l();const d=Ae(e,a);d&&i.push(d);continue}if(r(a.op)==="usages"){l();const d=Kt(a);d&&i.push(d);continue}c.push(a)}return l(),jt(i,o),i.length>0?i.join(`
5
-
6
- `):null}const s=r(t.detail);return s==="locations"||s==="code"?Ae(e,t):(0,z.readAgentText)(n)}function jt(e,t){const n=Array.from(new Set(t.map(i=>r(i.viewAllUsages)??"").filter(i=>i!=="")));if(n.length===0)return;const s=t.every(i=>r(i.op)==="usages");e.push(s?`view all: ${n[0]}`:["view all:",`usages: ${n[0]}`].join(`
7
- `))}function Kt(e){const t=[],n=r(e.target);t.push(n?`usages ${n}`:"usages");const s=r(e.summary);s&&t.push(s),Se(t,e);const i=Array.isArray(e.items)?e.items.filter(p):[];for(const o of i){const c=r(o.entity)??"",l=r(o.summary)??"";t.push(`${c}: ${l}`.trim());const a=Array.isArray(o.usedBy)?o.usedBy.filter(f=>typeof f=="string"):[];t.push(...a)}return t.length>1?t.join(`
8
- `):null}function Vt(e,t,n,s){const i=Me(t,n),o=[],l=i.map(a=>{const f=le(a);let d=0,y=0;const m=[],h=Array.isArray(a.usedBy)?a.usedBy.filter(p).flatMap(I=>{const T=Array.isArray(I.locations)?I.locations.filter(p):[],S=X(e,r(I.file)??""),L=[],C=T.flatMap(D=>{const F=typeof D.line=="number"?D.line:0,u=p(D.container)?ce(D.container):"";return d>=s.locationLimit?(y+=1,L.push({line:F,...u!==""?{container:u}:{}}),o.push(te({name:f,text:u?`${S}:${F} ${u}`:`${S}:${F}`})),[]):(d+=1,[{line:F,...u!==""?{container:u}:{}}])});return L.length>0&&m.push({file:S,locations:L}),C.length>0?[{file:S,locations:C}]:[]}):[],N={entity:f,referenceCount:V(a.referenceCount),usedBy:h,...y>0?{hidden:`+ ${y} more locations`}:{}},P=m.length>0?{entity:f,referenceCount:y,usedBy:m}:null;return{displayItem:N,hiddenItem:P}}).map(a=>a.displayItem);return{op:"usages",detail:"locations",target:X(e,r(t.targetPath)??""),summary:r(t.summary)??"",referenceCount:V(t.referenceCount),itemCount:V(t.itemCount),fileCount:V(t.fileCount),scopeLabel:ke(e,t),targetMode:r(t.targetMode)??"",queryMode:r(t.queryMode)??"",targetLocalUsagesHidden:t.targetLocalUsagesHidden===!0,unused:Ue(i),items:l,...o.length>0?{__viewItems:o}:{}}}function zt(e,t,n,s){const i=s.maxCodeLines,o=[],c=new Set,l=new Map,a=new Map,f=[],d=Me(t,n);for(const y of d){const m=le(y),h=Array.isArray(y.usedBy)?y.usedBy.filter(p):[];for(const N of h){const P=r(N.file);if(!P)continue;const I=Array.isArray(N.locations)?N.locations.filter(p):[];for(const T of I){const S=p(T.container)?T.container:null,L=S&&p(S.range)?S.range:null,C=L&&p(L.start)?L.start:null,D=L&&p(L.end)?L.end:null;if(!C||!D||typeof C.line!="number"||typeof C.character!="number"||typeof D.line!="number"||typeof D.character!="number")continue;const F=`${m}:${P}:${C.line}:${C.character}:${D.line}:${D.character}`;if(c.has(F))continue;c.add(F);const u=l.get(m)??0,$=Xt(P,C.line,C.character,D.line,D.character),g=C.line+1,_={entity:m,file:X(e,P),container:S?ce(S):"",line:g,code:$};if(u>=s.codeBlockLimit){a.set(m,(a.get(m)??0)+1),f.push(te({name:m,text:Ve(_,!1).join(`
9
- `).trim()}));continue}l.set(m,u+1);const x=Yt($),ne=`code omitted: ${x} non-empty lines; exceeds inspect.code.maxNonEmptyLines=${i}`;x>i&&f.push(te({name:m,text:Ve(_,!1).join(`
10
- `).trim()})),o.push({entity:m,file:X(e,P),container:S?ce(S):"",line:g,...x<=i?{code:$}:{omitted:ne,compactCode:wt($)}})}}}return{op:"usages",detail:"code",target:X(e,r(t.targetPath)??""),summary:r(t.summary)??"",referenceCount:V(t.referenceCount),itemCount:V(t.itemCount),fileCount:V(t.fileCount),scopeLabel:ke(e,t),targetMode:r(t.targetMode)??"",queryMode:r(t.queryMode)??"",targetLocalUsagesHidden:t.targetLocalUsagesHidden===!0,unused:Ue(d),blocks:o,hiddenBlocks:Array.from(a.entries()).map(([y,m])=>({entity:y,hidden:`+ ${m} more code blocks`})),...f.length>0?{__viewItems:f}:{}}}function Me(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=Gt(i),c=le(i);return s.has(o)||s.has(c)})}function Gt(e){return p(e.entity)?r(e.entity.name)??"":""}function le(e){return p(e.entity)?ce(e.entity):""}function Ue(e){return e.filter(t=>V(t.referenceCount)===0).map(t=>le(t)).filter(t=>t!=="")}function ke(e,t){const n=R(t.usageScopes)??[];return n.length===0?"project":n.length===1?X(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 Ht(e,t,n){const s=e.slice(0,t),i=e.length-s.length;return i>0?`${s.join(", ")}, + ${i} ${n}`:s.join(", ")}function V(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function ce(e){const t=Array.isArray(e.path)?e.path.filter(n=>typeof n=="string"&&n.trim()!==""):[];return t.length>0?t.join("."):r(e.name)??""}function Ae(e,t){const n=r(t.detail);if(V(t.referenceCount)===0){const l=r(t.target),a=r(t.scopeLabel)??"project",f=[l?`usages ${l}`:"usages",`0 refs in ${a}`];Se(f,t);const d=V(t.itemCount);return(r(t.targetMode)==="directory"||r(t.queryMode)!=="explicit")&&d>0&&f.push(`symbols checked: ${d}`),f.join(`
11
- `)}const s=[`usages ${n??"detail"}`];if(Se(s,t),n==="code"){const l=Array.isArray(t.blocks)?t.blocks.filter(p):[],{ownerGroups:a,standalone:f}=ae(l,d=>r(d.entity)??"");for(const[d,y]of a){s.push(""),s.push(`// ${d}:`);for(const[m,h]of _e(y,N=>ue(r(N.entity)??"").name))m&&s.push(`// ${m}`),s.push(...je(e,t,h))}if(f.length>0){a.length>0&&s.push("");for(const[d,y]of _e(f,m=>r(m.entity)??""))d&&s.push(`// ${d}`),s.push(...je(e,t,y))}return Re(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(l=>V(l.referenceCount)>0):[],{ownerGroups:o,standalone:c}=ae(i,l=>r(l.entity)??"");for(const[l,a]of o){s.push(""),s.push(`// ${l}:`);for(const f of a)s.push(...ze(f,!1))}c.length>0&&o.length>0&&s.push("");for(const l of c)s.push(...ze(l,!0));return Re(s,t),Be(s,t),s.join(`
15
- `).trimEnd()}function Be(e,t){const n=r(t.view);n&&(e.length>0&&e[e.length-1]!==""&&e.push(""),e.push(`view: ${n}`))}function Re(e,t){const n=Array.isArray(t.unused)?t.unused.filter(s=>typeof s=="string"&&s!==""):[];if(n.length!==0){if(r(t.queryMode)==="explicit"){e.push(""),e.push(`unused: ${Ht(n,2,"more")}`);return}r(t.targetMode)==="file"&&(e.push(""),e.push(`unused symbols: ${n.length}`))}}function Se(e,t){t.targetLocalUsagesHidden===!0&&e.push("target-local usages hidden; use +includeTarget to show")}function je(e,t,n){const s=[],i=_e(n,l=>r(l.file)??"");for(const[l,a]of i)l&&s.push(`// ${l}`),s.push(...Jt(e,a));const o=r(n[0]?.entity)??"",c=Qt(t,"hiddenBlocks",o);return c&&s.push(`// ${c}`),s}function Jt(e,t){const n=[],{ownerGroups:s,standalone:i}=ae(t,o=>r(o.container)??"");for(const[o,c]of s)n.push(`// ${o}:`),n.push(...Ke(e,c));return i.length>0&&n.push(...Ke(e,i)),n}function Ke(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,A.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 Ve(e,t=!0){const n=[],s=r(e.entity);t&&s&&n.push(`// ${s}`);const i=r(e.file)??"",o=typeof e.line=="number"?` l${e.line}`:"";(i||o)&&n.push(`// ${i}${o}`.trim());const c=r(e.code);return c&&n.push(c.trimEnd()),n}function ze(e,t){const n=r(e.entity)??"",s=ue(n),i=[`${t?n:s.name}:`],o=Array.isArray(e.usedBy)?e.usedBy.filter(p):[];for(const l of o){const a=r(l.file)??"",f=Array.isArray(l.locations)?l.locations.filter(p):[];if(f.length!==0){if(f.length===1){const[d]=f,y=typeof d?.line=="number"?d.line:0,m=r(d?.container);i.push(m?`${a}:${y} ${m}`:`${a}:${y}`);continue}i.push(`${a}:`),i.push(...Wt(f))}}const c=r(e.hidden);return c&&i.push(c),i}function Wt(e){const t=[],{ownerGroups:n,standalone:s}=ae(e,i=>r(i.container)??"");for(const[i,o]of n){t.push(`// ${i}:`);for(const c of o){const l=typeof c.line=="number"?c.line:0,a=ue(r(c.container)??"").name;t.push(a?`${a} l${l}`:`l${l}`)}}for(const i of s){const o=typeof i.line=="number"?i.line:0,c=r(i.container);t.push(c?`${c} l${o}`:`l${o}`)}return t}function Qt(e,t,n){const i=(Array.isArray(e[t])?e[t].filter(p):[]).find(o=>r(o.entity)===n);return i?r(i.hidden):null}function ae(e,t){const n=new Map,s=[];for(const i of e){const o=ue(t(i));if(!o.owner){s.push(i);continue}const c=n.get(o.owner)??[];c.push(i),n.set(o.owner,c)}return{ownerGroups:Array.from(n.entries()),standalone:s}}function ue(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 _e(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 Xt(e,t,n,s,i){const o=ye.readFileSync(e,"utf8"),c=Ge(o,t,n),l=Ge(o,s,i);return o.slice(c,l)}function Ge(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 Yt(e){return e.split(/\r?\n/).filter(t=>t.trim()!=="").length}function X(e,t){return(0,Q.compactDisplayPath)(e,t,(0,Q.buildDisplayPathAliases)(e,(0,A.readEffectiveSessionPathAliases)(e)))}async function Zt(e,t,n,s,i){const o=pe(n),c=[],l=[],a=[],f=[],d=[],y=(0,Q.buildDisplayPathAliases)(e,(0,A.readEffectiveSessionPathAliases)(e)),m=[];for(const g of o){if(!p(g))throw new E.CliError("INVALID_INSPECT_REQUEST","Inspect request must be an object.");const _=r(g.op);_==="graph"?(l.push(on(g)),m.push("graph")):_==="imports"?(a.push(g),m.push("imports")):_==="tree"?(f.push(g),m.push("tree")):_==="cycles"?(d.push(g),m.push("cycles")):(c.push(g),m.push("inspect"))}const h=await tn(e,c,s,i),N=l.length>0?rn((0,z.stripAgentText)((0,ge.runInspectGraph)(e,["graph","--stdin"],{requests:l}))):[],P=a.map(g=>(0,Ie.buildInspectImportsResult)(e,{file:r(g.file)??r(g.fromFile)??r(g.sourceFile)??r(n.file)??"",ranges:B(g.ranges)!==!1,dynamic:B(g.dynamic)!==!1},y)),I=f.map(g=>(0,ee.buildInspectTreeResult)(e,sn(g))),T=d.length>0?we((0,z.stripAgentText)((0,be.runInspectCycles)(e,["--stdin"],{requests:d}))):[],S=[];let L=0,C=0,D=0,F=0,u=0;for(const g of m)if(g==="graph"){const _=N[C++];_&&S.push(_)}else if(g==="imports"){const _=P[D++];_&&S.push(_)}else if(g==="tree"){const _=I[F++];_&&S.push(_)}else if(g==="cycles"){const _=T[u++];_&&S.push(_)}else{const _=h[L++];_&&S.push(_)}const $={ok:!S.some(g=>g.ok===!1),...S.some(g=>g.op==="runtimeFailure")?{partial:!0}:{},results:(0,Ie.mergeDirectoryFallbackResults)(S)};return Le((0,z.attachAgentText)($,(0,k.formatInspectMixedAgentText)($)),Oe(n).dslDiagnostics??[])}function qt(e,t,n){if(t[0]==="graph")return null;if(t.includes("--stdin"))return p(n)?n:null;const s=O(t,"--from-json");return s?(0,he.readJsonObjectFile)(e,s,"INVALID_INSPECT_JSON_FILE"):null}function en(e){return pe(e).some(t=>p(t)&&(r(t.op)==="graph"||r(t.op)==="imports"||r(t.op)==="tree"||r(t.op)==="cycles"))}async function tn(e,t,n,s){if(t.length===0)return[];try{return we((0,z.stripAgentText)(await Ce(e,["--stdin"],{requests:t},n,{...s,forceResults:!0})))}catch(i){return t.map(o=>nn(e,o,i))}}function nn(e,t,n){const s=p(n)&&p(n.details)?n.details:{},i=n instanceof E.CliError?n.code:"RUNTIME_INSPECT_FAILED",o=n instanceof Error?n.message:String(n),c=r(t.file)??r(t.sourceFile)??r(t.fromFile)??r(t.target)??"",l=c?M.resolve(e,c):"";return{ok:!1,op:"runtimeFailure",requestedOp:r(t.op)??"file",...r(t.entity)?{entity:r(t.entity)}:{},...l?{sourceFile:l,file:X(e,l)}:{},code:i,error:o,...Array.isArray(s.hints)?{hints:s.hints}:{}}}function sn(e){const t={scope:r(e.scope)??r(e.file)??r(e.dir)??r(e.directory)??""},n=r(e.displayScope)??r(e.display_scope),s=G(e.depth),i=Y(e.minDepth)??Y(e.min_depth),o=G(e.limit),c=R(e.exclude)??R(e.excludes),l=R(e.only),a=B(e.onlyDirs)??B(e.only_dirs);return n!==null&&(t.displayScope=n),s!==null&&(t.depth=s),i!==null&&(t.minDepth=i),o!==null&&(t.limit=o),c!==null&&(t.exclude=c),l!==null&&(t.only=l),a!==null&&(t.onlyDirs=a),t}function on(e){const t={...e};return delete t.op,delete t.sourceFile,t}function we(e){return Array.isArray(e.results)?e.results.filter(p).map(He):[He(e)]}function He(e){return e.op==="dependencies"?{...e,op:"deps"}:e}function rn(e){return Array.isArray(e.results)?e.results.filter(p).map(t=>({op:"graph",...t})):[{op:"graph",...ln(e)}]}function ln(e){const t={...e};return delete t.operation,delete t.next,delete t.last,typeof t.saved=="string"&&delete t.graphFile,t}function cn(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),c=(0,w.buildModulePlanId)(o),l=r(s.previewDir),a=(0,w.resolveModulePlanPreviewDir)(e,c,l??void 0);s.previewDir=a,s.previewPatch=s.previewPatch!==!1,t.cachePlans.push({index:i,planId:c,normalizedRequest:o,previewDir:a})})}function an(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=r(s.normalizedRequest.sourceFile);if(!o)continue;const c=(0,w.hashFile)(o),l=(0,w.buildModulePlanHash)(s.normalizedRequest,c,i),a={planId:s.planId,planHash:l,createdAt:new Date().toISOString(),cwd:M.resolve(e),sourceFile:o,sourceHash:c,executable:i.ok!==!1,normalizedRequest:s.normalizedRequest,inspectPayload:t.payload,previewDir:s.previewDir,previewResult:i};(0,w.writeModulePlanRecord)(e,a),i.planId=s.planId,i.planHash=l,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 un(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=Fn(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,z.attachAgentText)(e,fn(n))}function fn(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 pn(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 c=0;c<n.length;c+=1){const l=n[c],a=r(l.sourceFile);if(!a||!dn(r(l.op))||!Tn(a)){o.set(c,i.length),i.push(l);continue}let f=s.get(a);f?o.set(c,i.findIndex(y=>r(y.sourceFile)===a&&y.op==="directoryFallback")):(f=mn(e,a),s.set(a,f),o.set(c,i.length),i.push(yn(f)));const d=gn(r(l.op));f.ops.includes(d)||f.ops.push(d)}s.size!==0&&(t.payload.requests=i,t.formatOptions.toFiles&&(t.formatOptions.toFiles=fe(t.formatOptions.toFiles,o,i.length)),t.formatOptions.saves&&(t.formatOptions.saves=fe(t.formatOptions.saves,o,i.length)),t.formatOptions.shows&&(t.formatOptions.shows=Je(t.formatOptions.shows,o,i.length)),t.formatOptions.ranges&&(t.formatOptions.ranges=Je(t.formatOptions.ranges,o,i.length)),t.formatOptions.parentNames&&(t.formatOptions.parentNames=fe(t.formatOptions.parentNames,o,i.length)),t.usagesDetails&&(t.usagesDetails=fe(t.usagesDetails,o,i.length)))}function dn(e){return e==="file"||e==="exports"||e==="members"||e==="code"||e==="dependencies"||e==="slice"}function mn(e,t){const n=hn(e,t),s=(0,A.readEffectiveSessionPathAliases)(e),i=(0,Q.compactDisplayPath)(e,t,(0,Q.buildDisplayPathAliases)(e,s)),o=(0,ee.buildInspectTreeResult)(e,{scope:t,displayScope:i,depth:n,limit:40,aliases:s}),c=[];return{sourceFile:t,displayPath:i,ops:c,command:`aib inspect tree ${i} --depth ${n}`,result:{op:"directoryFallback",ok:!0,sourceFile:t,directory:i,skippedOps:c,command:`aib inspect tree ${i} --depth ${n}`,tree:o,lines:Array.isArray(o.lines)?o.lines:[]}}}function yn(e){return{op:"directoryFallback",sourceFile:e.sourceFile,fallback:e.result}}function hn(e,t){for(let n=1;n<=4;n+=1){const s=(0,ee.buildInspectTreeResult)(e,{scope:t,depth:n,limit:1});if(typeof s.files=="number"&&s.files>0)return n}return 2}function fe(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 Je(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 gn(e){return e==="dependencies"?"deps":e??"inspect"}function bn(e,t,n,s,i,o){const c=Qe(t),a=!(t.includes("--no-ranges")||t.includes("--noRanges"))&&(c==="code"||c==="file")||t.includes("--ranges")||c==="exports"&&(0,A.readSessionBooleanPref)(e,"inspect.exports.ranges",!1),f=t.includes("--details"),d=t.includes("--resolve-star")||c==="exports"&&(0,A.readSessionBooleanPref)(e,"inspect.exports.resolveStar",!1),y=t.includes("--local-only"),m=$n(e,t),h=it(t,"--offset"),N=J(t,"--limit")??(c==="members"?(0,A.readSessionNumberPref)(e,"inspect.members.maxItems",20):null),P=t.includes("--all")||c==="members"&&(0,A.readSessionBooleanPref)(e,"inspect.members.all",!1),I=O(t,"--to-file")??void 0,T=O(t,"--save")??void 0,S=c==="code"&&(t.includes("--no-show")||t.includes("--noShow")),L=t.includes("--show"),C=S?!1:L||c==="code"&&(0,A.readSessionBooleanPref)(e,"inspect.code.show",!0),D=(0,A.readSessionBooleanPref)(e,"inspect.code.meta",!0),F=c==="usages"?xe(e,{detail:O(t,"--detail"),all:t.includes("--all"),limit:J(t,"--limit"),maxCodeLines:J(t,"--max-code-lines")??J(t,"--maxCodeLines")}):null,u=O(t,"--bundle-save")??void 0,$=O(t,"--preview-dir")??void 0,g=O(t,"--from-json")??void 0,_=O(t,"--parent")??void 0,x=_?(0,k.parseInspectSelector)(_,s).symbolName:void 0,ne=(0,Q.buildDisplayPathAliases)(e,(0,A.readEffectiveSessionPathAliases)(e)),se=[];if(I!==void 0&&T!==void 0)throw new E.CliError("INSPECT_OUTPUT_TARGET_CONFLICT","Use either --to-file or --save, not both.");const Z={cwd:e,includeRanges:a,displayPathAliases:ne,pathAliasHints:se,details:f,localOnly:y,maxCodeLines:m,forceResults:o,show:C,codeMeta:D,...x!==void 0?{parentName:x,parentNames:[x]}:{},...I!==void 0?{toFile:I}:{},...T!==void 0?{save:T}:{},...u!==void 0?{bundleSave:u}:{},...$!==void 0?{previewDir:j(e,$)}:{}};if(g!==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 b=We((0,he.readJsonObjectFile)(e,g,"INVALID_INSPECT_JSON_FILE"),Qe(t)),H=a||ot(b),v=Xe(e,b,s,H,d,y,{memberOffset:h,memberLimit:N,memberAll:P},i);return{payload:v.payload,cachePlans:[],formatOptions:{...Z,includeRanges:H,toFiles:v.toFiles,saves:v.saves,shows:v.shows,ranges:v.ranges,parentNames:v.parentNames,...u===void 0&&v.bundleSave!==void 0?{bundleSave:v.bundleSave}:{}},usagesDetails:v.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 In(e,t,n,s);const b=We(n,c),H=a||ot(b),v=Xe(e,b,s,H,d,y,{memberOffset:h,memberLimit:N,memberAll:P},i);return{payload:v.payload,cachePlans:[],formatOptions:{...Z,includeRanges:H,toFiles:v.toFiles,saves:v.saves,shows:v.shows,ranges:v.ranges,parentNames:v.parentNames,...u===void 0&&v.bundleSave!==void 0?{bundleSave:v.bundleSave}:{}},usagesDetails:v.usagesDetails,...Oe(n)}}return{payload:xn(e,t,s,a,d,y,{memberOffset:h,memberLimit:N,memberAll:P},i),formatOptions:Z,cachePlans:[],...F!==null?{usagesDetails:[F]}:{}}}function We(e,t){return!t||e.op!==void 0?e:{op:t,...e}}function Qe(e){return e.filter(n=>!n.startsWith("--")&&!rt(e,n))[0]??null}function In(e,t,n,s){const i=O(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),c=An(e,o.previewResult,o.normalizedRequest,n,s),l=(0,w.buildModulePlanId)(c),a=(0,w.resolveModulePlanPreviewDir)(e,l);return{payload:{requests:[{...c,previewFiles:!0,previewPatch:!0,previewDir:a}]},formatOptions:{cwd:e,includeRanges:!1,displayPathAliases:(0,Q.buildDisplayPathAliases)(e,(0,A.readEffectiveSessionPathAliases)(e)),pathAliasHints:[],localOnly:!1,details:!1,maxCodeLines:(0,A.readSessionNumberPref)(e,"inspect.code.maxNonEmptyLines",120),codeMeta:(0,A.readSessionBooleanPref)(e,"inspect.code.meta",!0),previewDir:a},cachePlans:[{index:0,planId:l,normalizedRequest:c,previewDir:a}],revision:{fromPlanId:i,changes:vn(e,o.normalizedRequest,c),previousBlocking:Dn(o.previewResult,s)}}}function xn(e,t,n,s,i,o,c,l){const a=t.filter(I=>!I.startsWith("--")&&!rt(t,I)),[f,d,y]=a;if(!f||!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(!ct(f))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(ut(f,l),O(t,"--save")&&f!=="code"&&f!=="slice"&&f!=="usages"&&f!=="duplicate"&&f!=="duplicates")throw new E.CliError("INVALID_INSPECT_SAVE","inspect --save can be used only with code, slice, usages, or duplicates operations.");const m=at(f),h={op:m,sourceFile:j(e,d),ranges:s||m==="code"||m==="slice",resolveStar:i,localOnly:m==="file"&&o};if(st(h,c),m==="members"||m==="code"||m==="dependencies"||m==="slice"){if(!y)throw new E.CliError("INSPECT_ENTITY_REQUIRED",`inspect ${f} expects an entity selector.`);Ee(h,y,n)}if(m==="usages"&&y&&Ee(h,y,n),m==="duplicates"){h.detail=O(t,"--detail")??"locations",h.mode=O(t,"--mode")??"both";const I=J(t,"--limit"),T=it(t,"--offset");I!==null&&(h.limit=I),T!==null&&(h.offset=T);const S=Kn(t,n);S.length>0&&(h.kinds=S);const L=de([...y?[y]:[],...K(t,"--entity"),...K(t,"--entities").flatMap(F=>F.split(","))],n);L.length>0&&(h.duplicateEntities=L);const C=de([...K(t,"--exclude"),...K(t,"--excludes").flatMap(F=>F.split(","))],n);C.length>0&&(h.duplicateExclude=C);const D=dt(e,[...K(t,"--path-exclude"),...K(t,"--path-excludes").flatMap(F=>F.split(",")),...K(t,"--exclude-path"),...K(t,"--exclude-paths").flatMap(F=>F.split(","))]);D.length>0&&(h.duplicatePathExclude=D)}const N=K(t,"--scope");if(m==="usages"&&N.length>0&&(h.scope=N.map(I=>j(e,I))),m==="duplicates"&&N.length>0&&(h.scope=N.map(I=>j(e,I))),m==="usages"){h.excludeTarget=t.includes("--exclude-target")||t.includes("--excludeTarget")||!1;const I=t.includes("--include-target")||t.includes("--includeTarget"),T=(0,A.readSessionBooleanPref)(e,"inspect.usages.excludeTarget",!1);I?h.excludeTarget=!1:h.excludeTarget===!0||T?h.excludeTarget=!0:tt(e,r(h.sourceFile)??"",R(h.scope)??[])&&(h.excludeTarget=!0,h.targetLocalUsagesHidden=!0)}const P=O(t,"--parent");if(P){const I=(0,k.parseInspectSelector)(P,n);h.parentName=I.symbolName,I.symbolKind&&(h.parentKind=I.symbolKind)}return{requests:[h]}}function Xe(e,t,n,s,i,o,c,l){const a=pe(t),f=[],d=[],y=[],m=[],h=[],N=[],P=Tt(t.detail),I=B(t.all),T=G(t.limit),S=G(t.maxCodeLines),L=B(t.excludeTarget),C=B(t.includeTarget),D=r(t.bundleSave)??r(t.bundle)??r(t.saveBundle)??void 0;return{payload:{requests:a.map((u,$)=>{if(!p(u))throw new E.CliError("INVALID_INSPECT_REQUEST",`Inspect request at index ${$} must be an object.`);const g=r(u.op),_=r(u.sourceFile)??r(u.file)??(g==="usages"?r(u.target)??r(u.usageTarget)??r(u.dir):null)??(g==="duplicate"||g==="duplicates"?r(u.target)??r(u.dir)??pt(u.scope)??pt(u.scopes):null);if(!g||!ct(g))throw new E.CliError("INVALID_INSPECT_OP",`Inspect request at index ${$} has invalid op.`);if(ut(g,l),!_)throw new E.CliError("SOURCE_FILE_REQUIRED",`Inspect request at index ${$} requires sourceFile or file.`);const x=at(g),se=B(u.ranges)??B(u.includeRanges)??(x==="code"||x==="slice"||x==="file"?!0:x==="exports"?(0,A.readSessionBooleanPref)(e,"inspect.exports.ranges",!1):s),Z=se||x==="code"||x==="slice",b={op:x,sourceFile:j(e,_),ranges:Z,resolveStar:B(u.resolveStar)??(x==="exports"?(0,A.readSessionBooleanPref)(e,"inspect.exports.resolveStar",!1):i),localOnly:x==="file"&&(u.localOnly===!0||o)};if(x==="usages"){N.push(xe(e,{detail:r(u.detail)??P,all:B(u.all)??I,limit:G(u.limit)??T,maxCodeLines:G(u.maxCodeLines)??S}));const U=R(u.scope)??R(u.scopes);U&&U.length>0&&(b.scope=U.map(oe=>j(e,oe)));const W=B(u.includeTarget)??C,q=B(u.excludeTarget)??L,ie=(0,A.readSessionBooleanPref)(e,"inspect.usages.excludeTarget",!1);W===!0?b.excludeTarget=!1:q!==null?b.excludeTarget=q:ie?b.excludeTarget=!0:tt(e,b.sourceFile,R(b.scope)??[])&&(b.excludeTarget=!0,b.targetLocalUsagesHidden=!0),Array.isArray(u.entities)&&(b.usageEntities=Bn(u.entities,n))}else N.push(null);if(x==="duplicates"){b.detail=r(u.detail)??r(t.detail)??"locations",b.mode=r(u.mode)??r(t.mode)??"both",b.limit=G(u.limit)??G(t.limit)??10,b.offset=Y(u.offset)??Y(t.offset)??0;const U=R(u.scope)??R(u.scopes)??R(t.scope)??R(t.scopes);U&&U.length>0&&(b.scope=U.map(gt=>j(e,gt)));const W=Vn(u.kinds??t.kinds,n);W.length>0&&(b.kinds=W);const q=de(u.entities??u.entity??t.entities??t.entity,n);q.length>0&&(b.duplicateEntities=q);const ie=de(u.exclude??u.excludes??t.exclude??t.excludes,n);ie.length>0&&(b.duplicateExclude=ie);const oe=dt(e,u.pathExclude??u.pathExcludes??u.excludePath??u.excludePaths??t.pathExclude??t.pathExcludes??t.excludePath??t.excludePaths);oe.length>0&&(b.duplicatePathExclude=oe)}if(x==="modulePlan"){b.modules=kn(e,u.modules,n);const U=r(u.facade)??r(u.facadeFile);if(U&&(b.facadeFile=j(e,U)),u.previewFiles===!0||u.preview==="files"){b.previewFiles=!0;const W=r(u.previewDir)??r(u.outputDir);W&&(b.previewDir=j(e,W)),b.previewPatch=u.previewPatch!==!1}}st(b,{memberOffset:Y(u.offset)??Y(u.memberOffset)??c.memberOffset,memberLimit:G(u.limit)??G(u.memberLimit)??c.memberLimit??(x==="members"?(0,A.readSessionNumberPref)(e,"inspect.members.maxItems",20):null),memberAll:B(u.all)??B(u.memberAll)??(x==="members"?(0,A.readSessionBooleanPref)(e,"inspect.members.all",!1):c.memberAll)});const H=r(u.id);H&&(b.id=H);const v=x==="modulePlan"?null:r(u.toFile)??r(u.outputFile),me=x==="modulePlan"?null:r(u.save);if(v&&x!=="code"&&x!=="slice")throw new E.CliError("INVALID_INSPECT_TO_FILE",`Inspect request at index ${$} 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 ${$} can use save only with code, slice, usages, or duplicates operations.`);if(v&&me)throw new E.CliError("INSPECT_OUTPUT_TARGET_CONFLICT",`Inspect request at index ${$} must use either toFile or save, not both.`);f.push(v),d.push(me);const ht=typeof u.show=="boolean"?u.show:null;y.push(ht??(x==="code"&&(0,A.readSessionBooleanPref)(e,"inspect.code.show",!0))),m.push(se);const Ne=r(u.symbolKind)??r(u.kind),ve=r(u.entity)??r(u.selector)??r(u.symbol)??r(u.symbolName)??r(u.name);ve&&Ee(b,ve,n),Ne&&(b.symbolKind=Ne);const De=r(u.parent);if(De){const U=(0,k.parseInspectSelector)(De,n);b.parentName=U.symbolName,U.symbolKind&&(b.parentKind=U.symbolKind),h.push(U.symbolName)}else h.push(null);return b})},toFiles:f,saves:d,shows:y,ranges:m,parentNames:h,usagesDetails:N,...D!==void 0?{bundleSave:D}:{}}}function Ee(e,t,n){const s=(0,k.parseInspectSelector)(t,n);e.symbolName=s.symbolName,s.symbolKind&&(e.symbolKind=s.symbolKind)}function An(e,t,n,s,i){const o=Cn(n),c=[...Sn(e,s),..._n(e,t,s,i)];if(c.length===0)throw new E.CliError("MODULE_PLAN_REVISE_MOVES_REQUIRED","modulePlan revise expects moves or applySuggestedFixes.");for(const l of c)Nn(o,l,i);return o}function Sn(e,t){return(Array.isArray(t.moves)?t.moves:[]).filter(p).map(s=>{const i=r(s.entity)??r(s.symbol)??r(s.selector),o=r(s.to)??r(s.target)??r(s.toFile)??r(s.targetFile);return i&&o?{selector:i,toFile:j(e,o)}:null}).filter(s=>s!==null)}function _n(e,t,n,s){const i=n.applySuggestedFixes,o=En(t,s),c=i===!0||i==="all"?o.map((l,a)=>a):Array.isArray(i)?i:[];return c.length===0?[]:c.map(l=>typeof l=="number"?l:typeof l=="string"?Number(l):NaN).filter(l=>Number.isInteger(l)&&l>=0&&l<o.length).map(l=>({selector:o[l].selector,toFile:j(e,o[l].toFile)}))}function En(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 c=Array.isArray(o.suggestedFixes)?o.suggestedFixes.filter(p):[];for(const l of c){if(l.kind!=="moveSymbol")continue;const a=Ye(l.symbol,t),f=r(l.toFile);a&&f&&i.push({selector:a,toFile:f})}}return i}function Ye(e,t){if(!p(e))return null;const n=r(e.name),s=r(e.kind);if(!n||!s)return null;const i=t.entityKindAliases[s];return i?`${i}${t.selectorSeparator}${n}`:`${s}:${n}`}function Nn(e,t,n){const s=Array.isArray(e.modules)?e.modules.filter(p):[],i=(0,k.parseInspectSelector)(t.selector,n);let o=null;for(const a of s){const f=Array.isArray(a.symbols)?a.symbols:[],d=[];for(const y of f)o===null&&Ze(y,i)?o=y:d.push(y);a.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 c=s.find(a=>r(a.targetFile)===t.toFile);c||(c={targetFile:t.toFile,symbols:[]},s.push(c));const l=Array.isArray(c.symbols)?c.symbols:[];l.some(a=>Ze(a,i))||l.push(o),c.symbols=l,e.modules=s.filter(a=>Array.isArray(a.symbols)&&a.symbols.length>0)}function Ze(e,t){if(!p(e))return!1;const n=r(e.raw),s=r(e.symbolName),i=r(e.symbolKind);return n===t.raw||s===t.symbolName&&(!t.symbolKind||i===t.symbolKind)}function vn(e,t,n){const s=et(t),i=et(n),o=[];for(const[c,l]of i.entries()){const a=s.get(c);a&&a!==l&&o.push(`${c}: ${qe(e,a)} -> ${qe(e,l)}`)}return o}function Dn(e,t){const n=p(e.boundary)?e.boundary:{};return(Array.isArray(n.nonExportedImports)?n.nonExportedImports.filter(p):[]).flatMap(i=>{const o=r(i.code)??"MODULE_PLAN_BOUNDARY_WARNING";return(Array.isArray(i.symbols)?i.symbols.filter(p):[]).map(l=>Ye(l,t)).filter(l=>typeof l=="string").map(l=>`${o}: ${l}`)})}function Fn(e){return(Array.isArray(e.blocking)?e.blocking.filter(p):[]).flatMap(n=>{const s=r(n.code)??"MODULE_PLAN_BOUNDARY_WARNING";return(Array.isArray(n.symbols)?n.symbols.filter(o=>typeof o=="string"):[]).map(o=>`${s}: ${o}`)})}function qe(e,t){return M.relative(e,t).replace(/\\/g,"/")}function et(e){const t=new Map,n=Array.isArray(e.modules)?e.modules.filter(p):[];for(const s of n){const i=r(s.targetFile);if(!i)continue;const o=Array.isArray(s.symbols)?s.symbols.filter(p):[];for(const c of o){const l=r(c.raw),a=r(c.symbolName),f=r(c.symbolKind),d=l??(a?`${f??"symbol"}:${a}`:null);d&&t.set(d,i)}}return t}function Cn(e){return JSON.parse(JSON.stringify(e))}function j(e,t){return M.normalize(M.isAbsolute(t)?t:M.resolve(e,t))}function tt(e,t,n){const s=M.normalize(t);return n.length===0?!nt(s,e):n.some(i=>Pn(i,s))}function Pn(e,t){const n=M.normalize(e),s=M.normalize(t);return nt(n,s)||On(n)?!1:Ln(s,n)}function Ln(e,t){const n=M.relative(M.normalize(t),M.normalize(e));return n!==""&&!n.startsWith("..")&&!M.isAbsolute(n)}function nt(e,t){return M.normalize(e).toLowerCase()===M.normalize(t).toLowerCase()}function On(e){try{return ye.statSync(e).isFile()}catch{return!1}}function Tn(e){try{return ye.statSync(e).isDirectory()}catch{return!1}}function st(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 $n(e,t){const n=O(t,"--max-lines");if(!n)return(0,A.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 J(e,t){const n=O(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 it(e,t){const n=O(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 G(e){const t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:null}function Y(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 ot(e){return pe(e).some(n=>p(n)&&(n.ranges===!0||n.includeRanges===!0))}function pe(e){const t=Un(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 c=Array.isArray(o.entities)?o.entities:null;if(!c){delete o.entities,s.push(o);continue}const l=r(o.op);if(l==="usages"||l==="duplicate"||l==="duplicates"){s.push(o);continue}delete o.entities;for(const a of c){if(p(a)){const f=Array.isArray(a.entities)?a.entities:null;if(f){const d={...a};delete d.entities;for(const y of f)s.push(Mn(o,d,y));continue}s.push({...o,...a});continue}if(typeof a!="string"||a.trim()===""){s.push({...o,entity:a});continue}s.push({...o,entity:a.trim()})}}return s}function Mn(e,t,n){return p(n)?{...e,...t,...n}:typeof n=="string"&&n.trim()!==""?{...e,...t,entity:n.trim()}:{...e,...t,entity:n}}function Un(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 O(e,t){const n=e.indexOf(t);if(n<0)return null;const s=e[n+1];return s&&!s.startsWith("--")?s:null}function K(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 rt(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 kn(e,t,n){return Array.isArray(t)?t.filter(p).map(s=>{const i=r(s.target)??r(s.targetFile)??r(s.file),o=Array.isArray(s.entities)?s.entities:Array.isArray(s.symbols)?s.symbols:[];return{...i?{targetFile:j(e,i)}:{},symbols:o.map(c=>Rn(c,n)).filter(p)}}):[]}function Bn(e,t){return e.flatMap(n=>lt(n,t,{})).filter(p)}function lt(e,t,n){if(typeof e=="string"&&e.trim()!==""){const a=(0,k.parseInspectSelector)(e,t);return[{...n,raw:e.trim(),symbolName:a.symbolName,...a.symbolKind?{symbolKind:a.symbolKind}:{}}]}if(!p(e))return[];const s=r(e.parent),i={...n};if(s){const a=(0,k.parseInspectSelector)(s,t);i.parentName=a.symbolName,a.symbolKind&&(i.parentKind=a.symbolKind)}const o=Array.isArray(e.entities)?e.entities:null;if(o)return o.flatMap(a=>lt(a,t,i));const c=r(e.entity)??r(e.selector)??r(e.raw);if(!c)return[];const l=(0,k.parseInspectSelector)(c,t);return[{...i,raw:c,symbolName:l.symbolName,...l.symbolKind?{symbolKind:l.symbolKind}:{}}]}function Rn(e,t){if(typeof e=="string"&&e.trim()!==""){const s=(0,k.parseInspectSelector)(e,t);return{raw:e.trim(),symbolName:s.symbolName,...s.symbolKind?{symbolKind:s.symbolKind}:{}}}if(!p(e))return null;const n=r(e.entity)??r(e.selector)??r(e.raw);if(n){const s=(0,k.parseInspectSelector)(n,t);return{raw:n,symbolName:s.symbolName,...s.symbolKind?{symbolKind:s.symbolKind}:{}}}return e}function ct(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 at(e){return e==="deps"?"dependencies":e==="duplicate"?"duplicates":e==="cycles"?"cycles":e==="imports"?"imports":e}function ut(e,t){e!=="modulePlan"||t||ft()}function ft(){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 jn(e,t){return e[0]==="modulePlan"?!0:!e.includes("--stdin")||!p(t)?!1:r(t.op)==="modulePlan"?!0:(Array.isArray(t.requests)?t.requests:[]).some(i=>p(i)&&r(i.op)==="modulePlan")}function r(e){return typeof e=="string"&&e.trim()!==""?e.trim():null}function R(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 pt(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 Kn(e,t){const n=[...K(e,"--kind"),...K(e,"--kinds").flatMap(s=>s.split(","))];return yt(n,t)}function Vn(e,t){const n=R(e)??[];return yt(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 c=s.trim();if(!c)return[];const l=(0,k.parseInspectSelector)(c,t);return[mt(l.symbolName,l.symbolKind??null)]}if(!p(s))return[];const i=r(s.entity)??r(s.selector)??r(s.name);if(!i)return[];const o=(0,k.parseInspectSelector)(i,t);return[mt(o.symbolName,o.symbolKind??null)]})}function dt(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=>M.isAbsolute(s)?s:M.resolve(e,s)).map(s=>s.replace(/\\/g,"/"))}function mt(e,t){return t?{symbolName:e,symbolKind:t}:{symbolName:e}}function yt(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
+ }