gsd-pi 2.44.0-dev.848dd4c → 2.44.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.
- package/README.md +12 -30
- package/dist/resources/extensions/gsd/auto-start.js +0 -10
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +0 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
- package/dist/web/standalone/.next/server/chunks/229.js +1 -1
- package/dist/web/standalone/.next/server/chunks/471.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-7e9530a7122506c5.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +8 -6
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +26 -24
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js +48 -29
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +44 -34
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +34 -30
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +12 -10
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +47 -43
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
- package/packages/pi-coding-agent/src/core/fs-utils.test.ts +43 -31
- package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +45 -40
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
- package/src/resources/extensions/gsd/auto-start.ts +0 -14
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +0 -8
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +16 -14
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +57 -43
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +523 -465
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +75 -73
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +56 -34
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +656 -533
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +143 -165
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +52 -29
- package/src/resources/extensions/gsd/tests/captures.test.ts +176 -148
- package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +33 -32
- package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +143 -141
- package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
- package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +59 -38
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +263 -228
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +302 -250
- package/src/resources/extensions/gsd/tests/context-store.test.ts +367 -354
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +72 -68
- package/src/resources/extensions/gsd/tests/cost-projection.test.ts +106 -92
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +35 -27
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +237 -220
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +420 -390
- package/src/resources/extensions/gsd/tests/definition-loader.test.ts +92 -76
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +83 -68
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +183 -152
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +101 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +227 -192
- package/src/resources/extensions/gsd/tests/detection.test.ts +278 -232
- package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +34 -30
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +180 -164
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +49 -43
- package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +38 -34
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +75 -54
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +32 -21
- package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +97 -72
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +44 -38
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +145 -104
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +106 -84
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +60 -54
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +93 -72
- package/src/resources/extensions/gsd/tests/doctor.test.ts +134 -104
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +131 -123
- package/src/resources/extensions/gsd/tests/exit-command.test.ts +24 -20
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +57 -48
- package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +42 -30
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +206 -198
- package/src/resources/extensions/gsd/tests/git-locale.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/git-service.test.ts +388 -285
- package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +39 -31
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +69 -63
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +264 -255
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +119 -108
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +103 -81
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +262 -229
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +37 -29
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +102 -81
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +18 -16
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +46 -41
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +53 -42
- package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +91 -75
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +18 -18
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +194 -150
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +125 -101
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +54 -45
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +93 -80
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +66 -57
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +93 -83
- package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +170 -161
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +141 -125
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +131 -107
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +96 -87
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +164 -125
- package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +94 -81
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +36 -35
- package/src/resources/extensions/gsd/tests/overrides.test.ts +106 -99
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +47 -40
- package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +28 -25
- package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +83 -66
- package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +77 -54
- package/src/resources/extensions/gsd/tests/park-milestone.test.ts +115 -68
- package/src/resources/extensions/gsd/tests/parsers.test.ts +611 -546
- package/src/resources/extensions/gsd/tests/paths.test.ts +87 -72
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +117 -77
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +119 -93
- package/src/resources/extensions/gsd/tests/queue-order.test.ts +82 -70
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +55 -42
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +73 -45
- package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +38 -28
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +80 -73
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +74 -71
- package/src/resources/extensions/gsd/tests/requirements.test.ts +75 -70
- package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +66 -44
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +181 -114
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +65 -63
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +128 -66
- package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +25 -18
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +56 -54
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +25 -23
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +11 -9
- package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +82 -66
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +47 -46
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +22 -20
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +86 -84
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +43 -41
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +96 -94
- package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/worker-registry.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +52 -50
- package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +13 -10
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +18 -14
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +39 -38
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +21 -17
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +30 -25
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +22 -15
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +66 -59
- package/src/resources/extensions/gsd/tests/worktree.test.ts +50 -44
- package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +0 -100
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +0 -63
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_ssgManifest.js +0 -0
|
@@ -36,156 +36,176 @@ function makeTempDir(prefix: string): string {
|
|
|
36
36
|
|
|
37
37
|
// ─── appendCapture ────────────────────────────────────────────────────────────
|
|
38
38
|
|
|
39
|
-
test("captures: appendCapture creates CAPTURES.md on first call", (
|
|
39
|
+
test("captures: appendCapture creates CAPTURES.md on first call", () => {
|
|
40
40
|
const tmp = makeTempDir("cap-create");
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
try {
|
|
42
|
+
const id = appendCapture(tmp, "first thought");
|
|
43
|
+
assert.ok(id.startsWith("CAP-"), "ID should start with CAP-");
|
|
44
|
+
assert.ok(
|
|
45
|
+
existsSync(join(tmp, ".gsd", "CAPTURES.md")),
|
|
46
|
+
"CAPTURES.md should exist",
|
|
47
|
+
);
|
|
48
|
+
const content = readFileSync(join(tmp, ".gsd", "CAPTURES.md"), "utf-8");
|
|
49
|
+
assert.ok(content.includes("# Captures"), "should have header");
|
|
50
|
+
assert.ok(content.includes(`### ${id}`), "should have entry heading");
|
|
51
|
+
assert.ok(
|
|
52
|
+
content.includes("**Text:** first thought"),
|
|
53
|
+
"should have text field",
|
|
54
|
+
);
|
|
55
|
+
assert.ok(
|
|
56
|
+
content.includes("**Status:** pending"),
|
|
57
|
+
"should have pending status",
|
|
58
|
+
);
|
|
59
|
+
} finally {
|
|
60
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
61
|
+
}
|
|
60
62
|
});
|
|
61
63
|
|
|
62
|
-
test("captures: appendCapture appends to existing file", (
|
|
64
|
+
test("captures: appendCapture appends to existing file", () => {
|
|
63
65
|
const tmp = makeTempDir("cap-append");
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
66
|
+
try {
|
|
67
|
+
const id1 = appendCapture(tmp, "thought one");
|
|
68
|
+
const id2 = appendCapture(tmp, "thought two");
|
|
69
|
+
assert.notStrictEqual(id1, id2, "IDs should be unique");
|
|
70
|
+
|
|
71
|
+
const content = readFileSync(join(tmp, ".gsd", "CAPTURES.md"), "utf-8");
|
|
72
|
+
assert.ok(content.includes(`### ${id1}`), "should have first entry");
|
|
73
|
+
assert.ok(content.includes(`### ${id2}`), "should have second entry");
|
|
74
|
+
assert.ok(
|
|
75
|
+
content.includes("**Text:** thought one"),
|
|
76
|
+
"should have first text",
|
|
77
|
+
);
|
|
78
|
+
assert.ok(
|
|
79
|
+
content.includes("**Text:** thought two"),
|
|
80
|
+
"should have second text",
|
|
81
|
+
);
|
|
82
|
+
} finally {
|
|
83
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
84
|
+
}
|
|
81
85
|
});
|
|
82
86
|
|
|
83
87
|
// ─── loadAllCaptures / loadPendingCaptures ────────────────────────────────────
|
|
84
88
|
|
|
85
|
-
test("captures: loadAllCaptures parses entries correctly", (
|
|
89
|
+
test("captures: loadAllCaptures parses entries correctly", () => {
|
|
86
90
|
const tmp = makeTempDir("cap-load");
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
91
|
+
try {
|
|
92
|
+
appendCapture(tmp, "alpha");
|
|
93
|
+
appendCapture(tmp, "beta");
|
|
94
|
+
|
|
95
|
+
const all = loadAllCaptures(tmp);
|
|
96
|
+
assert.strictEqual(all.length, 2, "should have 2 entries");
|
|
97
|
+
assert.strictEqual(all[0].text, "alpha");
|
|
98
|
+
assert.strictEqual(all[1].text, "beta");
|
|
99
|
+
assert.strictEqual(all[0].status, "pending");
|
|
100
|
+
assert.strictEqual(all[1].status, "pending");
|
|
101
|
+
} finally {
|
|
102
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
103
|
+
}
|
|
98
104
|
});
|
|
99
105
|
|
|
100
|
-
test("captures: loadAllCaptures returns empty array when no file", (
|
|
106
|
+
test("captures: loadAllCaptures returns empty array when no file", () => {
|
|
101
107
|
const tmp = makeTempDir("cap-nofile");
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
try {
|
|
109
|
+
const all = loadAllCaptures(tmp);
|
|
110
|
+
assert.strictEqual(all.length, 0);
|
|
111
|
+
} finally {
|
|
112
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
113
|
+
}
|
|
106
114
|
});
|
|
107
115
|
|
|
108
|
-
test("captures: loadPendingCaptures filters resolved entries", (
|
|
116
|
+
test("captures: loadPendingCaptures filters resolved entries", () => {
|
|
109
117
|
const tmp = makeTempDir("cap-pending");
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
appendCapture(tmp, "pending two");
|
|
118
|
+
try {
|
|
119
|
+
const id1 = appendCapture(tmp, "pending one");
|
|
120
|
+
appendCapture(tmp, "pending two");
|
|
114
121
|
|
|
115
|
-
|
|
122
|
+
markCaptureResolved(tmp, id1, "note", "acknowledged", "just a note");
|
|
116
123
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
124
|
+
const pending = loadPendingCaptures(tmp);
|
|
125
|
+
assert.strictEqual(pending.length, 1, "should have 1 pending");
|
|
126
|
+
assert.strictEqual(pending[0].text, "pending two");
|
|
127
|
+
} finally {
|
|
128
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
129
|
+
}
|
|
120
130
|
});
|
|
121
131
|
|
|
122
|
-
test("captures: loadAllCaptures preserves resolved entries", (
|
|
132
|
+
test("captures: loadAllCaptures preserves resolved entries", () => {
|
|
123
133
|
const tmp = makeTempDir("cap-all-resolved");
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
try {
|
|
135
|
+
const id1 = appendCapture(tmp, "pending one");
|
|
136
|
+
appendCapture(tmp, "pending two");
|
|
137
|
+
|
|
138
|
+
markCaptureResolved(tmp, id1, "note", "acknowledged", "just a note");
|
|
139
|
+
|
|
140
|
+
const all = loadAllCaptures(tmp);
|
|
141
|
+
assert.strictEqual(all.length, 2, "all should still have 2");
|
|
142
|
+
assert.strictEqual(all[0].status, "resolved");
|
|
143
|
+
assert.strictEqual(all[1].status, "pending");
|
|
144
|
+
} finally {
|
|
145
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
146
|
+
}
|
|
135
147
|
});
|
|
136
148
|
|
|
137
149
|
// ─── hasPendingCaptures ───────────────────────────────────────────────────────
|
|
138
150
|
|
|
139
|
-
test("captures: hasPendingCaptures returns false when no file", (
|
|
151
|
+
test("captures: hasPendingCaptures returns false when no file", () => {
|
|
140
152
|
const tmp = makeTempDir("cap-has-nofile");
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
153
|
+
try {
|
|
154
|
+
assert.strictEqual(hasPendingCaptures(tmp), false);
|
|
155
|
+
} finally {
|
|
156
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
157
|
+
}
|
|
144
158
|
});
|
|
145
159
|
|
|
146
|
-
test("captures: hasPendingCaptures returns true with pending entries", (
|
|
160
|
+
test("captures: hasPendingCaptures returns true with pending entries", () => {
|
|
147
161
|
const tmp = makeTempDir("cap-has-true");
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
162
|
+
try {
|
|
163
|
+
appendCapture(tmp, "something");
|
|
164
|
+
assert.strictEqual(hasPendingCaptures(tmp), true);
|
|
165
|
+
} finally {
|
|
166
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
167
|
+
}
|
|
152
168
|
});
|
|
153
169
|
|
|
154
|
-
test("captures: hasPendingCaptures returns false when all resolved", (
|
|
170
|
+
test("captures: hasPendingCaptures returns false when all resolved", () => {
|
|
155
171
|
const tmp = makeTempDir("cap-has-false");
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
172
|
+
try {
|
|
173
|
+
const id = appendCapture(tmp, "will resolve");
|
|
174
|
+
markCaptureResolved(tmp, id, "note", "done", "resolved it");
|
|
175
|
+
assert.strictEqual(hasPendingCaptures(tmp), false);
|
|
176
|
+
} finally {
|
|
177
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
178
|
+
}
|
|
161
179
|
});
|
|
162
180
|
|
|
163
181
|
// ─── markCaptureResolved ──────────────────────────────────────────────────────
|
|
164
182
|
|
|
165
|
-
test("captures: markCaptureResolved updates entry in place", (
|
|
183
|
+
test("captures: markCaptureResolved updates entry in place", () => {
|
|
166
184
|
const tmp = makeTempDir("cap-resolve");
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
try {
|
|
186
|
+
const id1 = appendCapture(tmp, "keep pending");
|
|
187
|
+
const id2 = appendCapture(tmp, "will resolve");
|
|
188
|
+
appendCapture(tmp, "also pending");
|
|
189
|
+
|
|
190
|
+
markCaptureResolved(tmp, id2, "quick-task", "executed inline", "small fix");
|
|
191
|
+
|
|
192
|
+
const all = loadAllCaptures(tmp);
|
|
193
|
+
assert.strictEqual(all.length, 3, "should still have 3 entries");
|
|
194
|
+
|
|
195
|
+
const resolved = all.find((c) => c.id === id2)!;
|
|
196
|
+
assert.strictEqual(resolved.status, "resolved");
|
|
197
|
+
assert.strictEqual(resolved.classification, "quick-task");
|
|
198
|
+
assert.strictEqual(resolved.resolution, "executed inline");
|
|
199
|
+
assert.strictEqual(resolved.rationale, "small fix");
|
|
200
|
+
assert.ok(resolved.resolvedAt, "should have resolved timestamp");
|
|
201
|
+
|
|
202
|
+
// Others should be unaffected
|
|
203
|
+
const kept = all.find((c) => c.id === id1)!;
|
|
204
|
+
assert.strictEqual(kept.status, "pending");
|
|
205
|
+
assert.strictEqual(kept.classification, undefined);
|
|
206
|
+
} finally {
|
|
207
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
208
|
+
}
|
|
189
209
|
});
|
|
190
210
|
|
|
191
211
|
// ─── resolveCapturesPath ──────────────────────────────────────────────────────
|
|
@@ -351,50 +371,58 @@ test("triage: parseTriageOutput handles all five classification types", () => {
|
|
|
351
371
|
|
|
352
372
|
// ─── Edge Cases ───────────────────────────────────────────────────────────────
|
|
353
373
|
|
|
354
|
-
test("captures: appendCapture handles special characters in text", (
|
|
374
|
+
test("captures: appendCapture handles special characters in text", () => {
|
|
355
375
|
const tmp = makeTempDir("cap-special");
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
376
|
+
try {
|
|
377
|
+
const id = appendCapture(tmp, 'text with "quotes" and **bold** and `code`');
|
|
378
|
+
const all = loadAllCaptures(tmp);
|
|
379
|
+
assert.strictEqual(all.length, 1);
|
|
380
|
+
assert.ok(all[0].text.includes('"quotes"'), "should preserve quotes");
|
|
381
|
+
assert.ok(all[0].text.includes("**bold**"), "should preserve bold");
|
|
382
|
+
} finally {
|
|
383
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
384
|
+
}
|
|
363
385
|
});
|
|
364
386
|
|
|
365
|
-
test("captures: markCaptureResolved is no-op for non-existent ID", (
|
|
387
|
+
test("captures: markCaptureResolved is no-op for non-existent ID", () => {
|
|
366
388
|
const tmp = makeTempDir("cap-noop");
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
389
|
+
try {
|
|
390
|
+
appendCapture(tmp, "real capture");
|
|
391
|
+
// Should not throw
|
|
392
|
+
markCaptureResolved(tmp, "CAP-nonexistent", "note", "test", "test");
|
|
393
|
+
const all = loadAllCaptures(tmp);
|
|
394
|
+
assert.strictEqual(all.length, 1);
|
|
395
|
+
assert.strictEqual(all[0].status, "pending", "original should be unchanged");
|
|
396
|
+
} finally {
|
|
397
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
398
|
+
}
|
|
375
399
|
});
|
|
376
400
|
|
|
377
|
-
test("captures: markCaptureResolved is no-op when no file exists", (
|
|
401
|
+
test("captures: markCaptureResolved is no-op when no file exists", () => {
|
|
378
402
|
const tmp = makeTempDir("cap-nofile-resolve");
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
403
|
+
try {
|
|
404
|
+
// Should not throw
|
|
405
|
+
markCaptureResolved(tmp, "CAP-abc", "note", "test", "test");
|
|
406
|
+
} finally {
|
|
407
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
408
|
+
}
|
|
383
409
|
});
|
|
384
410
|
|
|
385
|
-
test("captures: re-resolving a capture overwrites previous resolution", (
|
|
411
|
+
test("captures: re-resolving a capture overwrites previous resolution", () => {
|
|
386
412
|
const tmp = makeTempDir("cap-reresolve");
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
413
|
+
try {
|
|
414
|
+
const id = appendCapture(tmp, "will re-resolve");
|
|
415
|
+
markCaptureResolved(tmp, id, "note", "first resolution", "first rationale");
|
|
416
|
+
markCaptureResolved(tmp, id, "inject", "second resolution", "second rationale");
|
|
417
|
+
|
|
418
|
+
const all = loadAllCaptures(tmp);
|
|
419
|
+
assert.strictEqual(all.length, 1);
|
|
420
|
+
assert.strictEqual(all[0].classification, "inject", "should have updated classification");
|
|
421
|
+
assert.strictEqual(all[0].resolution, "second resolution");
|
|
422
|
+
assert.strictEqual(all[0].rationale, "second rationale");
|
|
423
|
+
} finally {
|
|
424
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
425
|
+
}
|
|
398
426
|
});
|
|
399
427
|
|
|
400
428
|
test("triage: parseTriageOutput preserves affectedFiles and targetSlice", () => {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* `/plugin marketplace add ...` source model.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
|
|
11
12
|
import { describe, it, before, after, mock } from 'node:test';
|
|
12
13
|
import assert from 'node:assert';
|
|
13
14
|
import { existsSync, mkdtempSync, rmSync, writeFileSync, readFileSync, mkdirSync } from 'node:fs';
|
|
@@ -305,45 +306,45 @@ describe(
|
|
|
305
306
|
});
|
|
306
307
|
});
|
|
307
308
|
|
|
308
|
-
it('should not persist marketplace agent directories into package sources', async (
|
|
309
|
+
it('should not persist marketplace agent directories into package sources', async () => {
|
|
309
310
|
const isolatedAgentDir = join(tempDir, '.gsd', 'agent');
|
|
310
311
|
const settingsPath = join(isolatedAgentDir, 'settings.json');
|
|
311
312
|
rmSync(isolatedAgentDir, { recursive: true, force: true });
|
|
312
313
|
process.env.GSD_CODING_AGENT_DIR = isolatedAgentDir;
|
|
313
314
|
|
|
314
|
-
|
|
315
|
+
try {
|
|
316
|
+
mkdirSync(isolatedAgentDir, { recursive: true });
|
|
317
|
+
const tempSettings: Record<string, unknown> = { packages: [] };
|
|
318
|
+
writeFileSync(settingsPath, JSON.stringify(tempSettings, null, 2));
|
|
319
|
+
|
|
320
|
+
const { ctx } = createMockContext([
|
|
321
|
+
'Plugins only',
|
|
322
|
+
'Yes - discover plugins and select components',
|
|
323
|
+
'Import all components',
|
|
324
|
+
'Yes, continue',
|
|
325
|
+
]);
|
|
326
|
+
|
|
327
|
+
const readPrefs = () => ({ ...prefs });
|
|
328
|
+
const writePrefs = async (p: Record<string, unknown>) => {
|
|
329
|
+
Object.assign(prefs, p);
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
await runClaudeImportFlow(ctx, 'global', readPrefs, writePrefs);
|
|
333
|
+
|
|
334
|
+
const settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as { packages?: unknown[] };
|
|
335
|
+
const packageEntries = Array.isArray(settings.packages) ? settings.packages : [];
|
|
336
|
+
const hasAgentsDirPackage = packageEntries.some((entry) => {
|
|
337
|
+
const source = typeof entry === 'string'
|
|
338
|
+
? entry
|
|
339
|
+
: (entry && typeof entry === 'object' ? (entry as { source?: unknown }).source : undefined);
|
|
340
|
+
return typeof source === 'string' && source.endsWith('/agents');
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
assert.strictEqual(hasAgentsDirPackage, false, 'Marketplace agent directories should not be persisted as package sources');
|
|
344
|
+
} finally {
|
|
315
345
|
delete process.env.GSD_CODING_AGENT_DIR;
|
|
316
346
|
rmSync(isolatedAgentDir, { recursive: true, force: true });
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
mkdirSync(isolatedAgentDir, { recursive: true });
|
|
320
|
-
const tempSettings: Record<string, unknown> = { packages: [] };
|
|
321
|
-
writeFileSync(settingsPath, JSON.stringify(tempSettings, null, 2));
|
|
322
|
-
|
|
323
|
-
const { ctx } = createMockContext([
|
|
324
|
-
'Plugins only',
|
|
325
|
-
'Yes - discover plugins and select components',
|
|
326
|
-
'Import all components',
|
|
327
|
-
'Yes, continue',
|
|
328
|
-
]);
|
|
329
|
-
|
|
330
|
-
const readPrefs = () => ({ ...prefs });
|
|
331
|
-
const writePrefs = async (p: Record<string, unknown>) => {
|
|
332
|
-
Object.assign(prefs, p);
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
await runClaudeImportFlow(ctx, 'global', readPrefs, writePrefs);
|
|
336
|
-
|
|
337
|
-
const settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as { packages?: unknown[] };
|
|
338
|
-
const packageEntries = Array.isArray(settings.packages) ? settings.packages : [];
|
|
339
|
-
const hasAgentsDirPackage = packageEntries.some((entry) => {
|
|
340
|
-
const source = typeof entry === 'string'
|
|
341
|
-
? entry
|
|
342
|
-
: (entry && typeof entry === 'object' ? (entry as { source?: unknown }).source : undefined);
|
|
343
|
-
return typeof source === 'string' && source.endsWith('/agents');
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
assert.strictEqual(hasAgentsDirPackage, false, 'Marketplace agent directories should not be persisted as package sources');
|
|
347
|
+
}
|
|
347
348
|
});
|
|
348
349
|
});
|
|
349
350
|
}
|