* fix(test): wire src/resources/extensions/shared/tests/ into test:unit runner The test:unit glob excluded src/resources/extensions/shared/tests/ entirely, leaving format-utils.test.ts (and any future tests there) silently unfired. - Add shared/tests/*.test.ts to the test:unit glob in package.json - Export newestSrcMtime from ensure-workspace-builds.cjs (require.main guard prevents side-effects on require) so the staleness logic can be tested - Add src/tests/ensure-workspace-builds.test.ts covering newestSrcMtime: non-existent dir, no .ts files, single file, max of multiple, recursion, node_modules skip Closes #2808 * perf(test): compile unit tests with esbuild and fix dist-test/node_modules Replace per-file --experimental-strip-types with a single esbuild compilation step (scripts/compile-tests.mjs) that compiles all src/ TypeScript to dist-test/ in ~3s, then runs the pre-compiled JS. Eliminates ~1.7s Node startup overhead per test file. - scripts/compile-tests.mjs: esbuild compilation, asset copy, .ts→.js rewrite, stale file cleanup; creates dist-test/node_modules symlink so resource-loader.ts resolves gsdNodeModules to a real path (fixes node-modules-symlink test failure) - scripts/dist-test-resolve.mjs: ESM loader hook for @gsd/* bare specifiers and .ts→.js fallback rewriting at runtime - .gitignore: exclude dist-test/ from version control - package.json: add test:compile script; update test:unit to compile-then-run; update test:integration globs to cover new integration/ subdirectories - worker-registry.ts: unref() cleanup timer so it does not keep the Node process alive after tests complete Closes #2858 * fix(test): update relative imports in tests/integration/ after directory move When tests were moved from tests/ to tests/integration/ in the previous commit, relative imports weren't updated. ../foo now resolves one level too shallow. Fix all 117 import paths across 43 test files: - ../foo → ../../foo (source files at gsd/ level) - ../../get-secrets-from-user.ts → ../../../ (at extensions/ level) - ../../subagent/worker-registry.ts → ../../../ (at extensions/ level) - ./marketplace-test-fixtures.js → ../marketplace-test-fixtures.ts - ./test-helpers.ts → ../test-helpers.ts typecheck:extensions now passes with zero errors. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(integration): set 10-minute timeout for integration test runner build job takes ~7min on main. Without a global timeout, hanging tests block the suite indefinitely. --test-timeout=600000 caps each test at 10min. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Revert "test(integration): set 10-minute timeout for integration test runner" This reverts commit be77ead77d369ad8569292ae6b69ba56435f5433. * fix(test): correct formatDuration(0) edge case and docker test root path - formatDuration(0) now returns '0s' instead of '0ms' by guarding the sub-second branch with ms > 0 - docker-template.test.ts root path goes ../../.. from dist-test/src/tests/ to reach project root instead of landing in dist-test/ - replace require() calls in skill-health.ts and visualizer-overlay.ts with proper ES module imports Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): correct relative import paths in integration tests All affected tests were one directory level off — importing from ../web/ and ../resources/ when the correct paths are ../../web/ and ../../resources/. Tests live at src/tests/integration/, not src/tests/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): add esbuild to root devDeps and wire dist-test-resolve hook P1: esbuild was only in web/package.json — compile-tests.mjs requires it at the root node_modules path, so CI failed on clean installs. P2: dist-test-resolve.mjs existed but was never loaded; @gsd/* imports in compiled tests resolved to installed workspace packages instead of freshly compiled dist-test output. Add --import to test:unit. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(deps): align esbuild version with lock file (0.25.12) ^0.27.4 didn't satisfy the existing lock file entry. Use the version already present so npm ci passes without regenerating the lock file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): correct all relative import depths in src/tests/integration/ Tests in src/tests/integration/ need 3 levels up (../../..) to reach project-root dirs (web/, packages/) and 2 levels up (../..) to reach src-level dirs (src/web/, src/cli-web-branch.ts). Fixes: - ../../web/lib/ → ../../../web/lib/ (Next.js app, not src/web/) - ../../web/app/ → ../../../web/app/ - ../../packages/ → ../../../packages/ - ../cli-web-branch.ts → ../../cli-web-branch.ts - ../web-mode.ts → ../../web-mode.ts - ../resources/extensions/ → ../../resources/extensions/ - ci_monitor ROOT path: 2 levels up → 3 levels up - web-responsive WEB_ROOT: 2 levels up → 3 levels up Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(test): use dot reporter for test:unit to reduce noise Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(test): switch test:unit reporter to tap Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(test): compact test reporter — silent on pass, failures + summary only Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(test): include shared/tests in test:coverage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): correct path depths in tests moved to integration/ Tests moved from tests/ to tests/integration/ need one extra ../ to reach the same source files. Also fix web component paths — those files live at web/ not src/web/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): fix web component paths in web-session-parity-contract Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): use process.cwd() for project root in docker-template test Resolving relative to __dirname breaks under test:coverage which runs source files directly from src/tests/ — needs ../.. not ../../.. (the extra level only exists in the compiled dist-test/ output). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ci: retrigger CI --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
157 lines
8.3 KiB
JSON
157 lines
8.3 KiB
JSON
{
|
|
"name": "gsd-pi",
|
|
"version": "2.55.0",
|
|
"description": "GSD — Get Shit Done coding agent",
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/gsd-build/gsd-2.git"
|
|
},
|
|
"homepage": "https://github.com/gsd-build/gsd-2#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/gsd-build/gsd-2/issues"
|
|
},
|
|
"type": "module",
|
|
"workspaces": [
|
|
"packages/*",
|
|
"studio"
|
|
],
|
|
"bin": {
|
|
"gsd": "dist/loader.js",
|
|
"gsd-cli": "dist/loader.js"
|
|
},
|
|
"files": [
|
|
"dist",
|
|
"dist/web",
|
|
"packages",
|
|
"pkg",
|
|
"src/resources",
|
|
"scripts/postinstall.js",
|
|
"scripts/link-workspace-packages.cjs",
|
|
"scripts/ensure-workspace-builds.cjs",
|
|
"package.json",
|
|
"README.md"
|
|
],
|
|
"piConfig": {
|
|
"name": "gsd",
|
|
"configDir": ".gsd"
|
|
},
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
},
|
|
"packageManager": "npm@10.9.3",
|
|
"scripts": {
|
|
"build:pi-tui": "npm run build -w @gsd/pi-tui",
|
|
"build:pi-ai": "npm run build -w @gsd/pi-ai",
|
|
"build:pi-agent-core": "npm run build -w @gsd/pi-agent-core",
|
|
"build:pi-coding-agent": "npm run build -w @gsd/pi-coding-agent",
|
|
"build:native-pkg": "npm run build -w @gsd/native",
|
|
"build:pi": "npm run build:native-pkg && npm run build:pi-tui && npm run build:pi-ai && npm run build:pi-agent-core && npm run build:pi-coding-agent",
|
|
"build": "npm run build:pi && tsc && npm run copy-resources && npm run copy-themes && npm run copy-export-html && node scripts/build-web-if-stale.cjs",
|
|
"stage:web-host": "node scripts/stage-web-standalone.cjs",
|
|
"build:web-host": "npm --prefix web run build && npm run stage:web-host",
|
|
"copy-resources": "node scripts/copy-resources.cjs",
|
|
"copy-themes": "node scripts/copy-themes.cjs",
|
|
"copy-export-html": "node scripts/copy-export-html.cjs",
|
|
"test:compile": "node scripts/compile-tests.mjs",
|
|
"test:unit": "npm run test:compile && node --import ./scripts/dist-test-resolve.mjs --experimental-test-isolation=process --test-reporter=./scripts/test-reporter-compact.mjs --test 'dist-test/src/tests/*.test.js' 'dist-test/src/resources/extensions/gsd/tests/*.test.js' 'dist-test/src/resources/extensions/gsd/tests/*.test.mjs' 'dist-test/src/resources/extensions/shared/tests/*.test.js' 'dist-test/src/resources/extensions/claude-code-cli/tests/*.test.js' 'dist-test/src/resources/extensions/github-sync/tests/*.test.js' 'dist-test/src/resources/extensions/universal-config/tests/*.test.js' 'dist-test/src/resources/extensions/voice/tests/*.test.js'",
|
|
"test:packages": "node --test packages/pi-coding-agent/dist/core/*.test.js",
|
|
"test:marketplace": "GSD_TEST_CLONE_MARKETPLACES=1 node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/claude-import-tui.test.ts src/resources/extensions/gsd/tests/plugin-importer-live.test.ts src/tests/marketplace-discovery.test.ts",
|
|
"test:coverage": "c8 --reporter=text --reporter=lcov --exclude='src/resources/extensions/gsd/tests/**' --exclude='src/tests/**' --exclude='scripts/**' --exclude='native/**' --exclude='node_modules/**' --check-coverage --statements=40 --lines=40 --branches=20 --functions=20 node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --experimental-test-isolation=process --test src/resources/extensions/gsd/tests/*.test.ts src/resources/extensions/gsd/tests/*.test.mjs src/tests/*.test.ts src/resources/extensions/shared/tests/*.test.ts",
|
|
"test:integration": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test 'src/tests/integration/*.test.ts' 'src/resources/extensions/gsd/tests/integration/*.test.ts' 'src/resources/extensions/async-jobs/*.test.ts' 'src/resources/extensions/browser-tools/tests/*.test.mjs'",
|
|
"pretest": "npm run typecheck:extensions",
|
|
"test": "npm run test:unit && npm run test:integration",
|
|
"test:smoke": "node --experimental-strip-types tests/smoke/run.ts",
|
|
"test:fixtures": "node --experimental-strip-types tests/fixtures/run.ts",
|
|
"test:fixtures:record": "GSD_FIXTURE_MODE=record node --experimental-strip-types tests/fixtures/record.ts",
|
|
"test:live": "GSD_LIVE_TESTS=1 node --experimental-strip-types tests/live/run.ts",
|
|
"test:browser-tools": "node --test src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs",
|
|
"test:native": "node --test packages/native/src/__tests__/grep.test.mjs",
|
|
"test:secret-scan": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/tests/secret-scan.test.ts",
|
|
"secret-scan": "bash scripts/secret-scan.sh",
|
|
"secret-scan:install-hook": "bash scripts/install-hooks.sh",
|
|
"build:native": "node native/scripts/build.js",
|
|
"build:native:dev": "node native/scripts/build.js --dev",
|
|
"dev": "node scripts/dev.js",
|
|
"gsd": "node scripts/dev-cli.js",
|
|
"gsd:web": "npm run build:pi && npm run copy-resources && node scripts/build-web-if-stale.cjs && node scripts/dev-cli.js --web",
|
|
"gsd:web:stop": "node scripts/dev-cli.js web stop",
|
|
"gsd:web:stop:all": "node scripts/dev-cli.js web stop all",
|
|
"postinstall": "node scripts/link-workspace-packages.cjs && node scripts/ensure-workspace-builds.cjs && node scripts/postinstall.js",
|
|
"pi:install-global": "node scripts/install-pi-global.js",
|
|
"pi:uninstall-global": "node scripts/uninstall-pi-global.js",
|
|
"sync-pkg-version": "node scripts/sync-pkg-version.cjs",
|
|
"sync-platform-versions": "node native/scripts/sync-platform-versions.cjs",
|
|
"validate-pack": "node scripts/validate-pack.js",
|
|
"typecheck:extensions": "tsc --noEmit --project tsconfig.extensions.json",
|
|
"pipeline:version-stamp": "node scripts/version-stamp.mjs",
|
|
"release:changelog": "node scripts/generate-changelog.mjs",
|
|
"release:bump": "node scripts/bump-version.mjs",
|
|
"release:update-changelog": "node scripts/update-changelog.mjs",
|
|
"docker:build-runtime": "docker build --target runtime -t ghcr.io/gsd-build/gsd-pi .",
|
|
"docker:build-builder": "docker build --target builder -t ghcr.io/gsd-build/gsd-ci-builder .",
|
|
"prepublishOnly": "npm run sync-pkg-version && npm run sync-platform-versions && ([ \"$CI\" = 'true' ] || git diff --exit-code || (echo 'ERROR: version sync changed files — commit them before publishing' && exit 1)) && npm run build && npm run typecheck:extensions && npm run validate-pack",
|
|
"test:live-regression": "node --experimental-strip-types tests/live-regression/run.ts"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.73.0",
|
|
"@anthropic-ai/vertex-sdk": "^0.14.4",
|
|
"@aws-sdk/client-bedrock-runtime": "^3.983.0",
|
|
"@clack/prompts": "^1.1.0",
|
|
"@google/genai": "^1.40.0",
|
|
"@mariozechner/jiti": "^2.6.2",
|
|
"@mistralai/mistralai": "^1.14.1",
|
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
"@octokit/rest": "^22.0.1",
|
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
"@sinclair/typebox": "^0.34.41",
|
|
"@types/mime-types": "^2.1.4",
|
|
"ajv": "^8.17.1",
|
|
"ajv-formats": "^3.0.1",
|
|
"chalk": "^5.6.2",
|
|
"chokidar": "^5.0.0",
|
|
"diff": "^8.0.2",
|
|
"extract-zip": "^2.0.1",
|
|
"file-type": "^21.1.1",
|
|
"get-east-asian-width": "^1.3.0",
|
|
"glob": "^13.0.1",
|
|
"hosted-git-info": "^9.0.2",
|
|
"ignore": "^7.0.5",
|
|
"marked": "^15.0.12",
|
|
"mime-types": "^3.0.1",
|
|
"minimatch": "^10.2.3",
|
|
"openai": "^6.26.0",
|
|
"picocolors": "^1.1.1",
|
|
"picomatch": "^4.0.3",
|
|
"playwright": "^1.58.2",
|
|
"proper-lockfile": "^4.1.2",
|
|
"proxy-agent": "^6.5.0",
|
|
"sharp": "^0.34.5",
|
|
"sql.js": "^1.14.1",
|
|
"strip-ansi": "^7.1.0",
|
|
"undici": "^7.24.2",
|
|
"yaml": "^2.8.2",
|
|
"zod-to-json-schema": "^3.24.6"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^24.12.0",
|
|
"@types/picomatch": "^4.0.2",
|
|
"c8": "^11.0.0",
|
|
"esbuild": "^0.25.12",
|
|
"jiti": "^2.6.1",
|
|
"typescript": "^5.4.0"
|
|
},
|
|
"optionalDependencies": {
|
|
"@anthropic-ai/claude-agent-sdk": "^0.2.83",
|
|
"@gsd-build/engine-darwin-arm64": ">=2.10.2",
|
|
"@gsd-build/engine-darwin-x64": ">=2.10.2",
|
|
"@gsd-build/engine-linux-arm64-gnu": ">=2.10.2",
|
|
"@gsd-build/engine-linux-x64-gnu": ">=2.10.2",
|
|
"@gsd-build/engine-win32-x64-msvc": ">=2.10.2",
|
|
"fsevents": "~2.3.3",
|
|
"koffi": "^2.9.0"
|
|
},
|
|
"overrides": {
|
|
"gaxios": "7.1.4"
|
|
}
|
|
}
|