@shepai/cli 1.105.0 → 1.106.0-pr313.e9fa158
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/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/add-repository.use-case.js +6 -2
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +4 -4
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +4 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +9 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.js +5 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.js +4 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +3 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/sessions/claude-code-session.repository.js +1 -1
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.js +3 -3
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +8 -7
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +17 -4
- package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +6 -8
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.js +11 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.js +32 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +4 -27
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +2 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +2 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +2 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +2 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -2
- package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/daemon/start-daemon.js +1 -0
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +5 -4
- package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/upgrade.command.js +4 -0
- package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/deploy-repository.js +2 -1
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-folder.js +4 -2
- package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-ide.js +2 -1
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +4 -2
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +8 -5
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +3 -2
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +4 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +30 -0
- package/dist/src/presentation/web/components/common/merge-review/diff-view.js +1 -1
- package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/derive-graph.js +4 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +10 -6
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +25 -25
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51fc98b0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__57f37786._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__708dcad1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e002910._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_4f3f82dc._.js → _77f506b6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4f3f82dc._.js.map → _77f506b6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1d1282fd._.js → _b1bbe3cd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1d1282fd._.js.map → _b1bbe3cd._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_e9866672._.js → _d8c97e13._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_e9866672._.js.map → _d8c97e13._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_7275ce5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_758dfa10._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +30 -30
- package/web/.next/static/chunks/{c98681a218c0b41f.js → 1b7418778f5a6927.js} +1 -1
- package/web/.next/static/chunks/{da73ca1cdae68519.js → 1b865c5b424cba9e.js} +1 -1
- package/web/.next/static/chunks/{0bd392ccc367ada0.js → 310da8e04e750294.js} +1 -1
- package/web/.next/static/chunks/{710458e76c4c1e95.js → 52a7597f541defb8.js} +2 -2
- package/web/.next/static/chunks/{ce6a78c88475c1a5.js → 8117620ed55b5113.js} +1 -1
- package/web/.next/static/chunks/{a60eb62ee95051af.js → af561a5913def091.js} +1 -1
- package/web/.next/static/chunks/{a464d76443ad806b.js → be7ad52cd86e161e.js} +2 -2
- package/web/.next/static/chunks/{0d6eb4a59f1eb888.js → cf8e107354cc0159.js} +1 -1
- package/web/.next/static/chunks/{e934d107a2e4edb2.js → d7c39cd622a695c4.js} +1 -1
- package/web/.next/static/chunks/{f2cba08b6c4ff590.js → f8608b847c7a0136.js} +1 -1
- /package/web/.next/static/{gbVzSaustoS6WazLhWXuK → DhQ9HMzgdS2AYNz0twCIf}/_buildManifest.js +0 -0
- /package/web/.next/static/{gbVzSaustoS6WazLhWXuK → DhQ9HMzgdS2AYNz0twCIf}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{gbVzSaustoS6WazLhWXuK → DhQ9HMzgdS2AYNz0twCIf}/_ssgManifest.js +0 -0
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
"tags": ["cli-agent"],
|
|
6
6
|
"author": "Anthropic",
|
|
7
7
|
"website": "https://claude.ai/code",
|
|
8
|
-
"platforms": ["linux", "darwin"],
|
|
8
|
+
"platforms": ["linux", "darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/claude",
|
|
10
10
|
"binary": "claude",
|
|
11
11
|
"packageManager": "curl",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
14
|
-
"darwin": "curl -fsSL https://claude.ai/install.sh | bash"
|
|
14
|
+
"darwin": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
15
|
+
"win32": "npm install -g @anthropic-ai/claude-code"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://code.claude.com/docs/en/overview",
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
"tags": ["cli-agent"],
|
|
6
6
|
"author": "Anysphere",
|
|
7
7
|
"website": "https://cursor.com",
|
|
8
|
-
"platforms": ["linux", "darwin"],
|
|
8
|
+
"platforms": ["linux", "darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/cursor",
|
|
10
10
|
"binary": "cursor-agent",
|
|
11
11
|
"packageManager": "curl",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl https://cursor.com/install -fsS | bash",
|
|
14
|
-
"darwin": "curl https://cursor.com/install -fsS | bash"
|
|
14
|
+
"darwin": "curl https://cursor.com/install -fsS | bash",
|
|
15
|
+
"win32": "winget install --id Anysphere.Cursor -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://www.codecademy.com/article/getting-started-with-cursor-cli",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"packageManager": "manual",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "Download from https://cursor.com/download and install the AppImage manually",
|
|
14
|
-
"darwin": "Download from https://cursor.com/download or use: brew install --cask cursor"
|
|
14
|
+
"darwin": "Download from https://cursor.com/download or use: brew install --cask cursor",
|
|
15
|
+
"win32": "winget install --id Anysphere.Cursor -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 600000,
|
|
17
18
|
"documentationUrl": "https://cursor.com/download",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"packageManager": "apt",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) && sudo mkdir -p -m 755 /etc/apt/keyrings && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg && echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main\" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && sudo apt update && sudo apt install gh -y",
|
|
14
|
-
"darwin": "brew install gh"
|
|
14
|
+
"darwin": "brew install gh",
|
|
15
|
+
"win32": "winget install --id GitHub.cli -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://cli.github.com/manual/",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"packageManager": "apt",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "sudo apt-get update && sudo apt-get install -y git",
|
|
14
|
-
"darwin": "xcode-select --install"
|
|
14
|
+
"darwin": "xcode-select --install",
|
|
15
|
+
"win32": "winget install --id Git.Git -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://git-scm.com/doc",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"packageManager": "apt",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --yes --dearmor -o /usr/share/keyrings/packages.microsoft.gpg && echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main\" | sudo tee /etc/apt/sources.list.d/vscode.list > /dev/null && sudo apt-get update && sudo apt-get install -y code",
|
|
14
|
-
"darwin": "brew install visual-studio-code"
|
|
14
|
+
"darwin": "brew install visual-studio-code",
|
|
15
|
+
"win32": "winget install --id Microsoft.VisualStudioCode -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://code.visualstudio.com/docs/setup/linux",
|
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
"tags": ["terminal"],
|
|
6
6
|
"author": "Warp",
|
|
7
7
|
"website": "https://www.warp.dev",
|
|
8
|
-
"platforms": ["darwin"],
|
|
8
|
+
"platforms": ["darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/warp",
|
|
10
10
|
"binary": "warp",
|
|
11
11
|
"packageManager": "brew",
|
|
12
12
|
"commands": {
|
|
13
|
-
"darwin": "brew install --cask warp"
|
|
13
|
+
"darwin": "brew install --cask warp",
|
|
14
|
+
"win32": "winget install --id Warp.Warp -e --source winget"
|
|
14
15
|
},
|
|
15
16
|
"timeout": 300000,
|
|
16
17
|
"documentationUrl": "https://docs.warp.dev/",
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
"tags": ["ide"],
|
|
6
6
|
"author": "Codeium",
|
|
7
7
|
"website": "https://codeium.com/windsurf",
|
|
8
|
-
"platforms": ["linux", "darwin"],
|
|
8
|
+
"platforms": ["linux", "darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/windsurf",
|
|
10
10
|
"binary": "windsurf",
|
|
11
11
|
"packageManager": "apt",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl -fsSL \"https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/windsurf.gpg\" | sudo gpg --yes --dearmor -o /usr/share/keyrings/windsurf-stable-archive-keyring.gpg && echo \"deb [signed-by=/usr/share/keyrings/windsurf-stable-archive-keyring.gpg arch=amd64] https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/apt stable main\" | sudo tee /etc/apt/sources.list.d/windsurf.list > /dev/null && sudo apt-get update && sudo apt-get install -y windsurf",
|
|
14
|
-
"darwin": "brew install --cask windsurf"
|
|
14
|
+
"darwin": "brew install --cask windsurf",
|
|
15
|
+
"win32": "winget install --id Codeium.Windsurf -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://docs.windsurf.com/windsurf/getting-started",
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
"tags": ["ide"],
|
|
6
6
|
"author": "Zed Industries",
|
|
7
7
|
"website": "https://zed.dev",
|
|
8
|
-
"platforms": ["linux", "darwin"],
|
|
8
|
+
"platforms": ["linux", "darwin", "win32"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/zedindustries",
|
|
10
10
|
"binary": "zed",
|
|
11
11
|
"packageManager": "curl",
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl -f https://zed.dev/install.sh | sh",
|
|
14
|
-
"darwin": "curl -f https://zed.dev/install.sh | sh"
|
|
14
|
+
"darwin": "curl -f https://zed.dev/install.sh | sh",
|
|
15
|
+
"win32": "winget install --id ZedIndustries.Zed -e --source winget"
|
|
15
16
|
},
|
|
16
17
|
"timeout": 300000,
|
|
17
18
|
"documentationUrl": "https://zed.dev/docs/installation",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-daemon.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/daemon/start-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoBH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"start-daemon.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/daemon/start-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoBH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG9E"}
|
|
@@ -67,6 +67,7 @@ export async function startDaemon(opts = {}) {
|
|
|
67
67
|
const child = spawn(process.execPath, [...process.execArgv, process.argv[1], '_serve', '--port', String(port)], {
|
|
68
68
|
detached: true,
|
|
69
69
|
stdio: ['ignore', logFd, logFd],
|
|
70
|
+
windowsHide: true,
|
|
70
71
|
});
|
|
71
72
|
// Wait briefly for the child to either settle or crash.
|
|
72
73
|
const exitCode = await Promise.race([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-daemon.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/daemon/stop-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"stop-daemon.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/daemon/stop-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iEAAiE,CAAC;AA0BtG;;;GAGG;AACH,wBAAsB,UAAU,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC7E"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @param daemonService - IDaemonService instance (injected by caller for testability, NFR-4)
|
|
20
20
|
*/
|
|
21
|
+
import { treeKill } from '../../../../../packages/core/src/infrastructure/services/process/tree-kill.js';
|
|
21
22
|
import { messages } from '../../ui/index.js';
|
|
22
23
|
const POLL_INTERVAL_MS = 200;
|
|
23
24
|
const MAX_WAIT_MS = 5000;
|
|
@@ -54,15 +55,15 @@ export async function stopDaemon(daemonService) {
|
|
|
54
55
|
}
|
|
55
56
|
try {
|
|
56
57
|
messages.info(`Stopping Shep daemon (PID ${pid})...`);
|
|
57
|
-
// Send SIGTERM — request graceful shutdown
|
|
58
|
-
|
|
58
|
+
// Send SIGTERM to process tree — request graceful shutdown
|
|
59
|
+
treeKill(pid, 'SIGTERM');
|
|
59
60
|
// Poll for up to 5s waiting for the process to exit
|
|
60
61
|
const died = await pollUntilDead(daemonService, pid, MAX_WAIT_MS, POLL_INTERVAL_MS);
|
|
61
62
|
if (!died) {
|
|
62
|
-
// Graceful shutdown timed out — force kill
|
|
63
|
+
// Graceful shutdown timed out — force kill process tree
|
|
63
64
|
messages.info('Daemon did not stop gracefully, sending SIGKILL...');
|
|
64
65
|
try {
|
|
65
|
-
|
|
66
|
+
treeKill(pid, 'SIGKILL');
|
|
66
67
|
}
|
|
67
68
|
catch {
|
|
68
69
|
// Process may have exited between the check and the kill — ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/upgrade.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAQ9E,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/upgrade.command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAQ9E,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;AA8EnC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAsB,GAAG,OAAO,CA+D7E"}
|
|
@@ -13,6 +13,8 @@ import { messages } from '../ui/index.js';
|
|
|
13
13
|
import { stopDaemon } from './daemon/stop-daemon.js';
|
|
14
14
|
import { startDaemon } from './daemon/start-daemon.js';
|
|
15
15
|
const VERSION_CHECK_TIMEOUT_MS = 10_000;
|
|
16
|
+
/** On Windows, npm is a .cmd batch file — spawn() needs shell: true to resolve it. */
|
|
17
|
+
const IS_WINDOWS = process.platform === 'win32';
|
|
16
18
|
/**
|
|
17
19
|
* Get the latest published version of @shepai/cli from npm registry.
|
|
18
20
|
* Returns null if the check fails (fail-open).
|
|
@@ -23,6 +25,7 @@ function getLatestVersion(spawnFn) {
|
|
|
23
25
|
let settled = false;
|
|
24
26
|
const child = spawnFn('npm', ['view', '@shepai/cli', 'version'], {
|
|
25
27
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
28
|
+
...(IS_WINDOWS && { shell: true }),
|
|
26
29
|
});
|
|
27
30
|
const timeout = setTimeout(() => {
|
|
28
31
|
if (!settled) {
|
|
@@ -65,6 +68,7 @@ function runNpmInstall(spawnFn) {
|
|
|
65
68
|
return new Promise((resolve, reject) => {
|
|
66
69
|
const child = spawnFn('npm', ['i', '-g', '@shepai/cli@latest'], {
|
|
67
70
|
stdio: 'inherit',
|
|
71
|
+
...(IS_WINDOWS && { shell: true }),
|
|
68
72
|
});
|
|
69
73
|
child.on('close', (code) => {
|
|
70
74
|
resolve(code ?? 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/deploy-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAIvE,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAyBxE"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
+
import { isAbsolute } from 'node:path';
|
|
3
4
|
import { resolve } from '../../lib/server-container.js';
|
|
4
5
|
import { createDeploymentLogger } from '../../../../../packages/core/src/infrastructure/services/deployment/deployment-logger.js';
|
|
5
6
|
import { DeploymentState } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
6
7
|
const log = createDeploymentLogger('[deployRepository]');
|
|
7
8
|
export async function deployRepository(repositoryPath) {
|
|
8
9
|
log.info(`called — repositoryPath="${repositoryPath}"`);
|
|
9
|
-
if (!repositoryPath
|
|
10
|
+
if (!repositoryPath || !isAbsolute(repositoryPath)) {
|
|
10
11
|
log.warn('rejected — not an absolute path');
|
|
11
12
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-folder.ts"],"names":[],"mappings":"AAiBA,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B9D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { platform } from 'node:os';
|
|
4
|
+
import { isAbsolute } from 'node:path';
|
|
4
5
|
import { spawn } from 'node:child_process';
|
|
5
6
|
// Use a record lookup instead of if/else to prevent the bundler from
|
|
6
7
|
// tree-shaking platform branches at build time. Turbopack evaluates
|
|
@@ -9,9 +10,10 @@ import { spawn } from 'node:child_process';
|
|
|
9
10
|
const FOLDER_COMMANDS = {
|
|
10
11
|
darwin: { cmd: 'open', args: (p) => [p] },
|
|
11
12
|
linux: { cmd: 'xdg-open', args: (p) => [p] },
|
|
13
|
+
win32: { cmd: 'explorer', args: (p) => [p] },
|
|
12
14
|
};
|
|
13
15
|
export async function openFolder(repositoryPath) {
|
|
14
|
-
if (!repositoryPath
|
|
16
|
+
if (!repositoryPath || !isAbsolute(repositoryPath)) {
|
|
15
17
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
16
18
|
}
|
|
17
19
|
try {
|
|
@@ -22,7 +24,7 @@ export async function openFolder(repositoryPath) {
|
|
|
22
24
|
if (!entry) {
|
|
23
25
|
return {
|
|
24
26
|
success: false,
|
|
25
|
-
error: `Unsupported platform: ${platform()}
|
|
27
|
+
error: `Unsupported platform: ${platform()}`,
|
|
26
28
|
};
|
|
27
29
|
}
|
|
28
30
|
const child = spawn(entry.cmd, entry.args(repositoryPath), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-ide.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-ide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-ide.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-ide.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB/E"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use server';
|
|
2
|
+
import { isAbsolute } from 'node:path';
|
|
2
3
|
import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
3
4
|
import { resolve } from '../../lib/server-container.js';
|
|
4
5
|
export async function openIde(input) {
|
|
5
6
|
const { repositoryPath, branch } = input;
|
|
6
|
-
if (!repositoryPath
|
|
7
|
+
if (!repositoryPath || !isAbsolute(repositoryPath)) {
|
|
7
8
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
8
9
|
}
|
|
9
10
|
const settings = getSettings();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmBA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC9E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { platform } from 'node:os';
|
|
4
|
+
import { isAbsolute } from 'node:path';
|
|
4
5
|
import { spawn } from 'node:child_process';
|
|
5
6
|
import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
6
7
|
import { computeWorktreePath } from '../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
@@ -11,10 +12,11 @@ import { computeWorktreePath } from '../../../../../packages/core/src/infrastruc
|
|
|
11
12
|
const SHELL_COMMANDS = {
|
|
12
13
|
darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },
|
|
13
14
|
linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },
|
|
15
|
+
win32: { cmd: 'powershell', args: (p) => ['-NoExit', '-Command', `Set-Location "${p}"`] },
|
|
14
16
|
};
|
|
15
17
|
export async function openShell(input) {
|
|
16
18
|
const { repositoryPath, branch } = input;
|
|
17
|
-
if (!repositoryPath
|
|
19
|
+
if (!repositoryPath || !isAbsolute(repositoryPath)) {
|
|
18
20
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
19
21
|
}
|
|
20
22
|
try {
|
|
@@ -28,7 +30,7 @@ export async function openShell(input) {
|
|
|
28
30
|
if (!entry) {
|
|
29
31
|
return {
|
|
30
32
|
success: false,
|
|
31
|
-
error: `Unsupported platform: ${platform()}
|
|
33
|
+
error: `Unsupported platform: ${platform()}`,
|
|
32
34
|
};
|
|
33
35
|
}
|
|
34
36
|
const child = spawn(entry.cmd, entry.args(targetPath), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAM1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,GACjC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CA2E5C"}
|
|
@@ -8,10 +8,12 @@ import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components
|
|
|
8
8
|
* renders empty when features exist but their repository rows are missing.
|
|
9
9
|
*/
|
|
10
10
|
export function buildGraphNodes(repositories, featuresWithRuns) {
|
|
11
|
-
//
|
|
11
|
+
// Normalize path separators so Windows backslash paths match forward-slash paths
|
|
12
|
+
const normalizePath = (p) => p.replace(/\\/g, '/');
|
|
13
|
+
// Group features by normalized repository path
|
|
12
14
|
const featuresByRepo = {};
|
|
13
15
|
featuresWithRuns.forEach((entry) => {
|
|
14
|
-
const repoKey = entry.feature.repositoryPath;
|
|
16
|
+
const repoKey = normalizePath(entry.feature.repositoryPath);
|
|
15
17
|
if (!featuresByRepo[repoKey]) {
|
|
16
18
|
featuresByRepo[repoKey] = [];
|
|
17
19
|
}
|
|
@@ -23,7 +25,8 @@ export function buildGraphNodes(repositories, featuresWithRuns) {
|
|
|
23
25
|
const coveredPaths = new Set();
|
|
24
26
|
// First, add nodes for all persisted repositories (including those without features)
|
|
25
27
|
for (const repo of repositories) {
|
|
26
|
-
|
|
28
|
+
const normalizedRepoPath = normalizePath(repo.path);
|
|
29
|
+
coveredPaths.add(normalizedRepoPath);
|
|
27
30
|
const repoNodeId = `repo-${repo.id}`;
|
|
28
31
|
nodes.push({
|
|
29
32
|
id: repoNodeId,
|
|
@@ -31,12 +34,12 @@ export function buildGraphNodes(repositories, featuresWithRuns) {
|
|
|
31
34
|
position: { x: 0, y: 0 },
|
|
32
35
|
data: {
|
|
33
36
|
name: repo.name,
|
|
34
|
-
repositoryPath:
|
|
37
|
+
repositoryPath: normalizedRepoPath,
|
|
35
38
|
id: repo.id,
|
|
36
39
|
createdAt: repo.createdAt instanceof Date ? repo.createdAt.getTime() : Number(repo.createdAt),
|
|
37
40
|
},
|
|
38
41
|
});
|
|
39
|
-
const repoFeatures = featuresByRepo[
|
|
42
|
+
const repoFeatures = featuresByRepo[normalizedRepoPath] ?? [];
|
|
40
43
|
appendFeatureNodes(repoFeatures, repoNodeId, featuresWithRuns, nodes, edges, repo.name);
|
|
41
44
|
}
|
|
42
45
|
// Second pass: group orphaned features under virtual repository nodes
|
|
@@ -46,14 +46,15 @@ function formatRelativeTime(timestamp) {
|
|
|
46
46
|
return 'just now';
|
|
47
47
|
}
|
|
48
48
|
function FeatureInfo({ data }) {
|
|
49
|
+
const showSummary = Boolean(data.summary) && !(data.userQuery && data.summary?.trim() === data.userQuery.trim());
|
|
49
50
|
const hasInfo = Boolean(data.branch) ||
|
|
50
51
|
Boolean(data.oneLiner) ||
|
|
51
|
-
|
|
52
|
+
showSummary ||
|
|
52
53
|
Boolean(data.userQuery) ||
|
|
53
54
|
Boolean(data.createdAt);
|
|
54
55
|
if (!hasInfo)
|
|
55
56
|
return null;
|
|
56
|
-
return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-info", className: "flex flex-col gap-3 p-4", children: [data.branch ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Branch" }), _jsxs("span", { className: "flex items-center gap-1.5 text-sm", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: data.branch }), data.baseBranch ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["from ", data.baseBranch] })) : null] })] })) : null, data.oneLiner ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "One-Liner" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.oneLiner })] })) : null, data.userQuery ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "User Query" }), _jsx(InlineAttachments, { text: data.userQuery })] })) : null,
|
|
57
|
+
return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-info", className: "flex flex-col gap-3 p-4", children: [data.branch ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Branch" }), _jsxs("span", { className: "flex items-center gap-1.5 text-sm", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: data.branch }), data.baseBranch ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["from ", data.baseBranch] })) : null] })] })) : null, data.oneLiner ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "One-Liner" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.oneLiner })] })) : null, data.userQuery ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "User Query" }), _jsx(InlineAttachments, { text: data.userQuery })] })) : null, showSummary ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Summary" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.summary })] })) : null, data.createdAt ? (_jsx(DetailRow, { label: "Created", value: formatRelativeTime(data.createdAt) })) : null] })] }));
|
|
57
58
|
}
|
|
58
59
|
// ── PR Info section ──────────────────────────────────────────────────
|
|
59
60
|
const prStatusStyles = {
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts
CHANGED
|
@@ -29,6 +29,10 @@ export declare const ReviewPhase: Story;
|
|
|
29
29
|
export declare const MaintainPhase: Story;
|
|
30
30
|
/** PR with merge conflicts — shows orange "Conflicts" badge. */
|
|
31
31
|
export declare const PrWithMergeConflicts: Story;
|
|
32
|
+
/** Summary hidden — userQuery and summary are identical. */
|
|
33
|
+
export declare const DuplicateSummaryHidden: Story;
|
|
34
|
+
/** Summary visible — userQuery and summary differ. */
|
|
35
|
+
export declare const DifferentSummary: Story;
|
|
32
36
|
/** Completed feature with PR — progress hidden, PR shown in status section without borders. */
|
|
33
37
|
export declare const CompletedWithPr: Story;
|
|
34
38
|
//# sourceMappingURL=overview-tab.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AA0G1C,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAwBF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAMF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,KAclC,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,EAAE,KAgB7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"overview-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AA0G1C,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAwBF,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAMF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,KAclC,CAAC;AAqBF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,KAEpC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,EAAE,KAgB7B,CAAC"}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js
CHANGED
|
@@ -195,6 +195,36 @@ export const PrWithMergeConflicts = {
|
|
|
195
195
|
},
|
|
196
196
|
},
|
|
197
197
|
};
|
|
198
|
+
/* ---------------------------------------------------------------------------
|
|
199
|
+
* Duplicate summary stories
|
|
200
|
+
* ------------------------------------------------------------------------- */
|
|
201
|
+
const duplicateSummaryData = {
|
|
202
|
+
name: 'GPT Chat Support',
|
|
203
|
+
description: 'Add support for "gpt chat" experience',
|
|
204
|
+
featureId: '#ds1',
|
|
205
|
+
lifecycle: 'requirements',
|
|
206
|
+
state: 'running',
|
|
207
|
+
progress: 10,
|
|
208
|
+
agentType: 'claude-code',
|
|
209
|
+
repositoryPath: '/home/user/my-repo',
|
|
210
|
+
branch: 'feat/gpt-chat',
|
|
211
|
+
userQuery: 'Add support to "gpt chat" experience in the shep app',
|
|
212
|
+
summary: 'Add support to "gpt chat" experience in the shep app',
|
|
213
|
+
createdAt: Date.now() - 5000,
|
|
214
|
+
};
|
|
215
|
+
/** Summary hidden — userQuery and summary are identical. */
|
|
216
|
+
export const DuplicateSummaryHidden = {
|
|
217
|
+
args: { data: duplicateSummaryData },
|
|
218
|
+
};
|
|
219
|
+
/** Summary visible — userQuery and summary differ. */
|
|
220
|
+
export const DifferentSummary = {
|
|
221
|
+
args: {
|
|
222
|
+
data: {
|
|
223
|
+
...duplicateSummaryData,
|
|
224
|
+
summary: 'Integrate GPT chat experience using prompt-kit components with streaming support',
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
};
|
|
198
228
|
/** Completed feature with PR — progress hidden, PR shown in status section without borders. */
|
|
199
229
|
export const CompletedWithPr = {
|
|
200
230
|
args: {
|
|
@@ -26,5 +26,5 @@ function FileDiffItem({ file }) {
|
|
|
26
26
|
export function DiffView({ fileDiffs }) {
|
|
27
27
|
if (fileDiffs.length === 0)
|
|
28
28
|
return null;
|
|
29
|
-
return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsx("div", { className: "border-border border-t", children: fileDiffs.map((file) => (_jsx(FileDiffItem, { file: file }, file.path))) })] }));
|
|
29
|
+
return (_jsxs("div", { className: "border-border rounded-lg border", children: [_jsx("div", { className: "px-4 py-3", children: _jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(FileText, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changed Files" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: ["(", fileDiffs.length, ")"] })] }) }), _jsx("div", { className: "border-border border-t", children: fileDiffs.map((file) => (_jsx(FileDiffItem, { file: file }, `${file.status}-${file.path}`))) })] }));
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjE,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAmI5C"}
|
|
@@ -17,11 +17,13 @@
|
|
|
17
17
|
export function deriveGraph(featureMap, repoMap, pendingMap, callbacks) {
|
|
18
18
|
const nodes = [];
|
|
19
19
|
const edges = [];
|
|
20
|
+
// Normalize path separators so Windows backslash paths match forward-slash paths
|
|
21
|
+
const normalizePath = (p) => p.replace(/\\/g, '/');
|
|
20
22
|
// Build a lookup: repositoryPath → repoNodeId
|
|
21
23
|
const repoByPath = new Map();
|
|
22
24
|
for (const [nodeId, entry] of repoMap) {
|
|
23
25
|
if (entry.data.repositoryPath) {
|
|
24
|
-
repoByPath.set(entry.data.repositoryPath, nodeId);
|
|
26
|
+
repoByPath.set(normalizePath(entry.data.repositoryPath), nodeId);
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
29
|
// Virtual repo nodes created for orphaned features (not in repoMap)
|
|
@@ -114,7 +116,7 @@ export function deriveGraph(featureMap, repoMap, pendingMap, callbacks) {
|
|
|
114
116
|
}
|
|
115
117
|
else {
|
|
116
118
|
// Repo→feature edge (matched by repositoryPath)
|
|
117
|
-
const repositoryPath = entry.data.repositoryPath;
|
|
119
|
+
const repositoryPath = normalizePath(entry.data.repositoryPath);
|
|
118
120
|
const repoNodeId = repoByPath.get(repositoryPath) ?? getOrCreateVirtualRepo(repositoryPath);
|
|
119
121
|
edges.push({
|
|
120
122
|
id: `edge-${repoNodeId}-${nodeId}`,
|