gsd-pi 2.20.0 → 2.22.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 -0
- package/dist/cli.js +21 -18
- package/dist/help-text.d.ts +2 -0
- package/dist/help-text.js +47 -0
- package/dist/loader.js +2 -16
- package/dist/mcp-server.d.ts +18 -0
- package/dist/mcp-server.js +53 -0
- package/dist/onboarding.d.ts +0 -6
- package/dist/onboarding.js +0 -28
- package/dist/resources/agents/javascript-pro.md +280 -0
- package/dist/resources/agents/typescript-pro.md +255 -0
- package/dist/resources/extensions/bg-shell/index.ts +14 -2
- package/dist/resources/extensions/bg-shell/utilities.ts +14 -0
- package/dist/resources/extensions/browser-tools/{core.js → core.ts} +329 -190
- package/dist/resources/extensions/gsd/auto-dashboard.ts +2 -1
- package/dist/resources/extensions/gsd/auto-prompts.ts +42 -1
- package/dist/resources/extensions/gsd/auto-worktree.ts +35 -2
- package/dist/resources/extensions/gsd/auto.ts +116 -10
- package/dist/resources/extensions/gsd/claude-import.ts +656 -0
- package/dist/resources/extensions/gsd/collision-diagnostics.ts +332 -0
- package/dist/resources/extensions/gsd/commands.ts +60 -7
- package/dist/resources/extensions/gsd/diff-context.ts +220 -0
- package/dist/resources/extensions/gsd/docs/claude-marketplace-import.md +214 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -1
- package/dist/resources/extensions/gsd/doctor.ts +12 -4
- package/dist/resources/extensions/gsd/file-watcher.ts +97 -0
- package/dist/resources/extensions/gsd/files.ts +1 -1
- package/dist/resources/extensions/gsd/forensics.ts +596 -0
- package/dist/resources/extensions/gsd/git-service.ts +2 -1
- package/dist/resources/extensions/gsd/github-client.ts +235 -0
- package/dist/resources/extensions/gsd/gitignore.ts +1 -0
- package/dist/resources/extensions/gsd/marketplace-discovery.ts +507 -0
- package/dist/resources/extensions/gsd/mcp-server.ts +87 -0
- package/dist/resources/extensions/gsd/namespaced-registry.ts +467 -0
- package/dist/resources/extensions/gsd/namespaced-resolver.ts +307 -0
- package/dist/resources/extensions/gsd/plugin-importer.ts +410 -0
- package/dist/resources/extensions/gsd/preferences.ts +14 -3
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/forensics.md +71 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/system.md +12 -3
- package/dist/resources/extensions/gsd/roadmap-slices.ts +1 -1
- package/dist/resources/extensions/gsd/session-forensics.ts +5 -5
- package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +351 -0
- package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +705 -0
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +13 -0
- package/dist/resources/extensions/gsd/tests/diff-context.test.ts +136 -0
- package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +118 -0
- package/dist/resources/extensions/gsd/tests/marketplace-discovery.test.ts +202 -0
- package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +91 -0
- package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +1027 -0
- package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +671 -0
- package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +105 -0
- package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +481 -0
- package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +1383 -0
- package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +21 -2
- package/dist/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +8 -1
- package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +11 -0
- package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +120 -0
- package/dist/resources/extensions/gsd/token-counter.ts +45 -0
- package/dist/resources/extensions/gsd/visualizer-data.ts +2 -2
- package/dist/resources/extensions/gsd/worktree-manager.ts +29 -1
- package/dist/resources/extensions/gsd/worktree.ts +3 -0
- package/dist/resources/extensions/mcporter/index.ts +90 -7
- package/dist/resources/extensions/search-the-web/native-search.ts +2 -0
- package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +9 -1
- package/dist/resources/extensions/search-the-web/url-utils.ts +35 -1
- package/dist/resources/extensions/shared/terminal.ts +1 -1
- package/dist/resources/extensions/universal-config/discovery.ts +4 -0
- package/dist/resources/extensions/universal-config/format.ts +35 -4
- package/dist/resources/extensions/universal-config/index.ts +5 -3
- package/dist/resources/extensions/universal-config/scanners.ts +65 -2
- package/dist/resources/extensions/universal-config/tests/discovery.test.ts +9 -1
- package/dist/resources/extensions/universal-config/tests/format.test.ts +22 -6
- package/dist/resources/extensions/universal-config/tests/scanners.test.ts +18 -0
- package/dist/resources/extensions/universal-config/types.ts +20 -1
- package/dist/resources/skills/lint/SKILL.md +141 -0
- package/dist/resources/skills/review/SKILL.md +214 -0
- package/dist/resources/skills/test/SKILL.md +201 -0
- package/dist/tool-bootstrap.js +2 -1
- package/dist/wizard.js +2 -0
- package/package.json +12 -7
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js +12 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.js +12 -1
- package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +201 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +9 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +762 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +19 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +1 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +9 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +3 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +230 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +87 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +32 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +169 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +21 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +88 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +36 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +21 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +22 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +23 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +8 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +41 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +21 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +4 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +63 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +10 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +5 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +4 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +3 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +46 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +24 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +63 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +13 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +2 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +2 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +5 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +13 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +8 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +10 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +5 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +4 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +3 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +46 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +24 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +63 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +13 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +2 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +2 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +5 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +6 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +13 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +8 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +12 -0
- package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +68 -0
- package/packages/pi-ai/package.json +3 -0
- package/packages/pi-ai/pnpm-lock.yaml +2022 -0
- package/packages/pi-ai/src/providers/azure-openai-responses.ts +12 -1
- package/packages/pi-ai/src/providers/openai-responses.ts +12 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +12 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js +113 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/project-trust.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/extensions/project-trust.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/project-trust.js +42 -0
- package/packages/pi-coding-agent/dist/core/extensions/project-trust.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.js +18 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +114 -0
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +8 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +23 -9
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +67 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/pnpm-lock.yaml +454 -0
- package/packages/pi-coding-agent/scripts/copy-assets.cjs +24 -0
- package/packages/pi-coding-agent/src/core/extensions/index.ts +3 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.test.ts +141 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +14 -1
- package/packages/pi-coding-agent/src/core/extensions/project-trust.ts +51 -0
- package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +132 -0
- package/packages/pi-coding-agent/src/core/resolve-config-value.ts +20 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +7 -2
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +98 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +24 -9
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +2 -2
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +3 -1
- package/packages/pi-tui/src/tui.ts +2 -2
- package/src/resources/agents/javascript-pro.md +280 -0
- package/src/resources/agents/typescript-pro.md +255 -0
- package/src/resources/extensions/bg-shell/index.ts +14 -2
- package/src/resources/extensions/bg-shell/utilities.ts +14 -0
- package/src/resources/extensions/browser-tools/{core.js → core.ts} +329 -190
- package/src/resources/extensions/gsd/auto-dashboard.ts +2 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +42 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +35 -2
- package/src/resources/extensions/gsd/auto.ts +116 -10
- package/src/resources/extensions/gsd/claude-import.ts +656 -0
- package/src/resources/extensions/gsd/collision-diagnostics.ts +332 -0
- package/src/resources/extensions/gsd/commands.ts +60 -7
- package/src/resources/extensions/gsd/diff-context.ts +220 -0
- package/src/resources/extensions/gsd/docs/claude-marketplace-import.md +214 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -1
- package/src/resources/extensions/gsd/doctor.ts +12 -4
- package/src/resources/extensions/gsd/file-watcher.ts +97 -0
- package/src/resources/extensions/gsd/files.ts +1 -1
- package/src/resources/extensions/gsd/forensics.ts +596 -0
- package/src/resources/extensions/gsd/git-service.ts +2 -1
- package/src/resources/extensions/gsd/github-client.ts +235 -0
- package/src/resources/extensions/gsd/gitignore.ts +1 -0
- package/src/resources/extensions/gsd/marketplace-discovery.ts +507 -0
- package/src/resources/extensions/gsd/mcp-server.ts +87 -0
- package/src/resources/extensions/gsd/namespaced-registry.ts +467 -0
- package/src/resources/extensions/gsd/namespaced-resolver.ts +307 -0
- package/src/resources/extensions/gsd/plugin-importer.ts +410 -0
- package/src/resources/extensions/gsd/preferences.ts +14 -3
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/forensics.md +71 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/system.md +12 -3
- package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
- package/src/resources/extensions/gsd/session-forensics.ts +5 -5
- package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/collision-diagnostics.test.ts +705 -0
- package/src/resources/extensions/gsd/tests/context-compression.test.ts +13 -0
- package/src/resources/extensions/gsd/tests/diff-context.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/marketplace-discovery.test.ts +202 -0
- package/src/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +91 -0
- package/src/resources/extensions/gsd/tests/namespaced-registry.test.ts +1027 -0
- package/src/resources/extensions/gsd/tests/namespaced-resolver.test.ts +671 -0
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/plugin-importer-live.test.ts +481 -0
- package/src/resources/extensions/gsd/tests/plugin-importer.test.ts +1383 -0
- package/src/resources/extensions/gsd/tests/preferences-git.test.ts +21 -2
- package/src/resources/extensions/gsd/tests/preferences-schema-validation.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +120 -0
- package/src/resources/extensions/gsd/token-counter.ts +45 -0
- package/src/resources/extensions/gsd/visualizer-data.ts +2 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +29 -1
- package/src/resources/extensions/gsd/worktree.ts +3 -0
- package/src/resources/extensions/mcporter/index.ts +90 -7
- package/src/resources/extensions/search-the-web/native-search.ts +2 -0
- package/src/resources/extensions/search-the-web/tool-fetch-page.ts +9 -1
- package/src/resources/extensions/search-the-web/url-utils.ts +35 -1
- package/src/resources/extensions/shared/terminal.ts +1 -1
- package/src/resources/extensions/universal-config/discovery.ts +4 -0
- package/src/resources/extensions/universal-config/format.ts +35 -4
- package/src/resources/extensions/universal-config/index.ts +5 -3
- package/src/resources/extensions/universal-config/scanners.ts +65 -2
- package/src/resources/extensions/universal-config/tests/discovery.test.ts +9 -1
- package/src/resources/extensions/universal-config/tests/format.test.ts +22 -6
- package/src/resources/extensions/universal-config/tests/scanners.test.ts +18 -0
- package/src/resources/extensions/universal-config/types.ts +20 -1
- package/src/resources/skills/lint/SKILL.md +141 -0
- package/src/resources/skills/review/SKILL.md +214 -0
- package/src/resources/skills/test/SKILL.md +201 -0
- package/dist/resources/extensions/browser-tools/core.d.ts +0 -205
- package/src/resources/extensions/browser-tools/core.d.ts +0 -205
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Claude Marketplace Import
|
|
2
|
+
|
|
3
|
+
This document describes the Claude marketplace import feature in GSD: what it reads, what it imports, what it persists, and what it does not translate into active GSD/Pi runtime behavior.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What this feature does
|
|
8
|
+
|
|
9
|
+
GSD can read Claude Code marketplace catalogs, inspect the plugins they reference, and import selected Claude skills into GSD/Pi while preserving Claude-style namespace identity.
|
|
10
|
+
|
|
11
|
+
The interactive entry point is:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
/gsd prefs import-claude
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
You can also choose scope explicitly:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
/gsd prefs import-claude global
|
|
21
|
+
/gsd prefs import-claude project
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Claude Code model this feature follows
|
|
27
|
+
|
|
28
|
+
Anthropic documents Claude marketplaces as sources users add with:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
/plugin marketplace add <github repo or local path>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
A marketplace contains a catalog at:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
.claude-plugin/marketplace.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Anthropic distinguishes between:
|
|
41
|
+
|
|
42
|
+
- **Marketplace source** — where Claude fetches `marketplace.json`
|
|
43
|
+
- **Plugin source** — where Claude fetches each plugin listed in that marketplace
|
|
44
|
+
- **Installed plugin cache** — Claude copies installed plugin payloads into:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
~/.claude/plugins/cache
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Anthropic also documents user-added marketplace sources under:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
~/.claude/plugins/marketplaces
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
GSD aligns its Claude import flow to that model.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Where GSD looks
|
|
61
|
+
|
|
62
|
+
For Claude plugin and marketplace material, GSD prefers Claude-managed locations first:
|
|
63
|
+
|
|
64
|
+
1. `~/.claude/plugins/marketplaces`
|
|
65
|
+
2. `~/.claude/plugins/cache`
|
|
66
|
+
3. `~/.claude/plugins`
|
|
67
|
+
|
|
68
|
+
After that, GSD still allows local clone-style convenience paths such as sibling repos or `~/repos/...` paths. Those fallbacks remain supported for developer workflows, but they are not the primary Claude storage model.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## What GSD imports
|
|
73
|
+
|
|
74
|
+
### Imported into GSD/Pi settings
|
|
75
|
+
|
|
76
|
+
- Claude skills discovered directly from configured skill roots
|
|
77
|
+
- Marketplace-derived skills
|
|
78
|
+
|
|
79
|
+
Imported marketplace skills preserve canonical namespace identity, for example:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
python3-development:stinkysnake
|
|
83
|
+
scientific-method:experiment-protocol
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Discovered, modeled, and validated
|
|
87
|
+
|
|
88
|
+
- Marketplace-derived agents
|
|
89
|
+
|
|
90
|
+
### Discovered but not translated into active Pi-native runtime behavior
|
|
91
|
+
|
|
92
|
+
- hooks
|
|
93
|
+
- MCP server definitions
|
|
94
|
+
- LSP server definitions
|
|
95
|
+
- other plugin metadata that does not currently map directly into active GSD/Pi runtime surfaces
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Import flow
|
|
100
|
+
|
|
101
|
+
The import flow does the following:
|
|
102
|
+
|
|
103
|
+
1. discover Claude skills and marketplace/plugin roots
|
|
104
|
+
2. identify marketplace roots by checking for `.claude-plugin/marketplace.json`
|
|
105
|
+
3. inspect discovered plugins and inventory their components
|
|
106
|
+
4. let you select components to import
|
|
107
|
+
5. validate the selection for canonical conflicts and ambiguity
|
|
108
|
+
6. persist imported resources into GSD/Pi settings
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Namespace behavior
|
|
113
|
+
|
|
114
|
+
GSD preserves Claude plugin namespace semantics rather than flattening plugin components into anonymous global names.
|
|
115
|
+
|
|
116
|
+
### Canonical references
|
|
117
|
+
|
|
118
|
+
Canonical references remain available for imported components:
|
|
119
|
+
|
|
120
|
+
- skills: `plugin-name:skill-name`
|
|
121
|
+
- agents: `plugin-name:agent-name`
|
|
122
|
+
|
|
123
|
+
### Shorthand
|
|
124
|
+
|
|
125
|
+
GSD supports shorthand lookup when it is unambiguous.
|
|
126
|
+
|
|
127
|
+
### Local-first resolution
|
|
128
|
+
|
|
129
|
+
When a namespaced component refers to another component by bare name, GSD tries the same plugin namespace first before broader lookup.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Important safeguard: marketplace agent directories are not stored as package sources
|
|
134
|
+
|
|
135
|
+
Claude plugin agent directories are markdown agent-definition directories, for example:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
.../plugins/python3-development/agents
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
GSD does **not** persist imported marketplace agent directories into:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
settings.packages
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
This is intentional.
|
|
148
|
+
|
|
149
|
+
### Why
|
|
150
|
+
|
|
151
|
+
Persisting an `.../agents` directory into `settings.packages` can cause Pi startup to treat that directory as an extension/package root. In real host validation, that produced extension loader failures such as:
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
Cannot find module '.../agents'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
GSD now avoids writing those entries.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Settings effects
|
|
162
|
+
|
|
163
|
+
### Skills
|
|
164
|
+
|
|
165
|
+
Imported skills are persisted into Pi skill settings. Depending on the selection path, they may also be added to GSD preferences.
|
|
166
|
+
|
|
167
|
+
### Marketplace agents
|
|
168
|
+
|
|
169
|
+
Marketplace agents remain part of the import model and validation surface, but their `agents/` directories are not persisted as package roots.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Diagnostics
|
|
174
|
+
|
|
175
|
+
GSD distinguishes between:
|
|
176
|
+
|
|
177
|
+
- **canonical conflicts** — hard errors
|
|
178
|
+
- **shorthand overlaps** — warnings when canonical names remain distinct
|
|
179
|
+
- **alias conflicts** — diagnostics for alias collisions or shadowing
|
|
180
|
+
|
|
181
|
+
This allows imported marketplace content to be validated without reporting valid overlap as fatal breakage.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Verification status of this feature
|
|
186
|
+
|
|
187
|
+
This feature has been verified in three ways:
|
|
188
|
+
|
|
189
|
+
1. **Contract/unit tests** for parsing, namespacing, resolution, diagnostics, and import behavior
|
|
190
|
+
2. **Portable integration-style tests** using local or cloned marketplace fixtures
|
|
191
|
+
3. **Real host validation** against the installed `gsd` binary and actual Claude-managed directories on the host machine
|
|
192
|
+
|
|
193
|
+
Real host validation included:
|
|
194
|
+
|
|
195
|
+
- clean startup of the installed `gsd` binary after fixing stale bad settings
|
|
196
|
+
- successful invocation of an imported skill (`/stinkysnake`)
|
|
197
|
+
- successful execution of `/gsd prefs import-claude global`
|
|
198
|
+
- verification that imported marketplace agent directories were **not** reintroduced into `settings.packages`
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Current limitations
|
|
203
|
+
|
|
204
|
+
- GSD does not yet translate every Claude plugin component type into active Pi-native runtime behavior
|
|
205
|
+
- marketplace-derived agents are not persisted as package roots, by design
|
|
206
|
+
- clone-style local fallbacks still exist for developer convenience, even though Claude-managed marketplace/plugin locations are preferred first
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## References
|
|
211
|
+
|
|
212
|
+
- Anthropic: Claude Code settings
|
|
213
|
+
- Anthropic: Create and distribute a plugin marketplace
|
|
214
|
+
- Anthropic: Plugins and plugin reference
|
|
@@ -10,6 +10,7 @@ Full documentation for `~/.gsd/preferences.md` (global) and `.gsd/preferences.md
|
|
|
10
10
|
- Prefer explicit skill names or absolute paths.
|
|
11
11
|
- Use absolute paths for personal/local skills when you want zero ambiguity.
|
|
12
12
|
- These preferences guide which skills GSD should load and follow; they do not override higher-priority instructions in the current conversation.
|
|
13
|
+
- For Claude marketplace/plugin import behavior, see `~/.gsd/agent/extensions/gsd/docs/claude-marketplace-import.md`.
|
|
13
14
|
|
|
14
15
|
---
|
|
15
16
|
|
|
@@ -123,7 +124,7 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
|
|
|
123
124
|
- `commit_type`: string — override the conventional commit type prefix. Must be one of: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `ci`, `build`, `style`. Default: inferred from diff content.
|
|
124
125
|
- `main_branch`: string — the primary branch name for new git repos (e.g., `"main"`, `"master"`, `"trunk"`). Also used by `getMainBranch()` as the preferred branch when auto-detection is ambiguous. Default: `"main"`.
|
|
125
126
|
- `merge_strategy`: `"squash"` or `"merge"` — controls how worktree branches are merged back. `"squash"` combines all commits into one; `"merge"` preserves individual commits. Default: `"squash"`.
|
|
126
|
-
- `isolation`: `"worktree"` or `"
|
|
127
|
+
- `isolation`: `"worktree"`, `"branch"`, or `"none"` — controls auto-mode git isolation strategy. `"worktree"` creates a milestone worktree for isolated work; `"branch"` works directly in the project root but creates a milestone branch (useful for submodule-heavy repos); `"none"` works directly on the current branch with no worktree or milestone branch (ideal for step-mode with hot reloads). Default: `"worktree"`.
|
|
127
128
|
- `commit_docs`: boolean — when `false`, prevents GSD from committing `.gsd/` planning artifacts to git. The `.gsd/` folder is added to `.gitignore` and kept local-only. Useful for teams where only some members use GSD, or when company policy requires a clean repository. Default: `true`.
|
|
128
129
|
- `worktree_post_create`: string — script to run after a worktree is created (both auto-mode and manual `/worktree`). Receives `SOURCE_DIR` and `WORKTREE_DIR` as environment variables. Can be absolute or relative to project root. Runs with 30-second timeout. Failure is non-fatal (logged as warning). Default: none.
|
|
129
130
|
|
|
@@ -5,7 +5,7 @@ import { loadFile, parsePlan, parseRoadmap, parseSummary, saveFile, parseTaskPla
|
|
|
5
5
|
import { resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTaskFiles, resolveTasksDir, milestonesDir, gsdRoot, relMilestoneFile, relSliceFile, relTaskFile, relSlicePath, relGsdRootFile, resolveGsdRootFile } from "./paths.js";
|
|
6
6
|
import { deriveState, isMilestoneComplete } from "./state.js";
|
|
7
7
|
import { loadEffectiveGSDPreferences, type GSDPreferences } from "./preferences.js";
|
|
8
|
-
import { listWorktrees } from "./worktree-manager.js";
|
|
8
|
+
import { listWorktrees, resolveGitDir } from "./worktree-manager.js";
|
|
9
9
|
import { abortAndReset } from "./git-self-heal.js";
|
|
10
10
|
import { RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
11
11
|
import { nativeIsRepo, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached } from "./native-git-bridge.js";
|
|
@@ -474,15 +474,19 @@ async function checkGitHealth(
|
|
|
474
474
|
issues: DoctorIssue[],
|
|
475
475
|
fixesApplied: string[],
|
|
476
476
|
shouldFix: (code: DoctorIssueCode) => boolean,
|
|
477
|
+
isolationMode: "none" | "worktree" | "branch" = "worktree",
|
|
477
478
|
): Promise<void> {
|
|
478
479
|
// Degrade gracefully if not a git repo
|
|
479
480
|
if (!nativeIsRepo(basePath)) {
|
|
480
481
|
return; // Not a git repo — skip all git health checks
|
|
481
482
|
}
|
|
482
483
|
|
|
483
|
-
const gitDir =
|
|
484
|
+
const gitDir = resolveGitDir(basePath);
|
|
484
485
|
|
|
485
|
-
// ── Orphaned auto-worktrees
|
|
486
|
+
// ── Orphaned auto-worktrees & Stale milestone branches ────────────────
|
|
487
|
+
// These checks only apply in worktree/branch modes — skip in none mode
|
|
488
|
+
// where no milestone worktrees or branches are created.
|
|
489
|
+
if (isolationMode !== "none") {
|
|
486
490
|
try {
|
|
487
491
|
const worktrees = listWorktrees(basePath);
|
|
488
492
|
const milestoneWorktrees = worktrees.filter(wt => wt.branch.startsWith("milestone/"));
|
|
@@ -576,6 +580,7 @@ async function checkGitHealth(
|
|
|
576
580
|
} catch {
|
|
577
581
|
// listWorktrees or deriveState failed — skip worktree/branch checks
|
|
578
582
|
}
|
|
583
|
+
} // end isolationMode !== "none"
|
|
579
584
|
|
|
580
585
|
// ── Corrupt merge state ────────────────────────────────────────────────
|
|
581
586
|
try {
|
|
@@ -976,7 +981,10 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
976
981
|
}
|
|
977
982
|
|
|
978
983
|
// Git health checks (orphaned worktrees, stale branches, corrupt merge state, tracked runtime files)
|
|
979
|
-
|
|
984
|
+
const isolationMode: "none" | "worktree" | "branch" =
|
|
985
|
+
prefs?.preferences?.git?.isolation === "none" ? "none" :
|
|
986
|
+
prefs?.preferences?.git?.isolation === "branch" ? "branch" : "worktree";
|
|
987
|
+
await checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode);
|
|
980
988
|
|
|
981
989
|
// Runtime health checks (crash locks, completed-units, hook state, activity logs, STATE.md, gitignore)
|
|
982
990
|
await checkRuntimeHealth(basePath, issues, fixesApplied, shouldFix);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { FSWatcher } from "chokidar";
|
|
2
|
+
import type { EventBus } from "@gsd/pi-coding-agent";
|
|
3
|
+
import { relative } from "node:path";
|
|
4
|
+
|
|
5
|
+
let watcher: FSWatcher | null = null;
|
|
6
|
+
|
|
7
|
+
const EVENT_MAP: Record<string, string> = {
|
|
8
|
+
"settings.json": "settings-changed",
|
|
9
|
+
"auth.json": "auth-changed",
|
|
10
|
+
"models.json": "models-changed",
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const EXTENSIONS_DIR = "extensions";
|
|
14
|
+
|
|
15
|
+
const IGNORED_PATTERNS = [
|
|
16
|
+
"**/sessions/**",
|
|
17
|
+
"**/*.tmp",
|
|
18
|
+
"**/*.swp",
|
|
19
|
+
"**/*~",
|
|
20
|
+
"**/.DS_Store",
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const DEBOUNCE_MS = 300;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Start watching `agentDir` (e.g. `~/.gsd/agent/`) for config changes.
|
|
27
|
+
* Emits events on the supplied EventBus when watched files are modified.
|
|
28
|
+
*/
|
|
29
|
+
export async function startFileWatcher(
|
|
30
|
+
agentDir: string,
|
|
31
|
+
eventBus: EventBus,
|
|
32
|
+
): Promise<void> {
|
|
33
|
+
if (watcher) {
|
|
34
|
+
await watcher.close();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const { watch } = await import("chokidar");
|
|
38
|
+
|
|
39
|
+
const pending = new Map<string, ReturnType<typeof setTimeout>>();
|
|
40
|
+
|
|
41
|
+
function debounceEmit(event: string): void {
|
|
42
|
+
const existing = pending.get(event);
|
|
43
|
+
if (existing) clearTimeout(existing);
|
|
44
|
+
pending.set(
|
|
45
|
+
event,
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
pending.delete(event);
|
|
48
|
+
eventBus.emit(event, { timestamp: Date.now() });
|
|
49
|
+
}, DEBOUNCE_MS),
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function resolveEvent(filePath: string): string | null {
|
|
54
|
+
const rel = relative(agentDir, filePath);
|
|
55
|
+
if (rel.startsWith("..")) return null;
|
|
56
|
+
|
|
57
|
+
// Check direct file matches
|
|
58
|
+
for (const [file, event] of Object.entries(EVENT_MAP)) {
|
|
59
|
+
if (rel === file) return event;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Check extensions directory
|
|
63
|
+
if (rel.startsWith(EXTENSIONS_DIR + "/") || rel === EXTENSIONS_DIR) {
|
|
64
|
+
return "extensions-changed";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
watcher = watch(agentDir, {
|
|
71
|
+
ignoreInitial: true,
|
|
72
|
+
depth: 2,
|
|
73
|
+
ignored: IGNORED_PATTERNS,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
for (const eventType of ["add", "change", "unlink"] as const) {
|
|
77
|
+
watcher.on(eventType, (filePath: string) => {
|
|
78
|
+
const event = resolveEvent(filePath);
|
|
79
|
+
if (event) debounceEmit(event);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Wait for watcher to be ready
|
|
84
|
+
await new Promise<void>((resolve) => {
|
|
85
|
+
watcher!.on("ready", resolve);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Stop the file watcher and clean up resources.
|
|
91
|
+
*/
|
|
92
|
+
export async function stopFileWatcher(): Promise<void> {
|
|
93
|
+
if (watcher) {
|
|
94
|
+
await watcher.close();
|
|
95
|
+
watcher = null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -436,7 +436,7 @@ function _parsePlanImpl(content: string): SlicePlan {
|
|
|
436
436
|
let currentTask: TaskPlanEntry | null = null;
|
|
437
437
|
|
|
438
438
|
for (const line of taskLines) {
|
|
439
|
-
const cbMatch = line.match(/^-\s+\[([ xX])\]\s+\*\*(\w+):\s+(.+?)\*\*\s*(.*)/);
|
|
439
|
+
const cbMatch = line.match(/^-\s+\[([ xX])\]\s+\*\*([\w.]+):\s+(.+?)\*\*\s*(.*)/);
|
|
440
440
|
if (cbMatch) {
|
|
441
441
|
if (currentTask) tasks.push(currentTask);
|
|
442
442
|
|