@shepai/cli 1.104.1-pr299.6a46a49 → 1.104.1
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/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 +3 -5
- 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 +3 -4
- 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 +1 -2
- 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 +7 -8
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +1 -1
- 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 +8 -6
- 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 +27 -4
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +2 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +2 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +2 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +1 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +1 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +1 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +1 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +2 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +2 -3
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +2 -3
- package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/daemon/start-daemon.js +0 -1
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/daemon/stop-daemon.js +4 -5
- package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/upgrade.command.js +0 -4
- package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/deploy-repository.js +1 -2
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-folder.js +2 -4
- package/dist/src/presentation/web/app/actions/open-ide.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-ide.js +1 -2
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +2 -4
- package/dist/src/presentation/web/components/common/merge-review/diff-view.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -10
- 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/{_21faa7a8._.js → _87bb5efc._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_21faa7a8._.js.map → _87bb5efc._.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/{_3c9b7604._.js → _938693b3._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_3c9b7604._.js.map → _938693b3._.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/{_6b3932e4._.js → _f8bb6b9b._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_6b3932e4._.js.map → _f8bb6b9b._.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_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/{0636f7c25b8f05c8.js → 05d3ec130f6fc596.js} +2 -2
- package/web/.next/static/chunks/{15c8dc5e159c50bb.js → 0ef91bcc51e23985.js} +1 -1
- package/web/.next/static/chunks/{e4dc6f9400db01b6.js → 12c9922e7f494b51.js} +1 -1
- package/web/.next/static/chunks/{9304a6dda9017bb0.js → 39c99422e0a6dd93.js} +1 -1
- package/web/.next/static/chunks/{d2f7c63190cab6c8.js → 5d9a68c730725d92.js} +1 -1
- package/web/.next/static/chunks/{48db2a822b89f817.js → 8c8860362bb7379c.js} +1 -1
- package/web/.next/static/chunks/{38b2b88e069fd487.js → b19c1d7861f50125.js} +1 -1
- package/web/.next/static/chunks/{9fdce60808c54c55.js → d7e50dcee437e450.js} +1 -1
- package/web/.next/static/chunks/{6a5510e46cf04519.js → f25c7829f1ce4bb6.js} +1 -1
- package/web/.next/static/chunks/{ee8503b7a524f327.js → f94a3b46b58e0924.js} +1 -1
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts +0 -12
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/process/tree-kill.js +0 -11
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts +0 -25
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/binary-exists.js +0 -32
- /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → PFRJT3ptWvDx2wYGtkapS}/_buildManifest.js +0 -0
- /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → PFRJT3ptWvDx2wYGtkapS}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{KaNaYUUpavz7Wmyn1I8tE → PFRJT3ptWvDx2wYGtkapS}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/dev-executor.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,4EAA4E,CAAC;AAmIpF,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;;IAM3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOvF,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,aAAa,CAAC,yBAAyB,CAAC;IAK3C,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;IAIhD,OAAO,CAAC,QAAQ;CAmEjB"}
|
|
@@ -101,22 +101,20 @@ const CI_FIX_RESULT = 'Fixed CI failure: corrected import path. All checks now p
|
|
|
101
101
|
* plan.prompt.ts:199.
|
|
102
102
|
*/
|
|
103
103
|
function extractSpecDir(prompt) {
|
|
104
|
-
// Match both Unix absolute paths (/...) and Windows absolute paths (C:\...)
|
|
105
|
-
const ABS_PATH = String.raw `(?:\/|[A-Za-z]:[/\\])[^\s\n]+`;
|
|
106
104
|
// Analyze ("Write your analysis to:"), requirements ("Update the file at:"),
|
|
107
105
|
// research ("Write your research to:")
|
|
108
|
-
const fileMatch = prompt.match(
|
|
106
|
+
const fileMatch = prompt.match(/(?:Write your \w+ to|Update the file at):\s+(\/[^\s\n]+)/);
|
|
109
107
|
if (fileMatch)
|
|
110
108
|
return path.dirname(fileMatch[1]);
|
|
111
109
|
// Plan: "Write to BOTH /path/plan.yaml AND /path/tasks.yaml"
|
|
112
|
-
const planMatch = prompt.match(
|
|
110
|
+
const planMatch = prompt.match(/Write to BOTH\s+(\/[^\s\n]+)\/plan\.yaml/);
|
|
113
111
|
if (planMatch)
|
|
114
112
|
return planMatch[1];
|
|
115
113
|
return null;
|
|
116
114
|
}
|
|
117
115
|
/** Validate extracted specDir: must be absolute, no ".." traversal. */
|
|
118
116
|
function validateSpecDir(specDir) {
|
|
119
|
-
if (!
|
|
117
|
+
if (!specDir.startsWith('/'))
|
|
120
118
|
throw new Error(`DevAgentExecutorService: invalid specDir (not absolute): ${specDir}`);
|
|
121
119
|
if (specDir.includes('..'))
|
|
122
120
|
throw new Error(`DevAgentExecutorService: invalid specDir (contains ".."): ${specDir}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,qBAAiD,GACzD,MAAM,
|
|
1
|
+
{"version":3,"file":"evidence-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/evidence-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE,qBAAiD,GACzD,MAAM,CA6LR"}
|
|
@@ -20,7 +20,7 @@ export function buildEvidencePrompt(state, options = { commitEvidence: false })
|
|
|
20
20
|
// Worktree path is: ~/.shep/repos/<hash>/wt/<slug>
|
|
21
21
|
// Evidence path is: ~/.shep/repos/<hash>/evidence/<featureId>/
|
|
22
22
|
const repoHashDir = dirname(dirname(cwd)); // go up from wt/<slug>
|
|
23
|
-
const shepEvidenceDir = join(repoHashDir, 'evidence', state.featureId)
|
|
23
|
+
const shepEvidenceDir = join(repoHashDir, 'evidence', state.featureId);
|
|
24
24
|
const specSection = specContent
|
|
25
25
|
? `## Feature Specification (spec.yaml)
|
|
26
26
|
|
|
@@ -41,10 +41,9 @@ ${tasksContent}
|
|
|
41
41
|
`
|
|
42
42
|
: '';
|
|
43
43
|
// Relative spec dir path from worktree root (e.g., "specs/057-sidenav-feature-toggle")
|
|
44
|
-
|
|
45
|
-
const relativeSpecDir = relative(cwd, state.specDir).replaceAll('\\', '/');
|
|
44
|
+
const relativeSpecDir = relative(cwd, state.specDir);
|
|
46
45
|
const specEvidenceRelPath = `${relativeSpecDir}/evidence`;
|
|
47
|
-
const specEvidenceAbsPath = join(state.specDir, 'evidence')
|
|
46
|
+
const specEvidenceAbsPath = join(state.specDir, 'evidence');
|
|
48
47
|
const storageSection = options.commitEvidence
|
|
49
48
|
? `## Evidence Storage
|
|
50
49
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"repair.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,QAAQ,EAAE,cAAc,GACvB,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAuCnE"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js
CHANGED
|
@@ -13,8 +13,7 @@ import { readSpecFile, createNodeLogger } from './node-helpers.js';
|
|
|
13
13
|
*/
|
|
14
14
|
export function buildRepairPrompt(filename, content, errors, specDir) {
|
|
15
15
|
const filenames = Array.isArray(filename) ? filename : [filename];
|
|
16
|
-
|
|
17
|
-
const filePaths = filenames.map((f) => join(specDir, f).replaceAll('\\', '/'));
|
|
16
|
+
const filePaths = filenames.map((f) => join(specDir, f));
|
|
18
17
|
return [
|
|
19
18
|
'## YAML Repair Task',
|
|
20
19
|
'',
|
|
@@ -311,7 +311,7 @@ let ClaudeCodeSessionRepository = class ClaudeCodeSessionRepository {
|
|
|
311
311
|
const home = os.homedir();
|
|
312
312
|
if (filePath === home)
|
|
313
313
|
return '~';
|
|
314
|
-
if (filePath.startsWith(`${home}
|
|
314
|
+
if (filePath.startsWith(`${home}/`)) {
|
|
315
315
|
return `~${filePath.slice(home.length)}`;
|
|
316
316
|
}
|
|
317
317
|
return filePath;
|
|
@@ -33,7 +33,7 @@ let AttachmentStorageService = class AttachmentStorageService {
|
|
|
33
33
|
name: sanitized,
|
|
34
34
|
size: BigInt(buffer.length),
|
|
35
35
|
mimeType,
|
|
36
|
-
path: filePath
|
|
36
|
+
path: filePath,
|
|
37
37
|
createdAt: new Date(),
|
|
38
38
|
sha256: hash,
|
|
39
39
|
};
|
|
@@ -68,7 +68,7 @@ let AttachmentStorageService = class AttachmentStorageService {
|
|
|
68
68
|
name: stored.name,
|
|
69
69
|
size: stored.size,
|
|
70
70
|
mimeType: stored.mimeType,
|
|
71
|
-
path: newPath
|
|
71
|
+
path: newPath,
|
|
72
72
|
createdAt: stored.createdAt,
|
|
73
73
|
});
|
|
74
74
|
}
|
|
@@ -84,7 +84,7 @@ let AttachmentStorageService = class AttachmentStorageService {
|
|
|
84
84
|
name: file,
|
|
85
85
|
size: BigInt(0),
|
|
86
86
|
mimeType: 'application/octet-stream',
|
|
87
|
-
path: filePath
|
|
87
|
+
path: filePath,
|
|
88
88
|
createdAt: new Date(),
|
|
89
89
|
});
|
|
90
90
|
}
|
package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/deployment/deployment.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"deployment.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/deployment/deployment.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACT,MAAM,qEAAqE,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAgBD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,IAAI,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIrD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA+EjD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAYpD;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC3C;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI1D;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAI3D;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { spawn } from 'node:child_process';
|
|
10
10
|
import { EventEmitter } from 'node:events';
|
|
11
|
-
import treeKill from 'tree-kill';
|
|
12
11
|
import { DeploymentState } from '../../../domain/generated/output.js';
|
|
13
12
|
import { detectDevScript } from './detect-dev-script.js';
|
|
14
13
|
import { createDeploymentLogger } from './deployment-logger.js';
|
|
@@ -20,7 +19,7 @@ const MAX_WAIT_MS = 5000;
|
|
|
20
19
|
const defaultDeps = {
|
|
21
20
|
spawn,
|
|
22
21
|
detectDevScript,
|
|
23
|
-
kill: (pid, signal) =>
|
|
22
|
+
kill: (pid, signal) => process.kill(pid, signal),
|
|
24
23
|
isAlive: (pid) => {
|
|
25
24
|
try {
|
|
26
25
|
process.kill(pid, 0);
|
|
@@ -124,11 +123,11 @@ export class DeploymentService {
|
|
|
124
123
|
log.info(`stop("${targetId}") — no deployment found, nothing to stop`);
|
|
125
124
|
return;
|
|
126
125
|
}
|
|
127
|
-
log.info(`stop("${targetId}") — sending SIGTERM to process
|
|
126
|
+
log.info(`stop("${targetId}") — sending SIGTERM to process group (pid=${entry.pid})`);
|
|
128
127
|
entry.logs.clear();
|
|
129
|
-
// Send SIGTERM to process
|
|
128
|
+
// Send SIGTERM to process group
|
|
130
129
|
try {
|
|
131
|
-
this.deps.kill(entry.pid, 'SIGTERM');
|
|
130
|
+
this.deps.kill(-entry.pid, 'SIGTERM');
|
|
132
131
|
}
|
|
133
132
|
catch {
|
|
134
133
|
log.info(`stop("${targetId}") — process already dead on SIGTERM`);
|
|
@@ -141,7 +140,7 @@ export class DeploymentService {
|
|
|
141
140
|
log.warn(`stop("${targetId}") — process did not exit after ${MAX_WAIT_MS}ms, escalating to SIGKILL`);
|
|
142
141
|
// Escalate to SIGKILL
|
|
143
142
|
try {
|
|
144
|
-
this.deps.kill(entry.pid, 'SIGKILL');
|
|
143
|
+
this.deps.kill(-entry.pid, 'SIGKILL');
|
|
145
144
|
}
|
|
146
145
|
catch {
|
|
147
146
|
// Process may have exited between check and kill
|
|
@@ -184,11 +183,11 @@ export class DeploymentService {
|
|
|
184
183
|
this.emitter.off(event, handler);
|
|
185
184
|
}
|
|
186
185
|
/**
|
|
187
|
-
* Send SIGKILL to a process
|
|
186
|
+
* Send SIGKILL to a process group.
|
|
188
187
|
*/
|
|
189
188
|
killProcess(entry) {
|
|
190
189
|
try {
|
|
191
|
-
this.deps.kill(entry.pid, 'SIGKILL');
|
|
190
|
+
this.deps.kill(-entry.pid, 'SIGKILL');
|
|
192
191
|
}
|
|
193
192
|
catch {
|
|
194
193
|
// Process may already be dead
|
|
@@ -136,7 +136,7 @@ let WorktreeService = class WorktreeService {
|
|
|
136
136
|
getWorktreePath(repoPath, branch) {
|
|
137
137
|
const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
|
|
138
138
|
const slug = branch.replace(/\//g, '-');
|
|
139
|
-
return path.join(getShepHomeDir(), 'repos', repoHash, 'wt', slug)
|
|
139
|
+
return path.join(getShepHomeDir(), 'repos', repoHash, 'wt', slug);
|
|
140
140
|
}
|
|
141
141
|
parseWorktreeOutput(output) {
|
|
142
142
|
if (!output.trim())
|
package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js
CHANGED
|
@@ -19,5 +19,5 @@ import { getShepHomeDir } from '../filesystem/shep-directory.service.js';
|
|
|
19
19
|
export function computeWorktreePath(repoPath, branch) {
|
|
20
20
|
const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
|
|
21
21
|
const slug = branch.replace(/\//g, '-');
|
|
22
|
-
return join(getShepHomeDir(), 'repos', repoHash, 'wt', slug)
|
|
22
|
+
return join(getShepHomeDir(), 'repos', repoHash, 'wt', slug);
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,8EAA8E,CAAC;AAetF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAGnF;AAED,qBACa,4BAA6B,YAAW,mBAAmB;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;;IAiB1C,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,eAAe,CAAC;IA8D3B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAWtD"}
|
|
@@ -16,9 +16,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
16
16
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
17
17
|
};
|
|
18
18
|
import { injectable } from 'tsyringe';
|
|
19
|
-
import { spawn } from 'node:child_process';
|
|
19
|
+
import { spawn, execFile } from 'node:child_process';
|
|
20
20
|
import { platform } from 'node:os';
|
|
21
|
-
import { checkBinaryExists } from '../tool-installer/binary-exists.js';
|
|
22
21
|
import { TOOL_METADATA } from '../tool-installer/tool-metadata.js';
|
|
23
22
|
/**
|
|
24
23
|
* Resolve a platform-specific value from a string or per-platform record.
|
|
@@ -102,13 +101,16 @@ let JsonDrivenIdeLauncherService = class JsonDrivenIdeLauncherService {
|
|
|
102
101
|
};
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
|
-
|
|
104
|
+
checkAvailability(editorId) {
|
|
106
105
|
const entry = this.editors.get(editorId);
|
|
107
106
|
if (!entry)
|
|
108
|
-
return false;
|
|
107
|
+
return Promise.resolve(false);
|
|
109
108
|
const binary = resolvePlatformValue(entry.binary);
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
execFile('which', [binary], (err) => {
|
|
111
|
+
resolve(!err);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
112
114
|
}
|
|
113
115
|
};
|
|
114
116
|
JsonDrivenIdeLauncherService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AAsD7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAgFlC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js
CHANGED
|
@@ -18,11 +18,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
18
18
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
19
|
};
|
|
20
20
|
import { injectable } from 'tsyringe';
|
|
21
|
-
import { exec, spawn } from 'node:child_process';
|
|
21
|
+
import { exec, execFile, spawn } from 'node:child_process';
|
|
22
22
|
import { platform } from 'node:os';
|
|
23
23
|
import { createAvailableStatus, createMissingStatus, createErrorStatus, } from '../../../domain/value-objects/tool-installation-status.js';
|
|
24
24
|
import { TOOL_METADATA } from './tool-metadata.js';
|
|
25
|
-
import { checkBinaryExists } from './binary-exists.js';
|
|
26
25
|
/**
|
|
27
26
|
* Resolve binary name for the current platform.
|
|
28
27
|
* Supports both simple string binaries and per-platform maps.
|
|
@@ -32,6 +31,30 @@ function resolveBinary(metadata) {
|
|
|
32
31
|
return metadata.binary;
|
|
33
32
|
return metadata.binary[platform()] ?? Object.values(metadata.binary)[0];
|
|
34
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if a binary exists in the system PATH using 'which' command.
|
|
36
|
+
*
|
|
37
|
+
* `which` exits with code 1 when the binary is simply not in PATH.
|
|
38
|
+
* Node's execFile wraps that as an Error, but it's a normal "not found"
|
|
39
|
+
* result. Only truly unexpected failures (ENOENT for `which` itself,
|
|
40
|
+
* EACCES, signals, etc.) are surfaced via the `error` field.
|
|
41
|
+
*/
|
|
42
|
+
const checkBinaryExists = (binary) => {
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
execFile('which', [binary], (err) => {
|
|
45
|
+
if (!err)
|
|
46
|
+
return resolve({ found: true });
|
|
47
|
+
// execFile errors from a non-zero exit code have a numeric `code` property.
|
|
48
|
+
// That's the normal "binary not found in PATH" case.
|
|
49
|
+
const code = err.code;
|
|
50
|
+
if (code === undefined || typeof code === 'number') {
|
|
51
|
+
return resolve({ found: false, notInPath: true });
|
|
52
|
+
}
|
|
53
|
+
// Anything else (ENOENT for `which` itself, EACCES, etc.) is a real error.
|
|
54
|
+
resolve({ found: false, error: err });
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
};
|
|
35
58
|
/**
|
|
36
59
|
* Run a shell command and resolve true when it exits 0, false otherwise.
|
|
37
60
|
* Used as a fallback for GUI apps whose binary isn't in PATH (e.g. Warp, iTerm2).
|
|
@@ -107,8 +130,8 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
107
130
|
}
|
|
108
131
|
return new Promise((resolve) => {
|
|
109
132
|
let output = '';
|
|
110
|
-
const child = spawn(installCommand.command
|
|
111
|
-
shell:
|
|
133
|
+
const child = spawn('sh', ['-c', installCommand.command], {
|
|
134
|
+
shell: false,
|
|
112
135
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
113
136
|
env: {
|
|
114
137
|
...process.env,
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"tags": ["terminal"],
|
|
6
6
|
"author": "Alacritty Contributors",
|
|
7
7
|
"website": "https://alacritty.org",
|
|
8
|
-
"platforms": ["linux", "darwin"
|
|
8
|
+
"platforms": ["linux", "darwin"],
|
|
9
9
|
"iconUrl": "https://cdn.simpleicons.org/alacritty",
|
|
10
10
|
"binary": "alacritty",
|
|
11
11
|
"packageManager": "brew",
|
|
12
12
|
"commands": {
|
|
13
13
|
"darwin": "brew install --cask alacritty",
|
|
14
|
-
"linux": "sudo apt-get update && sudo apt-get install -y alacritty"
|
|
15
|
-
"win32": "winget install --id Alacritty.Alacritty -e --source winget"
|
|
14
|
+
"linux": "sudo apt-get update && sudo apt-get install -y alacritty"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://alacritty.org/",
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json
CHANGED
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"tags": ["cli-agent"],
|
|
6
6
|
"author": "Anthropic",
|
|
7
7
|
"website": "https://claude.ai/code",
|
|
8
|
-
"platforms": ["linux", "darwin"
|
|
8
|
+
"platforms": ["linux", "darwin"],
|
|
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"
|
|
15
|
-
"win32": "npm install -g @anthropic-ai/claude-code"
|
|
14
|
+
"darwin": "curl -fsSL https://claude.ai/install.sh | bash"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://code.claude.com/docs/en/overview",
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"tags": ["cli-agent"],
|
|
6
6
|
"author": "Anysphere",
|
|
7
7
|
"website": "https://cursor.com",
|
|
8
|
-
"platforms": ["linux", "darwin"
|
|
8
|
+
"platforms": ["linux", "darwin"],
|
|
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"
|
|
15
|
-
"win32": "winget install --id Anysphere.Cursor -e --source winget"
|
|
14
|
+
"darwin": "curl https://cursor.com/install -fsS | bash"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://www.codecademy.com/article/getting-started-with-cursor-cli",
|
|
@@ -11,8 +11,7 @@
|
|
|
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"
|
|
15
|
-
"win32": "winget install --id Anysphere.Cursor -e --source winget"
|
|
14
|
+
"darwin": "Download from https://cursor.com/download or use: brew install --cask cursor"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 600000,
|
|
18
17
|
"documentationUrl": "https://cursor.com/download",
|
|
@@ -11,8 +11,7 @@
|
|
|
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"
|
|
15
|
-
"win32": "winget install --id GitHub.cli -e --source winget"
|
|
14
|
+
"darwin": "brew install gh"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://cli.github.com/manual/",
|
|
@@ -11,8 +11,7 @@
|
|
|
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"
|
|
15
|
-
"win32": "winget install --id Git.Git -e --source winget"
|
|
14
|
+
"darwin": "xcode-select --install"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://git-scm.com/doc",
|
|
@@ -11,8 +11,7 @@
|
|
|
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"
|
|
15
|
-
"win32": "winget install --id Microsoft.VisualStudioCode -e --source winget"
|
|
14
|
+
"darwin": "brew install visual-studio-code"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://code.visualstudio.com/docs/setup/linux",
|
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
"tags": ["terminal"],
|
|
6
6
|
"author": "Warp",
|
|
7
7
|
"website": "https://www.warp.dev",
|
|
8
|
-
"platforms": ["darwin"
|
|
8
|
+
"platforms": ["darwin"],
|
|
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"
|
|
14
|
-
"win32": "winget install --id Warp.Warp -e --source winget"
|
|
13
|
+
"darwin": "brew install --cask warp"
|
|
15
14
|
},
|
|
16
15
|
"timeout": 300000,
|
|
17
16
|
"documentationUrl": "https://docs.warp.dev/",
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"tags": ["ide"],
|
|
6
6
|
"author": "Codeium",
|
|
7
7
|
"website": "https://codeium.com/windsurf",
|
|
8
|
-
"platforms": ["linux", "darwin"
|
|
8
|
+
"platforms": ["linux", "darwin"],
|
|
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"
|
|
15
|
-
"win32": "winget install --id Codeium.Windsurf -e --source winget"
|
|
14
|
+
"darwin": "brew install --cask windsurf"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"documentationUrl": "https://docs.windsurf.com/windsurf/getting-started",
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
"tags": ["ide"],
|
|
6
6
|
"author": "Zed Industries",
|
|
7
7
|
"website": "https://zed.dev",
|
|
8
|
-
"platforms": ["linux", "darwin"
|
|
8
|
+
"platforms": ["linux", "darwin"],
|
|
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"
|
|
15
|
-
"win32": "winget install --id ZedIndustries.Zed -e --source winget"
|
|
14
|
+
"darwin": "curl -f https://zed.dev/install.sh | sh"
|
|
16
15
|
},
|
|
17
16
|
"timeout": 300000,
|
|
18
17
|
"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,CA+F9E"}
|
|
@@ -67,7 +67,6 @@ 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,
|
|
71
70
|
});
|
|
72
71
|
// Wait briefly for the child to either settle or crash.
|
|
73
72
|
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;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iEAAiE,CAAC;AA0BtG;;;GAGG;AACH,wBAAsB,UAAU,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC7E"}
|
|
@@ -18,7 +18,6 @@
|
|
|
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';
|
|
22
21
|
import { messages } from '../../ui/index.js';
|
|
23
22
|
const POLL_INTERVAL_MS = 200;
|
|
24
23
|
const MAX_WAIT_MS = 5000;
|
|
@@ -55,15 +54,15 @@ export async function stopDaemon(daemonService) {
|
|
|
55
54
|
}
|
|
56
55
|
try {
|
|
57
56
|
messages.info(`Stopping Shep daemon (PID ${pid})...`);
|
|
58
|
-
// Send SIGTERM
|
|
59
|
-
|
|
57
|
+
// Send SIGTERM — request graceful shutdown
|
|
58
|
+
process.kill(pid, 'SIGTERM');
|
|
60
59
|
// Poll for up to 5s waiting for the process to exit
|
|
61
60
|
const died = await pollUntilDead(daemonService, pid, MAX_WAIT_MS, POLL_INTERVAL_MS);
|
|
62
61
|
if (!died) {
|
|
63
|
-
// Graceful shutdown timed out — force kill
|
|
62
|
+
// Graceful shutdown timed out — force kill
|
|
64
63
|
messages.info('Daemon did not stop gracefully, sending SIGKILL...');
|
|
65
64
|
try {
|
|
66
|
-
|
|
65
|
+
process.kill(pid, 'SIGKILL');
|
|
67
66
|
}
|
|
68
67
|
catch {
|
|
69
68
|
// 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;AAyEnC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAsB,GAAG,OAAO,CA+D7E"}
|
|
@@ -13,8 +13,6 @@ 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';
|
|
18
16
|
/**
|
|
19
17
|
* Get the latest published version of @shepai/cli from npm registry.
|
|
20
18
|
* Returns null if the check fails (fail-open).
|
|
@@ -25,7 +23,6 @@ function getLatestVersion(spawnFn) {
|
|
|
25
23
|
let settled = false;
|
|
26
24
|
const child = spawnFn('npm', ['view', '@shepai/cli', 'version'], {
|
|
27
25
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
28
|
-
...(IS_WINDOWS && { shell: true }),
|
|
29
26
|
});
|
|
30
27
|
const timeout = setTimeout(() => {
|
|
31
28
|
if (!settled) {
|
|
@@ -68,7 +65,6 @@ function runNpmInstall(spawnFn) {
|
|
|
68
65
|
return new Promise((resolve, reject) => {
|
|
69
66
|
const child = spawnFn('npm', ['i', '-g', '@shepai/cli@latest'], {
|
|
70
67
|
stdio: 'inherit',
|
|
71
|
-
...(IS_WINDOWS && { shell: true }),
|
|
72
68
|
});
|
|
73
69
|
child.on('close', (code) => {
|
|
74
70
|
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":"AAMA,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,13 +1,12 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import { isAbsolute } from 'node:path';
|
|
4
3
|
import { resolve } from '../../lib/server-container.js';
|
|
5
4
|
import { createDeploymentLogger } from '../../../../../packages/core/src/infrastructure/services/deployment/deployment-logger.js';
|
|
6
5
|
import { DeploymentState } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
7
6
|
const log = createDeploymentLogger('[deployRepository]');
|
|
8
7
|
export async function deployRepository(repositoryPath) {
|
|
9
8
|
log.info(`called — repositoryPath="${repositoryPath}"`);
|
|
10
|
-
if (!repositoryPath
|
|
9
|
+
if (!repositoryPath?.startsWith('/')) {
|
|
11
10
|
log.warn('rejected — not an absolute path');
|
|
12
11
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
13
12
|
}
|
|
@@ -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":"AAeA,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,7 +1,6 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { platform } from 'node:os';
|
|
4
|
-
import { isAbsolute } from 'node:path';
|
|
5
4
|
import { spawn } from 'node:child_process';
|
|
6
5
|
// Use a record lookup instead of if/else to prevent the bundler from
|
|
7
6
|
// tree-shaking platform branches at build time. Turbopack evaluates
|
|
@@ -10,10 +9,9 @@ import { spawn } from 'node:child_process';
|
|
|
10
9
|
const FOLDER_COMMANDS = {
|
|
11
10
|
darwin: { cmd: 'open', args: (p) => [p] },
|
|
12
11
|
linux: { cmd: 'xdg-open', args: (p) => [p] },
|
|
13
|
-
win32: { cmd: 'explorer', args: (p) => [p] },
|
|
14
12
|
};
|
|
15
13
|
export async function openFolder(repositoryPath) {
|
|
16
|
-
if (!repositoryPath
|
|
14
|
+
if (!repositoryPath?.startsWith('/')) {
|
|
17
15
|
return { success: false, error: 'repositoryPath must be an absolute path' };
|
|
18
16
|
}
|
|
19
17
|
try {
|
|
@@ -24,7 +22,7 @@ export async function openFolder(repositoryPath) {
|
|
|
24
22
|
if (!entry) {
|
|
25
23
|
return {
|
|
26
24
|
success: false,
|
|
27
|
-
error: `Unsupported platform: ${platform()}
|
|
25
|
+
error: `Unsupported platform: ${platform()}. Folder open is supported on macOS and Linux only.`,
|
|
28
26
|
};
|
|
29
27
|
}
|
|
30
28
|
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":"AAMA,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"}
|