@depup/nx 23.2.1-depup.8 → 23.3.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.
Files changed (350) hide show
  1. package/README.md +7 -18
  2. package/changes.json +9 -53
  3. package/dist/bin/init-local.js +7 -1
  4. package/dist/nx-cloud-internals.d.ts +1 -0
  5. package/dist/nx-cloud-internals.js +9 -0
  6. package/dist/plugins/package-json.js +1 -1
  7. package/dist/src/command-line/add/add.js +5 -1
  8. package/dist/src/command-line/affected/affected.js +70 -9
  9. package/dist/src/command-line/affected/command-object.js +1 -1
  10. package/dist/src/command-line/format/format.js +2 -18
  11. package/dist/src/command-line/graph/graph.d.ts +31 -0
  12. package/dist/src/command-line/graph/graph.js +113 -20
  13. package/dist/src/command-line/init/implementation/add-nx-to-monorepo.js +0 -3
  14. package/dist/src/command-line/init/implementation/add-nx-to-nest.js +0 -3
  15. package/dist/src/command-line/init/implementation/add-nx-to-npm-repo.js +0 -3
  16. package/dist/src/command-line/init/implementation/angular/index.js +0 -3
  17. package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +0 -3
  18. package/dist/src/command-line/init/implementation/format.js +2 -3
  19. package/dist/src/command-line/init/implementation/utils.d.ts +0 -1
  20. package/dist/src/command-line/init/implementation/utils.js +6 -9
  21. package/dist/src/command-line/init/init-v2.js +0 -3
  22. package/dist/src/command-line/migrate/agentic/capture-generator-output.d.ts +25 -0
  23. package/dist/src/command-line/migrate/agentic/capture-generator-output.js +121 -5
  24. package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +21 -0
  25. package/dist/src/command-line/migrate/agentic/close-agent-session.js +126 -0
  26. package/dist/src/command-line/migrate/agentic/definitions.d.ts +24 -0
  27. package/dist/src/command-line/migrate/agentic/definitions.js +79 -20
  28. package/dist/src/command-line/migrate/agentic/format-command.d.ts +14 -0
  29. package/dist/src/command-line/migrate/agentic/format-command.js +44 -0
  30. package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +3 -3
  31. package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +3 -3
  32. package/dist/src/command-line/migrate/agentic/handoff.d.ts +50 -17
  33. package/dist/src/command-line/migrate/agentic/handoff.js +166 -24
  34. package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +23 -0
  35. package/dist/src/command-line/migrate/agentic/instruction-files.js +41 -0
  36. package/dist/src/command-line/migrate/agentic/master/invocations.d.ts +12 -0
  37. package/dist/src/command-line/migrate/agentic/master/invocations.js +54 -0
  38. package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +16 -0
  39. package/dist/src/command-line/migrate/agentic/master/run-master-session.js +175 -0
  40. package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +31 -0
  41. package/dist/src/command-line/migrate/agentic/master/spawn-master.js +222 -0
  42. package/dist/src/command-line/migrate/agentic/prompts/final-validation.d.ts +13 -0
  43. package/dist/src/command-line/migrate/agentic/prompts/final-validation.js +41 -0
  44. package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +17 -0
  45. package/dist/src/command-line/migrate/agentic/prompts/fragments.js +90 -0
  46. package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +4 -3
  47. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +25 -1
  48. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +57 -34
  49. package/dist/src/command-line/migrate/agentic/run-step.js +28 -4
  50. package/dist/src/command-line/migrate/agentic/runner.d.ts +3 -15
  51. package/dist/src/command-line/migrate/agentic/runner.js +57 -239
  52. package/dist/src/command-line/migrate/agentic/terminal-repair.d.ts +1 -0
  53. package/dist/src/command-line/migrate/agentic/terminal-repair.js +27 -0
  54. package/dist/src/command-line/migrate/agentic/types.d.ts +23 -8
  55. package/dist/src/command-line/migrate/agentic/types.js +10 -7
  56. package/dist/src/command-line/migrate/agentic/windows-cmd.d.ts +33 -0
  57. package/dist/src/command-line/migrate/agentic/windows-cmd.js +88 -0
  58. package/dist/src/command-line/migrate/command-object.d.ts +2 -0
  59. package/dist/src/command-line/migrate/command-object.js +11 -1
  60. package/dist/src/command-line/migrate/deferred-output.d.ts +44 -0
  61. package/dist/src/command-line/migrate/deferred-output.js +92 -0
  62. package/dist/src/command-line/migrate/execute-migration.d.ts +9 -3
  63. package/dist/src/command-line/migrate/execute-migration.js +53 -16
  64. package/dist/src/command-line/migrate/migrate-analytics.d.ts +34 -9
  65. package/dist/src/command-line/migrate/migrate-analytics.js +71 -10
  66. package/dist/src/command-line/migrate/migrate-commits.d.ts +5 -4
  67. package/dist/src/command-line/migrate/migrate-commits.js +16 -6
  68. package/dist/src/command-line/migrate/migrate-config.d.ts +5 -2
  69. package/dist/src/command-line/migrate/migrate-config.js +19 -11
  70. package/dist/src/command-line/migrate/migrate-output.d.ts +3 -7
  71. package/dist/src/command-line/migrate/migrate-output.js +3 -7
  72. package/dist/src/command-line/migrate/migrate.d.ts +3 -0
  73. package/dist/src/command-line/migrate/migrate.js +183 -46
  74. package/dist/src/command-line/migrate/resolve-package-version.js +2 -19
  75. package/dist/src/command-line/migrate/run/agent-output.d.ts +11 -0
  76. package/dist/src/command-line/migrate/run/agent-output.js +21 -2
  77. package/dist/src/command-line/migrate/run/agent-work-payload.d.ts +37 -0
  78. package/dist/src/command-line/migrate/run/agent-work-payload.js +156 -0
  79. package/dist/src/command-line/migrate/run/atomic-write.d.ts +8 -0
  80. package/dist/src/command-line/migrate/run/atomic-write.js +17 -0
  81. package/dist/src/command-line/migrate/run/broker.d.ts +150 -0
  82. package/dist/src/command-line/migrate/run/broker.js +568 -0
  83. package/dist/src/command-line/migrate/run/clean-retry.d.ts +12 -0
  84. package/dist/src/command-line/migrate/run/clean-retry.js +99 -0
  85. package/dist/src/command-line/migrate/run/existing-run-report.d.ts +55 -0
  86. package/dist/src/command-line/migrate/run/existing-run-report.js +227 -0
  87. package/dist/src/command-line/migrate/run/give-up.d.ts +41 -0
  88. package/dist/src/command-line/migrate/run/give-up.js +148 -0
  89. package/dist/src/command-line/migrate/run/index.d.ts +9 -6
  90. package/dist/src/command-line/migrate/run/index.js +21 -2
  91. package/dist/src/command-line/migrate/run/issues.d.ts +127 -0
  92. package/dist/src/command-line/migrate/run/issues.js +1121 -0
  93. package/dist/src/command-line/migrate/run/orchestrator.d.ts +59 -1
  94. package/dist/src/command-line/migrate/run/orchestrator.js +1529 -457
  95. package/dist/src/command-line/migrate/run/run-id.d.ts +0 -8
  96. package/dist/src/command-line/migrate/run/run-id.js +0 -30
  97. package/dist/src/command-line/migrate/run/run-state.d.ts +77 -17
  98. package/dist/src/command-line/migrate/run/run-state.js +263 -32
  99. package/dist/src/command-line/migrate/run/runbook.d.ts +18 -0
  100. package/dist/src/command-line/migrate/run/runbook.js +118 -0
  101. package/dist/src/command-line/migrate/run/state-lock.d.ts +33 -2
  102. package/dist/src/command-line/migrate/run/state-lock.js +128 -2
  103. package/dist/src/command-line/migrate/run/state-machine.d.ts +50 -1
  104. package/dist/src/command-line/migrate/run/state-machine.js +339 -26
  105. package/dist/src/command-line/migrate/run/util.d.ts +3 -1
  106. package/dist/src/command-line/migrate/run/util.js +24 -3
  107. package/dist/src/command-line/migrate/run/worker.js +290 -129
  108. package/dist/src/command-line/migrate/step-actions.d.ts +1 -1
  109. package/dist/src/command-line/migrate/step-actions.js +7 -1
  110. package/dist/src/command-line/migrate/text.d.ts +6 -0
  111. package/dist/src/command-line/migrate/text.js +25 -0
  112. package/dist/src/command-line/migrate/version-skew-guard.js +2 -0
  113. package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +5 -11
  114. package/dist/src/command-line/release/publish.js +11 -8
  115. package/dist/src/command-line/release/utils/get-touched-projects-for-group.js +3 -3
  116. package/dist/src/command-line/release/utils/release-graph.js +1 -1
  117. package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -8
  118. package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +3 -3
  119. package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.d.ts +4 -2
  120. package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.js +37 -3
  121. package/dist/src/command-line/release/version/version-actions.d.ts +3 -0
  122. package/dist/src/command-line/reset/reset.js +10 -4
  123. package/dist/src/command-line/run/run-one.js +5 -1
  124. package/dist/src/command-line/run-many/run-many.js +6 -12
  125. package/dist/src/command-line/show/command-object.js +1 -1
  126. package/dist/src/command-line/show/projects.js +52 -1
  127. package/dist/src/command-line/yargs-utils/shared-options.d.ts +5 -1
  128. package/dist/src/command-line/yargs-utils/shared-options.js +38 -4
  129. package/dist/src/config/task-graph.d.ts +1 -1
  130. package/dist/src/config/workspace-json-project-json.d.ts +23 -1
  131. package/dist/src/core/graph/main.js +1 -1
  132. package/dist/src/core/graph/runtime.js +1 -1
  133. package/dist/src/core/graph/styles.js +1 -1
  134. package/dist/src/daemon/client/client.d.ts +14 -8
  135. package/dist/src/daemon/client/client.js +41 -12
  136. package/dist/src/daemon/message-types/get-plugin-capabilities.d.ts +5 -0
  137. package/dist/src/daemon/message-types/get-plugin-capabilities.js +11 -0
  138. package/dist/src/daemon/message-types/run-tasks-execution-hooks.d.ts +3 -2
  139. package/dist/src/daemon/message-types/select-affected-tasks.d.ts +21 -0
  140. package/dist/src/daemon/message-types/select-affected-tasks.js +11 -0
  141. package/dist/src/daemon/message-types/ultracache-configuration-version.d.ts +8 -0
  142. package/dist/src/daemon/message-types/ultracache-configuration-version.js +2 -0
  143. package/dist/src/daemon/server/dotenv-graph-changes.d.ts +1 -1
  144. package/dist/src/daemon/server/dotenv-graph-changes.js +2 -2
  145. package/dist/src/daemon/server/handle-get-plugin-capabilities.d.ts +2 -0
  146. package/dist/src/daemon/server/handle-get-plugin-capabilities.js +13 -0
  147. package/dist/src/daemon/server/handle-hash-tasks.d.ts +10 -2
  148. package/dist/src/daemon/server/handle-hash-tasks.js +18 -3
  149. package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +3 -0
  150. package/dist/src/daemon/server/handle-select-affected-tasks.js +26 -0
  151. package/dist/src/daemon/server/handle-tasks-execution-hooks.d.ts +3 -2
  152. package/dist/src/daemon/server/{handle-outputs-changes.d.ts → handle-watch-events.d.ts} +4 -4
  153. package/dist/src/daemon/server/{handle-outputs-changes.js → handle-watch-events.js} +36 -37
  154. package/dist/src/daemon/server/outputs-tracking.d.ts +7 -19
  155. package/dist/src/daemon/server/outputs-tracking.js +7 -107
  156. package/dist/src/daemon/server/planning-context.d.ts +8 -0
  157. package/dist/src/daemon/server/planning-context.js +18 -0
  158. package/dist/src/daemon/server/project-graph-incremental-recomputation.d.ts +22 -7
  159. package/dist/src/daemon/server/project-graph-incremental-recomputation.js +104 -74
  160. package/dist/src/daemon/server/restart-checks.d.ts +22 -0
  161. package/dist/src/daemon/server/restart-checks.js +77 -0
  162. package/dist/src/daemon/server/server.d.ts +1 -0
  163. package/dist/src/daemon/server/server.js +54 -30
  164. package/dist/src/daemon/server/shutdown-utils.d.ts +0 -5
  165. package/dist/src/daemon/server/shutdown-utils.js +3 -26
  166. package/dist/src/daemon/server/ultracache-configuration-state.d.ts +7 -0
  167. package/dist/src/daemon/server/ultracache-configuration-state.js +36 -0
  168. package/dist/src/devkit-internals.d.ts +3 -1
  169. package/dist/src/devkit-internals.js +8 -3
  170. package/dist/src/executors/run-commands/run-commands.impl.d.ts +2 -1
  171. package/dist/src/executors/run-commands/run-commands.impl.js +19 -5
  172. package/dist/src/executors/run-commands/running-tasks.d.ts +5 -4
  173. package/dist/src/executors/run-commands/running-tasks.js +13 -13
  174. package/dist/src/hasher/create-task-hasher.d.ts +8 -1
  175. package/dist/src/hasher/create-task-hasher.js +13 -3
  176. package/dist/src/hasher/hash-plan-inspector.js +2 -2
  177. package/dist/src/hasher/hash-task.d.ts +2 -2
  178. package/dist/src/hasher/hash-task.js +28 -17
  179. package/dist/src/hasher/native-task-hasher-impl.d.ts +20 -4
  180. package/dist/src/hasher/native-task-hasher-impl.js +75 -9
  181. package/dist/src/hasher/task-hasher.d.ts +24 -7
  182. package/dist/src/hasher/task-hasher.js +27 -8
  183. package/dist/src/hasher/task-planning-context.d.ts +13 -0
  184. package/dist/src/hasher/task-planning-context.js +12 -0
  185. package/dist/src/native/index.d.ts +582 -21
  186. package/dist/src/native/index.js +3 -3
  187. package/dist/src/native/native-bindings.js +13 -1
  188. package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
  189. package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
  190. package/dist/src/native/transform-objects.d.ts +11 -2
  191. package/dist/src/native/transform-objects.js +46 -0
  192. package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +15 -8
  193. package/dist/src/nx-cloud/update-manager.d.ts +3 -0
  194. package/dist/src/nx-cloud/update-manager.js +19 -13
  195. package/dist/src/nx-cloud/utilities/client.d.ts +1 -1
  196. package/dist/src/nx-cloud/utilities/client.js +1 -1
  197. package/dist/src/nx-cloud/utilities/is-workspace-claimed.js +2 -1
  198. package/dist/src/nx-cloud/utilities/nx-cloud-http-client.d.ts +5 -0
  199. package/dist/src/nx-cloud/utilities/nx-cloud-http-client.js +16 -0
  200. package/dist/src/nx-cloud/utilities/url-shorten.js +17 -10
  201. package/dist/src/plugins/js/index.js +45 -64
  202. package/dist/src/plugins/js/lock-file/lock-file.d.ts +4 -4
  203. package/dist/src/plugins/js/lock-file/lock-file.js +6 -7
  204. package/dist/src/plugins/js/lock-file/pnpm-parser.js +1 -1
  205. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +2 -0
  206. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.js +22 -0
  207. package/dist/src/plugins/js/project-graph/affected/lock-file-changes.d.ts +10 -2
  208. package/dist/src/plugins/js/project-graph/affected/lock-file-changes.js +51 -29
  209. package/dist/src/plugins/js/project-graph/affected/npm-packages.d.ts +10 -2
  210. package/dist/src/plugins/js/project-graph/affected/npm-packages.js +32 -11
  211. package/dist/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +22 -18
  212. package/dist/src/plugins/js/utils/register.js +13 -4
  213. package/dist/src/plugins/package-json/create-nodes.d.ts +2 -2
  214. package/dist/src/plugins/package-json/create-nodes.js +13 -13
  215. package/dist/src/project-graph/affected/affected-project-graph-models.d.ts +14 -0
  216. package/dist/src/project-graph/affected/affected-project-graph.js +5 -18
  217. package/dist/src/project-graph/affected/affected-projects.d.ts +7 -0
  218. package/dist/src/project-graph/affected/affected-projects.js +42 -0
  219. package/dist/src/project-graph/affected/affected-reasons.d.ts +116 -0
  220. package/dist/src/project-graph/affected/affected-reasons.js +459 -0
  221. package/dist/src/project-graph/affected/affected-tasks.d.ts +103 -0
  222. package/dist/src/project-graph/affected/affected-tasks.js +386 -0
  223. package/dist/src/project-graph/affected/print-explanation.d.ts +11 -0
  224. package/dist/src/project-graph/affected/print-explanation.js +44 -0
  225. package/dist/src/project-graph/error-types.d.ts +5 -0
  226. package/dist/src/project-graph/error-types.js +44 -5
  227. package/dist/src/project-graph/file-utils.d.ts +2 -0
  228. package/dist/src/project-graph/file-utils.js +12 -3
  229. package/dist/src/project-graph/nx-deps-cache.d.ts +5 -2
  230. package/dist/src/project-graph/nx-deps-cache.js +4 -4
  231. package/dist/src/project-graph/plugins/get-plugins.d.ts +3 -1
  232. package/dist/src/project-graph/plugins/get-plugins.js +60 -82
  233. package/dist/src/project-graph/plugins/in-process-loader.d.ts +1 -1
  234. package/dist/src/project-graph/plugins/in-process-loader.js +1 -4
  235. package/dist/src/project-graph/plugins/isolation/index.d.ts +1 -1
  236. package/dist/src/project-graph/plugins/isolation/index.js +3 -1
  237. package/dist/src/project-graph/plugins/isolation/isolated-plugin.d.ts +8 -0
  238. package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +42 -6
  239. package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.d.ts +10 -1
  240. package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.js +67 -17
  241. package/dist/src/project-graph/plugins/isolation/messaging.d.ts +3 -2
  242. package/dist/src/project-graph/plugins/isolation/plugin-worker.js +5 -1
  243. package/dist/src/project-graph/plugins/loaded-nx-plugin.d.ts +5 -2
  244. package/dist/src/project-graph/plugins/loaded-nx-plugin.js +14 -1
  245. package/dist/src/project-graph/plugins/nx-plugin-capabilities.d.ts +6 -0
  246. package/dist/src/project-graph/plugins/nx-plugin-capabilities.js +28 -0
  247. package/dist/src/project-graph/plugins/task-results-stub.d.ts +50 -0
  248. package/dist/src/project-graph/plugins/task-results-stub.js +111 -0
  249. package/dist/src/project-graph/plugins/tasks-execution-hooks.d.ts +3 -2
  250. package/dist/src/project-graph/plugins/tasks-execution-hooks.js +14 -1
  251. package/dist/src/project-graph/project-graph.js +43 -42
  252. package/dist/src/project-graph/utils/project-configuration/target-merging.js +67 -0
  253. package/dist/src/project-graph/utils/project-configuration/target-normalization.js +83 -0
  254. package/dist/src/project-graph/utils/project-configuration/utils.d.ts +1 -0
  255. package/dist/src/project-graph/utils/project-configuration/utils.js +1 -0
  256. package/dist/src/tasks-runner/batch/run-batch.js +15 -0
  257. package/dist/src/tasks-runner/cache.d.ts +37 -2
  258. package/dist/src/tasks-runner/cache.js +42 -1
  259. package/dist/src/tasks-runner/create-task-graph.d.ts +24 -1
  260. package/dist/src/tasks-runner/create-task-graph.js +57 -2
  261. package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
  262. package/dist/src/tasks-runner/forked-process-task-runner.d.ts +1 -1
  263. package/dist/src/tasks-runner/forked-process-task-runner.js +11 -10
  264. package/dist/src/tasks-runner/init-tasks-runner.d.ts +7 -2
  265. package/dist/src/tasks-runner/init-tasks-runner.js +15 -7
  266. package/dist/src/tasks-runner/is-tui-enabled.js +4 -3
  267. package/dist/src/tasks-runner/life-cycle.d.ts +7 -0
  268. package/dist/src/tasks-runner/life-cycle.js +7 -0
  269. package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.d.ts +35 -0
  270. package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +146 -0
  271. package/dist/src/tasks-runner/prune-task-graph.d.ts +17 -0
  272. package/dist/src/tasks-runner/prune-task-graph.js +45 -0
  273. package/dist/src/tasks-runner/run-command.d.ts +41 -5
  274. package/dist/src/tasks-runner/run-command.js +98 -22
  275. package/dist/src/tasks-runner/running-tasks/batch-process.d.ts +93 -19
  276. package/dist/src/tasks-runner/running-tasks/batch-process.js +184 -88
  277. package/dist/src/tasks-runner/task-io-service.d.ts +11 -3
  278. package/dist/src/tasks-runner/task-io-service.js +14 -5
  279. package/dist/src/tasks-runner/task-orchestrator.d.ts +71 -4
  280. package/dist/src/tasks-runner/task-orchestrator.js +266 -66
  281. package/dist/src/tasks-runner/tasks-runner.d.ts +2 -0
  282. package/dist/src/tasks-runner/terminal-output-path.d.ts +11 -0
  283. package/dist/src/tasks-runner/terminal-output-path.js +18 -0
  284. package/dist/src/tasks-runner/utils.d.ts +5 -0
  285. package/dist/src/tasks-runner/utils.js +14 -2
  286. package/dist/src/ultracache/config.d.ts +21 -0
  287. package/dist/src/ultracache/config.js +29 -0
  288. package/dist/src/ultracache/fetch.d.ts +21 -0
  289. package/dist/src/ultracache/fetch.js +43 -0
  290. package/dist/src/ultracache/overrides.d.ts +17 -0
  291. package/dist/src/ultracache/overrides.js +61 -0
  292. package/dist/src/ultracache/report.d.ts +13 -0
  293. package/dist/src/ultracache/report.js +62 -0
  294. package/dist/src/ultracache/store.d.ts +41 -0
  295. package/dist/src/ultracache/store.js +158 -0
  296. package/dist/src/utils/ab-testing.d.ts +4 -1
  297. package/dist/src/utils/ab-testing.js +22 -19
  298. package/dist/src/utils/chunkify.d.ts +1 -7
  299. package/dist/src/utils/chunkify.js +2 -8
  300. package/dist/src/utils/command-line-utils.d.ts +20 -0
  301. package/dist/src/utils/command-line-utils.js +10 -3
  302. package/dist/src/utils/create-cli-options.d.ts +6 -0
  303. package/dist/src/utils/create-cli-options.js +29 -0
  304. package/dist/src/utils/db-connection.d.ts +2 -0
  305. package/dist/src/utils/db-connection.js +2 -0
  306. package/dist/src/utils/formatters/index.d.ts +6 -0
  307. package/dist/src/utils/formatters/index.js +5 -0
  308. package/dist/src/utils/formatters/prettier.d.ts +0 -8
  309. package/dist/src/utils/formatters/prettier.js +4 -26
  310. package/dist/src/utils/git-utils.d.ts +19 -0
  311. package/dist/src/utils/git-utils.js +97 -39
  312. package/dist/src/utils/handle-errors.js +5 -43
  313. package/dist/src/utils/http-client.d.ts +27 -0
  314. package/dist/src/utils/http-client.js +193 -0
  315. package/dist/src/utils/installed-nx-version.js +2 -48
  316. package/dist/src/utils/json-diff.d.ts +4 -2
  317. package/dist/src/utils/json-diff.js +6 -94
  318. package/dist/src/utils/min-release-age/packument.js +1 -1
  319. package/dist/src/utils/nx-cloud-utils.d.ts +2 -0
  320. package/dist/src/utils/nx-cloud-utils.js +6 -1
  321. package/dist/src/utils/output.d.ts +22 -3
  322. package/dist/src/utils/output.js +28 -5
  323. package/dist/src/utils/package-json.d.ts +25 -0
  324. package/dist/src/utils/package-json.js +49 -6
  325. package/dist/src/utils/package-manager.d.ts +6 -0
  326. package/dist/src/utils/package-manager.js +10 -0
  327. package/dist/src/utils/plugins/plugin-capabilities.js +7 -2
  328. package/dist/src/utils/project-graph-utils.d.ts +2 -0
  329. package/dist/src/utils/project-graph-utils.js +12 -0
  330. package/dist/src/utils/provenance.js +20 -4
  331. package/dist/src/utils/serialize-overrides-into-command-line.js +2 -4
  332. package/dist/src/utils/workspace-context.d.ts +51 -3
  333. package/dist/src/utils/workspace-context.js +174 -10
  334. package/package.json +36 -98
  335. package/schemas/nx-schema.json +38 -0
  336. package/schemas/project-schema.json +35 -0
  337. package/dist/src/daemon/server/file-watching/route-workspace-changes.d.ts +0 -9
  338. package/dist/src/daemon/server/file-watching/route-workspace-changes.js +0 -76
  339. package/dist/src/daemon/server/watcher.d.ts +0 -18
  340. package/dist/src/daemon/server/watcher.js +0 -126
  341. package/dist/src/nx-cloud/utilities/axios.d.ts +0 -4
  342. package/dist/src/nx-cloud/utilities/axios.js +0 -17
  343. package/dist/src/project-graph/affected/locators/project-glob-changes.d.ts +0 -2
  344. package/dist/src/project-graph/affected/locators/project-glob-changes.js +0 -47
  345. package/dist/src/project-graph/affected/locators/workspace-json-changes.d.ts +0 -4
  346. package/dist/src/project-graph/affected/locators/workspace-json-changes.js +0 -47
  347. package/dist/src/project-graph/affected/locators/workspace-projects.d.ts +0 -3
  348. package/dist/src/project-graph/affected/locators/workspace-projects.js +0 -74
  349. package/dist/src/utils/collapse-expanded-outputs.d.ts +0 -10
  350. package/dist/src/utils/collapse-expanded-outputs.js +0 -72
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WINDOWS_COMMAND_LINE_BUDGET = exports.WINDOWS_COMMAND_LINE_LIMIT = void 0;
4
+ exports.quoteCmdArg = quoteCmdArg;
5
+ exports.caretEscape = caretEscape;
6
+ exports.neutralizePercent = neutralizePercent;
7
+ exports.withinCommandLineBudget = withinCommandLineBudget;
8
+ exports.adaptSpawnForWindowsShim = adaptSpawnForWindowsShim;
9
+ const path_1 = require("path");
10
+ // Backslash-escape embedded quotes per MS C runtime convention, then wrap in
11
+ // quotes. Callers caret-escape cmd.exe metacharacters on top.
12
+ function quoteCmdArg(arg) {
13
+ return `"${arg.replace(/(\\*)"/g, '$1$1\\"').replace(/(\\*)$/, '$1$1')}"`;
14
+ }
15
+ const CMD_META_CHARS = /([()\][!^"`<>&|;, ])/g;
16
+ function caretEscape(quoted) {
17
+ return quoted.replace(CMD_META_CHARS, '^$1');
18
+ }
19
+ /**
20
+ * Stops cmd.exe expanding `%VAR%` inside an argument. A caret cannot escape
21
+ * `%`, since expansion runs before caret processing, so each `%` becomes
22
+ * `%%cd:~,%`: `%cd:~,%` is a zero-length substring of a built-in and expands to
23
+ * nothing, leaving the leading `%`. Runs after the caret passes so the `,` it
24
+ * introduces stays uncareted, which the substring syntax requires.
25
+ */
26
+ function neutralizePercent(escaped) {
27
+ return escaped.replace(/%/g, '%%cd:~,%');
28
+ }
29
+ // "The maximum length of the string that you can use at the command prompt is
30
+ // 8191 characters".
31
+ // https://learn.microsoft.com/troubleshoot/windows-client/shell-experience/command-line-string-limitation
32
+ exports.WINDOWS_COMMAND_LINE_LIMIT = 8191;
33
+ // Absorbs cmd.exe's own accounting of the string, which cannot be measured
34
+ // from here.
35
+ const WINDOWS_COMMAND_LINE_RESERVE = 1000;
36
+ exports.WINDOWS_COMMAND_LINE_BUDGET = exports.WINDOWS_COMMAND_LINE_LIMIT - WINDOWS_COMMAND_LINE_RESERVE;
37
+ function withinCommandLineBudget(adapted) {
38
+ return (adapted.commandLineLength === undefined ||
39
+ adapted.commandLineLength <= exports.WINDOWS_COMMAND_LINE_BUDGET);
40
+ }
41
+ /**
42
+ * Node's `spawn` cannot directly execute `.cmd` / `.bat` shims on Windows;
43
+ * `which` resolves to those when an agent was installed via npm. Wrap them in
44
+ * a `cmd.exe /c` invocation with `windowsVerbatimArguments` so quoting follows
45
+ * the cmd.exe convention rather than Node's default cooking.
46
+ *
47
+ * On non-Windows or for non-shim binaries this is a passthrough.
48
+ */
49
+ function adaptSpawnForWindowsShim(binary, args, options) {
50
+ if (process.platform !== 'win32') {
51
+ return { binary, args: [...args], options };
52
+ }
53
+ const ext = (0, path_1.extname)(binary).toLowerCase();
54
+ if (ext !== '.cmd' && ext !== '.bat') {
55
+ return { binary, args: [...args], options };
56
+ }
57
+ assertNoLineBreaks(binary, args);
58
+ const cmdLine = [escapeCmdCommand(binary), ...args.map(escapeCmdArg)].join(' ');
59
+ const comspec = process.env.comspec || 'cmd.exe';
60
+ // Both modes are set rather than inherited, since a machine-wide registry
61
+ // setting can flip either: `/e:on` for the `%cd:~,%` substring, `/v:off` so a
62
+ // `!` stays literal. The outer quotes stop `cmd.exe /c` stripping the inner
63
+ // ones around the binary path.
64
+ const cmdArgs = ['/e:on', '/v:off', '/d', '/s', '/c', `"${cmdLine}"`];
65
+ return {
66
+ binary: comspec,
67
+ args: cmdArgs,
68
+ options: { ...options, windowsVerbatimArguments: true },
69
+ // `windowsVerbatimArguments` makes the command line the argv joined by
70
+ // single spaces, so this is what CreateProcess and then cmd.exe see.
71
+ commandLineLength: [comspec, ...cmdArgs].join(' ').length,
72
+ };
73
+ }
74
+ // No escaping reproduces a line break on the other side, and cmd.exe truncates
75
+ // the command line at it, so the call is refused.
76
+ function assertNoLineBreaks(binary, args) {
77
+ const offending = [binary, ...args].find((value) => /[\r\n]/.test(value));
78
+ if (offending !== undefined) {
79
+ throw new Error(`Cannot pass a multi-line argument to "${binary}" on Windows: cmd.exe truncates the command line at the line break. Offending argument: ${JSON.stringify(offending.slice(0, 120))}`);
80
+ }
81
+ }
82
+ function escapeCmdArg(arg) {
83
+ return neutralizePercent(caretEscape(quoteCmdArg(arg)));
84
+ }
85
+ // cmd.exe parses the command portion twice, so it is caret-escaped twice.
86
+ function escapeCmdCommand(arg) {
87
+ return neutralizePercent(caretEscape(caretEscape(quoteCmdArg(arg))));
88
+ }
@@ -21,6 +21,7 @@ export interface MigrateArgs {
21
21
  runMigration?: string;
22
22
  runId?: string;
23
23
  stepAction?: StepAction;
24
+ startFresh?: boolean;
24
25
  include?: MigrateInclude;
25
26
  /**
26
27
  * nx.json `migrate.include` default. Consumed by `resolveInclude` only when the
@@ -34,6 +35,7 @@ export interface MigrateArgs {
34
35
  commitPrefix?: string;
35
36
  agentic?: AgenticArg;
36
37
  validate?: boolean;
38
+ finalValidation?: boolean;
37
39
  ifExists?: boolean;
38
40
  interactive?: boolean;
39
41
  [key: string]: any;
@@ -60,7 +60,7 @@ function withMigrationOptions(yargs) {
60
60
  })
61
61
  .option('runId', {
62
62
  // Hidden with the orchestrator itself.
63
- describe: 'The orchestrated migrate run to record a single migration into, or to reconcile when given without --run-migration.',
63
+ describe: 'The orchestrated migrate run to record a single migration into, to continue with --run-migrations, or to reconcile when given alone.',
64
64
  type: 'string',
65
65
  hidden: true,
66
66
  })
@@ -69,6 +69,11 @@ function withMigrationOptions(yargs) {
69
69
  choices: step_actions_1.STEP_ACTIONS,
70
70
  type: 'string',
71
71
  hidden: true,
72
+ })
73
+ .option('startFresh', {
74
+ describe: 'With --run-migrations and --run-id=<id> under the orchestrator: delete the record of the active migrate run the id names and start a new run over the whole plan. Migrations the deleted run applied stay applied.',
75
+ type: 'boolean',
76
+ hidden: true,
72
77
  })
73
78
  .option('ifExists', {
74
79
  describe: `Run migrations only if the migrations file exists, if not continues successfully.`,
@@ -124,6 +129,11 @@ function withMigrationOptions(yargs) {
124
129
  .option('validate', {
125
130
  describe: 'When `--agentic` resolves to an enabled agent, run agent-driven validation after generator-only migrations that have no `prompt:` field. Defaults to on; pass `--no-validate` to opt out. Has no effect when `--agentic` is disabled, when running inside an outer agent, or when running non-interactively without an explicit agent.',
126
131
  type: 'boolean',
132
+ })
133
+ .option('finalValidation', {
134
+ describe: 'With --run-migrations under the orchestrator: end the run with an agent validation pass over the whole workspace once every migration has run. On by default; pass --no-final-validation to opt out.',
135
+ type: 'boolean',
136
+ hidden: true,
127
137
  })
128
138
  .check(({ createCommits, commitPrefix, from, excludeAppliedMigrations, include, agentic, }) => {
129
139
  // Only an explicit `--no-create-commits` is decidable here, before the
@@ -0,0 +1,44 @@
1
+ export type NoticeLevel = 'log' | 'warn' | 'error';
2
+ export type LineColor = 'dim' | 'yellow' | 'red';
3
+ export interface MigrateOutputSink {
4
+ notice(level: NoticeLevel, message: {
5
+ title: string;
6
+ bodyLines?: string[];
7
+ }): void;
8
+ line(color: LineColor, text: string): void;
9
+ /** A chunk of a package manager's own output. */
10
+ raw(chunk: string): void;
11
+ }
12
+ export declare const terminalOutput: MigrateOutputSink;
13
+ export type DeferredOutputRecord = {
14
+ kind: 'notice';
15
+ level: NoticeLevel;
16
+ title: string;
17
+ bodyLines?: string[];
18
+ } | {
19
+ kind: 'line';
20
+ color: LineColor;
21
+ text: string;
22
+ } | {
23
+ kind: 'raw';
24
+ text: string;
25
+ };
26
+ /**
27
+ * Collects the output as records that `replayDeferredOutput` prints later.
28
+ * The notices and lines are always kept; package manager output is bounded
29
+ * like generator output and rendered only on request. Render once the output
30
+ * is complete: a rendered collector accepts nothing more.
31
+ */
32
+ export declare class DeferredOutputCollector implements MigrateOutputSink {
33
+ private readonly records;
34
+ private rendered;
35
+ private assertOpen;
36
+ notice(level: NoticeLevel, message: {
37
+ title: string;
38
+ bodyLines?: string[];
39
+ }): void;
40
+ line(color: LineColor, text: string): void;
41
+ raw(chunk: string): void;
42
+ render(rawOutput: 'keep' | 'drop'): DeferredOutputRecord[];
43
+ }
44
+ export declare function replayDeferredOutput(records: DeferredOutputRecord[], to?: MigrateOutputSink): void;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeferredOutputCollector = exports.terminalOutput = void 0;
4
+ exports.replayDeferredOutput = replayDeferredOutput;
5
+ const tslib_1 = require("tslib");
6
+ const pc = tslib_1.__importStar(require("picocolors"));
7
+ const logger_1 = require("../../utils/logger");
8
+ const output_1 = require("../../utils/output");
9
+ exports.terminalOutput = {
10
+ notice: (level, message) => output_1.output[level](message),
11
+ line: (color, text) => logger_1.logger.info(pc[color](text)),
12
+ raw: (chunk) => process.stdout.write(chunk),
13
+ };
14
+ /**
15
+ * Collects the output as records that `replayDeferredOutput` prints later.
16
+ * The notices and lines are always kept; package manager output is bounded
17
+ * like generator output and rendered only on request. Render once the output
18
+ * is complete: a rendered collector accepts nothing more.
19
+ */
20
+ class DeferredOutputCollector {
21
+ constructor() {
22
+ this.records = [];
23
+ this.rendered = false;
24
+ }
25
+ assertOpen() {
26
+ if (this.rendered) {
27
+ throw new Error('The deferred output was already rendered.');
28
+ }
29
+ }
30
+ notice(level, message) {
31
+ this.assertOpen();
32
+ this.records.push({ kind: 'notice', level, ...message });
33
+ }
34
+ line(color, text) {
35
+ this.assertOpen();
36
+ this.records.push({ kind: 'line', color, text });
37
+ }
38
+ raw(chunk) {
39
+ this.assertOpen();
40
+ let block = this.records[this.records.length - 1];
41
+ if (block?.kind !== 'raw-block') {
42
+ // Lazy: the non-agentic migrate path must not load the agentic chain.
43
+ const { BoundedChunks } = require('./agentic/capture-generator-output');
44
+ block = { kind: 'raw-block', buffer: new BoundedChunks() };
45
+ this.records.push(block);
46
+ }
47
+ block.buffer.append(chunk);
48
+ }
49
+ render(rawOutput) {
50
+ this.rendered = true;
51
+ const records = [];
52
+ for (const record of this.records) {
53
+ if (record.kind !== 'raw-block') {
54
+ records.push(record);
55
+ continue;
56
+ }
57
+ if (rawOutput === 'drop')
58
+ continue;
59
+ // The replay adds the final newline back.
60
+ const text = record.buffer.render();
61
+ records.push({
62
+ kind: 'raw',
63
+ text: text.endsWith('\n') ? text.slice(0, -1) : text,
64
+ });
65
+ }
66
+ return records;
67
+ }
68
+ }
69
+ exports.DeferredOutputCollector = DeferredOutputCollector;
70
+ function replayDeferredOutput(records, to = exports.terminalOutput) {
71
+ for (const record of records) {
72
+ switch (record.kind) {
73
+ case 'notice':
74
+ to.notice(record.level, {
75
+ title: record.title,
76
+ bodyLines: record.bodyLines,
77
+ });
78
+ break;
79
+ case 'line':
80
+ to.line(record.color, record.text);
81
+ break;
82
+ case 'raw':
83
+ if (record.text)
84
+ to.raw(`${record.text}\n`);
85
+ break;
86
+ default: {
87
+ const exhaustive = record;
88
+ throw new Error(`Unhandled output record: ${JSON.stringify(exhaustive)}`);
89
+ }
90
+ }
91
+ }
92
+ }
@@ -1,12 +1,18 @@
1
1
  import { MigrationsJson } from '../../config/misc-interfaces';
2
2
  import { FileChange } from '../../generators/tree';
3
3
  import { ArrayPackageGroup, NxMigrationsConfiguration, PackageJson } from '../../utils/package-json';
4
+ import { type MigrateOutputSink } from './deferred-output';
4
5
  interface PackageMigrationConfig extends NxMigrationsConfiguration {
5
6
  packageJson: PackageJson;
6
7
  packageGroup: ArrayPackageGroup;
7
8
  }
8
9
  export declare function readPackageMigrationConfig(packageName: string, dir: string): PackageMigrationConfig;
9
- export declare function runInstall(nxWorkspaceRoot?: string, phase?: MigrationInstallPhase, rerunCommand?: string): Promise<void>;
10
+ /**
11
+ * With a `sink`, stdin is ignored and stdout and stderr are collected for a
12
+ * caller sharing the terminal. On POSIX the child stays in nx's process
13
+ * group. Without a sink, the install owns the terminal.
14
+ */
15
+ export declare function runInstall(nxWorkspaceRoot?: string, phase?: MigrationInstallPhase, rerunCommand?: string, sink?: MigrateOutputSink): Promise<void>;
10
16
  export type MigrationInstallPhase = 'pre-migration' | 'post-migration';
11
17
  export declare class NpmPeerDepsInstallError extends Error {
12
18
  constructor();
@@ -20,8 +26,8 @@ export declare class NpmPeerDepsInstallError extends Error {
20
26
  */
21
27
  export declare function isNpmPeerDepsError(stderr: string): boolean;
22
28
  export declare function formatSingleMigrationRerunCommand(migrationId: string): string;
23
- export declare function logNpmPeerDepsError(phase: MigrationInstallPhase, rerunCommand?: string): void;
24
- export declare function logSkippedPostMigrationInstall(root: string): void;
29
+ export declare function logNpmPeerDepsError(phase: MigrationInstallPhase, rerunCommand?: string, out?: MigrateOutputSink): void;
30
+ export declare function logSkippedPostMigrationInstall(root: string, out?: MigrateOutputSink): void;
25
31
  export declare class ChangedDepInstaller {
26
32
  private readonly root;
27
33
  private readonly shouldSkipInstall;
@@ -20,6 +20,7 @@ exports.isAngularMigration = isAngularMigration;
20
20
  const tslib_1 = require("tslib");
21
21
  const pc = tslib_1.__importStar(require("picocolors"));
22
22
  const child_process_1 = require("child_process");
23
+ const string_decoder_1 = require("string_decoder");
23
24
  const path_1 = require("path");
24
25
  const semver_1 = require("semver");
25
26
  const handle_import_1 = require("../../utils/handle-import");
@@ -29,12 +30,12 @@ const logger_1 = require("../../utils/logger");
29
30
  const text_1 = require("./text");
30
31
  const package_json_1 = require("../../utils/package-json");
31
32
  const package_manager_1 = require("../../utils/package-manager");
32
- const output_1 = require("../../utils/output");
33
33
  const fs_1 = require("fs");
34
34
  const installation_directory_1 = require("../../utils/installation-directory");
35
35
  const shell_quoting_1 = require("../../utils/shell-quoting");
36
36
  const project_graph_1 = require("../../project-graph/project-graph");
37
37
  const version_utils_1 = require("./version-utils");
38
+ const deferred_output_1 = require("./deferred-output");
38
39
  function readPackageMigrationConfig(packageName, dir) {
39
40
  const { path: packageJsonPath, packageJson: json } = (0, package_json_1.readModulePackageJson)(packageName, (0, installation_directory_1.getNxRequirePaths)(dir));
40
41
  const config = (0, package_json_1.readNxMigrateConfig)(json);
@@ -61,32 +62,68 @@ function readPackageMigrationConfig(packageName, dir) {
61
62
  };
62
63
  }
63
64
  }
64
- function runInstall(nxWorkspaceRoot, phase = 'pre-migration', rerunCommand) {
65
+ /**
66
+ * With a `sink`, stdin is ignored and stdout and stderr are collected for a
67
+ * caller sharing the terminal. On POSIX the child stays in nx's process
68
+ * group. Without a sink, the install owns the terminal.
69
+ */
70
+ function runInstall(nxWorkspaceRoot, phase = 'pre-migration', rerunCommand, sink) {
65
71
  const cwd = nxWorkspaceRoot ?? process.cwd();
66
72
  const packageManager = (0, package_manager_1.detectPackageManager)(cwd);
67
73
  const pmCommands = (0, package_manager_1.getPackageManagerCommand)(packageManager, cwd);
74
+ const out = sink ?? deferred_output_1.terminalOutput;
68
75
  const installCommand = `${pmCommands.install} ${pmCommands.ignoreScriptsFlag ?? ''}`;
69
- output_1.output.log({
76
+ out.notice('log', {
70
77
  title: `Running '${installCommand}' to make sure necessary packages are installed`,
71
78
  });
72
79
  return new Promise((resolve, reject) => {
73
- // For npm, pipe stderr so we can detect peer dependency errors while still
74
- // mirroring it live to the user's terminal. Other package managers inherit
75
- // stderr directly since we don't need to inspect their output.
80
+ // npm's stderr is piped so peer dependency errors can be detected in it.
81
+ // Without a sink it is mirrored live and other package managers inherit
82
+ // stderr directly, since their output is not inspected.
76
83
  const shouldCaptureStderr = packageManager === 'npm';
77
84
  const child = (0, child_process_1.spawn)(installCommand, {
78
85
  shell: true,
79
- stdio: ['inherit', 'inherit', shouldCaptureStderr ? 'pipe' : 'inherit'],
86
+ stdio: sink
87
+ ? ['ignore', 'pipe', 'pipe']
88
+ : ['inherit', 'inherit', shouldCaptureStderr ? 'pipe' : 'inherit'],
80
89
  windowsHide: true,
81
90
  cwd,
82
91
  });
92
+ // Decoded per stream: a chunk boundary can split a multi-byte character,
93
+ // and a sequence still incomplete at the end is what `end()` returns.
94
+ const stdoutText = new string_decoder_1.StringDecoder('utf8');
95
+ const stderrText = new string_decoder_1.StringDecoder('utf8');
96
+ child.stdout?.on('data', (chunk) => out.raw(stdoutText.write(chunk)));
97
+ child.stdout?.on('end', () => out.raw(stdoutText.end()));
83
98
  const stderrChunks = [];
84
99
  child.stderr?.on('data', (chunk) => {
85
- process.stderr.write(chunk);
86
- stderrChunks.push(chunk);
100
+ if (sink) {
101
+ out.raw(stderrText.write(chunk));
102
+ }
103
+ else {
104
+ process.stderr.write(chunk);
105
+ }
106
+ if (shouldCaptureStderr)
107
+ stderrChunks.push(chunk);
108
+ });
109
+ if (sink)
110
+ child.stderr.on('end', () => out.raw(stderrText.end()));
111
+ // With a sink the rejection waits for `close`, which follows the streams'
112
+ // `end`: a caller must be able to render what it collected on rejection.
113
+ let spawnError = null;
114
+ child.on('error', (error) => {
115
+ if (sink) {
116
+ spawnError = error;
117
+ }
118
+ else {
119
+ reject(error);
120
+ }
87
121
  });
88
- child.on('error', reject);
89
122
  child.on('close', (code) => {
123
+ if (spawnError) {
124
+ reject(spawnError);
125
+ return;
126
+ }
90
127
  if (code === 0) {
91
128
  resolve();
92
129
  return;
@@ -98,7 +135,7 @@ function runInstall(nxWorkspaceRoot, phase = 'pre-migration', rerunCommand) {
98
135
  // (CLI migrate, `nx repair`, single-migration runner, etc.) surfaces
99
136
  // it consistently. Top-level callers catch `NpmPeerDepsInstallError`
100
137
  // and return a non-zero exit code without re-logging.
101
- logNpmPeerDepsError(phase, rerunCommand);
138
+ logNpmPeerDepsError(phase, rerunCommand, out);
102
139
  reject(new NpmPeerDepsInstallError());
103
140
  return;
104
141
  }
@@ -143,7 +180,7 @@ function formatSingleMigrationRerunCommand(migrationId) {
143
180
  : migrationId;
144
181
  return `nx migrate --run-migration=${id}`;
145
182
  }
146
- function logNpmPeerDepsError(phase, rerunCommand = 'nx migrate --run-migrations') {
183
+ function logNpmPeerDepsError(phase, rerunCommand = 'nx migrate --run-migrations', out = deferred_output_1.terminalOutput) {
147
184
  const peerDepsResolutionSteps = [
148
185
  'Recommended approaches (in order of preference):',
149
186
  '',
@@ -160,7 +197,7 @@ function logNpmPeerDepsError(phase, rerunCommand = 'nx migrate --run-migrations'
160
197
  ` ${rerunCommand} --skip-install`,
161
198
  ];
162
199
  if (phase === 'pre-migration') {
163
- output_1.output.error({
200
+ out.notice('error', {
164
201
  title: 'You need to resolve the peer dependency conflicts before the migration can continue',
165
202
  bodyLines: [
166
203
  ...peerDepsResolutionSteps,
@@ -173,7 +210,7 @@ function logNpmPeerDepsError(phase, rerunCommand = 'nx migrate --run-migrations'
173
210
  });
174
211
  }
175
212
  else {
176
- output_1.output.error({
213
+ out.notice('error', {
177
214
  title: 'Some migrations have been applied, but installing the updated dependencies failed',
178
215
  bodyLines: [
179
216
  ...peerDepsResolutionSteps,
@@ -187,10 +224,10 @@ function logNpmPeerDepsError(phase, rerunCommand = 'nx migrate --run-migrations'
187
224
  });
188
225
  }
189
226
  }
190
- function logSkippedPostMigrationInstall(root) {
227
+ function logSkippedPostMigrationInstall(root, out = deferred_output_1.terminalOutput) {
191
228
  const packageManager = (0, package_manager_1.detectPackageManager)(root);
192
229
  const installCommand = (0, package_manager_1.getPackageManagerCommand)(packageManager, root).install;
193
- output_1.output.warn({
230
+ out.notice('warn', {
194
231
  title: 'Migrations updated your dependencies, but the install was skipped',
195
232
  bodyLines: [`Run "${installCommand}" to install the updated dependencies.`],
196
233
  });
@@ -72,23 +72,48 @@ export declare function reportMigrateOrchestratorInit(opts: {
72
72
  createCommits: boolean;
73
73
  }): void;
74
74
  /**
75
- * One event per orchestrator dispense. The `action` (dispense case) is a
76
- * closed enum carried on a reused dimension, read conditioned on the event
77
- * name (the same multiplexing pattern as {@link reportMigratePrompt});
78
- * `attempt` rides the migration-count dimension.
75
+ * One event per dispense response, repeated on every reconcile until the
76
+ * step moves. The `action` (dispense case) is a closed enum carried on a
77
+ * reused dimension, read conditioned on the event name (the same
78
+ * multiplexing pattern as {@link reportMigratePrompt}); `attempt` rides the
79
+ * migration-count dimension and `ordinal` (the run's dispense count) the
80
+ * task-count one.
79
81
  */
80
82
  export declare function reportMigrateOrchestratorDispense(opts: {
81
83
  action: string;
82
84
  attempt: number;
85
+ ordinal?: number;
83
86
  }): void;
84
- /**
85
- * Terminal funnel event. The two step tallies and the total dispense count
86
- * ride reused numeric dimensions, read conditioned on the event name.
87
- */
88
- export declare function reportMigrateOrchestratorComplete(opts: {
87
+ /** Once per durable dispense transition. */
88
+ export declare function reportMigrateOrchestratorStepDispensed(opts: {
89
+ attempt: number;
90
+ ordinal: number;
91
+ }): void;
92
+ export interface MigrateOrchestratorTallies {
89
93
  completed: number;
90
94
  skipped: number;
95
+ unresolved: number;
91
96
  dispenseCount: number;
97
+ }
98
+ export declare function reportMigrateOrchestratorComplete(opts: MigrateOrchestratorTallies): void;
99
+ /** The agent session nx spawned ended with the run still active. */
100
+ export declare function reportMigrateOrchestratorAbandoned(opts: MigrateOrchestratorTallies & {
101
+ agentUsed: string;
102
+ }): void;
103
+ /**
104
+ * An explicit continue (`--run-migrations --run-id`, or "continue" at the
105
+ * master prompt) took up an active run; every resume reports. A bare
106
+ * `--run-id` reconcile is not a resume: nothing in run state marks the first
107
+ * call after a lost session.
108
+ */
109
+ export declare function reportMigrateOrchestratorResume(opts: MigrateOrchestratorTallies): void;
110
+ /**
111
+ * An invocation found an active run and started nothing. `activity` says
112
+ * whether another nx migrate process held the run; 'unknown' where nx cannot
113
+ * tell.
114
+ */
115
+ export declare function reportMigrateOrchestratorExistingRun(opts: MigrateOrchestratorTallies & {
116
+ activity: 'idle' | 'held' | 'unknown';
92
117
  }): void;
93
118
  /**
94
119
  * Counts invocations, not completions: emitted as soon as the migration id
@@ -13,7 +13,11 @@ exports.reportMigrateRunComplete = reportMigrateRunComplete;
13
13
  exports.reportMigrateRunError = reportMigrateRunError;
14
14
  exports.reportMigrateOrchestratorInit = reportMigrateOrchestratorInit;
15
15
  exports.reportMigrateOrchestratorDispense = reportMigrateOrchestratorDispense;
16
+ exports.reportMigrateOrchestratorStepDispensed = reportMigrateOrchestratorStepDispensed;
16
17
  exports.reportMigrateOrchestratorComplete = reportMigrateOrchestratorComplete;
18
+ exports.reportMigrateOrchestratorAbandoned = reportMigrateOrchestratorAbandoned;
19
+ exports.reportMigrateOrchestratorResume = reportMigrateOrchestratorResume;
20
+ exports.reportMigrateOrchestratorExistingRun = reportMigrateOrchestratorExistingRun;
17
21
  exports.reportMigrateSingleMigrationInvocation = reportMigrateSingleMigrationInvocation;
18
22
  exports.computeMajorsCrossed = computeMajorsCrossed;
19
23
  exports.safeReport = safeReport;
@@ -195,10 +199,12 @@ function reportMigrateOrchestratorInit(opts) {
195
199
  });
196
200
  }
197
201
  /**
198
- * One event per orchestrator dispense. The `action` (dispense case) is a
199
- * closed enum carried on a reused dimension, read conditioned on the event
200
- * name (the same multiplexing pattern as {@link reportMigratePrompt});
201
- * `attempt` rides the migration-count dimension.
202
+ * One event per dispense response, repeated on every reconcile until the
203
+ * step moves. The `action` (dispense case) is a closed enum carried on a
204
+ * reused dimension, read conditioned on the event name (the same
205
+ * multiplexing pattern as {@link reportMigratePrompt}); `attempt` rides the
206
+ * migration-count dimension and `ordinal` (the run's dispense count) the
207
+ * task-count one.
202
208
  */
203
209
  function reportMigrateOrchestratorDispense(opts) {
204
210
  safeReport(() => {
@@ -207,21 +213,76 @@ function reportMigrateOrchestratorDispense(opts) {
207
213
  (0, analytics_1.reportEvent)('migrate_orchestrator_dispense', {
208
214
  [analytics_1.customDimensions.promptChoice]: opts.action,
209
215
  [analytics_1.customDimensions.migrationCount]: opts.attempt,
216
+ [analytics_1.customDimensions.taskCount]: opts.ordinal,
217
+ });
218
+ });
219
+ }
220
+ /** Once per durable dispense transition. */
221
+ function reportMigrateOrchestratorStepDispensed(opts) {
222
+ safeReport(() => {
223
+ if (!analytics_1.customDimensions)
224
+ return;
225
+ (0, analytics_1.reportEvent)('migrate_orchestrator_step_dispensed', {
226
+ [analytics_1.customDimensions.migrationCount]: opts.attempt,
227
+ [analytics_1.customDimensions.taskCount]: opts.ordinal,
210
228
  });
211
229
  });
212
230
  }
213
231
  /**
214
- * Terminal funnel event. The two step tallies and the total dispense count
215
- * ride reused numeric dimensions, read conditioned on the event name.
232
+ * The three step tallies and the total dispense count ride reused numeric
233
+ * dimensions, read conditioned on the event name.
216
234
  */
235
+ function orchestratorTallyParams(tallies) {
236
+ return {
237
+ [analytics_1.customDimensions.appliedCount]: tallies.completed,
238
+ [analytics_1.customDimensions.taskCount]: tallies.skipped,
239
+ [analytics_1.customDimensions.majorsCrossed]: tallies.unresolved,
240
+ [analytics_1.customDimensions.migrationCount]: tallies.dispenseCount,
241
+ };
242
+ }
217
243
  function reportMigrateOrchestratorComplete(opts) {
218
244
  safeReport(() => {
219
245
  if (!analytics_1.customDimensions)
220
246
  return;
221
- (0, analytics_1.reportEvent)('migrate_orchestrator_complete', {
222
- [analytics_1.customDimensions.appliedCount]: opts.completed,
223
- [analytics_1.customDimensions.taskCount]: opts.skipped,
224
- [analytics_1.customDimensions.migrationCount]: opts.dispenseCount,
247
+ (0, analytics_1.reportEvent)('migrate_orchestrator_complete', orchestratorTallyParams(opts));
248
+ });
249
+ }
250
+ /** The agent session nx spawned ended with the run still active. */
251
+ function reportMigrateOrchestratorAbandoned(opts) {
252
+ safeReport(() => {
253
+ if (!analytics_1.customDimensions)
254
+ return;
255
+ (0, analytics_1.reportEvent)('migrate_orchestrator_abandoned', {
256
+ ...orchestratorTallyParams(opts),
257
+ [analytics_1.customDimensions.agentUsed]: opts.agentUsed,
258
+ });
259
+ });
260
+ }
261
+ /**
262
+ * An explicit continue (`--run-migrations --run-id`, or "continue" at the
263
+ * master prompt) took up an active run; every resume reports. A bare
264
+ * `--run-id` reconcile is not a resume: nothing in run state marks the first
265
+ * call after a lost session.
266
+ */
267
+ function reportMigrateOrchestratorResume(opts) {
268
+ safeReport(() => {
269
+ if (!analytics_1.customDimensions)
270
+ return;
271
+ (0, analytics_1.reportEvent)('migrate_orchestrator_resume', orchestratorTallyParams(opts));
272
+ });
273
+ }
274
+ /**
275
+ * An invocation found an active run and started nothing. `activity` says
276
+ * whether another nx migrate process held the run; 'unknown' where nx cannot
277
+ * tell.
278
+ */
279
+ function reportMigrateOrchestratorExistingRun(opts) {
280
+ safeReport(() => {
281
+ if (!analytics_1.customDimensions)
282
+ return;
283
+ (0, analytics_1.reportEvent)('migrate_orchestrator_existing_run', {
284
+ ...orchestratorTallyParams(opts),
285
+ [analytics_1.customDimensions.promptChoice]: opts.activity,
225
286
  });
226
287
  });
227
288
  }
@@ -1,4 +1,5 @@
1
1
  import type { ResolvedAgentic } from './agentic/types';
2
+ import { type MigrateOutputSink } from './deferred-output';
2
3
  /**
3
4
  * Discriminated result for `commitMigrationIfRequested`. Distinguishes the
4
5
  * shapes the executor needs to react to:
@@ -7,9 +8,8 @@ import type { ResolvedAgentic } from './agentic/types';
7
8
  * HEAD` failed transiently — by contract the diff is no longer in the
8
9
  * working tree.
9
10
  * - `no-changes`: commits were requested but there was nothing to commit.
10
- * - `failed`: the commit attempt itself errored. The diff remains in the
11
- * working tree; the executor uses this signal to track pending migrations
12
- * so the next successful commit can annotate its body.
11
+ * - `failed`: the attempt errored, possibly after the commit landed; tracked
12
+ * as pending so the next successful commit can annotate its body.
13
13
  * - `disabled`: commits are off for this run.
14
14
  */
15
15
  export type CommitResult = {
@@ -37,7 +37,7 @@ export declare function commitMigrationIfRequested(root: string, migration: {
37
37
  }, shouldCreateCommits: boolean, commitPrefix: string, installDepsIfChanged: () => Promise<void>, pendingMigrations?: ReadonlyArray<{
38
38
  package: string;
39
39
  name: string;
40
- }>, failureGuidance?: string): Promise<CommitResult>;
40
+ }>, failureGuidance?: string, out?: MigrateOutputSink): Promise<CommitResult>;
41
41
  /**
42
42
  * Commits any pre-existing working-tree state into a dedicated "checkpoint"
43
43
  * commit before the first migration runs. Without this, the first migration's
@@ -64,6 +64,7 @@ export declare function resolveCreateCommits(args: {
64
64
  warning?: string;
65
65
  error?: string;
66
66
  };
67
+ export declare function currentBranchIfDefault(root: string): string | null;
67
68
  /**
68
69
  * Asks before a run starts committing on the workspace's default branch, and
69
70
  * reports the decision when the answer is no. Returns whether to proceed.