Skip to content

feat(core): add initial impl of task io service#34205

Merged
AgentEnder merged 13 commits intomasterfrom
feat/task-io-service
Feb 3, 2026
Merged

feat(core): add initial impl of task io service#34205
AgentEnder merged 13 commits intomasterfrom
feat/task-io-service

Conversation

@AgentEnder
Copy link
Member

Current Behavior

There's not an easy to use service to track PIDs being registered to nx tasks

Expected Behavior

There's a service to track this stuff

Example outputs of the debug logs are below:

[2026-01-23T18:26:44.445Z] DebugTaskIOService initialized with projectGraph and taskGraph
[2026-01-23T18:26:44.786Z] Processed MetricsUpdate: 1:26:44 PM
[2026-01-23T18:26:44.814Z] notifyPidUpdate called for task nx:build-native with PIDs [71738]
[2026-01-23T18:26:44.814Z] Task nx:build-native PIDs updated: [71738]
[2026-01-23T18:26:44.815Z] PID registration: taskId=nx:build-native, pid=71738
[2026-01-23T18:26:45.833Z] notifyPidUpdate called for task nx:build-native with PIDs [71738,71739]
[2026-01-23T18:26:45.833Z] Task nx:build-native PIDs updated: [71738,71739]
[2026-01-23T18:26:45.834Z] Processed MetricsUpdate: 1:26:45 PM
[2026-01-23T18:26:46.439Z] notifyPidUpdate called for task nx:build-base with PIDs [71766]
[2026-01-23T18:26:46.440Z] Task nx:build-base PIDs updated: [71766]
[2026-01-23T18:26:46.440Z] PID registration: taskId=nx:build-base, pid=71766
[2026-01-23T18:26:46.441Z] notifyPidUpdate called for task graph-client:build-client:release with PIDs [71767]
[2026-01-23T18:26:46.441Z] Task graph-client:build-client:release PIDs updated: [71767]
[2026-01-23T18:26:46.441Z] PID registration: taskId=graph-client:build-client:release, pid=71767
[2026-01-23T18:26:46.611Z] notifyPidUpdate called for task nx:legacy-post-build with PIDs [71778]
[2026-01-23T18:26:46.611Z] Task nx:legacy-post-build PIDs updated: [71778]
[2026-01-23T18:26:46.612Z] PID registration: taskId=nx:legacy-post-build, pid=71778
[2026-01-23T18:26:46.915Z] notifyPidUpdate called for task nx:legacy-post-build with PIDs [71778,71779]
[2026-01-23T18:26:46.915Z] Task nx:legacy-post-build PIDs updated: [71778,71779]
[2026-01-23T18:26:46.915Z] Processed MetricsUpdate: 1:26:46 PM
[2026-01-23T18:26:47.989Z] Processed MetricsUpdate: 1:26:47 PM
[2026-01-23T18:26:49.063Z] Processed MetricsUpdate: 1:26:49 PM
[2026-01-23T18:26:50.142Z] Processed MetricsUpdate: 1:26:50 PM
[2026-01-23T18:26:51.230Z] Processed MetricsUpdate: 1:26:51 PM
[2026-01-23T18:26:52.313Z] Processed MetricsUpdate: 1:26:52 PM
[2026-01-23T18:26:53.387Z] Processed MetricsUpdate: 1:26:53 PM
[2026-01-23T18:26:54.459Z] Processed MetricsUpdate: 1:26:54 PM
[2026-01-23T18:26:55.547Z] Processed MetricsUpdate: 1:26:55 PM
[2026-01-23T18:26:56.613Z] Processed MetricsUpdate: 1:26:56 PM
[2026-01-23T18:26:57.703Z] Processed MetricsUpdate: 1:26:57 PM
[2026-01-23T18:26:58.782Z] Processed MetricsUpdate: 1:26:58 PM
[2026-01-23T18:26:59.859Z] Processed MetricsUpdate: 1:26:59 PM
[2026-01-23T18:27:00.255Z] notifyPidUpdate called for task nx:build with PIDs [71901]
[2026-01-23T18:27:00.255Z] Task nx:build PIDs updated: [71901]
[2026-01-23T18:27:00.255Z] PID registration: taskId=nx:build, pid=71901
[2026-01-23T18:27:00.373Z] notifyPidUpdate called for task nx:build with PIDs [71901,71902]
[2026-01-23T18:27:00.374Z] Task nx:build PIDs updated: [71901,71902]
[2026-01-23T18:27:00.374Z] PID registration: taskId=nx:build, pid=71902
[2026-01-23T18:27:00.450Z] notifyPidUpdate called for task nx:build with PIDs [71901,71902,71903]
[2026-01-23T18:27:00.450Z] Task nx:build PIDs updated: [71901,71902,71903]
[2026-01-23T18:27:00.451Z] PID registration: taskId=nx:build, pid=71903
[2026-01-23T18:27:00.502Z] notifyPidUpdate called for task nx:build with PIDs [71901,71902,71903,71904]
[2026-01-23T18:27:00.502Z] Task nx:build PIDs updated: [71901,71902,71903,71904]
[2026-01-23T18:27:00.502Z] PID registration: taskId=nx:build, pid=71904
[2026-01-23T18:27:00.661Z] Final Task to PIDs mapping: {
  "nx:build-native": [
    71738,
    71739
  ],
  "nx:build-base": [
    71766
  ],
  "graph-client:build-client:release": [
    71767
  ],
  "nx:legacy-post-build": [
    71778,
    71779
  ],
  "nx:build": [
    71901,
    71902,
    71903,
    71904
  ]
}

