@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.
- package/README.md +21 -578
- package/config/agent-dx-policy.default.json +31 -0
- package/config/control-plane-client.default.json +3 -0
- package/dist/agent-dx/agent-dx.js +805 -0
- package/dist/agent-dx/presentation.js +32 -0
- package/dist/alias-advisor/analyze.js +982 -0
- package/dist/alias-advisor/exact-text-cost.js +74 -0
- package/dist/alias-advisor/lexical.js +240 -0
- package/dist/alias-advisor/model.js +2 -0
- package/dist/alias-advisor/path-identity.js +49 -0
- package/dist/alias-advisor/ranking.js +171 -0
- package/dist/alias-advisor/token-estimator.js +85 -0
- package/dist/bin/aib.js +5 -1
- package/dist/bin/cli.js +811 -4
- package/dist/commands/add-missing-imports-preview-cache.js +99 -2
- package/dist/commands/add-missing-imports.js +241 -2
- package/dist/commands/apply-module-plan.js +1319 -3
- package/dist/commands/background-command.js +378 -2
- package/dist/commands/captured-input.js +74 -1
- package/dist/commands/config-command.js +314 -2
- package/dist/commands/config-output.js +357 -10
- package/dist/commands/control-plane-command.js +183 -1
- package/dist/commands/declaration-command.js +1209 -7
- package/dist/commands/declaration-execution-cache.js +79 -1
- package/dist/commands/declaration-format.js +221 -1
- package/dist/commands/declaration-preview-cache.js +114 -2
- package/dist/commands/diagnostics-command.js +70 -3
- package/dist/commands/doctor.js +137 -3
- package/dist/commands/execution-command.js +117 -1
- package/dist/commands/exports-star-collapse-command.js +178 -0
- package/dist/commands/exports-star-command.js +252 -0
- package/dist/commands/exports-star-preview-cache.js +84 -0
- package/dist/commands/feedback-command.js +176 -3
- package/dist/commands/file-move-to-dir-execution-cache.js +92 -1
- package/dist/commands/file-move-to-dir-preview-cache.js +125 -2
- package/dist/commands/file-move-to-dir-worker.js +54 -0
- package/dist/commands/file-move-to-dir.js +1073 -5
- package/dist/commands/file-mutation-runtime.js +102 -1
- package/dist/commands/file-mutation-worker-apply.js +180 -0
- package/dist/commands/file-refactor-batch-execution-cache.js +90 -1
- package/dist/commands/file-refactor-batch-preview-cache.js +125 -2
- package/dist/commands/file-refactor-batch-worker.js +54 -0
- package/dist/commands/file-refactor-batch.js +1154 -5
- package/dist/commands/file-rename-execution-cache.js +92 -1
- package/dist/commands/file-rename-preview-cache.js +125 -2
- package/dist/commands/file-rename-worker.js +54 -0
- package/dist/commands/file-rename.js +1053 -5
- package/dist/commands/file-text-edit-executor.js +205 -0
- package/dist/commands/find-importers.js +52 -1
- package/dist/commands/find-unused-imports.js +55 -1
- package/dist/commands/generate-docs-command.js +244 -6
- package/dist/commands/help-command.js +460 -7
- package/dist/commands/import-specifier-policy.js +391 -0
- package/dist/commands/imports-command.js +68 -1
- package/dist/commands/imports-rebase.js +1138 -0
- package/dist/commands/init-skill-usage.js +92 -3
- package/dist/commands/init-workspace.js +30 -1
- package/dist/commands/inspect-alias-candidates.js +413 -0
- package/dist/commands/inspect-cycles.js +811 -5
- package/dist/commands/inspect-direct-usages.js +98 -0
- package/dist/commands/inspect-duplicates-format.js +229 -0
- package/dist/commands/inspect-format-primitives.js +127 -0
- package/dist/commands/inspect-format.js +1590 -18
- package/dist/commands/inspect-graph.js +1553 -9
- package/dist/commands/inspect-imports.js +339 -2
- package/dist/commands/inspect-mixed-format.js +524 -0
- package/dist/commands/inspect-module-plan-format.js +216 -0
- package/dist/commands/inspect-module-plan-serialization.js +402 -0
- package/dist/commands/inspect-reference-path-format.js +157 -0
- package/dist/commands/inspect-request-values.js +599 -0
- package/dist/commands/inspect-selector-kind.js +21 -0
- package/dist/commands/inspect-selector.js +50 -0
- package/dist/commands/inspect-symbol-format.js +90 -0
- package/dist/commands/inspect-topology.js +435 -0
- package/dist/commands/inspect-tree.js +827 -5
- package/dist/commands/inspect-usages-detail.js +793 -0
- package/dist/commands/inspect-usages-evidence.js +31 -0
- package/dist/commands/inspect-usages-format.js +367 -0
- package/dist/commands/inspect.js +1450 -16
- package/dist/commands/internal-command.js +64 -0
- package/dist/commands/json-file-input.js +60 -1
- package/dist/commands/module-plan-cache.js +156 -2
- package/dist/commands/module-plan-standalone.js +208 -0
- package/dist/commands/module-plan-timeout.js +77 -1
- package/dist/commands/move-preview-cache.js +101 -2
- package/dist/commands/mutate-aggregate-output.js +996 -0
- package/dist/commands/mutate-child-execution.js +374 -0
- package/dist/commands/mutate-command.js +1394 -0
- package/dist/commands/mutate-declaration-output.js +313 -0
- package/dist/commands/mutate-domain-adapters.js +638 -0
- package/dist/commands/mutate-execution-cache.js +114 -0
- package/dist/commands/mutate-execution-status.js +598 -0
- package/dist/commands/mutate-failure-output.js +531 -0
- package/dist/commands/mutate-file-view.js +151 -0
- package/dist/commands/mutate-object-output.js +91 -0
- package/dist/commands/mutate-output-values.js +97 -0
- package/dist/commands/mutate-preview-cache.js +86 -0
- package/dist/commands/mutate-response-replay.js +153 -0
- package/dist/commands/mutate-result-projection.js +818 -0
- package/dist/commands/mutation-eta.js +28 -0
- package/dist/commands/mutation-execution-cache.js +140 -3
- package/dist/commands/mutation-recovery-journal.js +195 -0
- package/dist/commands/normalize-imports.js +1120 -4
- package/dist/commands/object-pack-command.js +546 -0
- package/dist/commands/object-pack-preview-cache.js +88 -0
- package/dist/commands/observability-command.js +47 -3
- package/dist/commands/ota-command.js +403 -2
- package/dist/commands/print-config.js +10 -1
- package/dist/commands/quick-read.js +1113 -11
- package/dist/commands/refactor-batch-builder.js +265 -1
- package/dist/commands/refactor-batch-execution-cache.js +85 -1
- package/dist/commands/refactor-batch-preview-cache.js +96 -2
- package/dist/commands/refactor-batch.js +461 -4
- package/dist/commands/rename-entities.js +794 -4
- package/dist/commands/rename-execution-cache.js +49 -1
- package/dist/commands/rename-input.js +22 -1
- package/dist/commands/rename-polling-policy.js +68 -0
- package/dist/commands/rename-preview-cache.js +96 -2
- package/dist/commands/result-view.js +993 -7
- package/dist/commands/reveal-command.js +445 -5
- package/dist/commands/selector-suggestions.js +93 -0
- package/dist/commands/session-workspace.js +1836 -31
- package/dist/commands/shared.js +2 -1
- package/dist/commands/skills-command.js +315 -0
- package/dist/commands/sync-command.js +59 -2
- package/dist/commands/worker-command.js +173 -1
- package/dist/commands/workspace-cache.js +55 -1
- package/dist/config/defaults.js +26 -1
- package/dist/config/env-vars.js +77 -1
- package/dist/config/glob-match.js +44 -1
- package/dist/config/import-rules.js +165 -1
- package/dist/config/local-config.js +293 -3
- package/dist/config/mutation-comments.js +51 -1
- package/dist/config/path-aliases.js +165 -1
- package/dist/config/path-display.js +84 -1
- package/dist/config/product-storage.js +37 -1
- package/dist/config/request-env.js +21 -0
- package/dist/config/request-routing-context.js +23 -0
- package/dist/config/resolve-command-alias.js +74 -1
- package/dist/config/resolve.js +24 -1
- package/dist/config/tsconfig-discovery.js +113 -1
- package/dist/config/typescript-preferences.js +131 -0
- package/dist/config/workspace-root.js +310 -3
- package/dist/config/workspace-state.js +254 -1
- package/dist/content/content-bundle.js +88 -1
- package/dist/diagnostics/module-plan-timeline.js +75 -2
- package/dist/diagnostics/readiness-text.js +45 -8
- package/dist/dsl/aib-dsl.js +838 -1
- package/dist/dsl/declaration-dsl.js +264 -1
- package/dist/dsl/file-move-to-dir-dsl.js +123 -1
- package/dist/dsl/file-refactor-batch-dsl.js +203 -1
- package/dist/dsl/file-rename-dsl.js +135 -1
- package/dist/dsl/mutate-dsl.js +746 -0
- package/dist/help/bootstrap.bash.md +176 -341
- package/dist/help/bootstrap.md +175 -340
- package/dist/help/bootstrap.pwsh.md +176 -341
- package/dist/help/docs/basics.md +1 -1
- package/dist/help/docs/config-setup.import-normalize.md +65 -65
- package/dist/help/docs/config-setup.import-rules.md +6 -5
- package/dist/help/docs/first-setup.md +6 -5
- package/dist/help/docs/help-protocol.md +4 -3
- package/dist/help/docs/import.base.md +38 -0
- package/dist/help/docs/import.rebase.md +85 -0
- package/dist/help/docs/inspect.aliasCandidates.md +39 -0
- package/dist/help/docs/inspect.code.md +1 -7
- package/dist/help/docs/inspect.file.md +10 -19
- package/dist/help/docs/inspect.graph.md +3 -17
- package/dist/help/{dsl/docs/inspect.md → docs/inspect.shared.md} +13 -12
- package/dist/help/docs/modulePlan.md +24 -28
- package/dist/help/docs/move.md +19 -22
- package/dist/help/{dsl/topics/file.move.md → docs/moveToDir.md} +36 -34
- package/dist/help/docs/mutate.mixed.md +34 -0
- package/dist/help/docs/mutation.shared.md +55 -0
- package/dist/help/docs/patterns.md +3 -12
- package/dist/help/docs/qr.md +12 -6
- package/dist/help/docs/quick-map.md +36 -24
- package/dist/help/docs/recipe.file-layout.md +10 -10
- package/dist/help/docs/recipe.import-boundary.md +92 -0
- package/dist/help/docs/recipe.safe-artifact-probing.md +68 -0
- package/dist/help/docs/recipe.unfamiliar-area.md +64 -0
- package/dist/help/docs/recipes.md +20 -0
- package/dist/help/docs/rename.md +19 -27
- package/dist/help/docs/renameFile.md +36 -0
- package/dist/help/docs/rules.md +26 -0
- package/dist/help/dsl/bootstrap.bash.md +176 -341
- package/dist/help/dsl/bootstrap.md +175 -340
- package/dist/help/dsl/bootstrap.pwsh.md +176 -341
- package/dist/help/dsl/docs/basics.md +1 -1
- package/dist/help/dsl/docs/config-setup.import-normalize.md +65 -65
- package/dist/help/dsl/docs/config-setup.import-rules.md +6 -5
- package/dist/help/dsl/docs/first-setup.md +6 -5
- package/dist/help/dsl/docs/help-protocol.md +4 -3
- package/dist/help/dsl/docs/import.base.md +38 -0
- package/dist/help/dsl/docs/import.rebase.md +85 -0
- package/dist/help/dsl/docs/inspect.aliasCandidates.md +39 -0
- package/dist/help/dsl/docs/inspect.code.md +1 -7
- package/dist/help/dsl/docs/inspect.file.md +10 -19
- package/dist/help/dsl/docs/inspect.graph.md +3 -17
- package/dist/help/{docs/inspect.md → dsl/docs/inspect.shared.md} +13 -12
- package/dist/help/dsl/docs/modulePlan.md +24 -28
- package/dist/help/dsl/docs/move.md +19 -22
- package/dist/help/{topics/file.move.md → dsl/docs/moveToDir.md} +36 -34
- package/dist/help/dsl/docs/mutate.mixed.md +34 -0
- package/dist/help/dsl/docs/mutation.shared.md +55 -0
- package/dist/help/dsl/docs/patterns.md +3 -12
- package/dist/help/dsl/docs/qr.md +12 -6
- package/dist/help/dsl/docs/quick-map.md +36 -24
- package/dist/help/dsl/docs/recipe.file-layout.md +10 -10
- package/dist/help/dsl/docs/recipe.import-boundary.md +92 -0
- package/dist/help/dsl/docs/recipe.safe-artifact-probing.md +68 -0
- package/dist/help/dsl/docs/recipe.unfamiliar-area.md +64 -0
- package/dist/help/dsl/docs/recipes.md +20 -0
- package/dist/help/dsl/docs/rename.md +19 -27
- package/dist/help/dsl/docs/renameFile.md +36 -0
- package/dist/help/dsl/docs/rules.md +26 -0
- package/dist/help/dsl/full.md +175 -340
- package/dist/help/dsl/help-index.md +48 -43
- package/dist/help/dsl/snippets/agents.md +2 -2
- package/dist/help/dsl/tokens/qr.inline.examples.md +1 -1
- package/dist/help/dsl/topics/basics.md +1 -1
- package/dist/help/dsl/topics/config-setup.import-normalize.md +65 -65
- package/dist/help/dsl/topics/config-setup.import-rules.md +6 -5
- package/dist/help/dsl/topics/first-setup.md +6 -5
- package/dist/help/dsl/topics/help-protocol.md +4 -3
- package/dist/help/dsl/topics/import.base.md +36 -0
- package/dist/help/dsl/topics/import.rebase.md +83 -0
- package/dist/help/dsl/topics/inspect.aliasCandidates.md +37 -0
- package/dist/help/dsl/topics/inspect.code.md +1 -7
- package/dist/help/dsl/topics/inspect.file.md +10 -19
- package/dist/help/dsl/topics/inspect.graph.md +3 -17
- package/dist/help/dsl/topics/{inspect.md → inspect.shared.md} +13 -12
- package/dist/help/dsl/topics/modulePlan.md +21 -26
- package/dist/help/dsl/topics/move.md +17 -18
- package/dist/help/{docs/file.move.md → dsl/topics/moveToDir.md} +33 -35
- package/dist/help/dsl/topics/mutate.mixed.md +32 -0
- package/dist/help/dsl/topics/mutation.shared.md +53 -0
- package/dist/help/dsl/topics/patterns.md +3 -12
- package/dist/help/dsl/topics/qr.md +12 -6
- package/dist/help/dsl/topics/quick-map.md +36 -24
- package/dist/help/dsl/topics/recipe.file-layout.md +10 -10
- package/dist/help/dsl/topics/recipe.import-boundary.md +90 -0
- package/dist/help/dsl/topics/recipe.safe-artifact-probing.md +66 -0
- package/dist/help/dsl/topics/recipe.unfamiliar-area.md +62 -0
- package/dist/help/dsl/topics/recipes.md +18 -0
- package/dist/help/dsl/topics/rename.md +15 -15
- package/dist/help/dsl/topics/renameFile.md +34 -0
- package/dist/help/dsl/topics/rules.md +24 -0
- package/dist/help/full.md +175 -340
- package/dist/help/help-index.md +48 -43
- package/dist/help/help-meta.json +98 -48
- package/dist/help/index.md +52 -20
- package/dist/help/snippets/agents.md +2 -2
- package/dist/help/tokens/qr.inline.examples.md +1 -1
- package/dist/help/topics/basics.md +1 -1
- package/dist/help/topics/config-setup.import-normalize.md +65 -65
- package/dist/help/topics/config-setup.import-rules.md +6 -5
- package/dist/help/topics/first-setup.md +6 -5
- package/dist/help/topics/help-protocol.md +4 -3
- package/dist/help/topics/import.base.md +36 -0
- package/dist/help/topics/import.rebase.md +83 -0
- package/dist/help/topics/inspect.aliasCandidates.md +37 -0
- package/dist/help/topics/inspect.code.md +1 -7
- package/dist/help/topics/inspect.file.md +10 -19
- package/dist/help/topics/inspect.graph.md +3 -17
- package/dist/help/topics/{inspect.md → inspect.shared.md} +13 -12
- package/dist/help/topics/modulePlan.md +21 -26
- package/dist/help/topics/move.md +17 -18
- package/dist/help/{dsl/docs/file.move.md → topics/moveToDir.md} +33 -35
- package/dist/help/topics/mutate.mixed.md +32 -0
- package/dist/help/topics/mutation.shared.md +53 -0
- package/dist/help/topics/patterns.md +3 -12
- package/dist/help/topics/qr.md +12 -6
- package/dist/help/topics/quick-map.md +36 -24
- package/dist/help/topics/recipe.file-layout.md +10 -10
- package/dist/help/topics/recipe.import-boundary.md +90 -0
- package/dist/help/topics/recipe.safe-artifact-probing.md +66 -0
- package/dist/help/topics/recipe.unfamiliar-area.md +62 -0
- package/dist/help/topics/recipes.md +18 -0
- package/dist/help/topics/rename.md +15 -15
- package/dist/help/topics/renameFile.md +34 -0
- package/dist/help/topics/rules.md +24 -0
- package/dist/host/capabilities.js +56 -1
- package/dist/imports/standalone-import-analysis.js +602 -0
- package/dist/imports/standalone-import-model.js +2 -0
- package/dist/imports/standalone-import-process.js +66 -0
- package/dist/imports/standalone-import-worker.js +27 -0
- package/dist/imports/standalone-ts-project.js +147 -0
- package/dist/inspect/inspect-duplicates-service.js +526 -0
- package/dist/inspect/inspect-reverse-module-closure.js +338 -0
- package/dist/inspect/inspect-source-ranges.js +82 -0
- package/dist/inspect/inspect-source-shape.js +649 -0
- package/dist/inspect/standalone-inspect-analysis.js +319 -0
- package/dist/inspect/standalone-inspect-model.js +9 -0
- package/dist/inspect/standalone-inspect-process.js +55 -0
- package/dist/inspect/standalone-inspect-usages.js +274 -0
- package/dist/inspect/standalone-inspect-worker.js +13 -0
- package/dist/metrics/central-metrics.js +101 -2
- package/dist/mutation/concrete-edit-plan.js +157 -0
- package/dist/mutation/exports-star-collapse-preview.js +361 -0
- package/dist/mutation/exports-star-expand-apply.js +373 -0
- package/dist/mutation/exports-star-expand-preview.js +807 -0
- package/dist/mutation/file-impact-scan.js +182 -0
- package/dist/mutation/file-mutation-discovery.js +674 -0
- package/dist/mutation/file-mutation-eta.js +99 -0
- package/dist/mutation/file-mutation-standalone-apply.js +584 -0
- package/dist/mutation/file-mutation-standalone-planner.js +500 -0
- package/dist/mutation/file-mutation-tsserver-session.js +473 -0
- package/dist/mutation/mutation-estimate.js +45 -0
- package/dist/mutation/mutation-plan.js +467 -0
- package/dist/mutation/object-mutation-foundation.js +2 -0
- package/dist/mutation/object-mutation-partition.js +148 -0
- package/dist/mutation/object-pack-semantic-apply.js +507 -0
- package/dist/mutation/object-pack-semantic-preview.js +984 -0
- package/dist/mutation/object-unpack-semantic-preview.js +993 -0
- package/dist/mutation/package-manifest-impact.js +176 -0
- package/dist/mutation/rename-owner-worker-child.js +37 -0
- package/dist/mutation/rename-owner-worker.js +122 -0
- package/dist/mutation/runtime-cycle-query.js +66 -0
- package/dist/mutation/semantic-execution-progress.js +63 -0
- package/dist/mutation/semantic-export-index.js +474 -0
- package/dist/mutation/semantic-impact-scan.js +434 -0
- package/dist/mutation/semantic-model.js +2 -0
- package/dist/mutation/semantic-move-best-effort-planner.js +209 -0
- package/dist/mutation/semantic-move-config-worker-child.js +61 -0
- package/dist/mutation/semantic-move-config-worker.js +449 -0
- package/dist/mutation/semantic-move-declarations.js +94 -0
- package/dist/mutation/semantic-move-metrics.js +119 -0
- package/dist/mutation/semantic-move-model.js +2 -0
- package/dist/mutation/semantic-move-owner-authority.js +122 -0
- package/dist/mutation/semantic-move-owner-candidates.js +300 -0
- package/dist/mutation/semantic-move-owner-divergence-harness.js +474 -0
- package/dist/mutation/semantic-move-owner-divergence-runner.js +162 -0
- package/dist/mutation/semantic-move-plan-hash.js +56 -0
- package/dist/mutation/semantic-move-policy.js +360 -0
- package/dist/mutation/semantic-move-process.js +218 -0
- package/dist/mutation/semantic-move-provider-diagnostics.js +27 -0
- package/dist/mutation/semantic-move-standalone-engine.js +919 -0
- package/dist/mutation/semantic-move-standalone-planner.js +1553 -0
- package/dist/mutation/semantic-move-transaction.js +639 -0
- package/dist/mutation/semantic-mutation-engine.js +478 -0
- package/dist/mutation/semantic-mutation-runtime.js +521 -0
- package/dist/mutation/semantic-planner-retry.js +26 -0
- package/dist/mutation/semantic-program-roots.js +69 -0
- package/dist/mutation/semantic-rename-commonjs.js +229 -0
- package/dist/mutation/semantic-rename-config-worker-child.js +46 -0
- package/dist/mutation/semantic-rename-config-worker.js +498 -0
- package/dist/mutation/semantic-rename-locations.js +192 -0
- package/dist/mutation/semantic-rename-model.js +2 -0
- package/dist/mutation/semantic-rename-process.js +217 -0
- package/dist/mutation/semantic-rename-standalone-engine.js +302 -0
- package/dist/mutation/semantic-rename-standalone-planner.js +567 -0
- package/dist/mutation/semantic-rename-transaction.js +333 -0
- package/dist/mutation/semantic-unused-import-cleanup.js +248 -0
- package/dist/mutation/semantic-worker-retry.js +40 -0
- package/dist/mutation/semantic-workspace.js +804 -0
- package/dist/mutation/targeted-import-canonicalizer.js +359 -0
- package/dist/observability/config.js +206 -1
- package/dist/observability/context.js +59 -1
- package/dist/observability/failure-snapshot.js +124 -2
- package/dist/observability/recent.js +63 -2
- package/dist/payloads/read-stdin-json.js +212 -1
- package/dist/rg-wrapper/core.js +714 -6
- package/dist/rg-wrapper/options.js +125 -1
- package/dist/rtk-wrapper/core.js +144 -2
- package/dist/rtk-wrapper/git-safety.js +203 -0
- package/dist/rtk-wrapper/output-adapter.js +106 -0
- package/dist/runtime/buffered-process.js +114 -0
- package/dist/runtime/bundled-node.js +97 -1
- package/dist/runtime/command-lifecycle.js +2 -0
- package/dist/runtime/input-source.js +238 -1
- package/dist/runtime/node-cli-identity.js +37 -0
- package/dist/runtime/run-command.js +191 -1
- package/dist/selectors/parse-entities.js +84 -1
- package/dist/semantic/semantic-context-pool.js +830 -0
- package/dist/semantic/semantic-context-provider.js +416 -0
- package/dist/semantic/semantic-resident-admission.js +38 -0
- package/dist/semantic/semantic-worker-child.js +40 -0
- package/dist/semantic/semantic-worker-manager.js +460 -0
- package/dist/semantic/semantic-worker-protocol.js +2 -0
- package/dist/semantic/semantic-worker-runtime.js +38 -0
- package/dist/semantic/workspace-semantic-context-pools.js +136 -0
- package/dist/session/client.js +359 -1
- package/dist/session/daemon-state.js +185 -2
- package/dist/session/external-tool-coordinator.js +88 -0
- package/dist/session/external-tool-request.js +52 -0
- package/dist/session/lane-owner.js +116 -0
- package/dist/session/paths.js +71 -1
- package/dist/session/runtime-lifecycle.js +225 -0
- package/dist/session/runtime-shutdown.js +95 -0
- package/dist/session/server.js +1194 -7
- package/dist/session/session-health.js +27 -0
- package/dist/shared/agent-text.js +29 -1
- package/dist/shared/errors.js +496 -30
- package/dist/shared/event-loop.js +6 -1
- package/dist/shared/hints.js +37 -1
- package/dist/shared/metrics.js +43 -1
- package/dist/shared/presentation.js +69 -4
- package/dist/shared/stdin-examples.js +77 -1
- package/dist/shared/stdout.js +6 -2
- package/dist/shared/types.js +23 -1
- package/dist/tool-runtime/runtime-tools.js +120 -1
- package/dist/topology/availability.js +663 -0
- package/dist/topology/cache.js +130 -0
- package/dist/topology/candidates.js +372 -0
- package/dist/topology/core.js +903 -0
- package/dist/topology/dependency-snapshot.js +189 -0
- package/dist/topology/model.js +2 -0
- package/dist/topology/scope.js +100 -0
- package/dist/topology/ts-oracle-batch.js +529 -0
- package/dist/topology/ts-oracle-host.js +69 -0
- package/dist/topology/ts-oracle-model.js +2 -0
- package/dist/topology/ts-oracle.js +224 -0
- package/dist/topology/tsconfig-loader.js +105 -0
- package/dist/topology/workspace-project-index.js +542 -0
- package/dist/tracing/config.js +192 -2
- package/dist/tracing/failure-summary.js +100 -0
- package/dist/tracing/trace.js +318 -5
- package/dist/tsc-wrapper/core.js +697 -0
- package/dist/workers/control-plane/aib-control-plane-worker.cjs +32 -32
- package/dist/workers/control-plane/client-config.default.json +3 -3
- package/dist/workers/lexical-worker-child.js +27 -0
- package/dist/workers/lexical-worker-manager.js +394 -0
- package/dist/workers/lexical-worker-protocol.js +2 -0
- package/dist/workers/lexical-worker-runtime.js +25 -0
- package/dist/workers/owned-one-shot-process.js +115 -0
- package/dist/workers/product-storage.js +23 -1
- package/dist/workers/registry.js +241 -1
- package/package.json +8 -13
- package/scripts/postinstall.cjs +29 -29
- package/scripts/provision-runtime.cjs +411 -459
- package/dist/client/http-client.js +0 -1
- package/dist/client/transport-options.js +0 -1
- package/dist/client/websocket-client.js +0 -1
- package/dist/commands/entity-resolution.js +0 -1
- package/dist/commands/file-command.js +0 -1
- package/dist/commands/host-command.js +0 -1
- package/dist/commands/inspect-symbol-query.js +0 -1
- package/dist/commands/list-instances.js +0 -1
- package/dist/commands/module-plan-command.js +0 -1
- package/dist/commands/move-command.js +0 -1
- package/dist/commands/move-to-file.js +0 -2
- package/dist/commands/ping.js +0 -1
- package/dist/commands/refactor-command.js +0 -1
- package/dist/commands/rename-command.js +0 -1
- package/dist/commands/runtime-command.js +0 -4
- package/dist/commands/runtime-info.js +0 -1
- package/dist/commands/validate-module-plan.js +0 -2
- package/dist/compatibility/policy.js +0 -1
- package/dist/config/auto-start-ide.js +0 -1
- package/dist/discovery/registry.js +0 -1
- package/dist/discovery/select-instance.js +0 -1
- package/dist/help/docs/file.rename.md +0 -35
- package/dist/help/docs/mutation.md +0 -60
- package/dist/help/docs/refactor.batch.md +0 -44
- package/dist/help/dsl/docs/file.rename.md +0 -35
- package/dist/help/dsl/docs/mutation.md +0 -60
- package/dist/help/dsl/docs/refactor.batch.md +0 -44
- package/dist/help/dsl/topics/file.rename.md +0 -33
- package/dist/help/dsl/topics/mutation.md +0 -58
- package/dist/help/dsl/topics/refactor.batch.md +0 -33
- package/dist/help/topics/file.rename.md +0 -33
- package/dist/help/topics/mutation.md +0 -58
- package/dist/help/topics/refactor.batch.md +0 -33
- package/dist/ide-launch/common.cjs +0 -162
- package/dist/managed-host/extension-vsix-resolver.js +0 -1
- package/dist/managed-host/manage-serve-web-host.cjs +0 -141
- package/dist/managed-host/serve-web-autostart.js +0 -1
- package/dist/managed-host/serve-web-host.cjs +0 -2115
- package/dist/runtime/managed-runtime-provisioning.js +0 -1
- package/dist/shared/diagnostic-catalog.js +0 -1
- package/dist/shared/diagnostics.js +0 -1
- package/dist/shared/operations.js +0 -1
- package/dist/shared/protocol.js +0 -1
- package/dist/shared/routes.js +0 -1
- package/extension/vscode-refactor-bridge-extension.vsix +0 -0
- package/runtimes/launcher/linux-x64/aib +0 -0
- package/runtimes/launcher/win-x64/aib.exe +0 -0
package/dist/commands/inspect.js
CHANGED
|
@@ -1,16 +1,1450 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
+
}
|