diff --git a/AGENTS.md b/AGENTS.md index 5014cdbcb8f..47c05002c4b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -127,7 +127,14 @@ - Node remains supported for running built output (`dist/*`) and production installs. - Mac packaging (dev): `scripts/package-mac-app.sh` defaults to current arch. - Type-check/build: `pnpm build` -- TypeScript checks: `pnpm tsgo` (prod graph), `pnpm tsgo:test` (full colocated-test graph), `pnpm tsgo:all` (both; used by `pnpm check`). Targeted test graphs: `pnpm tsgo:test:src`, `pnpm tsgo:test:extensions`, `pnpm tsgo:test:ui`, `pnpm tsgo:test:packages`. +- TypeScript checks are split by architecture boundary: + - `pnpm tsgo` / `pnpm tsgo:core`: core production graph (`src/`, `ui/`, `packages/`; no `extensions/`). + - `pnpm tsgo:core:test`: core colocated tests. + - `pnpm tsgo:extensions`: bundled extension production graph. + - `pnpm tsgo:extensions:test`: bundled extension colocated tests. + - `pnpm tsgo:all`: every TypeScript graph above; this is what `pnpm check` runs. + - Narrow aliases remain for local loops: `pnpm tsgo:test:src`, `pnpm tsgo:test:ui`, `pnpm tsgo:test:packages`. +- Boundary rule: core must not know extension implementation details. Extensions hook into core through manifests, registries, capabilities, and public `openclaw/plugin-sdk/*` contracts. If you find core production code naming a specific extension, or a core test that is really testing extension-owned behavior, call it out and prefer moving coverage/logic to the owning extension or a generic contract test. - Lint/format: `pnpm check` - Local agent/dev shells default to host-aware `OPENCLAW_LOCAL_CHECK=1` behavior for `pnpm tsgo` and `pnpm lint`; set `OPENCLAW_LOCAL_CHECK_MODE=throttled` to force the lower-memory profile, `OPENCLAW_LOCAL_CHECK_MODE=full` to keep lock-only behavior, or `OPENCLAW_LOCAL_CHECK=0` in CI/shared runs. - Format check: `pnpm format:check` (oxfmt --check) diff --git a/package.json b/package.json index f08eea715b9..613a553608c 100644 --- a/package.json +++ b/package.json @@ -1465,11 +1465,15 @@ "tool-display:check": "node --import tsx scripts/tool-display.ts --check", "tool-display:write": "node --import tsx scripts/tool-display.ts --write", "ts-topology": "node --import tsx scripts/ts-topology.ts", - "tsgo": "pnpm tsgo:prod", - "tsgo:all": "pnpm tsgo:prod && pnpm tsgo:test", - "tsgo:prod": "node scripts/run-tsgo.mjs -p tsconfig.prod.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/prod.tsbuildinfo", - "tsgo:test": "node scripts/run-tsgo.mjs -p tsconfig.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test.tsbuildinfo", - "tsgo:test:extensions": "node scripts/run-tsgo.mjs -p tsconfig.test.extensions.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-extensions.tsbuildinfo", + "tsgo": "pnpm tsgo:core", + "tsgo:all": "pnpm tsgo:core && pnpm tsgo:core:test && pnpm tsgo:extensions && pnpm tsgo:extensions:test", + "tsgo:core": "node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo", + "tsgo:core:test": "node scripts/run-tsgo.mjs -p tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo", + "tsgo:extensions": "node scripts/run-tsgo.mjs -p tsconfig.extensions.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions.tsbuildinfo", + "tsgo:extensions:test": "node scripts/run-tsgo.mjs -p tsconfig.extensions.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions-test.tsbuildinfo", + "tsgo:prod": "pnpm tsgo:core && pnpm tsgo:extensions", + "tsgo:test": "pnpm tsgo:core:test && pnpm tsgo:extensions:test", + "tsgo:test:extensions": "pnpm tsgo:extensions:test", "tsgo:test:packages": "node scripts/run-tsgo.mjs -p tsconfig.test.packages.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-packages.tsbuildinfo", "tsgo:test:src": "node scripts/run-tsgo.mjs -p tsconfig.test.src.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-src.tsbuildinfo", "tsgo:test:ui": "node scripts/run-tsgo.mjs -p tsconfig.test.ui.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-ui.tsbuildinfo", diff --git a/tsconfig.prod.json b/tsconfig.core.json similarity index 70% rename from tsconfig.prod.json rename to tsconfig.core.json index b61411212fb..df9a44d263a 100644 --- a/tsconfig.prod.json +++ b/tsconfig.core.json @@ -1,4 +1,5 @@ { "extends": "./tsconfig.json", + "include": ["src/**/*", "ui/**/*", "packages/**/*"], "exclude": ["node_modules", "dist", "**/dist/**", "**/*.test.ts", "**/*.test.tsx", "test/**"] } diff --git a/tsconfig.core.test.json b/tsconfig.core.test.json new file mode 100644 index 00000000000..4ab78100845 --- /dev/null +++ b/tsconfig.core.test.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.test.json", + "include": [ + "src/**/*.d.ts", + "src/**/*.test.ts", + "src/**/*.test.tsx", + "ui/**/*.d.ts", + "ui/src/ui/app.ts", + "ui/**/*.test.ts", + "ui/**/*.test.tsx", + "packages/**/*.d.ts", + "packages/**/*.test.ts", + "packages/**/*.test.tsx" + ] +} diff --git a/tsconfig.extensions.json b/tsconfig.extensions.json new file mode 100644 index 00000000000..60f4061c5fb --- /dev/null +++ b/tsconfig.extensions.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.d.ts", "ui/src/**/*.d.ts", "extensions/**/*"], + "exclude": ["node_modules", "dist", "**/dist/**", "**/*.test.ts", "**/*.test.tsx", "test/**"] +} diff --git a/tsconfig.test.extensions.json b/tsconfig.extensions.test.json similarity index 100% rename from tsconfig.test.extensions.json rename to tsconfig.extensions.test.json