Expected task IO:
Task nx:build:
  FileSets: { project: workspace, patterns: [babel.config.json, .nx/workflows/agents.yaml, .github/workflows/ci.yml] }; { project: graph-client, patterns: [graph/client/**/*, !graph/client/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/client/tsconfig.spec.json, !graph/client/jest.config.[jt]s, !graph/client/.eslintrc.json, !graph/client/.storybook/**/*, !graph/client/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/client/tsconfig.storybook.json, !graph/client/src/test-setup.[jt]s] }; { project: graph-migrate, patterns: [graph/migrate/**/*, !graph/migrate/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/migrate/tsconfig.spec.json, !graph/migrate/jest.config.[jt]s, !graph/migrate/.eslintrc.json, !graph/migrate/.storybook/**/*, !graph/migrate/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/migrate/tsconfig.storybook.json, !graph/migrate/src/test-setup.[jt]s] }; { project: graph-ui-code-block, patterns: [graph/ui-code-block/**/*, !graph/ui-code-block/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-code-block/tsconfig.spec.json, !graph/ui-code-block/jest.config.[jt]s, !graph/ui-code-block/.eslintrc.json, !graph/ui-code-block/.storybook/**/*, !graph/ui-code-block/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-code-block/tsconfig.storybook.json, !graph/ui-code-block/src/test-setup.[jt]s] }; { project: graph-project-details, patterns: [graph/project-details/**/*, !graph/project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/project-details/tsconfig.spec.json, !graph/project-details/jest.config.[jt]s, !graph/project-details/.eslintrc.json, !graph/project-details/.storybook/**/*, !graph/project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/project-details/tsconfig.storybook.json, !graph/project-details/src/test-setup.[jt]s] }; { project: darwin-arm64, patterns: [packages/nx/native-packages/darwin-arm64/**/*, !packages/nx/native-packages/darwin-arm64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-arm64/tsconfig.spec.json, !packages/nx/native-packages/darwin-arm64/jest.config.[jt]s, !packages/nx/native-packages/darwin-arm64/.eslintrc.json, !packages/nx/native-packages/darwin-arm64/.storybook/**/*, !packages/nx/native-packages/darwin-arm64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-arm64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-arm64/src/test-setup.[jt]s] }; { project: darwin-x64, patterns: [packages/nx/native-packages/darwin-x64/**/*, !packages/nx/native-packages/darwin-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-x64/tsconfig.spec.json, !packages/nx/native-packages/darwin-x64/jest.config.[jt]s, !packages/nx/native-packages/darwin-x64/.eslintrc.json, !packages/nx/native-packages/darwin-x64/.storybook/**/*, !packages/nx/native-packages/darwin-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-x64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-x64/src/test-setup.[jt]s] }; { project: graph-ui-project-details, patterns: [graph/ui-project-details/**/*, !graph/ui-project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-project-details/tsconfig.spec.json, !graph/ui-project-details/jest.config.[jt]s, !graph/ui-project-details/.eslintrc.json, !graph/ui-project-details/.storybook/**/*, !graph/ui-project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-project-details/tsconfig.storybook.json, !graph/ui-project-details/src/test-setup.[jt]s] }; { project: workspace, patterns: [nx.json, .gitignore, .nxignore] }; { project: linux-arm-gnueabihf, patterns: [packages/nx/native-packages/linux-arm-gnueabihf/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.spec.json, !packages/nx/native-packages/linux-arm-gnueabihf/jest.config.[jt]s, !packages/nx/native-packages/linux-arm-gnueabihf/.eslintrc.json, !packages/nx/native-packages/linux-arm-gnueabihf/.storybook/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm-gnueabihf/src/test-setup.[jt]s] }; { project: linux-arm64-gnu, patterns: [packages/nx/native-packages/linux-arm64-gnu/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-arm64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-gnu/src/test-setup.[jt]s] }; { project: ui-common, patterns: [graph/ui-common/**/*, !graph/ui-common/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-common/tsconfig.spec.json, !graph/ui-common/jest.config.[jt]s, !graph/ui-common/.eslintrc.json, !graph/ui-common/.storybook/**/*, !graph/ui-common/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-common/tsconfig.storybook.json, !graph/ui-common/src/test-setup.[jt]s] }; { project: freebsd-x64, patterns: [packages/nx/native-packages/freebsd-x64/**/*, !packages/nx/native-packages/freebsd-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/freebsd-x64/tsconfig.spec.json, !packages/nx/native-packages/freebsd-x64/jest.config.[jt]s, !packages/nx/native-packages/freebsd-x64/.eslintrc.json, !packages/nx/native-packages/freebsd-x64/.storybook/**/*, !packages/nx/native-packages/freebsd-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/freebsd-x64/tsconfig.storybook.json, !packages/nx/native-packages/freebsd-x64/src/test-setup.[jt]s] }; { project: linux-x64-musl, patterns: [packages/nx/native-packages/linux-x64-musl/**/*, !packages/nx/native-packages/linux-x64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-musl/.eslintrc.json, !packages/nx/native-packages/linux-x64-musl/.storybook/**/*, !packages/nx/native-packages/linux-x64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-musl/src/test-setup.[jt]s] }; { project: linux-arm64-musl, patterns: [packages/nx/native-packages/linux-arm64-musl/**/*, !packages/nx/native-packages/linux-arm64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-musl/.eslintrc.json, !packages/nx/native-packages/linux-arm64-musl/.storybook/**/*, !packages/nx/native-packages/linux-arm64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-musl/src/test-setup.[jt]s] }; { project: ui-icons, patterns: [graph/ui-icons/**/*, !graph/ui-icons/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-icons/tsconfig.spec.json, !graph/ui-icons/jest.config.[jt]s, !graph/ui-icons/.eslintrc.json, !graph/ui-icons/.storybook/**/*, !graph/ui-icons/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-icons/tsconfig.storybook.json, !graph/ui-icons/src/test-setup.[jt]s] }; { project: workspace, patterns: [babel.config.json, .nx/workflows/agents.yaml, .github/workflows/ci.yml, scripts/copy-local-native.js, scripts/copy-graph-client.js, scripts/chmod.js, scripts/copy-readme.js] }; { project: ui-render-config, patterns: [graph/ui-render-config/**/*, !graph/ui-render-config/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-render-config/tsconfig.spec.json, !graph/ui-render-config/jest.config.[jt]s, !graph/ui-render-config/.eslintrc.json, !graph/ui-render-config/.storybook/**/*, !graph/ui-render-config/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-render-config/tsconfig.storybook.json, !graph/ui-render-config/src/test-setup.[jt]s] }; { project: win32-arm64-msvc, patterns: [packages/nx/native-packages/win32-arm64-msvc/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-arm64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-arm64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-arm64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-arm64-msvc/src/test-setup.[jt]s] }; { project: shared, patterns: [graph/shared/**/*, !graph/shared/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/shared/tsconfig.spec.json, !graph/shared/jest.config.[jt]s, !graph/shared/.eslintrc.json, !graph/shared/.storybook/**/*, !graph/shared/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/shared/tsconfig.storybook.json, !graph/shared/src/test-setup.[jt]s] }; { project: nx, patterns: [packages/nx/**/*, !packages/nx/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/tsconfig.spec.json, !packages/nx/jest.config.[jt]s, !packages/nx/.eslintrc.json, !packages/nx/.storybook/**/*, !packages/nx/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/tsconfig.storybook.json, !packages/nx/src/test-setup.[jt]s] }; { project: win32-x64-msvc, patterns: [packages/nx/native-packages/win32-x64-msvc/**/*, !packages/nx/native-packages/win32-x64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-x64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-x64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-x64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-x64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-x64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-x64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-x64-msvc/src/test-setup.[jt]s] }; { project: nx-dev-ui-fence, patterns: [nx-dev/ui-fence/**/*, !nx-dev/ui-fence/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !nx-dev/ui-fence/tsconfig.spec.json, !nx-dev/ui-fence/jest.config.[jt]s, !nx-dev/ui-fence/.eslintrc.json, !nx-dev/ui-fence/.storybook/**/*, !nx-dev/ui-fence/**/*.stories.@(js|jsx|ts|tsx|mdx), !nx-dev/ui-fence/tsconfig.storybook.json, !nx-dev/ui-fence/src/test-setup.[jt]s] }; { project: linux-x64-gnu, patterns: [packages/nx/native-packages/linux-x64-gnu/**/*, !packages/nx/native-packages/linux-x64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-x64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-x64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-gnu/src/test-setup.[jt]s] }
  Outputs: [dist/packages/nx/**/*.{node,wasm,js,mjs,cjs}, dist/packages/nx/src/core/graph, dist/packages/nx/bin/nx.js, dist/packages/nx/README.md]
