@automaton-labs/aib 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -257
- 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 +210 -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
|
@@ -1,4 +1,794 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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.buildSemanticRenameResponse = buildSemanticRenameResponse;
|
|
37
|
+
exports.readCachedRenameExecution = readCachedRenameExecution;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const agent_text_1 = require("../shared/agent-text");
|
|
41
|
+
const types_1 = require("../shared/types");
|
|
42
|
+
const rename_execution_cache_1 = require("./rename-execution-cache");
|
|
43
|
+
const central_metrics_1 = require("../metrics/central-metrics");
|
|
44
|
+
function buildSemanticRenameResponse(cwd, result, builder, response, action, formatOptions) {
|
|
45
|
+
const builtRows = readSemanticRenameBuiltRows(builder);
|
|
46
|
+
const responseRows = readSemanticRenameResponseRows(response);
|
|
47
|
+
const rowResults = builtRows.map((builtRow) => buildSemanticRenameRowResult(cwd, builtRow, responseRows.get(builtRow.id) ?? null));
|
|
48
|
+
const ok = result.ok !== false && rowResults.every((row) => row.ok !== false);
|
|
49
|
+
const sourceFile = builtRows.find((row) => row.sourceFile)?.sourceFile ?? "";
|
|
50
|
+
const absoluteSourceFile = sourceFile ? resolveInputPath(cwd, sourceFile) : "";
|
|
51
|
+
const renamePairs = rowResults.map((row) => ({
|
|
52
|
+
oldName: typeof row.oldName === "string" ? row.oldName : row.entity,
|
|
53
|
+
newName: row.newName
|
|
54
|
+
}));
|
|
55
|
+
const files = summarizeRenameFiles(rowResults);
|
|
56
|
+
const savedFiles = collectSavedFiles(rowResults);
|
|
57
|
+
const totalEdits = rowResults.reduce((count, row) => count + readNumber(row.editCount), 0);
|
|
58
|
+
const workspaceFolders = [cwd];
|
|
59
|
+
const apiSummary = absoluteSourceFile
|
|
60
|
+
? buildRenameApiSummary(cwd, workspaceFolders, rowResults, renamePairs, files, absoluteSourceFile, action !== "preview")
|
|
61
|
+
: null;
|
|
62
|
+
const operation = action === "apply" ? "rename.apply" : action === "execute" ? "rename.execute" : "rename.preview";
|
|
63
|
+
const formatted = {
|
|
64
|
+
...result,
|
|
65
|
+
...(!ok ? { ok: false } : {}),
|
|
66
|
+
operation,
|
|
67
|
+
...(operation === "rename.preview" && typeof result.previewId === "string" ? { previewId: result.previewId } : {}),
|
|
68
|
+
...(absoluteSourceFile ? { file: formatRelativePath(cwd, absoluteSourceFile) } : {}),
|
|
69
|
+
...(rowResults.length === 1
|
|
70
|
+
? { rename: formatRenameLine(rowResults[0], false) }
|
|
71
|
+
: { renames: rowResults.map((row) => formatRenameLine(row, true)) }),
|
|
72
|
+
...(operation === "rename.preview" && (files.length > 0 || totalEdits > 0)
|
|
73
|
+
? {
|
|
74
|
+
summary: rowResults.length === 1
|
|
75
|
+
? `${files.length} ${files.length === 1 ? "file" : "files"}, ${totalEdits} edits`
|
|
76
|
+
: `${rowResults.length} symbols, ${files.length} ${files.length === 1 ? "file" : "files"}, ${totalEdits} edits`,
|
|
77
|
+
files: compactList(files, 5)
|
|
78
|
+
}
|
|
79
|
+
: savedFiles.length > 0
|
|
80
|
+
? {
|
|
81
|
+
summary: `${savedFiles.length} ${savedFiles.length === 1 ? "file" : "files"} written`,
|
|
82
|
+
filesWritten: compactList(savedFiles, 5)
|
|
83
|
+
}
|
|
84
|
+
: {}),
|
|
85
|
+
...(!ok ? { failed: rowResults.filter((row) => row.ok === false).map((row) => compactRenameFailure(row)) } : {}),
|
|
86
|
+
...(apiSummary ? { api: formatApiSummary(apiSummary) } : {}),
|
|
87
|
+
...(!ok ? { next: "Fix failed rename rows and rerun preview." } : {}),
|
|
88
|
+
...(ok && apiSummary && operation !== "rename.preview"
|
|
89
|
+
? { next: "If public API rename is intended, update consumers explicitly." }
|
|
90
|
+
: {}),
|
|
91
|
+
...(operation === "rename.preview" && typeof formatOptions.next === "string" ? { next: formatOptions.next } : {})
|
|
92
|
+
};
|
|
93
|
+
recordSemanticRenameMetrics(cwd, operation, rowResults, formatted);
|
|
94
|
+
return (0, agent_text_1.attachAgentText)(formatted, formatRenameAgentText(formatted));
|
|
95
|
+
}
|
|
96
|
+
function recordSemanticRenameMetrics(cwd, operation, rowResults, response) {
|
|
97
|
+
for (const row of rowResults) {
|
|
98
|
+
(0, central_metrics_1.recordCentralMetric)({
|
|
99
|
+
kind: "mutation.entity",
|
|
100
|
+
operation,
|
|
101
|
+
cwd: path.resolve(cwd),
|
|
102
|
+
sourceFile: typeof row.sourceFilePath === "string" && row.sourceFilePath.length > 0
|
|
103
|
+
? formatRelativePath(cwd, row.sourceFilePath)
|
|
104
|
+
: null,
|
|
105
|
+
entity: row.entity,
|
|
106
|
+
newName: row.newName,
|
|
107
|
+
ok: row.ok !== false,
|
|
108
|
+
totalEntities: rowResults.length,
|
|
109
|
+
editCount: typeof row.editCount === "number" ? row.editCount : 0,
|
|
110
|
+
changedFileCount: Array.isArray(row.allFiles) ? row.allFiles.length : 0,
|
|
111
|
+
savedFileCount: Array.isArray(row.allSavedFiles) ? row.allSavedFiles.length : 0,
|
|
112
|
+
...((0, central_metrics_1.mutationImpactMetricsEnabled)()
|
|
113
|
+
? {
|
|
114
|
+
impact: {
|
|
115
|
+
locationCount: typeof row.editCount === "number" ? row.editCount : null,
|
|
116
|
+
fileCount: Array.isArray(row.allFiles) ? row.allFiles.length : null,
|
|
117
|
+
impactCollectionMs: null
|
|
118
|
+
},
|
|
119
|
+
changedFiles: Array.isArray(row.allFiles) ? row.allFiles : [],
|
|
120
|
+
savedFiles: Array.isArray(row.allSavedFiles) ? row.allSavedFiles : []
|
|
121
|
+
}
|
|
122
|
+
: {})
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
recordRenameSummaryMetric(cwd, response);
|
|
126
|
+
}
|
|
127
|
+
function readSemanticRenameBuiltRows(builder) {
|
|
128
|
+
const requests = Array.isArray(builder.rows) ? builder.rows.filter(isJsonObject) : [];
|
|
129
|
+
const rows = [];
|
|
130
|
+
for (const request of requests) {
|
|
131
|
+
if (request.op !== "rename" || !Array.isArray(request.builtRows)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
for (const rawRow of request.builtRows.filter(isJsonObject)) {
|
|
135
|
+
if (typeof rawRow.id === "string" &&
|
|
136
|
+
typeof rawRow.entity === "string" &&
|
|
137
|
+
typeof rawRow.newName === "string") {
|
|
138
|
+
rows.push({
|
|
139
|
+
id: rawRow.id,
|
|
140
|
+
sourceFile: typeof rawRow.sourceFile === "string" ? rawRow.sourceFile : "",
|
|
141
|
+
entity: rawRow.entity,
|
|
142
|
+
newName: rawRow.newName
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return rows;
|
|
148
|
+
}
|
|
149
|
+
function readSemanticRenameResponseRows(response) {
|
|
150
|
+
const rows = new Map();
|
|
151
|
+
for (const rawRow of Array.isArray(response.rows) ? response.rows.filter(isJsonObject) : []) {
|
|
152
|
+
if (typeof rawRow.id === "string") {
|
|
153
|
+
rows.set(rawRow.id, rawRow);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return rows;
|
|
157
|
+
}
|
|
158
|
+
function buildSemanticRenameRowResult(cwd, builtRow, responseRow) {
|
|
159
|
+
const nestedResponse = isJsonObject(responseRow?.response) ? responseRow.response : {};
|
|
160
|
+
const locationPreview = isJsonObject(nestedResponse.locationPreview) ? nestedResponse.locationPreview : {};
|
|
161
|
+
const fileCounts = readStringArray(locationPreview.fileCounts);
|
|
162
|
+
const savedFiles = readStringArray(responseRow?.savedFiles);
|
|
163
|
+
const ok = responseRow?.ok !== false;
|
|
164
|
+
const result = {
|
|
165
|
+
entity: builtRow.entity,
|
|
166
|
+
oldName: builtRow.entity,
|
|
167
|
+
sourceFilePath: builtRow.sourceFile ? resolveInputPath(cwd, builtRow.sourceFile) : "",
|
|
168
|
+
acceptedSelector: builtRow.entity,
|
|
169
|
+
newName: builtRow.newName,
|
|
170
|
+
ok,
|
|
171
|
+
editCount: readNumber(locationPreview.locationCount),
|
|
172
|
+
allFiles: fileCounts,
|
|
173
|
+
files: compactList(fileCounts, 5),
|
|
174
|
+
applied: responseRow?.applied === true,
|
|
175
|
+
...(savedFiles.length > 0
|
|
176
|
+
? {
|
|
177
|
+
allSavedFiles: savedFiles,
|
|
178
|
+
savedFiles: compactList(savedFiles, 5)
|
|
179
|
+
}
|
|
180
|
+
: {})
|
|
181
|
+
};
|
|
182
|
+
if (!ok) {
|
|
183
|
+
result.code = typeof responseRow?.error === "string" ? responseRow.error : "RENAME_FAILED";
|
|
184
|
+
result.error = typeof responseRow?.error === "string" ? responseRow.error : "Rename failed.";
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
function readCachedRenameExecution(cwd, executionId) {
|
|
189
|
+
const status = (0, rename_execution_cache_1.readRenameExecutionStatus)(cwd, executionId);
|
|
190
|
+
if ((status.status === "completed" || status.status === "failed") && status.result) {
|
|
191
|
+
return status.result;
|
|
192
|
+
}
|
|
193
|
+
const response = {
|
|
194
|
+
operation: "execution.status",
|
|
195
|
+
executionId: status.executionId,
|
|
196
|
+
status: status.status,
|
|
197
|
+
phase: status.phase,
|
|
198
|
+
summary: buildRenameExecutionSummary(status),
|
|
199
|
+
progress: `${status.completedRows}/${status.rowCount}`,
|
|
200
|
+
filesWritten: status.filesWritten,
|
|
201
|
+
updatedAt: status.updatedAt,
|
|
202
|
+
...(status.error ? { error: status.error } : {})
|
|
203
|
+
};
|
|
204
|
+
return (0, agent_text_1.attachAgentText)(response, formatRenameExecutionStatusText(status));
|
|
205
|
+
}
|
|
206
|
+
function formatRenameExecutionStatusText(status) {
|
|
207
|
+
const lines = [
|
|
208
|
+
`${status.operation} ${status.executionId}`,
|
|
209
|
+
buildRenameExecutionSummary(status)
|
|
210
|
+
];
|
|
211
|
+
if (status.status === "running") {
|
|
212
|
+
lines.push("applying mutation");
|
|
213
|
+
}
|
|
214
|
+
if (status.error) {
|
|
215
|
+
lines.push(status.error);
|
|
216
|
+
}
|
|
217
|
+
return lines.join("\n");
|
|
218
|
+
}
|
|
219
|
+
function buildRenameExecutionSummary(status) {
|
|
220
|
+
if (status.status === "completed") {
|
|
221
|
+
return `completed, ${status.completedRows}/${status.rowCount} renames, ${status.filesWritten.length} files written`;
|
|
222
|
+
}
|
|
223
|
+
if (status.status === "failed") {
|
|
224
|
+
return `failed, ${status.completedRows}/${status.rowCount} renames, ${status.failedRows} failed`;
|
|
225
|
+
}
|
|
226
|
+
return `in progress, ${status.completedRows}/${status.rowCount} renames`;
|
|
227
|
+
}
|
|
228
|
+
function recordRenameSummaryMetric(cwd, response) {
|
|
229
|
+
(0, central_metrics_1.recordCentralMetric)({
|
|
230
|
+
kind: "mutation.summary",
|
|
231
|
+
operation: typeof response.operation === "string" ? response.operation : "rename",
|
|
232
|
+
cwd: path.resolve(cwd),
|
|
233
|
+
ok: response.ok !== false,
|
|
234
|
+
sourceFile: typeof response.file === "string" ? response.file : null,
|
|
235
|
+
summary: typeof response.summary === "string" ? response.summary : null,
|
|
236
|
+
filesWrittenCount: Array.isArray(response.filesWritten) ? response.filesWritten.filter((file) => typeof file === "string" && !file.startsWith("+")).length : 0
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function resolveInputPath(cwd, filePath) {
|
|
240
|
+
const trimmed = filePath.trim();
|
|
241
|
+
return path.normalize(path.isAbsolute(trimmed) ? trimmed : path.resolve(cwd, trimmed));
|
|
242
|
+
}
|
|
243
|
+
function formatRenameLine(result, includeEditCount) {
|
|
244
|
+
const selector = typeof result.acceptedSelector === "string" ? result.acceptedSelector : result.entity;
|
|
245
|
+
const status = result.ok === false ? "failed" : `${readNumber(result.editCount)} edits`;
|
|
246
|
+
const suffix = includeEditCount ? `, ${status}` : "";
|
|
247
|
+
return `${selector} -> ${result.newName}${suffix}`;
|
|
248
|
+
}
|
|
249
|
+
function compactRenameFailure(result) {
|
|
250
|
+
const row = {
|
|
251
|
+
rename: formatRenameLine(result, false),
|
|
252
|
+
code: typeof result.code === "string" ? result.code : "RENAME_FAILED",
|
|
253
|
+
error: typeof result.error === "string" ? result.error : "Rename failed."
|
|
254
|
+
};
|
|
255
|
+
for (const key of ["source", "candidates", "next"]) {
|
|
256
|
+
if (result[key] !== undefined) {
|
|
257
|
+
row[key] = result[key];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return row;
|
|
261
|
+
}
|
|
262
|
+
function collectSavedFiles(results) {
|
|
263
|
+
const files = new Set();
|
|
264
|
+
for (const result of results) {
|
|
265
|
+
const source = Array.isArray(result.allSavedFiles) ? result.allSavedFiles : result.savedFiles;
|
|
266
|
+
if (!Array.isArray(source)) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
for (const item of source) {
|
|
270
|
+
if (typeof item === "string" && !item.startsWith("+")) {
|
|
271
|
+
files.add(item);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return Array.from(files);
|
|
276
|
+
}
|
|
277
|
+
function formatApiSummary(apiSummary) {
|
|
278
|
+
const aliases = typeof apiSummary.aliases === "string" ? apiSummary.aliases : "aliases";
|
|
279
|
+
const consumers = typeof apiSummary.consumers === "string" ? apiSummary.consumers : "";
|
|
280
|
+
const consumerMatch = /^(\d+)\s+/.exec(consumers);
|
|
281
|
+
const consumerCount = consumerMatch ? Number(consumerMatch[1]) : 0;
|
|
282
|
+
const plural = aliases.startsWith("1 ") ? "name" : "names";
|
|
283
|
+
return consumerCount > 0
|
|
284
|
+
? `old ${plural} preserved by ${aliases}; ${consumers} still use old names`
|
|
285
|
+
: `old ${plural} preserved by ${aliases}`;
|
|
286
|
+
}
|
|
287
|
+
function formatRenameAgentText(response) {
|
|
288
|
+
if (response.ok === false) {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
const operation = typeof response.operation === "string" ? response.operation : "";
|
|
292
|
+
if (operation !== "rename.preview" && operation !== "rename.execute" && operation !== "rename.apply") {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
const lines = [];
|
|
296
|
+
const previewId = typeof response.previewId === "string" ? response.previewId : "";
|
|
297
|
+
lines.push(previewId && operation === "rename.preview" ? `${operation} ${previewId}` : operation);
|
|
298
|
+
if (typeof response.file === "string") {
|
|
299
|
+
lines.push(response.file);
|
|
300
|
+
}
|
|
301
|
+
if (typeof response.rename === "string") {
|
|
302
|
+
lines.push(response.rename);
|
|
303
|
+
}
|
|
304
|
+
else if (Array.isArray(response.renames)) {
|
|
305
|
+
for (const rename of response.renames) {
|
|
306
|
+
if (typeof rename === "string") {
|
|
307
|
+
lines.push(stripSuccessfulRenameEditSuffix(rename));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (typeof response.summary === "string") {
|
|
312
|
+
lines.push(response.summary);
|
|
313
|
+
}
|
|
314
|
+
appendStringList(lines, Array.isArray(response.filesWritten) ? response.filesWritten : response.files);
|
|
315
|
+
if (typeof response.api === "string") {
|
|
316
|
+
lines.push(`api: ${response.api}`);
|
|
317
|
+
}
|
|
318
|
+
if (typeof response.next === "string") {
|
|
319
|
+
lines.push(`next: ${response.next}`);
|
|
320
|
+
}
|
|
321
|
+
return lines.join("\n");
|
|
322
|
+
}
|
|
323
|
+
function stripSuccessfulRenameEditSuffix(rename) {
|
|
324
|
+
return rename.replace(/,\s+\d+\s+edits$/, "");
|
|
325
|
+
}
|
|
326
|
+
function appendStringList(lines, values) {
|
|
327
|
+
if (!Array.isArray(values)) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
for (const value of values) {
|
|
331
|
+
if (typeof value === "string") {
|
|
332
|
+
lines.push(value);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
function buildRenameApiSummary(cwd, workspaceFolders, results, renamePairs, summarizedFiles, sourceFile, allowDiskInference) {
|
|
337
|
+
const aliases = collectApiAliases(results);
|
|
338
|
+
const inferredAliases = allowDiskInference ? inferApiAliasesFromChangedExports(cwd, results, renamePairs) : [];
|
|
339
|
+
const summaryAliases = allowDiskInference ? inferApiAliasesFromSummaryFiles(cwd, summarizedFiles, sourceFile, renamePairs) : [];
|
|
340
|
+
const effectiveAliases = uniqueAliases([...aliases, ...inferredAliases, ...summaryAliases]);
|
|
341
|
+
if (effectiveAliases.length === 0) {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
const changedFiles = collectChangedFilePaths(cwd, results);
|
|
345
|
+
const scanRoots = getRenameApiScanRoots(cwd, workspaceFolders);
|
|
346
|
+
const consumerFiles = collectFilesContainingAnyName(scanRoots, effectiveAliases.map((alias) => alias.oldName), changedFiles);
|
|
347
|
+
return {
|
|
348
|
+
status: "preserved-via-alias",
|
|
349
|
+
aliases: `${effectiveAliases.length} ${effectiveAliases.length === 1 ? "alias" : "aliases"}`,
|
|
350
|
+
consumers: `${consumerFiles.length} ${consumerFiles.length === 1 ? "file" : "files"} not rewritten`,
|
|
351
|
+
hint: "Public API names were preserved through re-export aliases. Consumers still use old names."
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function inferApiAliasesFromSummaryFiles(cwd, summarizedFiles, sourceFile, renamePairs) {
|
|
355
|
+
const sourceComparable = normalizeComparablePath(sourceFile);
|
|
356
|
+
const aliases = [];
|
|
357
|
+
for (const item of summarizedFiles) {
|
|
358
|
+
if (typeof item !== "string" || item.startsWith("+")) {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const match = /^(.*) x(\d+)$/.exec(item);
|
|
362
|
+
if (!match) {
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
const absoluteFile = path.resolve(cwd, match[1]);
|
|
366
|
+
if (normalizeComparablePath(absoluteFile) === sourceComparable) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
let text = "";
|
|
370
|
+
try {
|
|
371
|
+
text = fs.readFileSync(absoluteFile, "utf8");
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
for (const pair of renamePairs) {
|
|
377
|
+
if (hasResidualPublicExport(text, pair)) {
|
|
378
|
+
aliases.push(pair);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return uniqueAliases(aliases);
|
|
383
|
+
}
|
|
384
|
+
function collectApiAliases(results) {
|
|
385
|
+
const aliases = [];
|
|
386
|
+
for (const result of results) {
|
|
387
|
+
if (!Array.isArray(result.apiAliases)) {
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
for (const rawAlias of result.apiAliases) {
|
|
391
|
+
if (!isJsonObject(rawAlias)) {
|
|
392
|
+
continue;
|
|
393
|
+
}
|
|
394
|
+
if (typeof rawAlias.oldName === "string" && typeof rawAlias.newName === "string") {
|
|
395
|
+
aliases.push({
|
|
396
|
+
oldName: rawAlias.oldName,
|
|
397
|
+
newName: rawAlias.newName
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return uniqueAliases(aliases);
|
|
403
|
+
}
|
|
404
|
+
function uniqueAliases(aliases) {
|
|
405
|
+
const seen = new Set();
|
|
406
|
+
return aliases.filter((alias) => {
|
|
407
|
+
const key = `${alias.newName} as ${alias.oldName}`;
|
|
408
|
+
if (seen.has(key)) {
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
seen.add(key);
|
|
412
|
+
return true;
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
function inferApiAliasesFromChangedExports(cwd, results, renamePairs) {
|
|
416
|
+
const aliases = [];
|
|
417
|
+
for (const result of results) {
|
|
418
|
+
const sourceComparable = typeof result.sourceFilePath === "string"
|
|
419
|
+
? normalizeComparablePath(result.sourceFilePath)
|
|
420
|
+
: null;
|
|
421
|
+
const resultFiles = Array.isArray(result.allFiles) ? result.allFiles : [];
|
|
422
|
+
for (const item of resultFiles) {
|
|
423
|
+
if (typeof item !== "string" || item.startsWith("+")) {
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
const match = /^(.*) x(\d+)$/.exec(item);
|
|
427
|
+
if (!match) {
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
const absoluteFile = path.resolve(cwd, match[1]);
|
|
431
|
+
if (sourceComparable && normalizeComparablePath(absoluteFile) === sourceComparable) {
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
let text = "";
|
|
435
|
+
try {
|
|
436
|
+
text = fs.readFileSync(absoluteFile, "utf8");
|
|
437
|
+
}
|
|
438
|
+
catch {
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
for (const pair of renamePairs) {
|
|
442
|
+
if (hasResidualPublicExport(text, pair)) {
|
|
443
|
+
aliases.push(pair);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
const seen = new Set();
|
|
449
|
+
return aliases.filter((alias) => {
|
|
450
|
+
const key = `${alias.newName} as ${alias.oldName}`;
|
|
451
|
+
if (seen.has(key)) {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
seen.add(key);
|
|
455
|
+
return true;
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
function collectAliasPreservingRenames(locations, oldName, newName) {
|
|
459
|
+
const aliasPattern = new RegExp(`\\b${escapeRegExp(newName)}\\s+as\\s+${escapeRegExp(oldName)}\\b`);
|
|
460
|
+
const aliases = locations
|
|
461
|
+
.filter((location) => typeof location.replacementPreview === "string" &&
|
|
462
|
+
aliasPattern.test(location.replacementPreview))
|
|
463
|
+
.map((location) => ({
|
|
464
|
+
oldName,
|
|
465
|
+
newName,
|
|
466
|
+
...(typeof location.fileName === "string" ? { fileName: location.fileName } : {})
|
|
467
|
+
}));
|
|
468
|
+
return aliases.slice(0, 20);
|
|
469
|
+
}
|
|
470
|
+
function collectPotentialAliasPreservingExports(cwd, fileCounts, oldName, newName, sourceFile) {
|
|
471
|
+
const sourceComparable = sourceFile ? normalizeComparablePath(sourceFile) : null;
|
|
472
|
+
const aliases = [];
|
|
473
|
+
for (const { file } of fileCounts) {
|
|
474
|
+
const absoluteFile = path.resolve(cwd, file);
|
|
475
|
+
if (sourceComparable && normalizeComparablePath(absoluteFile) === sourceComparable) {
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
let text = "";
|
|
479
|
+
try {
|
|
480
|
+
text = fs.readFileSync(absoluteFile, "utf8");
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
if (!hasResidualPublicExport(text, { oldName, newName })) {
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
aliases.push({
|
|
489
|
+
oldName,
|
|
490
|
+
newName,
|
|
491
|
+
fileName: absoluteFile
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
return aliases.slice(0, 20);
|
|
495
|
+
}
|
|
496
|
+
function hasResidualPublicExport(sourceText, pair) {
|
|
497
|
+
const oldNamePattern = new RegExp(`(?:^|[^\\p{ID_Continue}$])${escapeRegExp(pair.oldName)}(?:$|[^\\p{ID_Continue}$])`, "u");
|
|
498
|
+
const aliasPattern = new RegExp(`(?:^|[,\\s])(?:type\\s+)?${escapeRegExp(pair.newName)}\\s+as\\s+${escapeRegExp(pair.oldName)}(?:$|[,\\s])`, "u");
|
|
499
|
+
for (const match of sourceText.matchAll(/\bexport\s+(?:type\s+)?\{([\s\S]*?)\}(?:\s+from\b[^;]*)?;/gu)) {
|
|
500
|
+
const bindings = match[1] ?? "";
|
|
501
|
+
if (aliasPattern.test(bindings) || oldNamePattern.test(bindings)) {
|
|
502
|
+
return true;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
function collectChangedFilePaths(cwd, results) {
|
|
508
|
+
const files = new Set();
|
|
509
|
+
for (const result of results) {
|
|
510
|
+
const resultFiles = Array.isArray(result.allFiles) ? result.allFiles : [];
|
|
511
|
+
for (const item of resultFiles) {
|
|
512
|
+
if (typeof item !== "string" || item.startsWith("+")) {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
const match = /^(.*) x(\d+)$/.exec(item);
|
|
516
|
+
if (match) {
|
|
517
|
+
files.add(normalizeComparablePath(path.resolve(cwd, match[1])));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return files;
|
|
522
|
+
}
|
|
523
|
+
function collectFilesContainingAnyName(roots, names, excludedFiles) {
|
|
524
|
+
const uniqueNames = Array.from(new Set(names.filter((name) => name.length > 0)));
|
|
525
|
+
if (uniqueNames.length === 0) {
|
|
526
|
+
return [];
|
|
527
|
+
}
|
|
528
|
+
const files = [];
|
|
529
|
+
const seen = new Set();
|
|
530
|
+
for (const root of roots) {
|
|
531
|
+
for (const file of walkTypeScriptFiles(root, 5000)) {
|
|
532
|
+
const comparableFile = normalizeComparablePath(file);
|
|
533
|
+
if (excludedFiles.has(comparableFile) || seen.has(comparableFile)) {
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
seen.add(comparableFile);
|
|
537
|
+
let text = "";
|
|
538
|
+
try {
|
|
539
|
+
text = fs.readFileSync(file, "utf8");
|
|
540
|
+
}
|
|
541
|
+
catch {
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
if (uniqueNames.some((name) => text.includes(name))) {
|
|
545
|
+
files.push(file);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
return files;
|
|
550
|
+
}
|
|
551
|
+
function walkTypeScriptFiles(root, maxFiles) {
|
|
552
|
+
const files = [];
|
|
553
|
+
const stack = [path.resolve(root)];
|
|
554
|
+
while (stack.length > 0 && files.length < maxFiles) {
|
|
555
|
+
const current = stack.pop();
|
|
556
|
+
if (!current) {
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
let entries = [];
|
|
560
|
+
try {
|
|
561
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
562
|
+
}
|
|
563
|
+
catch {
|
|
564
|
+
continue;
|
|
565
|
+
}
|
|
566
|
+
for (const entry of entries) {
|
|
567
|
+
if (files.length >= maxFiles) {
|
|
568
|
+
break;
|
|
569
|
+
}
|
|
570
|
+
if (entry.isDirectory()) {
|
|
571
|
+
if (shouldSkipDirectory(entry.name)) {
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
stack.push(path.join(current, entry.name));
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
if (entry.isFile() && isTypeScriptSourceFile(entry.name)) {
|
|
578
|
+
files.push(path.join(current, entry.name));
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return files;
|
|
583
|
+
}
|
|
584
|
+
function shouldSkipDirectory(name) {
|
|
585
|
+
return [
|
|
586
|
+
".git",
|
|
587
|
+
".aib-plan-cache",
|
|
588
|
+
".aib-preview",
|
|
589
|
+
".aib-trace",
|
|
590
|
+
".tmp",
|
|
591
|
+
"dist",
|
|
592
|
+
"node_modules",
|
|
593
|
+
"out"
|
|
594
|
+
].includes(name);
|
|
595
|
+
}
|
|
596
|
+
function isTypeScriptSourceFile(fileName) {
|
|
597
|
+
return /\.(ts|tsx|mts|cts)$/i.test(fileName) && !/\.d\.(ts|mts|cts)$/i.test(fileName);
|
|
598
|
+
}
|
|
599
|
+
function normalizeComparablePath(filePath) {
|
|
600
|
+
return path.normalize(filePath).toLowerCase();
|
|
601
|
+
}
|
|
602
|
+
function escapeRegExp(value) {
|
|
603
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
604
|
+
}
|
|
605
|
+
function summarizeRenameFiles(results) {
|
|
606
|
+
const counts = new Map();
|
|
607
|
+
for (const result of results) {
|
|
608
|
+
const resultFiles = Array.isArray(result.allFiles) ? result.allFiles : result.files;
|
|
609
|
+
if (!Array.isArray(resultFiles)) {
|
|
610
|
+
continue;
|
|
611
|
+
}
|
|
612
|
+
for (const item of resultFiles) {
|
|
613
|
+
if (typeof item !== "string" || item.startsWith("+")) {
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
const match = /^(.*) x(\d+)$/.exec(item);
|
|
617
|
+
if (!match) {
|
|
618
|
+
continue;
|
|
619
|
+
}
|
|
620
|
+
const file = match[1];
|
|
621
|
+
const count = Number(match[2]);
|
|
622
|
+
counts.set(file, (counts.get(file) ?? 0) + count);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
return Array.from(counts.entries())
|
|
626
|
+
.sort((left, right) => left[0].localeCompare(right[0]))
|
|
627
|
+
.map(([file, count]) => `${file} x${count}`);
|
|
628
|
+
}
|
|
629
|
+
function collectProjectConfigs(cwd, results) {
|
|
630
|
+
return Array.from(new Set(results
|
|
631
|
+
.map((result) => result.projectConfig)
|
|
632
|
+
.filter((item) => typeof item === "string" && item.length > 0))).sort((left, right) => left.localeCompare(right));
|
|
633
|
+
}
|
|
634
|
+
function collectRenameResultFiles(sourceFile, results, cwd) {
|
|
635
|
+
const files = new Set([sourceFile]);
|
|
636
|
+
for (const result of results) {
|
|
637
|
+
const resultFiles = Array.isArray(result.allFiles) ? result.allFiles : [];
|
|
638
|
+
for (const item of resultFiles) {
|
|
639
|
+
if (typeof item !== "string" || item.startsWith("+")) {
|
|
640
|
+
continue;
|
|
641
|
+
}
|
|
642
|
+
const match = /^(.*) x(\d+)$/.exec(item);
|
|
643
|
+
if (!match) {
|
|
644
|
+
continue;
|
|
645
|
+
}
|
|
646
|
+
files.add(path.resolve(cwd, match[1]));
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
return Array.from(files);
|
|
650
|
+
}
|
|
651
|
+
function countRenameLocationsByFile(cwd, locations) {
|
|
652
|
+
const counts = new Map();
|
|
653
|
+
for (const location of locations) {
|
|
654
|
+
if (typeof location.fileName !== "string") {
|
|
655
|
+
continue;
|
|
656
|
+
}
|
|
657
|
+
const file = formatRelativePath(cwd, location.fileName);
|
|
658
|
+
counts.set(file, (counts.get(file) ?? 0) + 1);
|
|
659
|
+
}
|
|
660
|
+
return Array.from(counts.entries())
|
|
661
|
+
.sort((left, right) => left[0].localeCompare(right[0]))
|
|
662
|
+
.map(([file, count]) => ({ file, count }));
|
|
663
|
+
}
|
|
664
|
+
function compactSourceConsistency(raw) {
|
|
665
|
+
if (raw.documentMatchesDisk === true && raw.documentIsDirty !== true) {
|
|
666
|
+
return null;
|
|
667
|
+
}
|
|
668
|
+
return {
|
|
669
|
+
documentMatchesDisk: raw.documentMatchesDisk === true,
|
|
670
|
+
documentIsDirty: raw.documentIsDirty === true
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
function normalizeRenamePayload(sourceFile, renames, selectors, execute) {
|
|
674
|
+
return {
|
|
675
|
+
sourceFile,
|
|
676
|
+
renames: renames.map((rename, index) => ({
|
|
677
|
+
entity: selectors[index]?.raw ?? rename.entity.trim(),
|
|
678
|
+
symbolName: selectors[index]?.symbolName ?? rename.entity.trim(),
|
|
679
|
+
...(selectors[index]?.symbolKind ? { symbolKind: selectors[index]?.symbolKind } : {}),
|
|
680
|
+
...(selectors[index]?.parentName ? { parentName: selectors[index]?.parentName } : {}),
|
|
681
|
+
newName: rename.newName
|
|
682
|
+
})),
|
|
683
|
+
execute
|
|
684
|
+
};
|
|
685
|
+
}
|
|
686
|
+
function formatRenameCandidates(config, rawCandidates) {
|
|
687
|
+
if (!Array.isArray(rawCandidates)) {
|
|
688
|
+
return [];
|
|
689
|
+
}
|
|
690
|
+
return rawCandidates.filter(isJsonObject).slice(0, 8).map((candidate) => {
|
|
691
|
+
const name = typeof candidate.name === "string" ? candidate.name : "";
|
|
692
|
+
const kind = typeof candidate.kind === "string" ? candidate.kind.toLowerCase() : "";
|
|
693
|
+
const path = Array.isArray(candidate.path) ? candidate.path.filter((item) => typeof item === "string") : [];
|
|
694
|
+
const parentName = path.length > 1 ? path[path.length - 2] : undefined;
|
|
695
|
+
return {
|
|
696
|
+
name,
|
|
697
|
+
kind,
|
|
698
|
+
selector: formatSelector({
|
|
699
|
+
raw: parentName ? `${parentName}.${name}` : name,
|
|
700
|
+
symbolName: name,
|
|
701
|
+
symbolKind: isKnownKind(kind) ? kind : null,
|
|
702
|
+
...(parentName ? { parentName } : {})
|
|
703
|
+
}, config)
|
|
704
|
+
};
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
function formatSelector(selector, config) {
|
|
708
|
+
const symbolName = selector.parentName ? `${selector.parentName}.${selector.symbolName}` : selector.symbolName;
|
|
709
|
+
if (!selector.symbolKind) {
|
|
710
|
+
return selector.raw;
|
|
711
|
+
}
|
|
712
|
+
const alias = config.entityKindAliases[selector.symbolKind];
|
|
713
|
+
return `${alias}${config.selectorSeparator}${symbolName}`;
|
|
714
|
+
}
|
|
715
|
+
function getRenameApiScanRoots(cwd, workspaceFolders) {
|
|
716
|
+
const resolvedCwd = normalizeComparablePath(path.resolve(cwd));
|
|
717
|
+
const candidates = [];
|
|
718
|
+
for (const folder of workspaceFolders.map((item) => path.resolve(item))) {
|
|
719
|
+
const comparableFolder = normalizeComparablePath(folder);
|
|
720
|
+
if (resolvedCwd === comparableFolder || comparableFolder.startsWith(`${resolvedCwd}/`)) {
|
|
721
|
+
candidates.push(folder);
|
|
722
|
+
continue;
|
|
723
|
+
}
|
|
724
|
+
if (resolvedCwd.startsWith(`${comparableFolder}/`)) {
|
|
725
|
+
candidates.push(path.resolve(cwd));
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
if (candidates.length === 0) {
|
|
729
|
+
return [path.resolve(cwd)];
|
|
730
|
+
}
|
|
731
|
+
return Array.from(new Set(candidates));
|
|
732
|
+
}
|
|
733
|
+
function compactList(items, limit) {
|
|
734
|
+
const visible = items.slice(0, limit);
|
|
735
|
+
const hidden = items.length - visible.length;
|
|
736
|
+
return hidden > 0 ? [...visible, `+ ${hidden} more`] : visible;
|
|
737
|
+
}
|
|
738
|
+
function readNumber(value) {
|
|
739
|
+
return typeof value === "number" ? value : 0;
|
|
740
|
+
}
|
|
741
|
+
function readString(value) {
|
|
742
|
+
return typeof value === "string" ? value : null;
|
|
743
|
+
}
|
|
744
|
+
function readStringArray(value) {
|
|
745
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
746
|
+
}
|
|
747
|
+
function formatDuration(milliseconds) {
|
|
748
|
+
const seconds = Math.max(1, Math.ceil(milliseconds / 1000));
|
|
749
|
+
if (seconds < 60) {
|
|
750
|
+
return `~${seconds} sec`;
|
|
751
|
+
}
|
|
752
|
+
const minutes = Math.ceil(seconds / 60);
|
|
753
|
+
return `~${minutes} min`;
|
|
754
|
+
}
|
|
755
|
+
function formatRelativePath(cwd, filePath) {
|
|
756
|
+
return path.relative(cwd, filePath).replace(/\\/g, "/");
|
|
757
|
+
}
|
|
758
|
+
function readFlagValue(args, flag) {
|
|
759
|
+
const index = args.indexOf(flag);
|
|
760
|
+
if (index < 0) {
|
|
761
|
+
return null;
|
|
762
|
+
}
|
|
763
|
+
const value = args[index + 1];
|
|
764
|
+
return value && !value.startsWith("--") ? value : null;
|
|
765
|
+
}
|
|
766
|
+
function renameEntitiesHelp() {
|
|
767
|
+
return {
|
|
768
|
+
ok: true,
|
|
769
|
+
command: "rename",
|
|
770
|
+
usage: "aib rename preview <sourceFile> <entity> <newName> | aib rename preview --stdin | aib rename execute --stdin | aib rename apply <previewId>",
|
|
771
|
+
preview: {
|
|
772
|
+
sourceFile: "src/path/to/source-file.ts",
|
|
773
|
+
renames: [
|
|
774
|
+
{
|
|
775
|
+
entity: "OldSymbolName",
|
|
776
|
+
newName: "NewSymbolName"
|
|
777
|
+
}
|
|
778
|
+
],
|
|
779
|
+
execute: false
|
|
780
|
+
},
|
|
781
|
+
apply: "aib rename apply rename_abc123",
|
|
782
|
+
notes: [
|
|
783
|
+
"Use execute:false first when selector resolution is uncertain.",
|
|
784
|
+
"Preview returns previewId, file/edit summary, and candidate selectors on failure.",
|
|
785
|
+
"Apply by previewId refuses to run if the source file changed after preview."
|
|
786
|
+
]
|
|
787
|
+
};
|
|
788
|
+
}
|
|
789
|
+
function isJsonObject(value) {
|
|
790
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
791
|
+
}
|
|
792
|
+
function isKnownKind(value) {
|
|
793
|
+
return types_1.ENTITY_KIND_IDS.includes(value);
|
|
794
|
+
}
|