diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2578df232..bd67fbc87 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,6 +10,8 @@ jobs:
library:
name: Library — lint / test / build
runs-on: ubuntu-latest
+ env:
+ LIBS: chat,langgraph,ag-ui,render,a2ui,partial-json,licensing
steps:
- uses: actions/checkout@v6.0.2
- uses: actions/setup-node@v6.3.0
@@ -17,9 +19,9 @@ jobs:
node-version: 22
cache: npm
- run: npm ci
- - run: npx nx lint langgraph
- - run: npx nx test langgraph --coverage
- - run: npx nx build langgraph --configuration=production
+ - run: npx nx run-many -t lint --projects=$LIBS
+ - run: npx nx run-many -t test --projects=$LIBS --coverage
+ - run: npx nx run-many -t build --projects=$LIBS --configuration=production
website:
name: Website — lint / build
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index eef1883eb..7272a60c1 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -29,6 +29,12 @@ jobs:
- run: npm ci
+ # Trusted publishing requires npm CLI 11.5.1+. Node 22's bundled npm
+ # is 10.x which has partial OIDC support but doesn't fully implement
+ # the trusted-publishing flow against npm registry's OIDC endpoint.
+ - name: Upgrade npm to support trusted publishing
+ run: npm install -g npm@latest
+
- name: Lint, test, build publishable projects
run: npx nx run-many -t lint,test,build --projects=$NPM_PUBLISHABLE_PROJECTS --skip-nx-cache
diff --git a/AGENTS.md b/AGENTS.md
index ba37d00ae..37cca81b6 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -40,7 +40,6 @@ This file is for agents working in this repository. It is contributor-facing, no
- `apps/website`: docs and marketing site.
- `packages/mcp`: MCP server package (`@ngaf/langgraph-mcp`).
- `e2e/agent-e2e`: end-to-end coverage for the workspace.
-- `apps/demo` and `apps/demo-e2e`: demo application and related end-to-end coverage.
## Working in This Repo
diff --git a/apps/demo-e2e/eslint.config.mjs b/apps/demo-e2e/eslint.config.mjs
deleted file mode 100644
index b2e9fac09..000000000
--- a/apps/demo-e2e/eslint.config.mjs
+++ /dev/null
@@ -1,12 +0,0 @@
-import playwright from 'eslint-plugin-playwright';
-import baseConfig from '../../eslint.config.mjs';
-
-export default [
- playwright.configs['flat/recommended'],
- ...baseConfig,
- {
- files: ['**/*.ts', '**/*.js'],
- // Override or add rules here
- rules: {},
- },
-];
diff --git a/apps/demo-e2e/package.json b/apps/demo-e2e/package.json
deleted file mode 100644
index a55915cf6..000000000
--- a/apps/demo-e2e/package.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "name": "demo-e2e",
- "version": "0.0.1",
- "private": true
-}
diff --git a/apps/demo-e2e/playwright.config.ts b/apps/demo-e2e/playwright.config.ts
deleted file mode 100644
index adc60565c..000000000
--- a/apps/demo-e2e/playwright.config.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { defineConfig, devices } from '@playwright/test';
-import { nxE2EPreset } from '@nx/playwright/preset';
-import { workspaceRoot } from '@nx/devkit';
-
-// For CI, you may want to set BASE_URL to the deployed application.
-const baseURL = process.env['BASE_URL'] || 'http://localhost:4200';
-
-/**
- * Read environment variables from file.
- * https://github.com/motdotla/dotenv
- */
-// require('dotenv').config();
-
-/**
- * See https://playwright.dev/docs/test-configuration.
- */
-export default defineConfig({
- ...nxE2EPreset(__filename, { testDir: './src' }),
- /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
- use: {
- baseURL,
- /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
- trace: 'on-first-retry',
- },
- /* Run your local dev server before starting the tests */
- webServer: {
- command: 'npx nx run demo:serve',
- url: 'http://localhost:4200',
- reuseExistingServer: true,
- cwd: workspaceRoot,
- },
- projects: [
- {
- name: 'chromium',
- use: { ...devices['Desktop Chrome'] },
- },
-
- {
- name: 'firefox',
- use: { ...devices['Desktop Firefox'] },
- },
-
- {
- name: 'webkit',
- use: { ...devices['Desktop Safari'] },
- },
-
- // Uncomment for mobile browsers support
- /* {
- name: 'Mobile Chrome',
- use: { ...devices['Pixel 5'] },
- },
- {
- name: 'Mobile Safari',
- use: { ...devices['iPhone 12'] },
- }, */
-
- // Uncomment for branded browsers
- /* {
- name: 'Microsoft Edge',
- use: { ...devices['Desktop Edge'], channel: 'msedge' },
- },
- {
- name: 'Google Chrome',
- use: { ...devices['Desktop Chrome'], channel: 'chrome' },
- } */
- ],
-});
diff --git a/apps/demo-e2e/project.json b/apps/demo-e2e/project.json
deleted file mode 100644
index f40d7f50d..000000000
--- a/apps/demo-e2e/project.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "demo-e2e",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "application",
- "sourceRoot": "apps/demo-e2e/src",
- "implicitDependencies": ["demo"],
- "// targets": "to see all targets run: nx show project demo-e2e --web",
- "targets": {}
-}
diff --git a/apps/demo-e2e/src/example.spec.ts b/apps/demo-e2e/src/example.spec.ts
deleted file mode 100644
index fa8f1f335..000000000
--- a/apps/demo-e2e/src/example.spec.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { test, expect } from '@playwright/test';
-
-test('has title', async ({ page }) => {
- await page.goto('/');
-
- // Expect h1 to contain a substring.
- expect(await page.locator('h1').innerText()).toContain('Welcome');
-});
diff --git a/apps/demo-e2e/tsconfig.json b/apps/demo-e2e/tsconfig.json
deleted file mode 100644
index 82ac3f1b8..000000000
--- a/apps/demo-e2e/tsconfig.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "allowJs": true,
- "outDir": "out-tsc/playwright",
- "sourceMap": false,
- "strict": true,
- "noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": [
- "**/*.ts",
- "**/*.js",
- "playwright.config.ts",
- "src/**/*.spec.ts",
- "src/**/*.spec.js",
- "src/**/*.test.ts",
- "src/**/*.test.js",
- "src/**/*.d.ts"
- ],
- "exclude": [
- "out-tsc",
- "test-output",
- "eslint.config.js",
- "eslint.config.mjs",
- "eslint.config.cjs"
- ]
-}
diff --git a/apps/demo/eslint.config.mjs b/apps/demo/eslint.config.mjs
deleted file mode 100644
index 9b3aa715c..000000000
--- a/apps/demo/eslint.config.mjs
+++ /dev/null
@@ -1,34 +0,0 @@
-import nx from '@nx/eslint-plugin';
-import baseConfig from '../../eslint.config.mjs';
-
-export default [
- ...baseConfig,
- ...nx.configs['flat/angular'],
- ...nx.configs['flat/angular-template'],
- {
- files: ['**/*.ts'],
- rules: {
- '@angular-eslint/directive-selector': [
- 'error',
- {
- type: 'attribute',
- prefix: 'app',
- style: 'camelCase',
- },
- ],
- '@angular-eslint/component-selector': [
- 'error',
- {
- type: 'element',
- prefix: 'app',
- style: 'kebab-case',
- },
- ],
- },
- },
- {
- files: ['**/*.html'],
- // Override or add rules here
- rules: {},
- },
-];
diff --git a/apps/demo/project.json b/apps/demo/project.json
deleted file mode 100644
index bc58075bc..000000000
--- a/apps/demo/project.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "name": "demo",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "application",
- "prefix": "app",
- "sourceRoot": "apps/demo/src",
- "tags": [],
- "targets": {
- "build": {
- "executor": "@angular/build:application",
- "outputs": ["{options.outputPath.base}"],
- "options": {
- "outputPath": { "base": "apps/website/public/demo", "browser": "" },
- "browser": "apps/demo/src/main.ts",
- "tsConfig": "apps/demo/tsconfig.app.json",
- "assets": [
- {
- "glob": "**/*",
- "input": "apps/demo/public"
- }
- ],
- "styles": ["apps/demo/src/styles.css"]
- },
- "configurations": {
- "production": {
- "budgets": [
- {
- "type": "initial",
- "maximumWarning": "500kb",
- "maximumError": "1mb"
- },
- {
- "type": "anyComponentStyle",
- "maximumWarning": "4kb",
- "maximumError": "8kb"
- }
- ],
- "outputHashing": "none"
- },
- "development": {
- "optimization": false,
- "extractLicenses": false,
- "sourceMap": true
- }
- },
- "defaultConfiguration": "production"
- },
- "serve": {
- "continuous": true,
- "executor": "@angular/build:dev-server",
- "configurations": {
- "production": {
- "buildTarget": "demo:build:production"
- },
- "development": {
- "buildTarget": "demo:build:development"
- }
- },
- "defaultConfiguration": "development"
- },
- "lint": {
- "executor": "@nx/eslint:lint"
- },
- "test": {
- "executor": "@angular/build:unit-test",
- "options": {}
- },
- "serve-static": {
- "continuous": true,
- "executor": "@nx/web:file-server",
- "options": {
- "buildTarget": "demo:build",
- "port": 4200,
- "staticFilePath": "dist/apps/demo/browser",
- "spa": true
- }
- }
- }
-}
diff --git a/apps/demo/public/favicon.ico b/apps/demo/public/favicon.ico
deleted file mode 100644
index 317ebcb23..000000000
Binary files a/apps/demo/public/favicon.ico and /dev/null differ
diff --git a/apps/demo/src/app/app.config.ts b/apps/demo/src/app/app.config.ts
deleted file mode 100644
index 50d39c4f8..000000000
--- a/apps/demo/src/app/app.config.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import {
- ApplicationConfig,
- provideBrowserGlobalErrorListeners,
-} from '@angular/core';
-
-export const appConfig: ApplicationConfig = {
- providers: [provideBrowserGlobalErrorListeners()],
-};
diff --git a/apps/demo/src/app/app.css b/apps/demo/src/app/app.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/apps/demo/src/app/app.html b/apps/demo/src/app/app.html
deleted file mode 100644
index 69da4c31e..000000000
--- a/apps/demo/src/app/app.html
+++ /dev/null
@@ -1 +0,0 @@
-
- You can activate distributed tasks executions and caching by - running: -
-nx connect- - What is Nx Cloud? - -
Here are some things you can do with Nx:
-# Build -nx build -# Test -nx test -# Lint -nx lint -# Run them together! -nx run-many -t build test lint-
nx show project demo-
nx graph-
# Generate UI lib -nx g @nx/angular:lib ui -# Add a component -nx g @nx/angular:component ui/src/lib/button-
- Carefully crafted with - -
-