Task graph-client:build-client:release:
  FileSets: { project: nx-dev-ui-fence, patterns: [nx-dev/ui-fence/**/*, !nx-dev/ui-fence/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !nx-dev/ui-fence/tsconfig.spec.json, !nx-dev/ui-fence/jest.config.[jt]s, !nx-dev/ui-fence/.eslintrc.json, !nx-dev/ui-fence/.storybook/**/*, !nx-dev/ui-fence/**/*.stories.@(js|jsx|ts|tsx|mdx), !nx-dev/ui-fence/tsconfig.storybook.json, !nx-dev/ui-fence/src/test-setup.[jt]s] }; { project: graph-project-details, patterns: [graph/project-details/**/*, !graph/project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/project-details/tsconfig.spec.json, !graph/project-details/jest.config.[jt]s, !graph/project-details/.eslintrc.json, !graph/project-details/.storybook/**/*, !graph/project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/project-details/tsconfig.storybook.json, !graph/project-details/src/test-setup.[jt]s] }; { project: graph-client, patterns: [graph/client/**/*, !graph/client/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/client/tsconfig.spec.json, !graph/client/jest.config.[jt]s, !graph/client/.eslintrc.json, !graph/client/.storybook/**/*, !graph/client/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/client/tsconfig.storybook.json, !graph/client/src/test-setup.[jt]s] }; { project: graph-migrate, patterns: [graph/migrate/**/*, !graph/migrate/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/migrate/tsconfig.spec.json, !graph/migrate/jest.config.[jt]s, !graph/migrate/.eslintrc.json, !graph/migrate/.storybook/**/*, !graph/migrate/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/migrate/tsconfig.storybook.json, !graph/migrate/src/test-setup.[jt]s] }; { project: ui-render-config, patterns: [graph/ui-render-config/**/*, !graph/ui-render-config/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-render-config/tsconfig.spec.json, !graph/ui-render-config/jest.config.[jt]s, !graph/ui-render-config/.eslintrc.json, !graph/ui-render-config/.storybook/**/*, !graph/ui-render-config/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-render-config/tsconfig.storybook.json, !graph/ui-render-config/src/test-setup.[jt]s] }; { project: shared, patterns: [graph/shared/**/*, !graph/shared/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/shared/tsconfig.spec.json, !graph/shared/jest.config.[jt]s, !graph/shared/.eslintrc.json, !graph/shared/.storybook/**/*, !graph/shared/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/shared/tsconfig.storybook.json, !graph/shared/src/test-setup.[jt]s] }; { project: graph-ui-project-details, patterns: [graph/ui-project-details/**/*, !graph/ui-project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-project-details/tsconfig.spec.json, !graph/ui-project-details/jest.config.[jt]s, !graph/ui-project-details/.eslintrc.json, !graph/ui-project-details/.storybook/**/*, !graph/ui-project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-project-details/tsconfig.storybook.json, !graph/ui-project-details/src/test-setup.[jt]s] }; { project: ui-icons, patterns: [graph/ui-icons/**/*, !graph/ui-icons/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-icons/tsconfig.spec.json, !graph/ui-icons/jest.config.[jt]s, !graph/ui-icons/.eslintrc.json, !graph/ui-icons/.storybook/**/*, !graph/ui-icons/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-icons/tsconfig.storybook.json, !graph/ui-icons/src/test-setup.[jt]s] }; { project: ui-common, patterns: [graph/ui-common/**/*, !graph/ui-common/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-common/tsconfig.spec.json, !graph/ui-common/jest.config.[jt]s, !graph/ui-common/.eslintrc.json, !graph/ui-common/.storybook/**/*, !graph/ui-common/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-common/tsconfig.storybook.json, !graph/ui-common/src/test-setup.[jt]s] }; { project: graph-ui-code-block, patterns: [graph/ui-code-block/**/*, !graph/ui-code-block/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-code-block/tsconfig.spec.json, !graph/ui-code-block/jest.config.[jt]s, !graph/ui-code-block/.eslintrc.json, !graph/ui-code-block/.storybook/**/*, !graph/ui-code-block/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-code-block/tsconfig.storybook.json, !graph/ui-code-block/src/test-setup.[jt]s] }; { project: workspace, patterns: [nx.json, .gitignore, .nxignore] }; { project: workspace, patterns: [babel.config.json, .nx/workflows/agents.yaml, .github/workflows/ci.yml] }
  Outputs: [dist/apps/graph]
