@shepai/cli 1.169.0-pr523.2f53944 → 1.169.0-pr524.54c51f4
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/upgrade/upgrade-cli.use-case.d.ts +1 -0
- package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.js +37 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +1 -1
- package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/upgrade.command.js +45 -2
- package/dist/translations/ar/cli.json +2 -0
- package/dist/translations/de/cli.json +2 -0
- package/dist/translations/en/cli.json +2 -0
- package/dist/translations/es/cli.json +2 -0
- package/dist/translations/fr/cli.json +2 -0
- package/dist/translations/he/cli.json +2 -0
- package/dist/translations/pt/cli.json +2 -0
- package/dist/translations/ru/cli.json +2 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -2
- 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 +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- 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 +38 -38
- 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 +38 -38
- 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]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- 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)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- 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 +38 -38
- 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 +38 -38
- 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 +27 -27
- 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]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- 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 +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- 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 +11 -11
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js.nft.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]__a402b567._.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/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.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]__4fb81977._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7ffd3598._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7ffd3598._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e88da4ee._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_6e9b9005._.js → _312a7379._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_6e9b9005._.js.map → _312a7379._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_faecc602._.js → _84019a97._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_faecc602._.js.map → _84019a97._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_a1068852._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_a8b3bc2c._.js → _b0791eff._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_a8b3bc2c._.js.map → _b0791eff._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.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/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +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/chunks/ssr/translations_23dd5e7e._.js +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 +48 -48
- package/web/.next/static/chunks/{54ea8b84cb2cc0d1.js → 12dbd44d29de81e6.js} +1 -1
- package/web/.next/static/chunks/{0ccb9c0b9b1b041f.js → 1c2a7ce17665c0a1.js} +2 -2
- package/web/.next/static/chunks/{e6c45e81b87d2959.js → 20568580dfe8b7f5.js} +1 -1
- package/web/.next/static/chunks/{c5d2fa6c6353309a.js → 252ef5d9424f1962.js} +1 -1
- package/web/.next/static/chunks/{be1d829fb4281be0.js → 253b4cb30306c280.js} +1 -1
- package/web/.next/static/chunks/{21acf592ead7608f.js → 2dc3e1fe820e11dc.js} +2 -2
- package/web/.next/static/chunks/{c3ef3b892f7794ec.js → 3421835c6fe6fdc9.js} +1 -1
- package/web/.next/static/chunks/{e29d3d0d18276e72.js → 452a2aefb87c7ea4.js} +1 -1
- package/web/.next/static/chunks/{f7112ebae57c20f9.js → 6a81a9b4c8a91437.js} +1 -1
- package/web/.next/static/chunks/{76fc822ad8b3b7e2.js → 7b6f79edae9172eb.js} +1 -1
- package/web/.next/static/chunks/{36cb1a6e3e35de17.js → 7d68eecb6c9fb328.js} +1 -1
- package/web/.next/static/chunks/{6c2beffb5a815c5a.js → c9dabe754cf4c63a.js} +1 -1
- package/web/.next/static/chunks/{65b62ac34ef4422a.js → ef458d654df0eb67.js} +1 -1
- package/web/.next/static/chunks/{d888abaf53aa7b66.js → f677f0187ac826b8.js} +2 -2
- /package/web/.next/static/{kPxrKArrmlja9IjXEI6-W → Q7nBER7xocT91xgzMb11R}/_buildManifest.js +0 -0
- /package/web/.next/static/{kPxrKArrmlja9IjXEI6-W → Q7nBER7xocT91xgzMb11R}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{kPxrKArrmlja9IjXEI6-W → Q7nBER7xocT91xgzMb11R}/_ssgManifest.js +0 -0
|
@@ -24,6 +24,7 @@ export declare class UpgradeCliUseCase {
|
|
|
24
24
|
constructor(versionService: IVersionService, daemonService: IDaemonService);
|
|
25
25
|
execute(onOutput?: (data: string) => void): Promise<UpgradeResult>;
|
|
26
26
|
private getLatestVersion;
|
|
27
|
+
private preDownloadPackage;
|
|
27
28
|
/**
|
|
28
29
|
* Schedule a daemon self-restart after upgrade.
|
|
29
30
|
* Reads the current daemon port, spawns a new daemon process with the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade-cli.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AAE9F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"upgrade-cli.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yDAAyD,CAAC;AAE9F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,cAAc,EAAE,eAAe,EAE/B,aAAa,EAAE,cAAc;IAG1C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAyCxE,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,kBAAkB;IAkC1B;;;;OAIG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5C,OAAO,CAAC,aAAa;CAuBtB"}
|
|
@@ -25,6 +25,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
25
25
|
import { injectable, inject } from 'tsyringe';
|
|
26
26
|
import { spawn } from 'node:child_process';
|
|
27
27
|
const VERSION_CHECK_TIMEOUT_MS = 10_000;
|
|
28
|
+
const NPM_CACHE_ADD_TIMEOUT_MS = 120_000;
|
|
28
29
|
/** Delay (ms) before the current process exits to allow the SSE response to flush. */
|
|
29
30
|
const SELF_RESTART_DELAY_MS = 1_000;
|
|
30
31
|
let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
@@ -43,8 +44,14 @@ let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
|
43
44
|
onOutput?.(`Already up to date (v${currentVersion})\n`);
|
|
44
45
|
return { status: 'up-to-date', currentVersion, latestVersion };
|
|
45
46
|
}
|
|
46
|
-
// 3.
|
|
47
|
+
// 3. Pre-download the package into npm cache before install
|
|
47
48
|
const target = latestVersion ? `v${latestVersion}` : 'latest';
|
|
49
|
+
onOutput?.(`Downloading @shepai/cli@latest...\n`);
|
|
50
|
+
const cached = await this.preDownloadPackage();
|
|
51
|
+
if (!cached) {
|
|
52
|
+
onOutput?.('Pre-download did not complete — proceeding with install...\n');
|
|
53
|
+
}
|
|
54
|
+
// 4. Run install (fast if cached)
|
|
48
55
|
onOutput?.(`Upgrading from v${currentVersion} to ${target}...\n`);
|
|
49
56
|
try {
|
|
50
57
|
const exitCode = await this.runNpmInstall(onOutput);
|
|
@@ -104,6 +111,35 @@ let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
|
104
111
|
});
|
|
105
112
|
});
|
|
106
113
|
}
|
|
114
|
+
preDownloadPackage() {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
let settled = false;
|
|
117
|
+
const child = spawn('npm', ['cache', 'add', '@shepai/cli@latest'], {
|
|
118
|
+
stdio: ['ignore', 'ignore', 'pipe'],
|
|
119
|
+
});
|
|
120
|
+
const timeout = setTimeout(() => {
|
|
121
|
+
if (!settled) {
|
|
122
|
+
settled = true;
|
|
123
|
+
child.kill();
|
|
124
|
+
resolve(false);
|
|
125
|
+
}
|
|
126
|
+
}, NPM_CACHE_ADD_TIMEOUT_MS);
|
|
127
|
+
child.on('close', (code) => {
|
|
128
|
+
if (!settled) {
|
|
129
|
+
settled = true;
|
|
130
|
+
clearTimeout(timeout);
|
|
131
|
+
resolve(code === 0);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
child.on('error', () => {
|
|
135
|
+
if (!settled) {
|
|
136
|
+
settled = true;
|
|
137
|
+
clearTimeout(timeout);
|
|
138
|
+
resolve(false);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
107
143
|
/**
|
|
108
144
|
* Schedule a daemon self-restart after upgrade.
|
|
109
145
|
* Reads the current daemon port, spawns a new daemon process with the
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js
CHANGED
|
@@ -86,7 +86,7 @@ export function createEvidenceNode(executor) {
|
|
|
86
86
|
const commitEvidence = state.commitEvidence;
|
|
87
87
|
const settings = hasSettings() ? getSettings() : undefined;
|
|
88
88
|
const maxRetries = settings?.workflow.evidenceRetries ?? DEFAULT_MAX_RETRIES;
|
|
89
|
-
const options = buildExecutorOptions(state
|
|
89
|
+
const options = buildExecutorOptions(state);
|
|
90
90
|
const tasks = parseTasks(state.specDir);
|
|
91
91
|
// --- Validation retry loop ---
|
|
92
92
|
let allEvidence = [];
|
|
@@ -48,7 +48,7 @@ export function createFastImplementNode(executor) {
|
|
|
48
48
|
agentType: executor.agentType,
|
|
49
49
|
});
|
|
50
50
|
try {
|
|
51
|
-
const options = buildExecutorOptions(state
|
|
51
|
+
const options = buildExecutorOptions(state);
|
|
52
52
|
log.info(`Executing agent at cwd=${options.cwd}`);
|
|
53
53
|
log.info(`Prompt length: ${prompt.length} chars`);
|
|
54
54
|
const result = await retryExecute(executor, prompt, options, { logger: log });
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js
CHANGED
|
@@ -112,7 +112,7 @@ export function createImplementNode(executor) {
|
|
|
112
112
|
}
|
|
113
113
|
log.info(`Phase ${phase.id} "${phase.name}" — ${phaseTasks.length} task(s), parallel: ${phase.parallel}`);
|
|
114
114
|
updateFeatureProgress(state.specDir, completedTasks, totalTasks, `implementing-${phase.id}`, phaseTasks[0].id, log);
|
|
115
|
-
const options = buildExecutorOptions(state
|
|
115
|
+
const options = buildExecutorOptions(state);
|
|
116
116
|
const promptContext = { isLastPhase, phaseIndex: i, totalPhases };
|
|
117
117
|
const phaseStartTime = Date.now();
|
|
118
118
|
const phaseTimingId = await recordPhaseStart(`implement:${phase.id}`, {
|
|
@@ -83,7 +83,7 @@ export function createMergeNode(deps) {
|
|
|
83
83
|
const feature = await deps.featureRepository.findById(state.featureId);
|
|
84
84
|
const branch = feature?.branch ?? `feat/${state.featureId}`;
|
|
85
85
|
const baseBranch = await deps.getDefaultBranch(cwd);
|
|
86
|
-
const options = buildExecutorOptions(state
|
|
86
|
+
const options = buildExecutorOptions(state);
|
|
87
87
|
let commitHash = state.commitHash;
|
|
88
88
|
let prUrl = state.prUrl;
|
|
89
89
|
let prNumber = state.prNumber;
|
|
@@ -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;AAS9E,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;AAS9E,KAAK,OAAO,GAAG,OAAO,YAAY,CAAC;AAuHnC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,OAAsB,GAAG,OAAO,CA6E7E"}
|
|
@@ -14,6 +14,7 @@ import { getCliI18n } from '../i18n.js';
|
|
|
14
14
|
import { stopDaemon } from './daemon/stop-daemon.js';
|
|
15
15
|
import { startDaemon } from './daemon/start-daemon.js';
|
|
16
16
|
const VERSION_CHECK_TIMEOUT_MS = 10_000;
|
|
17
|
+
const NPM_CACHE_ADD_TIMEOUT_MS = 120_000;
|
|
17
18
|
/** On Windows, npm is a .cmd batch file — spawn() needs shell: true to resolve it. */
|
|
18
19
|
const IS_WINDOWS = process.platform === 'win32';
|
|
19
20
|
/**
|
|
@@ -61,6 +62,41 @@ function getLatestVersion(spawnFn) {
|
|
|
61
62
|
});
|
|
62
63
|
});
|
|
63
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Pre-download the package into npm's cache so the subsequent install is fast.
|
|
67
|
+
* Uses `npm cache add` which downloads without installing.
|
|
68
|
+
* Returns true if the cache add succeeded, false otherwise (fail-open).
|
|
69
|
+
*/
|
|
70
|
+
function preDownloadPackage(spawnFn) {
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
let settled = false;
|
|
73
|
+
const child = spawnFn('npm', ['cache', 'add', '@shepai/cli@latest'], {
|
|
74
|
+
stdio: ['ignore', 'ignore', 'pipe'],
|
|
75
|
+
...(IS_WINDOWS && { shell: true }),
|
|
76
|
+
});
|
|
77
|
+
const timeout = setTimeout(() => {
|
|
78
|
+
if (!settled) {
|
|
79
|
+
settled = true;
|
|
80
|
+
child.kill();
|
|
81
|
+
resolve(false);
|
|
82
|
+
}
|
|
83
|
+
}, NPM_CACHE_ADD_TIMEOUT_MS);
|
|
84
|
+
child.on('close', (code) => {
|
|
85
|
+
if (!settled) {
|
|
86
|
+
settled = true;
|
|
87
|
+
clearTimeout(timeout);
|
|
88
|
+
resolve(code === 0);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
child.on('error', () => {
|
|
92
|
+
if (!settled) {
|
|
93
|
+
settled = true;
|
|
94
|
+
clearTimeout(timeout);
|
|
95
|
+
resolve(false);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
64
100
|
/**
|
|
65
101
|
* Run npm i -g @shepai/cli@latest with inherited stdio.
|
|
66
102
|
* Returns the exit code, or rejects on spawn error.
|
|
@@ -107,7 +143,14 @@ export function createUpgradeCommand(spawnFn = defaultSpawn) {
|
|
|
107
143
|
else {
|
|
108
144
|
messages.info(t('cli:commands.upgrade.upgradingToLatest', { current: currentVersion }));
|
|
109
145
|
}
|
|
110
|
-
// 4.
|
|
146
|
+
// 4. Pre-download the package into npm cache BEFORE stopping the daemon.
|
|
147
|
+
// This minimizes downtime — the actual install will read from cache.
|
|
148
|
+
messages.info(t('cli:commands.upgrade.downloadingPackage'));
|
|
149
|
+
const cached = await preDownloadPackage(spawnFn);
|
|
150
|
+
if (!cached) {
|
|
151
|
+
messages.warning(t('cli:commands.upgrade.downloadFailed'));
|
|
152
|
+
}
|
|
153
|
+
// 5. Check daemon state and stop if running
|
|
111
154
|
const daemonService = container.resolve('IDaemonService');
|
|
112
155
|
const daemonState = await daemonService.read();
|
|
113
156
|
const daemonWasRunning = daemonState !== null && daemonService.isAlive(daemonState.pid);
|
|
@@ -116,7 +159,7 @@ export function createUpgradeCommand(spawnFn = defaultSpawn) {
|
|
|
116
159
|
messages.info(t('cli:commands.upgrade.stoppingDaemon'));
|
|
117
160
|
await stopDaemon(daemonService);
|
|
118
161
|
}
|
|
119
|
-
//
|
|
162
|
+
// 6. Run npm i -g @shepai/cli@latest; always restore daemon in finally
|
|
120
163
|
let installExitCode = 1;
|
|
121
164
|
try {
|
|
122
165
|
installExitCode = await runNpmInstall(spawnFn);
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "محدّث بالفعل (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "الترقية من v{{current}} إلى v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "الترقية من v{{current}} إلى الأحدث",
|
|
568
|
+
"downloadingPackage": "جارٍ تنزيل الإصدار الجديد...",
|
|
569
|
+
"downloadFailed": "لم يكتمل التنزيل المسبق — المتابعة بالتثبيت",
|
|
568
570
|
"stoppingDaemon": "جارٍ إيقاف الخدمة الخلفية قبل الترقية...",
|
|
569
571
|
"restartingDaemon": "جارٍ إعادة تشغيل الخدمة الخلفية...",
|
|
570
572
|
"daemonRestarted": "تمت إعادة تشغيل الخدمة الخلفية بنجاح.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Bereits aktuell (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Aktualisierung von v{{current}} auf v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Aktualisierung von v{{current}} auf die neueste Version",
|
|
568
|
+
"downloadingPackage": "Neue Version wird heruntergeladen...",
|
|
569
|
+
"downloadFailed": "Vorab-Download nicht abgeschlossen — Installation wird fortgesetzt",
|
|
568
570
|
"stoppingDaemon": "Dienst wird vor Aktualisierung gestoppt...",
|
|
569
571
|
"restartingDaemon": "Dienst wird neu gestartet...",
|
|
570
572
|
"daemonRestarted": "Dienst erfolgreich neu gestartet.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Already up to date (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Upgrading from v{{current}} to v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Upgrading from v{{current}} to latest",
|
|
568
|
+
"downloadingPackage": "Downloading new version...",
|
|
569
|
+
"downloadFailed": "Pre-download did not complete — proceeding with install",
|
|
568
570
|
"stoppingDaemon": "Stopping daemon before upgrade...",
|
|
569
571
|
"restartingDaemon": "Restarting daemon...",
|
|
570
572
|
"daemonRestarted": "Daemon restarted successfully.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Ya está actualizado (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Actualizando de v{{current}} a v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Actualizando de v{{current}} a la última versión",
|
|
568
|
+
"downloadingPackage": "Descargando nueva versión...",
|
|
569
|
+
"downloadFailed": "La descarga previa no se completó — continuando con la instalación",
|
|
568
570
|
"stoppingDaemon": "Deteniendo el demonio antes de actualizar...",
|
|
569
571
|
"restartingDaemon": "Reiniciando el demonio...",
|
|
570
572
|
"daemonRestarted": "Demonio reiniciado exitosamente.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Déjà à jour (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Mise à jour de v{{current}} vers v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Mise à jour de v{{current}} vers la dernière version",
|
|
568
|
+
"downloadingPackage": "Téléchargement de la nouvelle version...",
|
|
569
|
+
"downloadFailed": "Le pré-téléchargement n'a pas abouti — poursuite de l'installation",
|
|
568
570
|
"stoppingDaemon": "Arrêt du démon avant la mise à jour...",
|
|
569
571
|
"restartingDaemon": "Redémarrage du démon...",
|
|
570
572
|
"daemonRestarted": "Démon redémarré avec succès.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "כבר מעודכן (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "משדרג מ-v{{current}} ל-v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "משדרג מ-v{{current}} לגרסה האחרונה",
|
|
568
|
+
"downloadingPackage": "מוריד גרסה חדשה...",
|
|
569
|
+
"downloadFailed": "ההורדה המוקדמת לא הושלמה — ממשיך בהתקנה",
|
|
568
570
|
"stoppingDaemon": "עוצר תהליך לפני שדרוג...",
|
|
569
571
|
"restartingDaemon": "מפעיל מחדש תהליך...",
|
|
570
572
|
"daemonRestarted": "התהליך הופעל מחדש בהצלחה.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Já está atualizado (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Atualizando de v{{current}} para v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Atualizando de v{{current}} para a mais recente",
|
|
568
|
+
"downloadingPackage": "Baixando nova versão...",
|
|
569
|
+
"downloadFailed": "Download prévio não concluído — prosseguindo com a instalação",
|
|
568
570
|
"stoppingDaemon": "Parando daemon antes da atualização...",
|
|
569
571
|
"restartingDaemon": "Reiniciando daemon...",
|
|
570
572
|
"daemonRestarted": "Daemon reiniciado com sucesso.",
|
|
@@ -565,6 +565,8 @@
|
|
|
565
565
|
"alreadyUpToDate": "Уже актуальная версия (v{{version}})",
|
|
566
566
|
"upgradingFromTo": "Обновление с v{{current}} до v{{latest}}",
|
|
567
567
|
"upgradingToLatest": "Обновление с v{{current}} до последней версии",
|
|
568
|
+
"downloadingPackage": "Загрузка новой версии...",
|
|
569
|
+
"downloadFailed": "Предварительная загрузка не завершена — продолжение установки",
|
|
568
570
|
"stoppingDaemon": "Остановка демона перед обновлением...",
|
|
569
571
|
"restartingDaemon": "Перезапуск демона...",
|
|
570
572
|
"daemonRestarted": "Демон успешно перезапущен.",
|