@depup/nx 23.1.3-depup.0 → 23.2.0-depup.0
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 +5 -4
- package/changes.json +10 -6
- package/dist/bin/init-local.js +3 -5
- package/dist/bin/nx.js +1 -0
- package/dist/src/adapter/ngcli-adapter.js +60 -1
- package/dist/src/ai/constants.d.ts +15 -0
- package/dist/src/ai/constants.js +17 -1
- package/dist/src/ai/set-up-ai-agents/set-up-ai-agents.js +57 -9
- package/dist/src/ai/utils.d.ts +13 -0
- package/dist/src/ai/utils.js +29 -0
- package/dist/src/analytics/analytics.js +2 -4
- package/dist/src/command-line/completion/command-object.js +7 -12
- package/dist/src/command-line/configure-ai-agents/configure-ai-agents.js +42 -31
- package/dist/src/command-line/format/format.js +84 -101
- package/dist/src/command-line/generate/generate.js +35 -35
- package/dist/src/command-line/import/import.js +29 -38
- package/dist/src/command-line/init/ai-agent-prompts.js +5 -11
- package/dist/src/command-line/init/command-object.js +4 -2
- package/dist/src/command-line/init/configure-plugins.js +4 -1
- package/dist/src/command-line/init/implementation/add-nx-to-monorepo.js +12 -32
- package/dist/src/command-line/init/implementation/add-nx-to-nest.js +17 -21
- package/dist/src/command-line/init/implementation/add-nx-to-npm-repo.js +8 -21
- package/dist/src/command-line/init/implementation/add-nx-to-turborepo.js +3 -17
- package/dist/src/command-line/init/implementation/angular/index.js +10 -15
- package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +2 -0
- package/dist/src/command-line/init/implementation/angular/standalone-workspace.js +8 -2
- package/dist/src/command-line/init/implementation/check-compatible-with-plugins.js +2 -0
- package/dist/src/command-line/init/implementation/dot-nx/add-nx-scripts.js +5 -0
- package/dist/src/command-line/init/implementation/format.d.ts +18 -0
- package/dist/src/command-line/init/implementation/format.js +114 -0
- package/dist/src/command-line/init/implementation/utils.js +8 -8
- package/dist/src/command-line/init/init-v1.js +15 -18
- package/dist/src/command-line/init/init-v2.js +77 -66
- package/dist/src/command-line/migrate/agentic/definitions.js +36 -9
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +37 -22
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +30 -39
- package/dist/src/command-line/migrate/agentic/handoff.d.ts +7 -7
- package/dist/src/command-line/migrate/agentic/handoff.js +13 -10
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.d.ts +7 -12
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.js +7 -0
- package/dist/src/command-line/migrate/agentic/run-step.d.ts +10 -0
- package/dist/src/command-line/migrate/agentic/run-step.js +1 -0
- package/dist/src/command-line/migrate/agentic/runner.js +24 -24
- package/dist/src/command-line/migrate/agentic/select.d.ts +10 -2
- package/dist/src/command-line/migrate/agentic/select.js +30 -32
- package/dist/src/command-line/migrate/agentic/types.d.ts +33 -3
- package/dist/src/command-line/migrate/agentic/types.js +35 -0
- package/dist/src/command-line/migrate/command-object.d.ts +6 -0
- package/dist/src/command-line/migrate/command-object.js +19 -1
- package/dist/src/command-line/migrate/execute-migration.d.ts +28 -9
- package/dist/src/command-line/migrate/execute-migration.js +112 -27
- package/dist/src/command-line/migrate/migrate-analytics.d.ts +35 -0
- package/dist/src/command-line/migrate/migrate-analytics.js +64 -0
- package/dist/src/command-line/migrate/migrate-commits.d.ts +38 -8
- package/dist/src/command-line/migrate/migrate-commits.js +130 -15
- package/dist/src/command-line/migrate/migrate-config.d.ts +13 -12
- package/dist/src/command-line/migrate/migrate-config.js +22 -14
- package/dist/src/command-line/migrate/migrate-output.d.ts +45 -7
- package/dist/src/command-line/migrate/migrate-output.js +52 -8
- package/dist/src/command-line/migrate/migrate-ui-api.d.ts +2 -1
- package/dist/src/command-line/migrate/migrate-ui-api.js +16 -7
- package/dist/src/command-line/migrate/migrate.d.ts +24 -55
- package/dist/src/command-line/migrate/migrate.js +553 -226
- package/dist/src/command-line/migrate/migration-shape.d.ts +8 -0
- package/dist/src/command-line/migrate/multi-major.js +7 -10
- package/dist/src/command-line/migrate/resolve-package-version.js +4 -8
- package/dist/src/command-line/migrate/run/agent-output.d.ts +20 -0
- package/dist/src/command-line/migrate/run/agent-output.js +65 -0
- package/dist/src/command-line/migrate/run/index.d.ts +9 -0
- package/dist/src/command-line/migrate/run/index.js +23 -0
- package/dist/src/command-line/migrate/run/orchestrator.d.ts +20 -0
- package/dist/src/command-line/migrate/run/orchestrator.js +1200 -0
- package/dist/src/command-line/migrate/run/run-id.d.ts +16 -0
- package/dist/src/command-line/migrate/run/run-id.js +56 -0
- package/dist/src/command-line/migrate/run/run-state.d.ts +157 -0
- package/dist/src/command-line/migrate/run/run-state.js +438 -0
- package/dist/src/command-line/migrate/run/state-lock.d.ts +25 -0
- package/dist/src/command-line/migrate/run/state-lock.js +76 -0
- package/dist/src/command-line/migrate/run/state-machine.d.ts +84 -0
- package/dist/src/command-line/migrate/run/state-machine.js +315 -0
- package/dist/src/command-line/migrate/run/util.d.ts +59 -0
- package/dist/src/command-line/migrate/run/util.js +148 -0
- package/dist/src/command-line/migrate/run/worker.d.ts +16 -0
- package/dist/src/command-line/migrate/run/worker.js +682 -0
- package/dist/src/command-line/migrate/run-migration-process.js +6 -5
- package/dist/src/command-line/migrate/safe-prompt.d.ts +14 -26
- package/dist/src/command-line/migrate/safe-prompt.js +32 -43
- package/dist/src/command-line/migrate/sort-migrations.d.ts +16 -0
- package/dist/src/command-line/migrate/sort-migrations.js +32 -0
- package/dist/src/command-line/migrate/step-actions.d.ts +5 -0
- package/dist/src/command-line/migrate/step-actions.js +12 -0
- package/dist/src/command-line/migrate/text.d.ts +18 -0
- package/dist/src/command-line/migrate/text.js +26 -0
- package/dist/src/command-line/migrate/version-skew-guard.d.ts +60 -0
- package/dist/src/command-line/migrate/version-skew-guard.js +175 -0
- package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +16 -20
- package/dist/src/command-line/nx-cloud/start-nx-agents/command-object.d.ts +2 -0
- package/dist/src/command-line/nx-cloud/start-nx-agents/command-object.js +16 -0
- package/dist/src/command-line/nx-cloud/start-nx-agents/start-nx-agents.d.ts +4 -0
- package/dist/src/command-line/nx-cloud/start-nx-agents/start-nx-agents.js +13 -0
- package/dist/src/command-line/nx-commands.js +26 -24
- package/dist/src/command-line/release/changelog.js +6 -17
- package/dist/src/command-line/release/plan.js +15 -28
- package/dist/src/command-line/release/publish.js +5 -0
- package/dist/src/command-line/release/release.js +6 -17
- package/dist/src/command-line/release/utils/release-graph.d.ts +1 -0
- package/dist/src/command-line/release/utils/release-graph.js +10 -2
- package/dist/src/command-line/release/utils/remote-release-clients/github.js +10 -22
- package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +13 -22
- package/dist/src/command-line/release/utils/resolve-semver-specifier.js +19 -41
- package/dist/src/command-line/release/version/resolve-current-version.js +7 -10
- package/dist/src/command-line/release/version.js +2 -2
- package/dist/src/command-line/reset/reset.js +17 -15
- package/dist/src/command-line/yargs-utils/shared-options.d.ts +1 -1
- package/dist/src/command-line/yargs-utils/shared-options.js +3 -1
- package/dist/src/config/misc-interfaces.d.ts +19 -7
- package/dist/src/core/graph/main.js +1 -1
- package/dist/src/core/graph/styles.js +1 -1
- package/dist/src/daemon/client/client.d.ts +2 -7
- package/dist/src/daemon/client/client.js +113 -28
- package/dist/src/daemon/client/daemon-environment.d.ts +35 -0
- package/dist/src/daemon/client/daemon-environment.js +106 -6
- package/dist/src/daemon/client/daemon-socket-messenger.d.ts +1 -1
- package/dist/src/daemon/client/daemon-socket-messenger.js +8 -3
- package/dist/src/daemon/is-v8-serializer-enabled.d.ts +2 -2
- package/dist/src/daemon/is-v8-serializer-enabled.js +2 -2
- package/dist/src/daemon/sandbox-socket-hint.d.ts +27 -0
- package/dist/src/daemon/sandbox-socket-hint.js +136 -0
- package/dist/src/daemon/server/client-socket-context.d.ts +1 -1
- package/dist/src/daemon/server/client-socket-context.js +2 -3
- package/dist/src/daemon/server/dotenv-graph-changes.d.ts +97 -0
- package/dist/src/daemon/server/dotenv-graph-changes.js +284 -0
- package/dist/src/daemon/server/handle-client-env.d.ts +8 -0
- package/dist/src/daemon/server/handle-client-env.js +92 -0
- package/dist/src/daemon/server/handle-outputs-changes.d.ts +10 -0
- package/dist/src/daemon/server/handle-outputs-changes.js +86 -0
- package/dist/src/daemon/server/project-graph-incremental-recomputation.d.ts +21 -0
- package/dist/src/daemon/server/project-graph-incremental-recomputation.js +159 -6
- package/dist/src/daemon/server/server.js +36 -72
- package/dist/src/daemon/server/shutdown-utils.d.ts +1 -1
- package/dist/src/daemon/server/shutdown-utils.js +2 -2
- package/dist/src/daemon/socket-utils.d.ts +26 -7
- package/dist/src/daemon/socket-utils.js +45 -31
- package/dist/src/daemon/tmp-dir.d.ts +10 -0
- package/dist/src/daemon/tmp-dir.js +21 -37
- package/dist/src/devkit-internals.d.ts +19 -8
- package/dist/src/devkit-internals.js +47 -6
- package/dist/src/executors/run-commands/running-tasks.js +46 -29
- package/dist/src/generators/internal-utils/{format-changed-files-with-prettier-if-available.d.ts → format-changed-files.d.ts} +6 -6
- package/dist/src/generators/internal-utils/format-changed-files.js +163 -0
- package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.d.ts +15 -0
- package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.js +21 -3
- package/dist/src/migrations/update-15-0-0/prefix-outputs.js +2 -2
- package/dist/src/migrations/update-16-0-0/remove-nrwl-cli.js +2 -2
- package/dist/src/migrations/update-16-0-0/update-depends-on-to-tokens.js +2 -2
- package/dist/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -2
- package/dist/src/migrations/update-16-2-0/remove-run-commands-output-path.js +2 -2
- package/dist/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +2 -2
- package/dist/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +2 -2
- package/dist/src/migrations/update-17-2-0/move-default-base.js +2 -2
- package/dist/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +2 -2
- package/dist/src/migrations/update-19-2-4/set-project-name.js +2 -2
- package/dist/src/migrations/update-20-0-0/move-use-daemon-process.js +2 -2
- package/dist/src/migrations/update-20-0-1/use-legacy-cache.js +2 -2
- package/dist/src/migrations/update-21-0-0/release-changelog-config-changes.js +2 -2
- package/dist/src/migrations/update-21-0-0/release-version-config-changes.js +2 -2
- package/dist/src/migrations/update-21-0-0/remove-custom-tasks-runner.js +2 -2
- package/dist/src/migrations/update-21-0-0/remove-legacy-cache.js +2 -2
- package/dist/src/migrations/update-22-0-0/consolidate-release-tag-config.js +2 -2
- package/dist/src/migrations/update-22-0-0/release-version-config-changes.js +2 -2
- package/dist/src/migrations/update-22-2-0/add-self-healing-to-gitignore.js +2 -2
- package/dist/src/migrations/update-22-6-0/add-claude-settings-local-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-22-6-0/add-claude-worktrees-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-22-7-0/add-polygraph-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-23-0-0/add-migrate-runs-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +2 -2
- package/dist/src/native/index.d.ts +7 -3
- package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
- package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
- package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +3 -3
- package/dist/src/nx-cloud/utilities/url-shorten.d.ts +1 -4
- package/dist/src/nx-cloud/utilities/url-shorten.js +9 -8
- package/dist/src/plugins/js/lock-file/lock-file.d.ts +46 -4
- package/dist/src/plugins/js/lock-file/lock-file.js +192 -15
- package/dist/src/plugins/js/lock-file/npm-parser.js +10 -3
- package/dist/src/plugins/js/lock-file/pnpm-parser.js +356 -62
- package/dist/src/plugins/js/lock-file/project-graph-pruning.d.ts +25 -1
- package/dist/src/plugins/js/lock-file/project-graph-pruning.js +78 -4
- package/dist/src/plugins/js/lock-file/pruned-output.d.ts +330 -0
- package/dist/src/plugins/js/lock-file/pruned-output.js +1441 -0
- package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +1 -0
- package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.js +6 -5
- package/dist/src/plugins/js/utils/register.d.ts +11 -0
- package/dist/src/plugins/js/utils/register.js +40 -6
- package/dist/src/project-graph/plugins/get-plugins.d.ts +27 -1
- package/dist/src/project-graph/plugins/get-plugins.js +110 -5
- package/dist/src/project-graph/plugins/isolation/enabled.js +1 -4
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.d.ts +16 -0
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +69 -11
- package/dist/src/project-graph/plugins/isolation/messaging.js +1 -3
- package/dist/src/project-graph/plugins/isolation/plugin-worker.js +23 -2
- package/dist/src/project-graph/project-graph.js +27 -2
- package/dist/src/project-graph/utils/project-configuration/project-nodes-manager.d.ts +7 -0
- package/dist/src/project-graph/utils/project-configuration/project-nodes-manager.js +14 -6
- package/dist/src/project-graph/utils/project-configuration/target-defaults.js +47 -21
- package/dist/src/tasks-runner/is-tui-enabled.js +3 -1
- package/dist/src/tasks-runner/life-cycle.d.ts +2 -2
- package/dist/src/tasks-runner/life-cycle.js +2 -2
- package/dist/src/tasks-runner/life-cycles/performance-report.d.ts +12 -0
- package/dist/src/tasks-runner/life-cycles/performance-report.js +62 -3
- package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.d.ts +26 -1
- package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +99 -5
- package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +26 -0
- package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +113 -17
- package/dist/src/tasks-runner/pseudo-ipc.js +14 -13
- package/dist/src/tasks-runner/pseudo-terminal.d.ts +17 -3
- package/dist/src/tasks-runner/pseudo-terminal.js +22 -10
- package/dist/src/tasks-runner/run-command.js +32 -39
- package/dist/src/tasks-runner/running-tasks/batch-process.d.ts +55 -0
- package/dist/src/tasks-runner/running-tasks/batch-process.js +161 -8
- package/dist/src/tasks-runner/task-env.d.ts +25 -0
- package/dist/src/tasks-runner/task-env.js +39 -0
- package/dist/src/tasks-runner/task-orchestrator.d.ts +68 -0
- package/dist/src/tasks-runner/task-orchestrator.js +159 -8
- package/dist/src/utils/analytics-enabled.d.ts +7 -0
- package/dist/src/utils/analytics-enabled.js +11 -0
- package/dist/src/utils/analytics-prompt.js +4 -7
- package/dist/src/utils/cache-directory.d.ts +62 -3
- package/dist/src/utils/cache-directory.js +276 -25
- package/dist/src/utils/catalog/bun-manager-utils.d.ts +8 -0
- package/dist/src/utils/catalog/bun-manager-utils.js +174 -0
- package/dist/src/utils/catalog/bun-manager.d.ts +28 -0
- package/dist/src/utils/catalog/bun-manager.js +130 -0
- package/dist/src/utils/catalog/index.d.ts +1 -1
- package/dist/src/utils/catalog/index.js +1 -1
- package/dist/src/utils/catalog/manager-factory.js +3 -0
- package/dist/src/utils/catalog/manager-utils.d.ts +8 -1
- package/dist/src/utils/catalog/manager-utils.js +9 -4
- package/dist/src/utils/catalog/manager.d.ts +13 -1
- package/dist/src/utils/catalog/manager.js +30 -0
- package/dist/src/utils/catalog/pnpm-manager.d.ts +2 -1
- package/dist/src/utils/catalog/pnpm-manager.js +3 -0
- package/dist/src/utils/catalog/types.d.ts +4 -0
- package/dist/src/utils/catalog/yarn-manager.d.ts +6 -2
- package/dist/src/utils/catalog/yarn-manager.js +23 -32
- package/dist/src/utils/child-process.d.ts +31 -1
- package/dist/src/utils/child-process.js +103 -0
- package/dist/src/utils/chunkify.d.ts +7 -1
- package/dist/src/utils/chunkify.js +10 -3
- package/dist/src/utils/consume-messages-from-socket.d.ts +42 -7
- package/dist/src/utils/consume-messages-from-socket.js +273 -38
- package/dist/src/utils/db-connection.js +8 -16
- package/dist/src/utils/exit-codes.d.ts +9 -0
- package/dist/src/utils/exit-codes.js +19 -0
- package/dist/src/utils/formatters/index.d.ts +13 -0
- package/dist/src/utils/formatters/index.js +74 -0
- package/dist/src/utils/formatters/oxfmt.d.ts +32 -0
- package/dist/src/utils/formatters/oxfmt.js +764 -0
- package/dist/src/utils/formatters/prettier.d.ts +26 -0
- package/dist/src/utils/formatters/prettier.js +201 -0
- package/dist/src/utils/formatters/shared.d.ts +5 -0
- package/dist/src/utils/formatters/shared.js +8 -0
- package/dist/src/utils/git-utils.d.ts +38 -2
- package/dist/src/utils/git-utils.js +422 -19
- package/dist/src/utils/has-nx-js-plugin.d.ts +1 -1
- package/dist/src/utils/has-nx-js-plugin.js +1 -1
- package/dist/src/utils/ignore.d.ts +47 -5
- package/dist/src/utils/ignore.js +93 -11
- package/dist/src/utils/kill-child-on-host-exit.d.ts +7 -0
- package/dist/src/utils/kill-child-on-host-exit.js +42 -0
- package/dist/src/utils/nx-console-prompt.js +3 -6
- package/dist/src/utils/nx-tmp-dir.d.ts +5 -0
- package/dist/src/utils/nx-tmp-dir.js +7 -2
- package/dist/src/utils/output.d.ts +153 -0
- package/dist/src/utils/output.js +289 -5
- package/dist/src/utils/owned-private-dir.d.ts +13 -0
- package/dist/src/utils/owned-private-dir.js +39 -0
- package/dist/src/utils/package-json.d.ts +2 -0
- package/dist/src/utils/package-manager.js +17 -7
- package/dist/src/utils/params.d.ts +7 -1
- package/dist/src/utils/params.js +64 -6
- package/dist/src/utils/permission-errors.d.ts +11 -0
- package/dist/src/utils/permission-errors.js +17 -0
- package/dist/src/utils/plugins/core-plugins.js +4 -0
- package/dist/src/utils/prompt-helpers.d.ts +53 -0
- package/dist/src/utils/prompt-helpers.js +111 -0
- package/dist/src/utils/socket-refused-exit-code.d.ts +15 -0
- package/dist/src/utils/socket-refused-exit-code.js +18 -0
- package/dist/src/utils/write-formatted-json-file.d.ts +3 -2
- package/dist/src/utils/write-formatted-json-file.js +5 -4
- package/package.json +29 -20
- package/dist/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +0 -88
- package/dist/src/utils/is-using-prettier.d.ts +0 -3
- package/dist/src/utils/is-using-prettier.js +0 -62
|
@@ -5,7 +5,7 @@ exports.getPluginReason = getPluginReason;
|
|
|
5
5
|
exports.detectPlugins = detectPlugins;
|
|
6
6
|
const fs_1 = require("fs");
|
|
7
7
|
const path_1 = require("path");
|
|
8
|
-
const
|
|
8
|
+
const prompt_helpers_1 = require("../../utils/prompt-helpers");
|
|
9
9
|
const semver_1 = require("semver");
|
|
10
10
|
const nx_json_1 = require("../../config/nx-json");
|
|
11
11
|
const fileutils_1 = require("../../utils/fileutils");
|
|
@@ -20,6 +20,7 @@ const configure_plugins_1 = require("./configure-plugins");
|
|
|
20
20
|
const ai_agent_prompts_1 = require("./ai-agent-prompts");
|
|
21
21
|
const set_up_ai_agents_1 = require("../../ai/set-up-ai-agents/set-up-ai-agents");
|
|
22
22
|
const tree_1 = require("../../generators/tree");
|
|
23
|
+
const format_1 = require("./implementation/format");
|
|
23
24
|
const add_nx_to_monorepo_1 = require("./implementation/add-nx-to-monorepo");
|
|
24
25
|
const add_nx_to_npm_repo_1 = require("./implementation/add-nx-to-npm-repo");
|
|
25
26
|
const add_nx_to_turborepo_1 = require("./implementation/add-nx-to-turborepo");
|
|
@@ -29,11 +30,14 @@ const utils_1 = require("./implementation/utils");
|
|
|
29
30
|
const provenance_1 = require("../../utils/provenance");
|
|
30
31
|
const handle_import_1 = require("../../utils/handle-import");
|
|
31
32
|
const native_1 = require("../../native");
|
|
33
|
+
const utils_2 = require("../../ai/utils");
|
|
34
|
+
const permission_errors_1 = require("../../utils/permission-errors");
|
|
32
35
|
const detect_ai_agent_1 = require("../../ai/detect-ai-agent");
|
|
33
36
|
const ab_testing_1 = require("../../utils/ab-testing");
|
|
34
37
|
const analytics_prompt_1 = require("../../utils/analytics-prompt");
|
|
35
38
|
const is_ci_1 = require("../../utils/is-ci");
|
|
36
39
|
const ai_output_1 = require("./utils/ai-output");
|
|
40
|
+
const is_sandbox_1 = require("../../utils/is-sandbox");
|
|
37
41
|
async function initHandler(options, inner = false) {
|
|
38
42
|
// Use environment variable to force local execution
|
|
39
43
|
if (process.env.NX_USE_LOCAL === 'true' || inner) {
|
|
@@ -118,8 +122,15 @@ async function runInit(options, baseMeta) {
|
|
|
118
122
|
}
|
|
119
123
|
// AI agent mode: apply defaults for non-interactive operation
|
|
120
124
|
const aiMode = (0, native_1.isAiAgent)();
|
|
125
|
+
const isSandboxed = (0, is_sandbox_1.isSandbox)();
|
|
121
126
|
if (aiMode) {
|
|
122
127
|
options.interactive = false; // Force non-interactive
|
|
128
|
+
if (isSandboxed) {
|
|
129
|
+
// During init, before configuring AI agents, the daemon and
|
|
130
|
+
// plugin socket connections are not available
|
|
131
|
+
process.env.NX_DAEMON = 'false';
|
|
132
|
+
process.env.NX_ISOLATE_PLUGINS = 'false';
|
|
133
|
+
}
|
|
123
134
|
if (options.nxCloud === undefined) {
|
|
124
135
|
options.nxCloud = false; // Default to skip Nx Cloud
|
|
125
136
|
}
|
|
@@ -148,6 +159,7 @@ async function runInit(options, baseMeta) {
|
|
|
148
159
|
...options,
|
|
149
160
|
integrated: !!options.integrated,
|
|
150
161
|
});
|
|
162
|
+
await (0, format_1.formatInitWrites)(process.cwd());
|
|
151
163
|
(0, utils_1.printFinalMessage)({
|
|
152
164
|
learnMoreLink: 'https://nx.dev/technologies/angular/migration/angular',
|
|
153
165
|
});
|
|
@@ -161,21 +173,17 @@ async function runInit(options, baseMeta) {
|
|
|
161
173
|
options.interactive &&
|
|
162
174
|
!aiMode &&
|
|
163
175
|
process.stdin.isTTY) {
|
|
164
|
-
const setupMode = await (0,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
},
|
|
178
|
-
]).then((r) => r.setupMode);
|
|
176
|
+
const setupMode = await (0, prompt_helpers_1.selectPrompt)({
|
|
177
|
+
message: 'How would you like to set up Nx in this directory?',
|
|
178
|
+
choices: [
|
|
179
|
+
{
|
|
180
|
+
value: '.nx installation (recommended for non-JavaScript projects)',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
value: 'package.json installation (recommended for JavaScript/TypeScript projects)',
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
});
|
|
179
187
|
if (setupMode.startsWith('package.json')) {
|
|
180
188
|
// Create a minimal package.json so the JS/TS workflow takes over
|
|
181
189
|
const workspaceName = (0, path_1.basename)(process.cwd());
|
|
@@ -184,6 +192,7 @@ async function runInit(options, baseMeta) {
|
|
|
184
192
|
version: '0.0.0',
|
|
185
193
|
private: true,
|
|
186
194
|
});
|
|
195
|
+
(0, format_1.recordInitWrite)('package.json');
|
|
187
196
|
}
|
|
188
197
|
else {
|
|
189
198
|
options.useDotNxInstallation = true;
|
|
@@ -198,14 +207,10 @@ async function runInit(options, baseMeta) {
|
|
|
198
207
|
// AI mode defaults to minimum setup, humans can choose
|
|
199
208
|
let guided = !aiMode; // Default to minimum (false) for AI, guided (true) for humans
|
|
200
209
|
if (options.interactive && !(_isTurborepo || _isNonJs)) {
|
|
201
|
-
const setupType = await (0,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
message: 'Would you like a minimum or guided setup?',
|
|
206
|
-
choices: [{ name: 'Minimum' }, { name: 'Guided' }],
|
|
207
|
-
},
|
|
208
|
-
]).then((r) => r.setupPreference);
|
|
210
|
+
const setupType = await (0, prompt_helpers_1.selectPrompt)({
|
|
211
|
+
message: 'Would you like a minimum or guided setup?',
|
|
212
|
+
choices: [{ value: 'Minimum' }, { value: 'Guided' }],
|
|
213
|
+
});
|
|
209
214
|
guided = setupType === 'Guided';
|
|
210
215
|
}
|
|
211
216
|
/**
|
|
@@ -221,6 +226,7 @@ async function runInit(options, baseMeta) {
|
|
|
221
226
|
await (0, add_nx_to_turborepo_1.addNxToTurborepo)({
|
|
222
227
|
interactive: options.interactive,
|
|
223
228
|
});
|
|
229
|
+
await (0, format_1.formatInitWrites)(process.cwd());
|
|
224
230
|
(0, utils_1.printFinalMessage)({
|
|
225
231
|
learnMoreLink: 'https://nx.dev/recipes/adopting-nx/from-turborepo',
|
|
226
232
|
});
|
|
@@ -295,6 +301,9 @@ async function runInit(options, baseMeta) {
|
|
|
295
301
|
reason: getPluginReason(name),
|
|
296
302
|
}));
|
|
297
303
|
(0, ai_output_1.logProgress)('detecting', `Detected ${detectedPluginNames.length} plugin(s): ${detectedPluginNames.join(', ')}`);
|
|
304
|
+
// This path exits without reaching the drain below, and `nx.json` has
|
|
305
|
+
// already been written by now.
|
|
306
|
+
await (0, format_1.formatInitWrites)(repoRoot);
|
|
298
307
|
(0, ai_output_1.writeAiOutput)((0, ai_output_1.buildNeedsInputResult)(detectedPlugins));
|
|
299
308
|
process.exit(0);
|
|
300
309
|
}
|
|
@@ -321,21 +330,38 @@ async function runInit(options, baseMeta) {
|
|
|
321
330
|
await (0, configure_plugins_1.configurePlugins)(pluginsToInstall, updatePackageScripts, pmc, repoRoot, options.verbose);
|
|
322
331
|
}
|
|
323
332
|
}
|
|
324
|
-
|
|
333
|
+
// AI agent mode configures the detected agent automatically (aiAgents is
|
|
334
|
+
// pre-filled above); interactive humans are always prompted — even in the
|
|
335
|
+
// minimum setup — since agent configuration also writes the sandbox
|
|
336
|
+
// allowances the Nx daemon needs when driven by an agent later.
|
|
337
|
+
const selectedAgents = await (0, ai_agent_prompts_1.determineAiAgents)(options.aiAgents, options.interactive);
|
|
325
338
|
if (selectedAgents && selectedAgents.length > 0) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
+
try {
|
|
340
|
+
const tree = new tree_1.FsTree(repoRoot, false);
|
|
341
|
+
const aiAgentsCallback = await (0, set_up_ai_agents_1.setupAiAgentsGenerator)(tree, {
|
|
342
|
+
directory: '.',
|
|
343
|
+
writeNxCloudRules: options.nxCloud !== false,
|
|
344
|
+
packageVersion: 'latest',
|
|
345
|
+
agents: [...selectedAgents],
|
|
346
|
+
});
|
|
347
|
+
const changes = tree.listChanges();
|
|
348
|
+
(0, tree_1.flushChanges)(repoRoot, changes);
|
|
349
|
+
if (aiAgentsCallback) {
|
|
350
|
+
const results = await aiAgentsCallback();
|
|
351
|
+
results.messages.forEach((m) => output_1.output.log(m));
|
|
352
|
+
results.errors.forEach((e) => output_1.output.error(e));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch (e) {
|
|
356
|
+
if (!(0, permission_errors_1.isPermissionDenied)(e)) {
|
|
357
|
+
throw e;
|
|
358
|
+
}
|
|
359
|
+
// Don't fail the whole init over this — everything else succeeded.
|
|
360
|
+
// Warned rather than thrown so the rest of the init result still stands.
|
|
361
|
+
output_1.output.warn({
|
|
362
|
+
title: 'AI agent configuration could not be written from this process',
|
|
363
|
+
bodyLines: (0, utils_2.agentConfigWriteBlockedLines)(e),
|
|
364
|
+
});
|
|
339
365
|
}
|
|
340
366
|
}
|
|
341
367
|
let nxCloudChoice;
|
|
@@ -373,6 +399,10 @@ async function runInit(options, baseMeta) {
|
|
|
373
399
|
pluginsInstalled: pluginsToInstall.join(','),
|
|
374
400
|
},
|
|
375
401
|
});
|
|
402
|
+
// Before the AI record, not after: the formatters write to stdout
|
|
403
|
+
// (`--list-different`, oxfmt's summary), which would otherwise land after the
|
|
404
|
+
// NDJSON result and corrupt the tail an agent parses.
|
|
405
|
+
await (0, format_1.formatInitWrites)(repoRoot);
|
|
376
406
|
// Output success result for AI agents
|
|
377
407
|
if (aiMode) {
|
|
378
408
|
(0, ai_output_1.writeAiOutput)((0, ai_output_1.buildSuccessResult)({
|
|
@@ -400,6 +430,7 @@ async function runInit(options, baseMeta) {
|
|
|
400
430
|
function getPluginReason(plugin) {
|
|
401
431
|
const reasonMap = {
|
|
402
432
|
'@nx/eslint': 'eslint detected in dependencies',
|
|
433
|
+
'@nx/oxlint': 'oxlint detected in dependencies',
|
|
403
434
|
'@nx/storybook': 'storybook detected in dependencies',
|
|
404
435
|
'@nx/vite': 'vite detected in dependencies',
|
|
405
436
|
'@nx/vitest': 'vitest detected in dependencies',
|
|
@@ -447,6 +478,7 @@ function parsePluginsFlag(value) {
|
|
|
447
478
|
const npmPackageToPluginMap = {
|
|
448
479
|
// Generic JS tools
|
|
449
480
|
eslint: '@nx/eslint',
|
|
481
|
+
oxlint: '@nx/oxlint',
|
|
450
482
|
storybook: '@nx/storybook',
|
|
451
483
|
// Bundlers
|
|
452
484
|
vite: '@nx/vite',
|
|
@@ -573,39 +605,18 @@ async function detectPlugins(nxJson, packageJson, interactive, includeAngularCli
|
|
|
573
605
|
`Add these Nx plugins to integrate with the tools used in your workspace.`,
|
|
574
606
|
],
|
|
575
607
|
});
|
|
576
|
-
const pluginsToInstall = await (0,
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
message: `Which plugins would you like to add? Press <Space> to select and <Enter> to submit.`,
|
|
581
|
-
choices: plugins.map((p) => ({ name: p, value: p })),
|
|
582
|
-
/**
|
|
583
|
-
* limit is missing from the interface but it limits the amount of options shown
|
|
584
|
-
*/
|
|
585
|
-
limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
|
|
586
|
-
},
|
|
587
|
-
]).then((r) => r.plugins);
|
|
608
|
+
const pluginsToInstall = await (0, prompt_helpers_1.multiselectPrompt)({
|
|
609
|
+
message: `Which plugins would you like to add? Press <Space> to select and <Enter> to submit.`,
|
|
610
|
+
choices: plugins,
|
|
611
|
+
});
|
|
588
612
|
if (pluginsToInstall?.length === 0)
|
|
589
613
|
return {
|
|
590
614
|
plugins: [],
|
|
591
615
|
updatePackageScripts: false,
|
|
592
616
|
};
|
|
593
617
|
const updatePackageScripts = (0, fs_1.existsSync)('package.json') &&
|
|
594
|
-
(await (0,
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
type: 'autocomplete',
|
|
598
|
-
message: `Do you want to start using Nx in your package.json scripts?`,
|
|
599
|
-
choices: [
|
|
600
|
-
{
|
|
601
|
-
name: 'Yes',
|
|
602
|
-
},
|
|
603
|
-
{
|
|
604
|
-
name: 'No',
|
|
605
|
-
},
|
|
606
|
-
],
|
|
607
|
-
initial: 0,
|
|
608
|
-
},
|
|
609
|
-
]).then((r) => r.updatePackageScripts === 'Yes'));
|
|
618
|
+
(await (0, prompt_helpers_1.confirmationPrompt)({
|
|
619
|
+
message: `Do you want to start using Nx in your package.json scripts?`,
|
|
620
|
+
}));
|
|
610
621
|
return { plugins: pluginsToInstall, updatePackageScripts };
|
|
611
622
|
}
|
|
@@ -4,7 +4,7 @@ exports.AGENT_DEFINITIONS = exports.opencodeDefinition = exports.codexDefinition
|
|
|
4
4
|
exports.getAgentDefinition = getAgentDefinition;
|
|
5
5
|
const os_1 = require("os");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
-
const
|
|
7
|
+
const types_1 = require("./types");
|
|
8
8
|
// --- Claude Code ---------------------------------------------------------
|
|
9
9
|
function claudeCodeWellKnownPaths() {
|
|
10
10
|
if (process.platform === 'win32') {
|
|
@@ -13,21 +13,48 @@ function claudeCodeWellKnownPaths() {
|
|
|
13
13
|
}
|
|
14
14
|
return [(0, path_1.join)((0, os_1.homedir)(), '.claude', 'local', 'claude')];
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
/**
|
|
17
|
+
* The run directory names Nx will interpolate into a permission rule. A rule
|
|
18
|
+
* is a gitignore pattern, which reads `*?[]\` as syntax, and `--allowedTools`
|
|
19
|
+
* splits its value on commas and spaces, so a name carrying any of those
|
|
20
|
+
* would change what the rule authorizes rather than what it names. Run
|
|
21
|
+
* directory names derive from a migration's own version string, which nothing
|
|
22
|
+
* upstream constrains to this alphabet. The leading character rejects `.`
|
|
23
|
+
* and `..`.
|
|
24
|
+
*/
|
|
25
|
+
const RULE_SAFE_RUN_DIR_NAME = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/;
|
|
26
|
+
/**
|
|
27
|
+
* Pre-authorizes the handoff write. Claude Code's default permission mode
|
|
28
|
+
* asks before a file write it has no allow rule for, so without this every
|
|
29
|
+
* step ends on an approval prompt for Nx's own handoff scratch.
|
|
30
|
+
*
|
|
31
|
+
* The rule reaches one run's handoffs and nothing else. Its own run
|
|
32
|
+
* directory also holds state Nx wrote and reads back, and the sibling
|
|
33
|
+
* directories belong to other runs, including an orchestrated run whose
|
|
34
|
+
* handoffs decide how its steps settle. `Edit` is the only tool name file
|
|
35
|
+
* rules are matched against, and it covers creating the file as well as
|
|
36
|
+
* correcting one already written. Prefix-less patterns resolve against the
|
|
37
|
+
* session cwd, pinned to the workspace root below.
|
|
38
|
+
*
|
|
39
|
+
* Returns null for a name it cannot express, which costs the approval prompt
|
|
40
|
+
* this exists to avoid. That beats widening the rule, and nothing narrower is
|
|
41
|
+
* available: Claude Code has no escape for a literal path.
|
|
42
|
+
*/
|
|
43
|
+
function claudeCodeHandoffAllowedTools(runDirName) {
|
|
44
|
+
if (!RULE_SAFE_RUN_DIR_NAME.test(runDirName)) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return `Edit(${types_1.MIGRATE_RUNS_RELATIVE_DIR}/${runDirName}/${types_1.HANDOFFS_DIR_NAME}/**)`;
|
|
48
|
+
}
|
|
22
49
|
function claudeCodeBuildInteractive(ctx) {
|
|
50
|
+
const allowedTools = claudeCodeHandoffAllowedTools(ctx.runDirName);
|
|
23
51
|
return {
|
|
24
52
|
// `--allowedTools` is variadic (space/comma separated): a positional
|
|
25
53
|
// placed right after its value gets swallowed as another rule. The rules
|
|
26
54
|
// must stay in one comma-joined element with a non-variadic flag
|
|
27
55
|
// (`--system-prompt`) between them and the user prompt.
|
|
28
56
|
args: [
|
|
29
|
-
'--allowedTools',
|
|
30
|
-
CLAUDE_CODE_HANDOFF_ALLOWED_TOOLS,
|
|
57
|
+
...(allowedTools ? ['--allowedTools', allowedTools] : []),
|
|
31
58
|
'--system-prompt',
|
|
32
59
|
ctx.systemContext,
|
|
33
60
|
ctx.userPrompt,
|
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
export declare function isHandoffGitignoreMigration(m: {
|
|
2
|
-
package: string;
|
|
3
|
-
name: string;
|
|
4
|
-
}): boolean;
|
|
5
1
|
/**
|
|
6
|
-
*
|
|
7
|
-
* `.nx/migrate-runs/<run-id
|
|
2
|
+
* Both the agentic runner and the orchestrator write per-run scratch under
|
|
3
|
+
* `.nx/migrate-runs/<run-id>/`: handoff files in both cases, plus the durable
|
|
4
|
+
* run state and its plan snapshots for the orchestrator. The v23 migration
|
|
8
5
|
* `23-0-0-add-migrate-runs-to-git-ignore` adds `.nx/migrate-runs` to
|
|
9
|
-
* `.gitignore`;
|
|
10
|
-
*
|
|
11
|
-
* scratch into the user-visible diff.
|
|
6
|
+
* `.gitignore`; in its declared slot (typically late) earlier per-migration
|
|
7
|
+
* commits would absorb the scratch into the user-visible diff.
|
|
12
8
|
*
|
|
13
9
|
* Two paths cover the leak, with no overlap:
|
|
14
10
|
*
|
|
15
|
-
* 1. HOIST
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
11
|
+
* 1. HOIST: `sortMigrations`, which `executeMigrations` applies, sorts the
|
|
12
|
+
* v23 migration to position 0 when it is in the queue, so it runs first
|
|
13
|
+
* through the normal runner with its own log line and commit. A
|
|
14
|
+
* single-migration worker run needs no hoisting: the requested migration
|
|
15
|
+
* is the entire queue.
|
|
19
16
|
*
|
|
20
|
-
* 2. INLINE FALLBACK
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
17
|
+
* 2. INLINE FALLBACK, this function. When the migration is NOT in the queue
|
|
18
|
+
* AND the highest target version is < v23 (intra-pre-v23 `--agentic`
|
|
19
|
+
* run) it will never run, so apply its body inline against an `FsTree`
|
|
20
|
+
* and commit it as a standalone preflight commit (or leave it in the
|
|
21
|
+
* working tree under `--no-create-commits`).
|
|
25
22
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* Not in the queue AND target >= v23 means the user is already past v23. They
|
|
24
|
+
* had the entry historically; if it is gone, that is a conscious removal we
|
|
25
|
+
* respect.
|
|
29
26
|
*/
|
|
30
|
-
export declare function applyAgenticHandoffGitignoreFallback({ migrations, installedNxVersion, effectiveCreateCommits, commitPrefix, root, }: {
|
|
27
|
+
export declare function applyAgenticHandoffGitignoreFallback({ migrations, installedNxVersion, effectiveCreateCommits, commitPrefix, root, applyWhenPlanned, commitStandalone, }: {
|
|
31
28
|
migrations: ReadonlyArray<{
|
|
32
29
|
package: string;
|
|
33
30
|
name: string;
|
|
@@ -43,4 +40,22 @@ export declare function applyAgenticHandoffGitignoreFallback({ migrations, insta
|
|
|
43
40
|
effectiveCreateCommits: boolean;
|
|
44
41
|
commitPrefix: string;
|
|
45
42
|
root: string;
|
|
43
|
+
/**
|
|
44
|
+
* Apply the entry even when the hoisted migration is in the plan. The
|
|
45
|
+
* classic loop can defer to that migration because its run scratch appears
|
|
46
|
+
* only after migration 1 has run; the orchestrator creates its run dir at
|
|
47
|
+
* init, before any migration, so it needs the entry immediately. A planned
|
|
48
|
+
* migration also means the missing entry is not a conscious removal, so the
|
|
49
|
+
* v23 cutoff does not apply.
|
|
50
|
+
*/
|
|
51
|
+
applyWhenPlanned?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Commit the applied entry as its own preflight commit (the default). The
|
|
54
|
+
* orchestrator suppresses this: it applies the fallback before its init
|
|
55
|
+
* checkpoint so the checkpoint's `git add -A` cannot sweep in older
|
|
56
|
+
* scratch, and in that ordering a standalone commit here would carry the
|
|
57
|
+
* user's pre-existing changes along with the entry. The checkpoint that
|
|
58
|
+
* follows captures both instead.
|
|
59
|
+
*/
|
|
60
|
+
commitStandalone?: boolean;
|
|
46
61
|
}): Promise<void>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isHandoffGitignoreMigration = isHandoffGitignoreMigration;
|
|
4
3
|
exports.applyAgenticHandoffGitignoreFallback = applyAgenticHandoffGitignoreFallback;
|
|
5
4
|
const tslib_1 = require("tslib");
|
|
6
5
|
const semver_1 = require("semver");
|
|
@@ -9,50 +8,42 @@ const add_migrate_runs_to_git_ignore_1 = tslib_1.__importDefault(require("../../
|
|
|
9
8
|
const tree_1 = require("../../../generators/tree");
|
|
10
9
|
const git_utils_1 = require("../../../utils/git-utils");
|
|
11
10
|
const logger_1 = require("../../../utils/logger");
|
|
11
|
+
const types_1 = require("./types");
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
* `.
|
|
15
|
-
*
|
|
16
|
-
* `.nx/migrate-runs/<run-id>/...` scratch out of per-migration commits. If
|
|
17
|
-
* the migration is ever renamed, this entry must move with it.
|
|
18
|
-
*/
|
|
19
|
-
const HANDOFF_GITIGNORE_MIGRATION_PACKAGE = 'nx';
|
|
20
|
-
const HANDOFF_GITIGNORE_MIGRATION_NAME = '23-0-0-add-migrate-runs-to-git-ignore';
|
|
21
|
-
function isHandoffGitignoreMigration(m) {
|
|
22
|
-
return (m.package === HANDOFF_GITIGNORE_MIGRATION_PACKAGE &&
|
|
23
|
-
m.name === HANDOFF_GITIGNORE_MIGRATION_NAME);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Under `--agentic`, the runner writes per-run scratch under
|
|
27
|
-
* `.nx/migrate-runs/<run-id>/`. The v23 migration
|
|
13
|
+
* Both the agentic runner and the orchestrator write per-run scratch under
|
|
14
|
+
* `.nx/migrate-runs/<run-id>/`: handoff files in both cases, plus the durable
|
|
15
|
+
* run state and its plan snapshots for the orchestrator. The v23 migration
|
|
28
16
|
* `23-0-0-add-migrate-runs-to-git-ignore` adds `.nx/migrate-runs` to
|
|
29
|
-
* `.gitignore`;
|
|
30
|
-
*
|
|
31
|
-
* scratch into the user-visible diff.
|
|
17
|
+
* `.gitignore`; in its declared slot (typically late) earlier per-migration
|
|
18
|
+
* commits would absorb the scratch into the user-visible diff.
|
|
32
19
|
*
|
|
33
20
|
* Two paths cover the leak, with no overlap:
|
|
34
21
|
*
|
|
35
|
-
* 1. HOIST
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
22
|
+
* 1. HOIST: `sortMigrations`, which `executeMigrations` applies, sorts the
|
|
23
|
+
* v23 migration to position 0 when it is in the queue, so it runs first
|
|
24
|
+
* through the normal runner with its own log line and commit. A
|
|
25
|
+
* single-migration worker run needs no hoisting: the requested migration
|
|
26
|
+
* is the entire queue.
|
|
39
27
|
*
|
|
40
|
-
* 2. INLINE FALLBACK
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
28
|
+
* 2. INLINE FALLBACK, this function. When the migration is NOT in the queue
|
|
29
|
+
* AND the highest target version is < v23 (intra-pre-v23 `--agentic`
|
|
30
|
+
* run) it will never run, so apply its body inline against an `FsTree`
|
|
31
|
+
* and commit it as a standalone preflight commit (or leave it in the
|
|
32
|
+
* working tree under `--no-create-commits`).
|
|
45
33
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
34
|
+
* Not in the queue AND target >= v23 means the user is already past v23. They
|
|
35
|
+
* had the entry historically; if it is gone, that is a conscious removal we
|
|
36
|
+
* respect.
|
|
49
37
|
*/
|
|
50
|
-
async function applyAgenticHandoffGitignoreFallback({ migrations, installedNxVersion, effectiveCreateCommits, commitPrefix, root, }) {
|
|
51
|
-
if (migrations.some(isHandoffGitignoreMigration)) {
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
async function applyAgenticHandoffGitignoreFallback({ migrations, installedNxVersion, effectiveCreateCommits, commitPrefix, root, applyWhenPlanned = false, commitStandalone = true, }) {
|
|
39
|
+
if (migrations.some(types_1.isHandoffGitignoreMigration)) {
|
|
40
|
+
if (!applyWhenPlanned) {
|
|
41
|
+
// The queue runs it itself: hoisted to the front by the sort comparator
|
|
42
|
+
// in a full run, or as the single requested migration in a worker run.
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
54
45
|
}
|
|
55
|
-
if ((0, semver_1.major)(installedNxVersion) >= 23) {
|
|
46
|
+
else if ((0, semver_1.major)(installedNxVersion) >= 23) {
|
|
56
47
|
// User is past v23. Respect their `.gitignore` state — if the entry
|
|
57
48
|
// is missing, that's a conscious removal.
|
|
58
49
|
return;
|
|
@@ -66,13 +57,13 @@ async function applyAgenticHandoffGitignoreFallback({ migrations, installedNxVer
|
|
|
66
57
|
return;
|
|
67
58
|
}
|
|
68
59
|
(0, tree_1.flushChanges)(root, changes);
|
|
69
|
-
logger_1.logger.info(pc.dim(`- Added .
|
|
70
|
-
if (!effectiveCreateCommits)
|
|
60
|
+
logger_1.logger.info(pc.dim(`- Added ${types_1.MIGRATE_RUNS_RELATIVE_DIR} to .gitignore so this run's scratch state is ignored.`));
|
|
61
|
+
if (!effectiveCreateCommits || !commitStandalone)
|
|
71
62
|
return;
|
|
72
63
|
if (!(0, git_utils_1.hasUncommittedChanges)(root))
|
|
73
64
|
return;
|
|
74
65
|
try {
|
|
75
|
-
const sha = (0, git_utils_1.tryCommitChanges)(`${commitPrefix}add .
|
|
66
|
+
const sha = (0, git_utils_1.tryCommitChanges)(`${commitPrefix}add ${types_1.MIGRATE_RUNS_RELATIVE_DIR} to .gitignore`, root, [types_1.MIGRATE_RUNS_RELATIVE_DIR]);
|
|
76
67
|
if (sha) {
|
|
77
68
|
logger_1.logger.info(pc.dim(` Commit: ${sha}`));
|
|
78
69
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { HandoffFile } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Workspace-relative directory holding all migrate-run scratch (handoff
|
|
4
|
-
* files). Shared with the agent permission rules in `definitions.ts` so the
|
|
5
|
-
* pre-authorized write scope can't drift from the actual layout.
|
|
6
|
-
*/
|
|
7
|
-
export declare const MIGRATE_RUNS_RELATIVE_DIR = ".nx/migrate-runs";
|
|
8
2
|
/** Returns the run directory for a given workspace + run id (target version). */
|
|
9
3
|
export declare function runDirPath(workspaceRoot: string, runId: string): string;
|
|
4
|
+
/** The version-derived run id: the highest target version in the plan. */
|
|
5
|
+
export declare function resolveAgenticRunId(migrations: ReadonlyArray<{
|
|
6
|
+
version: string;
|
|
7
|
+
}>): string;
|
|
10
8
|
/**
|
|
11
9
|
* `mkdir -p` with a contextual error wrapper. Without this, the raw
|
|
12
10
|
* ENOSPC/EACCES/EROFS surfaces with no indication of which directory the
|
|
@@ -22,7 +20,9 @@ export declare function mkdirSafely(dir: string, purpose: string): void;
|
|
|
22
20
|
*/
|
|
23
21
|
export declare function initRunDir(workspaceRoot: string, runId: string): string;
|
|
24
22
|
/**
|
|
25
|
-
* Absolute path of the handoff file for a migration step within a run
|
|
23
|
+
* Absolute path of the handoff file for a migration step within a run, under
|
|
24
|
+
* the run directory's `handoffs/` subtree: the pre-authorized write scope
|
|
25
|
+
* stops there, so a handoff placed anywhere else costs an approval prompt.
|
|
26
26
|
* The package's scope (if any) becomes a real subdirectory so the package name
|
|
27
27
|
* stays readable; two packages can ship a migration with the same name without
|
|
28
28
|
* colliding because they land in different package subdirectories. Each
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MIGRATE_RUNS_RELATIVE_DIR = void 0;
|
|
4
3
|
exports.runDirPath = runDirPath;
|
|
4
|
+
exports.resolveAgenticRunId = resolveAgenticRunId;
|
|
5
5
|
exports.mkdirSafely = mkdirSafely;
|
|
6
6
|
exports.initRunDir = initRunDir;
|
|
7
7
|
exports.stepHandoffPath = stepHandoffPath;
|
|
@@ -10,15 +10,16 @@ exports.readHandoff = readHandoff;
|
|
|
10
10
|
exports.waitForValidHandoff = waitForValidHandoff;
|
|
11
11
|
const fs_1 = require("fs");
|
|
12
12
|
const path_1 = require("path");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* pre-authorized write scope can't drift from the actual layout.
|
|
17
|
-
*/
|
|
18
|
-
exports.MIGRATE_RUNS_RELATIVE_DIR = '.nx/migrate-runs';
|
|
13
|
+
const semver_1 = require("semver");
|
|
14
|
+
const version_utils_1 = require("../version-utils");
|
|
15
|
+
const types_1 = require("./types");
|
|
19
16
|
/** Returns the run directory for a given workspace + run id (target version). */
|
|
20
17
|
function runDirPath(workspaceRoot, runId) {
|
|
21
|
-
return (0, path_1.join)(workspaceRoot,
|
|
18
|
+
return (0, path_1.join)(workspaceRoot, types_1.MIGRATE_RUNS_RELATIVE_DIR, runId);
|
|
19
|
+
}
|
|
20
|
+
/** The version-derived run id: the highest target version in the plan. */
|
|
21
|
+
function resolveAgenticRunId(migrations) {
|
|
22
|
+
return (0, semver_1.rsort)(migrations.map((m) => (0, version_utils_1.normalizeVersion)(m.version)))[0];
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* `mkdir -p` with a contextual error wrapper. Without this, the raw
|
|
@@ -71,14 +72,16 @@ function sanitizeSegment(value) {
|
|
|
71
72
|
return sanitized || '_';
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
74
|
-
* Absolute path of the handoff file for a migration step within a run
|
|
75
|
+
* Absolute path of the handoff file for a migration step within a run, under
|
|
76
|
+
* the run directory's `handoffs/` subtree: the pre-authorized write scope
|
|
77
|
+
* stops there, so a handoff placed anywhere else costs an approval prompt.
|
|
75
78
|
* The package's scope (if any) becomes a real subdirectory so the package name
|
|
76
79
|
* stays readable; two packages can ship a migration with the same name without
|
|
77
80
|
* colliding because they land in different package subdirectories. Each
|
|
78
81
|
* segment is sanitized so the path is always writable on every platform.
|
|
79
82
|
*/
|
|
80
83
|
function stepHandoffPath(runDir, migration) {
|
|
81
|
-
return (0, path_1.join)(runDir, ...migration.package.split('/').map(sanitizeSegment), `${sanitizeSegment(migration.name)}.json`);
|
|
84
|
+
return (0, path_1.join)(runDir, types_1.HANDOFFS_DIR_NAME, ...migration.package.split('/').map(sanitizeSegment), `${sanitizeSegment(migration.name)}.json`);
|
|
82
85
|
}
|
|
83
86
|
/**
|
|
84
87
|
* Reads and validates a handoff file written by an agent. Returns a tagged
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Surfaces a migration's `agentContext` to stdout in an XML-tagged block so an
|
|
3
|
-
* outer AI agent driving `nx migrate` can ingest the hints when no inner agent
|
|
4
|
-
* step ran to consume them.
|
|
5
|
-
*
|
|
6
|
-
* Used only when `agentic.kind === 'inside-agent'`. Under `enabled`, the inner
|
|
7
|
-
* step consumes `agentContext` via the prompt builders. Under `disabled` the
|
|
8
|
-
* run is human-driven and printing agent-targeted context would only add noise.
|
|
9
|
-
*
|
|
10
|
-
* The label format is unambiguous so the outer agent can locate the block
|
|
11
|
-
* within the mixed stdout stream (logger output, migration progress, etc.).
|
|
12
|
-
*/
|
|
13
1
|
export interface DroppedAgentContextInput {
|
|
14
2
|
migration: {
|
|
15
3
|
package: string;
|
|
@@ -19,4 +7,11 @@ export interface DroppedAgentContextInput {
|
|
|
19
7
|
agentContext: string[];
|
|
20
8
|
}
|
|
21
9
|
export declare function formatDroppedAgentContextForOuterAgent(input: DroppedAgentContextInput): string;
|
|
10
|
+
export declare function escapeXmlAttr(value: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Both the classic loop and the single-migration worker call this only under
|
|
13
|
+
* `agentic.kind === 'inside-agent'`. Under `enabled` the inner agent step
|
|
14
|
+
* consumes `agentContext` through the prompt builders; under `disabled` the
|
|
15
|
+
* run is human-driven and agent-targeted context is only noise.
|
|
16
|
+
*/
|
|
22
17
|
export declare function printDroppedAgentContextForOuterAgent(input: DroppedAgentContextInput): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatDroppedAgentContextForOuterAgent = formatDroppedAgentContextForOuterAgent;
|
|
4
|
+
exports.escapeXmlAttr = escapeXmlAttr;
|
|
4
5
|
exports.printDroppedAgentContextForOuterAgent = printDroppedAgentContextForOuterAgent;
|
|
5
6
|
const shared_rendering_1 = require("./prompts/shared-rendering");
|
|
6
7
|
function formatDroppedAgentContextForOuterAgent(input) {
|
|
@@ -40,6 +41,12 @@ function escapeXmlAttr(value) {
|
|
|
40
41
|
.replace(/"/g, '"')
|
|
41
42
|
.replace(/'/g, ''');
|
|
42
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Both the classic loop and the single-migration worker call this only under
|
|
46
|
+
* `agentic.kind === 'inside-agent'`. Under `enabled` the inner agent step
|
|
47
|
+
* consumes `agentContext` through the prompt builders; under `disabled` the
|
|
48
|
+
* run is human-driven and agent-targeted context is only noise.
|
|
49
|
+
*/
|
|
43
50
|
function printDroppedAgentContextForOuterAgent(input) {
|
|
44
51
|
const block = formatDroppedAgentContextForOuterAgent(input);
|
|
45
52
|
if (block) {
|