Task nx:build-native:
  FileSets: { project: workspace, patterns: [nx.json, .gitignore, .nxignore] }; { project: nx, patterns: [packages/nx/**/*.rs, packages/nx/**/Cargo.*] }
  Outputs: [packages/nx/src/native/*.node, packages/nx/src/native/!(index|browser).js, packages/nx/src/native/index.d.ts]
Task nx:build-base:
  FileSets: { project: workspace, patterns: [babel.config.json, .nx/workflows/agents.yaml, .github/workflows/ci.yml] }; { project: workspace, patterns: [nx.json, .gitignore, .nxignore] }; { project: graph-client, patterns: [graph/client/**/*, !graph/client/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/client/tsconfig.spec.json, !graph/client/jest.config.[jt]s, !graph/client/.eslintrc.json, !graph/client/.storybook/**/*, !graph/client/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/client/tsconfig.storybook.json, !graph/client/src/test-setup.[jt]s] }; { project: graph-ui-code-block, patterns: [graph/ui-code-block/**/*, !graph/ui-code-block/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-code-block/tsconfig.spec.json, !graph/ui-code-block/jest.config.[jt]s, !graph/ui-code-block/.eslintrc.json, !graph/ui-code-block/.storybook/**/*, !graph/ui-code-block/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-code-block/tsconfig.storybook.json, !graph/ui-code-block/src/test-setup.[jt]s] }; { project: graph-project-details, patterns: [graph/project-details/**/*, !graph/project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/project-details/tsconfig.spec.json, !graph/project-details/jest.config.[jt]s, !graph/project-details/.eslintrc.json, !graph/project-details/.storybook/**/*, !graph/project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/project-details/tsconfig.storybook.json, !graph/project-details/src/test-setup.[jt]s] }; { project: darwin-x64, patterns: [packages/nx/native-packages/darwin-x64/**/*, !packages/nx/native-packages/darwin-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-x64/tsconfig.spec.json, !packages/nx/native-packages/darwin-x64/jest.config.[jt]s, !packages/nx/native-packages/darwin-x64/.eslintrc.json, !packages/nx/native-packages/darwin-x64/.storybook/**/*, !packages/nx/native-packages/darwin-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-x64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-x64/src/test-setup.[jt]s] }; { project: darwin-arm64, patterns: [packages/nx/native-packages/darwin-arm64/**/*, !packages/nx/native-packages/darwin-arm64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-arm64/tsconfig.spec.json, !packages/nx/native-packages/darwin-arm64/jest.config.[jt]s, !packages/nx/native-packages/darwin-arm64/.eslintrc.json, !packages/nx/native-packages/darwin-arm64/.storybook/**/*, !packages/nx/native-packages/darwin-arm64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-arm64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-arm64/src/test-setup.[jt]s] }; { project: linux-arm-gnueabihf, patterns: [packages/nx/native-packages/linux-arm-gnueabihf/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.spec.json, !packages/nx/native-packages/linux-arm-gnueabihf/jest.config.[jt]s, !packages/nx/native-packages/linux-arm-gnueabihf/.eslintrc.json, !packages/nx/native-packages/linux-arm-gnueabihf/.storybook/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm-gnueabihf/src/test-setup.[jt]s] }; { project: linux-arm64-gnu, patterns: [packages/nx/native-packages/linux-arm64-gnu/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-arm64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-gnu/src/test-setup.[jt]s] }; { project: linux-arm64-musl, patterns: [packages/nx/native-packages/linux-arm64-musl/**/*, !packages/nx/native-packages/linux-arm64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-musl/.eslintrc.json, !packages/nx/native-packages/linux-arm64-musl/.storybook/**/*, !packages/nx/native-packages/linux-arm64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-musl/src/test-setup.[jt]s] }; { project: graph-ui-project-details, patterns: [graph/ui-project-details/**/*, !graph/ui-project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-project-details/tsconfig.spec.json, !graph/ui-project-details/jest.config.[jt]s, !graph/ui-project-details/.eslintrc.json, !graph/ui-project-details/.storybook/**/*, !graph/ui-project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-project-details/tsconfig.storybook.json, !graph/ui-project-details/src/test-setup.[jt]s] }; { project: linux-x64-musl, patterns: [packages/nx/native-packages/linux-x64-musl/**/*, !packages/nx/native-packages/linux-x64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-musl/.eslintrc.json, !packages/nx/native-packages/linux-x64-musl/.storybook/**/*, !packages/nx/native-packages/linux-x64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-musl/src/test-setup.[jt]s] }; { project: nx-dev-ui-fence, patterns: [nx-dev/ui-fence/**/*, !nx-dev/ui-fence/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !nx-dev/ui-fence/tsconfig.spec.json, !nx-dev/ui-fence/jest.config.[jt]s, !nx-dev/ui-fence/.eslintrc.json, !nx-dev/ui-fence/.storybook/**/*, !nx-dev/ui-fence/**/*.stories.@(js|jsx|ts|tsx|mdx), !nx-dev/ui-fence/tsconfig.storybook.json, !nx-dev/ui-fence/src/test-setup.[jt]s] }; { project: shared, patterns: [graph/shared/**/*, !graph/shared/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/shared/tsconfig.spec.json, !graph/shared/jest.config.[jt]s, !graph/shared/.eslintrc.json, !graph/shared/.storybook/**/*, !graph/shared/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/shared/tsconfig.storybook.json, !graph/shared/src/test-setup.[jt]s] }; { project: ui-common, patterns: [graph/ui-common/**/*, !graph/ui-common/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-common/tsconfig.spec.json, !graph/ui-common/jest.config.[jt]s, !graph/ui-common/.eslintrc.json, !graph/ui-common/.storybook/**/*, !graph/ui-common/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-common/tsconfig.storybook.json, !graph/ui-common/src/test-setup.[jt]s] }; { project: ui-icons, patterns: [graph/ui-icons/**/*, !graph/ui-icons/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-icons/tsconfig.spec.json, !graph/ui-icons/jest.config.[jt]s, !graph/ui-icons/.eslintrc.json, !graph/ui-icons/.storybook/**/*, !graph/ui-icons/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-icons/tsconfig.storybook.json, !graph/ui-icons/src/test-setup.[jt]s] }; { project: ui-render-config, patterns: [graph/ui-render-config/**/*, !graph/ui-render-config/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-render-config/tsconfig.spec.json, !graph/ui-render-config/jest.config.[jt]s, !graph/ui-render-config/.eslintrc.json, !graph/ui-render-config/.storybook/**/*, !graph/ui-render-config/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-render-config/tsconfig.storybook.json, !graph/ui-render-config/src/test-setup.[jt]s] }; { project: graph-migrate, patterns: [graph/migrate/**/*, !graph/migrate/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/migrate/tsconfig.spec.json, !graph/migrate/jest.config.[jt]s, !graph/migrate/.eslintrc.json, !graph/migrate/.storybook/**/*, !graph/migrate/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/migrate/tsconfig.storybook.json, !graph/migrate/src/test-setup.[jt]s] }; { project: win32-arm64-msvc, patterns: [packages/nx/native-packages/win32-arm64-msvc/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-arm64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-arm64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-arm64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-arm64-msvc/src/test-setup.[jt]s] }; { project: freebsd-x64, patterns: [packages/nx/native-packages/freebsd-x64/**/*, !packages/nx/native-packages/freebsd-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/freebsd-x64/tsconfig.spec.json, !packages/nx/native-packages/freebsd-x64/jest.config.[jt]s, !packages/nx/native-packages/freebsd-x64/.eslintrc.json, !packages/nx/native-packages/freebsd-x64/.storybook/**/*, !packages/nx/native-packages/freebsd-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/freebsd-x64/tsconfig.storybook.json, !packages/nx/native-packages/freebsd-x64/src/test-setup.[jt]s] }; { project: nx, patterns: [packages/nx/**/*, !packages/nx/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/tsconfig.spec.json, !packages/nx/jest.config.[jt]s, !packages/nx/.eslintrc.json, !packages/nx/.storybook/**/*, !packages/nx/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/tsconfig.storybook.json, !packages/nx/src/test-setup.[jt]s] }; { project: win32-x64-msvc, patterns: [packages/nx/native-packages/win32-x64-msvc/**/*, !packages/nx/native-packages/win32-x64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-x64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-x64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-x64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-x64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-x64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-x64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-x64-msvc/src/test-setup.[jt]s] }; { project: linux-x64-gnu, patterns: [packages/nx/native-packages/linux-x64-gnu/**/*, !packages/nx/native-packages/linux-x64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-x64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-x64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-gnu/src/test-setup.[jt]s] }
  Outputs: [dist/packages/nx]
Task nx:legacy-post-build:
  FileSets: { project: workspace, patterns: [babel.config.json, .nx/workflows/agents.yaml, .github/workflows/ci.yml] }; { project: workspace, patterns: [nx.json, .gitignore, .nxignore] }; { project: graph-project-details, patterns: [graph/project-details/**/*, !graph/project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/project-details/tsconfig.spec.json, !graph/project-details/jest.config.[jt]s, !graph/project-details/.eslintrc.json, !graph/project-details/.storybook/**/*, !graph/project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/project-details/tsconfig.storybook.json, !graph/project-details/src/test-setup.[jt]s] }; { project: graph-ui-code-block, patterns: [graph/ui-code-block/**/*, !graph/ui-code-block/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-code-block/tsconfig.spec.json, !graph/ui-code-block/jest.config.[jt]s, !graph/ui-code-block/.eslintrc.json, !graph/ui-code-block/.storybook/**/*, !graph/ui-code-block/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-code-block/tsconfig.storybook.json, !graph/ui-code-block/src/test-setup.[jt]s] }; { project: darwin-x64, patterns: [packages/nx/native-packages/darwin-x64/**/*, !packages/nx/native-packages/darwin-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-x64/tsconfig.spec.json, !packages/nx/native-packages/darwin-x64/jest.config.[jt]s, !packages/nx/native-packages/darwin-x64/.eslintrc.json, !packages/nx/native-packages/darwin-x64/.storybook/**/*, !packages/nx/native-packages/darwin-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-x64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-x64/src/test-setup.[jt]s] }; { project: graph-ui-project-details, patterns: [graph/ui-project-details/**/*, !graph/ui-project-details/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-project-details/tsconfig.spec.json, !graph/ui-project-details/jest.config.[jt]s, !graph/ui-project-details/.eslintrc.json, !graph/ui-project-details/.storybook/**/*, !graph/ui-project-details/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-project-details/tsconfig.storybook.json, !graph/ui-project-details/src/test-setup.[jt]s] }; { project: linux-arm64-gnu, patterns: [packages/nx/native-packages/linux-arm64-gnu/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-arm64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-arm64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-gnu/src/test-setup.[jt]s] }; { project: linux-arm-gnueabihf, patterns: [packages/nx/native-packages/linux-arm-gnueabihf/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.spec.json, !packages/nx/native-packages/linux-arm-gnueabihf/jest.config.[jt]s, !packages/nx/native-packages/linux-arm-gnueabihf/.eslintrc.json, !packages/nx/native-packages/linux-arm-gnueabihf/.storybook/**/*, !packages/nx/native-packages/linux-arm-gnueabihf/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm-gnueabihf/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm-gnueabihf/src/test-setup.[jt]s] }; { project: graph-client, patterns: [graph/client/**/*, !graph/client/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/client/tsconfig.spec.json, !graph/client/jest.config.[jt]s, !graph/client/.eslintrc.json, !graph/client/.storybook/**/*, !graph/client/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/client/tsconfig.storybook.json, !graph/client/src/test-setup.[jt]s] }; { project: graph-migrate, patterns: [graph/migrate/**/*, !graph/migrate/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/migrate/tsconfig.spec.json, !graph/migrate/jest.config.[jt]s, !graph/migrate/.eslintrc.json, !graph/migrate/.storybook/**/*, !graph/migrate/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/migrate/tsconfig.storybook.json, !graph/migrate/src/test-setup.[jt]s] }; { project: nx-dev-ui-fence, patterns: [nx-dev/ui-fence/**/*, !nx-dev/ui-fence/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !nx-dev/ui-fence/tsconfig.spec.json, !nx-dev/ui-fence/jest.config.[jt]s, !nx-dev/ui-fence/.eslintrc.json, !nx-dev/ui-fence/.storybook/**/*, !nx-dev/ui-fence/**/*.stories.@(js|jsx|ts|tsx|mdx), !nx-dev/ui-fence/tsconfig.storybook.json, !nx-dev/ui-fence/src/test-setup.[jt]s] }; { project: shared, patterns: [graph/shared/**/*, !graph/shared/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/shared/tsconfig.spec.json, !graph/shared/jest.config.[jt]s, !graph/shared/.eslintrc.json, !graph/shared/.storybook/**/*, !graph/shared/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/shared/tsconfig.storybook.json, !graph/shared/src/test-setup.[jt]s] }; { project: freebsd-x64, patterns: [packages/nx/native-packages/freebsd-x64/**/*, !packages/nx/native-packages/freebsd-x64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/freebsd-x64/tsconfig.spec.json, !packages/nx/native-packages/freebsd-x64/jest.config.[jt]s, !packages/nx/native-packages/freebsd-x64/.eslintrc.json, !packages/nx/native-packages/freebsd-x64/.storybook/**/*, !packages/nx/native-packages/freebsd-x64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/freebsd-x64/tsconfig.storybook.json, !packages/nx/native-packages/freebsd-x64/src/test-setup.[jt]s] }; { project: linux-x64-gnu, patterns: [packages/nx/native-packages/linux-x64-gnu/**/*, !packages/nx/native-packages/linux-x64-gnu/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-gnu/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-gnu/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-gnu/.eslintrc.json, !packages/nx/native-packages/linux-x64-gnu/.storybook/**/*, !packages/nx/native-packages/linux-x64-gnu/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-gnu/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-gnu/src/test-setup.[jt]s] }; { project: linux-x64-musl, patterns: [packages/nx/native-packages/linux-x64-musl/**/*, !packages/nx/native-packages/linux-x64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-x64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-x64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-x64-musl/.eslintrc.json, !packages/nx/native-packages/linux-x64-musl/.storybook/**/*, !packages/nx/native-packages/linux-x64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-x64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-x64-musl/src/test-setup.[jt]s] }; { project: darwin-arm64, patterns: [packages/nx/native-packages/darwin-arm64/**/*, !packages/nx/native-packages/darwin-arm64/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/darwin-arm64/tsconfig.spec.json, !packages/nx/native-packages/darwin-arm64/jest.config.[jt]s, !packages/nx/native-packages/darwin-arm64/.eslintrc.json, !packages/nx/native-packages/darwin-arm64/.storybook/**/*, !packages/nx/native-packages/darwin-arm64/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/darwin-arm64/tsconfig.storybook.json, !packages/nx/native-packages/darwin-arm64/src/test-setup.[jt]s] }; { project: nx, patterns: [packages/nx/**/*, !packages/nx/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/tsconfig.spec.json, !packages/nx/jest.config.[jt]s, !packages/nx/.eslintrc.json, !packages/nx/.storybook/**/*, !packages/nx/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/tsconfig.storybook.json, !packages/nx/src/test-setup.[jt]s] }; { project: linux-arm64-musl, patterns: [packages/nx/native-packages/linux-arm64-musl/**/*, !packages/nx/native-packages/linux-arm64-musl/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/linux-arm64-musl/tsconfig.spec.json, !packages/nx/native-packages/linux-arm64-musl/jest.config.[jt]s, !packages/nx/native-packages/linux-arm64-musl/.eslintrc.json, !packages/nx/native-packages/linux-arm64-musl/.storybook/**/*, !packages/nx/native-packages/linux-arm64-musl/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/linux-arm64-musl/tsconfig.storybook.json, !packages/nx/native-packages/linux-arm64-musl/src/test-setup.[jt]s] }; { project: win32-x64-msvc, patterns: [packages/nx/native-packages/win32-x64-msvc/**/*, !packages/nx/native-packages/win32-x64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-x64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-x64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-x64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-x64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-x64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-x64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-x64-msvc/src/test-setup.[jt]s] }; { project: ui-render-config, patterns: [graph/ui-render-config/**/*, !graph/ui-render-config/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-render-config/tsconfig.spec.json, !graph/ui-render-config/jest.config.[jt]s, !graph/ui-render-config/.eslintrc.json, !graph/ui-render-config/.storybook/**/*, !graph/ui-render-config/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-render-config/tsconfig.storybook.json, !graph/ui-render-config/src/test-setup.[jt]s] }; { project: ui-common, patterns: [graph/ui-common/**/*, !graph/ui-common/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-common/tsconfig.spec.json, !graph/ui-common/jest.config.[jt]s, !graph/ui-common/.eslintrc.json, !graph/ui-common/.storybook/**/*, !graph/ui-common/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-common/tsconfig.storybook.json, !graph/ui-common/src/test-setup.[jt]s] }; { project: ui-icons, patterns: [graph/ui-icons/**/*, !graph/ui-icons/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !graph/ui-icons/tsconfig.spec.json, !graph/ui-icons/jest.config.[jt]s, !graph/ui-icons/.eslintrc.json, !graph/ui-icons/.storybook/**/*, !graph/ui-icons/**/*.stories.@(js|jsx|ts|tsx|mdx), !graph/ui-icons/tsconfig.storybook.json, !graph/ui-icons/src/test-setup.[jt]s] }; { project: win32-arm64-msvc, patterns: [packages/nx/native-packages/win32-arm64-msvc/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/?(*.)+(spec|test).[jt]s?(x)?(.snap), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.spec.json, !packages/nx/native-packages/win32-arm64-msvc/jest.config.[jt]s, !packages/nx/native-packages/win32-arm64-msvc/.eslintrc.json, !packages/nx/native-packages/win32-arm64-msvc/.storybook/**/*, !packages/nx/native-packages/win32-arm64-msvc/**/*.stories.@(js|jsx|ts|tsx|mdx), !packages/nx/native-packages/win32-arm64-msvc/tsconfig.storybook.json, !packages/nx/native-packages/win32-arm64-msvc/src/test-setup.[jt]s] }
  Outputs: [dist/packages/nx]

Related Issue(s)

Fixes #

@vercel
Copy link

vercel bot commented Jan 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
nx-dev Ready Ready Preview Feb 3, 2026 9:50pm

Request Review

@netlify
Copy link

netlify bot commented Jan 23, 2026

Deploy Preview for nx-docs ready!

Name Link
🔨 Latest commit b1f7987
🔍 Latest deploy log https://app.netlify.com/projects/nx-docs/deploys/69826bf97e504300089aa50d
😎 Deploy Preview https://deploy-preview-34205--nx-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@nx-cloud
Copy link
Contributor

nx-cloud bot commented Jan 23, 2026

View your CI Pipeline Execution ↗ for commit b1f7987

Command Status Duration Result
nx affected --targets=lint,test,test-kt,build,e... ✅ Succeeded 53m 23s View ↗
nx run-many -t check-imports check-lock-files c... ✅ Succeeded 2m 50s View ↗
nx-cloud record -- nx-cloud conformance:check ✅ Succeeded 11s View ↗
nx-cloud record -- nx format:check ✅ Succeeded 3s View ↗
nx-cloud record -- nx sync:check ✅ Succeeded <1s View ↗

☁️ Nx Cloud last updated this comment at 2026-02-03 22:41:44 UTC

@github-actions
Copy link
Contributor

🐳 We have a release for that!

This PR has a release associated with it. You can try it out using this command:

npx create-nx-workspace@0.0.0-pr-34205-7a03d44 my-workspace

Or just copy this version and use it in your own command:

0.0.0-pr-34205-7a03d44
Release details 📑
Published version 0.0.0-pr-34205-7a03d44
Triggered by @AgentEnder
Branch feat/task-io-service
Commit 7a03d44
Workflow run 21297211006

To request a new release for this pull request, mention someone from the Nx team or the @nrwl/nx-pipelines-reviewers.

nx-cloud[bot]

This comment was marked as outdated.

all_workspace_files: &'b [FileData],
) -> napi::Result<impl ParallelIterator<Item = &'b FileData>> {
let globs = globs_from_workspace_inputs(workspace_file_sets);
let globs = expand_workspace_globs(workspace_file_sets);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bad name from AI, not expanding glob, just removing {workspaceRoot}


/// Expands project file set patterns by replacing `{projectRoot}` with the actual project root.
/// For root projects (project_root == "."), strips `{projectRoot}/` instead.
pub fn expand_project_globs(project_root: &str, file_sets: &[String]) -> Vec<String> {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

globs_from_project_globs

@github-actions
Copy link
Contributor

🐳 We have a release for that!

This PR has a release associated with it. You can try it out using this command:

npx create-nx-workspace@0.0.0-pr-34205-604567c my-workspace

Or just copy this version and use it in your own command:

0.0.0-pr-34205-604567c
Release details 📑
Published version 0.0.0-pr-34205-604567c
Triggered by @AgentEnder
Branch feat/task-io-service
Commit 604567c
Workflow run 21308561051

To request a new release for this pull request, mention someone from the Nx team or the @nrwl/nx-pipelines-reviewers.

@github-actions
Copy link
Contributor

🐳 We have a release for that!

This PR has a release associated with it. You can try it out using this command:

npx create-nx-workspace@0.0.0-pr-34205-6b29262 my-workspace

Or just copy this version and use it in your own command:

0.0.0-pr-34205-6b29262
Release details 📑
Published version 0.0.0-pr-34205-6b29262
Triggered by @AgentEnder
Branch feat/task-io-service
Commit 6b29262
Workflow run 21431498093

To request a new release for this pull request, mention someone from the Nx team or the @nrwl/nx-pipelines-reviewers.

nx-cloud[bot]

This comment was marked as outdated.

/**
* Structured inputs used for hashing (file paths, env vars, etc.)
*/
hashInputs?: {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this?

: hasher.hashTask(task, taskGraph, env));
task.hash = value;
task.hashDetails = details;
task.hashInputs = inputs;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not needed.

} as any);
task.hash = value;
task.hashDetails = details;
task.hashInputs = inputs;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not needed.

for (let i = 0; i < tasksWithoutCustomHashers.length; i++) {
tasksWithoutCustomHashers[i].hash = hashes[i].value;
tasksWithoutCustomHashers[i].hashDetails = hashes[i].details;
tasksWithoutCustomHashers[i].hashInputs = hashes[i].inputs;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not needed

/**
* Structured inputs used for hashing
*/
export interface HashInputs {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import this from rust

* may have spawned multiple processes. To get all PIDs for a task,
* you need to correlate spawned processes via their parent PID.
*/
getAllTaskPids(): Map<string, number> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this

* The task must have been hashed (task.hashInputs must be populated).
* Returns file inputs and outputs.
*/
getTaskIOInfo(task: string): TaskIOInfo | null {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this

* Get expanded output paths for a task.
* Resolves {projectRoot} and {workspaceRoot} placeholders.
*/
getExpandedOutputs(task: Task): string[] {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this

}
}

class DebugTaskIOService extends TaskIOService {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this before landing

export function getTaskIOService(): TaskIOService {
if (!instance) {
// TODO: Remove debug service option once stable
instance = process.env.NX_TASK_IO_DEBUG
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this before landing

nx-cloud[bot]

This comment was marked as outdated.

Copy link
Contributor

@nx-cloud nx-cloud bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

At least one additional CI pipeline execution has run since the conclusion below was written and it may no longer be applicable.

Nx Cloud is proposing a fix for your failed CI:

These changes fix the test failures in project-configuration-utils.spec.ts by updating the error message to match the test expectations. The PR updated the test assertions to expect "at the beginning of a string" but the implementation code was not updated accordingly, causing the tests to fail with a mismatch between expected and actual error messages.

Tip

We verified this fix by re-running nx:test.

diff --git a/packages/nx/src/project-graph/utils/project-configuration-utils.ts b/packages/nx/src/project-graph/utils/project-configuration-utils.ts
index 1a1c99b622..c6c36639be 100644
--- a/packages/nx/src/project-graph/utils/project-configuration-utils.ts
+++ b/packages/nx/src/project-graph/utils/project-configuration-utils.ts
@@ -1155,7 +1155,7 @@ export function resolveNxTokensInOptions<T extends Object | Array<unknown>>(
       }
       if (value.includes('{workspaceRoot}')) {
         throw new Error(
-          `${NX_PREFIX} The {workspaceRoot} token is only valid at the beginning of an option. (${key})`
+          `${NX_PREFIX} The {workspaceRoot} token is only valid at the beginning of a string. (${key})`
         );
       }
       value = value.replace(/\{projectRoot\}/g, project.root);

Apply fix via Nx Cloud  Reject fix via Nx Cloud


Or Apply changes locally with:

npx nx-cloud apply-locally IaNW-EOc8

Apply fix locally with your editor ↗   View interactive diff ↗


🎓 Learn more about Self-Healing CI on nx.dev

@AgentEnder AgentEnder requested review from a team as code owners February 2, 2026 15:27
@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

Failed to publish a PR release of this pull request, triggered by @AgentEnder.
See the failed workflow run at: https://github.com/nrwl/nx/actions/runs/21594700329

@github-actions
Copy link
Contributor

github-actions bot commented Feb 2, 2026

🐳 We have a release for that!

This PR has a release associated with it. You can try it out using this command:

npx create-nx-workspace@0.0.0-pr-34205-a933748 my-workspace

Or just copy this version and use it in your own command:

0.0.0-pr-34205-a933748
Release details 📑
Published version 0.0.0-pr-34205-a933748
Triggered by @AgentEnder
Branch feat/task-io-service
Commit a933748
Workflow run 21599563754

To request a new release for this pull request, mention someone from the Nx team or the @nrwl/nx-pipelines-reviewers.

class TaskIOService {
// Used to call subscribers that were late to the party
protected taskToPids: Map<string, number> = new Map();
protected taskToInputs: Map<string, TaskInputInfo> = new Map();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need a 3rd for outputs right?


trace!(parent: &span, "hash_tsconfig: {:?}", now.elapsed());
ts_hash
(ts_hash, vec![])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this not be the tsconfig file?

Update the native task hasher to return expanded file paths instead of
glob patterns. This implements "glob once, use twice" optimization where
files are collected during the hashing operation and returned alongside
the hash value.

- Add hash_project_files_with_inputs returning ProjectFilesHashResult
- Add hash_workspace_files_with_inputs returning WorkspaceFilesHashResult
- Update HashInputs to use files: Vec<String> instead of file_sets
- Remove original hash_project_files/hash_workspace_files functions
- Remove workspace_files_cache as it's no longer needed
Wire up the expanded hash inputs from the Rust hasher to the
TaskIOService subscription system. This enables cloud consumption
of task input file paths.

- Update HashInputs interface to use files: string[]
- Add subscribeToHashInputs/notifyHashInputs to TaskIOService
- Call notifyHashInputs from hash-task.ts when inputs are computed
- Update TaskIOInfo to use files instead of fileSets
- Update test snapshots to expect expanded file paths
TaskOutput hashing now returns both the hash and the list of files
that were actually hashed. This allows depOutputs in HashInputs to
contain actual file paths instead of the task output string pattern.

- Add TaskOutputHashResult struct with hash and files
- Update task_hasher to use files from TaskOutput for depOutputs
- Separate file tracking for WorkspaceFileSet/ProjectFileSet vs TaskOutput
… type

- Import HashInputs from native module instead of defining manually
- Remove hashInputs field from Task type (not needed externally)
- Remove task.hashInputs assignments (data flows via TaskIOService)
- Update snapshots for new file ordering in depOutputs
- Change init() to constructor with projectGraph/taskGraph parameters
- Remove getter methods (getPidForTask, getAllTaskPids, getTaskIOInfo, getExpandedOutputs)
- Remove outputGlobs from TaskIOInfo (outputs come from DbCache now)
- Add notifyTaskOutputs and subscribeToTaskOutputs methods
- Update DebugTaskIOService for new constructor pattern
…cribe

Change subscribe() return type from ProcessMetricsService to void
as method chaining is not used.
DbCache now calls TaskIOService.notifyTaskOutputs() after caching
task outputs with the expanded file paths. This provides real file
paths to subscribers instead of glob patterns with tokens.
The resolveNxTokensInString extraction is no longer needed since
outputs will be real file paths from DbCache, not globs with tokens.
Rename subscribeToTaskIO to subscribeToTaskInputs, notifyTaskIO to
notifyTaskInputs, and TaskIOInfo to TaskInputInfo for better clarity
about what these methods handle.
@AgentEnder AgentEnder merged commit 7478cbb into master Feb 3, 2026
20 checks passed
@AgentEnder AgentEnder deleted the feat/task-io-service branch February 3, 2026 22:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants