@shepai/cli 1.108.0-pr340.8db5169 → 1.108.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/application/use-cases/upgrade/upgrade-cli.use-case.d.ts +1 -9
- 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 +2 -31
- package/dist/src/presentation/web/app/api/cli-upgrade/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/cli-upgrade/route.js +1 -14
- package/dist/src/presentation/web/components/common/version-badge/version-badge.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/version-badge/version-badge.js +1 -6
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.js +0 -7
- package/dist/src/presentation/web/hooks/use-cli-upgrade.d.ts +1 -1
- package/dist/src/presentation/web/hooks/use-cli-upgrade.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-cli-upgrade.js +1 -40
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- 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 +2 -2
- package/web/.next/required-server-files.json +2 -2
- 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 +26 -26
- 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 +26 -26
- 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 +26 -26
- 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 +26 -26
- 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]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +4 -7
- package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js.map +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_a1104008.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +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]__2773312c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.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]__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]__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]__cbd8062c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.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/{_1e479e1e._.js → _62046d95._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1e479e1e._.js.map → _62046d95._.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/{_b40d3a2a._.js → _c70d9b33._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_b40d3a2a._.js.map → _c70d9b33._.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/{_5ec9eb58._.js → _d061afbe._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_5ec9eb58._.js.map → _d061afbe._.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__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.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_ce7cbc3c._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.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_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.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/src_presentation_web_e2604413._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.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 +31 -31
- package/web/.next/static/chunks/{704fa1154b3c85f7.js → 0e0f97b1c5896c76.js} +2 -2
- package/web/.next/static/chunks/{df7992847d83ebe3.js → 1b75e16363eda185.js} +2 -2
- package/web/.next/static/chunks/{53ec07012221519d.js → 2cbea56328a51d40.js} +1 -1
- package/web/.next/static/chunks/3bb35e0689e8b6b7.js +1 -0
- package/web/.next/static/chunks/{d47f680b9b2156f8.js → 429244a234d321a0.js} +1 -1
- package/web/.next/static/chunks/{4f50ece4f1864060.js → 4903e892cb40b58f.js} +1 -1
- package/web/.next/static/chunks/{87c8d610736ac118.js → 6de088efae33ebe0.js} +1 -1
- package/web/.next/static/chunks/{9100308889c48177.js → 75ee6e58a48c650a.js} +1 -1
- package/web/.next/static/chunks/{e68fb0eefc403f19.js → 93dfac33de99e86d.js} +1 -1
- package/web/.next/static/chunks/{09666a074b524443.js → f9a371d3a0d6cd37.js} +1 -1
- package/web/.next/static/chunks/{790ea16995745106.js → fe25ae01bc30db68.js} +1 -1
- package/web/.next/static/chunks/bb855bbee5f9e6ea.js +0 -1
- /package/web/.next/static/{2zLwzoi3zvO049VYa4HS0 → IF-6eFBS3sFqEI7cO3O8x}/_buildManifest.js +0 -0
- /package/web/.next/static/{2zLwzoi3zvO049VYa4HS0 → IF-6eFBS3sFqEI7cO3O8x}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{2zLwzoi3zvO049VYa4HS0 → IF-6eFBS3sFqEI7cO3O8x}/_ssgManifest.js +0 -0
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* 4. Return result with old/new version info
|
|
12
12
|
*/
|
|
13
13
|
import type { IVersionService } from '../../ports/output/services/version-service.interface.js';
|
|
14
|
-
import type { IDaemonService } from '../../ports/output/services/daemon-service.interface.js';
|
|
15
14
|
export interface UpgradeResult {
|
|
16
15
|
status: 'up-to-date' | 'upgraded' | 'error';
|
|
17
16
|
currentVersion: string;
|
|
@@ -20,16 +19,9 @@ export interface UpgradeResult {
|
|
|
20
19
|
}
|
|
21
20
|
export declare class UpgradeCliUseCase {
|
|
22
21
|
private readonly versionService;
|
|
23
|
-
|
|
24
|
-
constructor(versionService: IVersionService, daemonService: IDaemonService);
|
|
22
|
+
constructor(versionService: IVersionService);
|
|
25
23
|
execute(onOutput?: (data: string) => void): Promise<UpgradeResult>;
|
|
26
24
|
private getLatestVersion;
|
|
27
|
-
/**
|
|
28
|
-
* Schedule a daemon self-restart after upgrade.
|
|
29
|
-
* Reads the current daemon port, spawns a new daemon process with the
|
|
30
|
-
* upgraded code, then exits the current process after a brief delay.
|
|
31
|
-
*/
|
|
32
|
-
scheduleDaemonRestart(): Promise<void>;
|
|
33
25
|
private runNpmInstall;
|
|
34
26
|
}
|
|
35
27
|
//# sourceMappingURL=upgrade-cli.use-case.d.ts.map
|
|
@@ -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;
|
|
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;AAEhG,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;AAID,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,eAAe;IAG5C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCxE,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,aAAa;CAuBtB"}
|
|
@@ -25,14 +25,10 @@ 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
|
-
/** Delay (ms) before the current process exits to allow the SSE response to flush. */
|
|
29
|
-
const SELF_RESTART_DELAY_MS = 1_000;
|
|
30
28
|
let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
31
29
|
versionService;
|
|
32
|
-
|
|
33
|
-
constructor(versionService, daemonService) {
|
|
30
|
+
constructor(versionService) {
|
|
34
31
|
this.versionService = versionService;
|
|
35
|
-
this.daemonService = daemonService;
|
|
36
32
|
}
|
|
37
33
|
async execute(onOutput) {
|
|
38
34
|
const { version: currentVersion } = this.versionService.getVersion();
|
|
@@ -104,30 +100,6 @@ let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
|
104
100
|
});
|
|
105
101
|
});
|
|
106
102
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Schedule a daemon self-restart after upgrade.
|
|
109
|
-
* Reads the current daemon port, spawns a new daemon process with the
|
|
110
|
-
* upgraded code, then exits the current process after a brief delay.
|
|
111
|
-
*/
|
|
112
|
-
async scheduleDaemonRestart() {
|
|
113
|
-
const state = await this.daemonService.read();
|
|
114
|
-
const port = state?.port;
|
|
115
|
-
// Delete daemon.json so the new process can write a fresh one
|
|
116
|
-
await this.daemonService.delete();
|
|
117
|
-
// Spawn new daemon process using the upgraded CLI binary.
|
|
118
|
-
// Use process.argv[1] which points to the shep CLI entry point —
|
|
119
|
-
// after npm install this resolves to the upgraded version on disk.
|
|
120
|
-
const child = spawn(process.execPath, [...process.execArgv, process.argv[1], '_serve', ...(port ? ['--port', String(port)] : [])], {
|
|
121
|
-
detached: true,
|
|
122
|
-
stdio: 'ignore',
|
|
123
|
-
windowsHide: true,
|
|
124
|
-
});
|
|
125
|
-
child.unref();
|
|
126
|
-
// Give the response stream time to flush, then exit the current process
|
|
127
|
-
setTimeout(() => {
|
|
128
|
-
process.exit(0);
|
|
129
|
-
}, SELF_RESTART_DELAY_MS);
|
|
130
|
-
}
|
|
131
103
|
runNpmInstall(onOutput) {
|
|
132
104
|
return new Promise((resolve, reject) => {
|
|
133
105
|
const child = spawn('npm', ['i', '-g', '@shepai/cli@latest'], {
|
|
@@ -151,7 +123,6 @@ let UpgradeCliUseCase = class UpgradeCliUseCase {
|
|
|
151
123
|
UpgradeCliUseCase = __decorate([
|
|
152
124
|
injectable(),
|
|
153
125
|
__param(0, inject('IVersionService')),
|
|
154
|
-
|
|
155
|
-
__metadata("design:paramtypes", [Object, Object])
|
|
126
|
+
__metadata("design:paramtypes", [Object])
|
|
156
127
|
], UpgradeCliUseCase);
|
|
157
128
|
export { UpgradeCliUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/cli-upgrade/route.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/cli-upgrade/route.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CA+B9C"}
|
|
@@ -11,26 +11,13 @@ export async function POST() {
|
|
|
11
11
|
controller.enqueue(encoder.encode(`data: ${chunk.replace(/\n/g, '\ndata: ')}\n\n`));
|
|
12
12
|
});
|
|
13
13
|
controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify(result)}\n\n`));
|
|
14
|
-
// If the upgrade succeeded, schedule a daemon self-restart so the
|
|
15
|
-
// new version is loaded automatically — no manual restart needed.
|
|
16
|
-
if (result.status === 'upgraded') {
|
|
17
|
-
controller.enqueue(encoder.encode(`event: restarting\ndata: restarting\n\n`));
|
|
18
|
-
controller.close();
|
|
19
|
-
await useCase.scheduleDaemonRestart();
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
14
|
}
|
|
23
15
|
catch (error) {
|
|
24
16
|
const message = error instanceof Error ? error.message : 'Upgrade failed';
|
|
25
17
|
controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify({ status: 'error', currentVersion: '', latestVersion: null, errorMessage: message })}\n\n`));
|
|
26
18
|
}
|
|
27
19
|
finally {
|
|
28
|
-
|
|
29
|
-
controller.close();
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// Already closed (e.g. after restart path)
|
|
33
|
-
}
|
|
20
|
+
controller.close();
|
|
34
21
|
}
|
|
35
22
|
},
|
|
36
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-badge.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,MAAM,EACN,UAAU,EACV,KAAa,EACb,WAA2B,EAC3B,WAAW,EACX,YAAY,GACb,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"version-badge.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,MAAM,EACN,UAAU,EACV,KAAa,EACb,WAA2B,EAC3B,WAAW,EACX,YAAY,GACb,EAAE,iBAAiB,2CA2EnB"}
|
|
@@ -10,14 +10,9 @@ export function VersionBadge({ version, branch, commitHash, isDev = false, packa
|
|
|
10
10
|
// In dev mode show "1.92.2-dev", in production show "v1.92.2"
|
|
11
11
|
const displayVersion = isDev ? `${version}-dev` : `v${version}`;
|
|
12
12
|
const isUpgrading = upgradeStatus === 'upgrading';
|
|
13
|
-
const isRestarting = upgradeStatus === 'restarting';
|
|
14
13
|
const didUpgrade = upgradeStatus === 'upgraded';
|
|
15
14
|
const upgradeError = upgradeStatus === 'error';
|
|
16
|
-
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors", "data-testid": "version-label", children: [displayVersion, updateAvailable && !didUpgrade
|
|
17
|
-
? 'Upgrading...'
|
|
18
|
-
: isRestarting
|
|
19
|
-
? 'Restarting...'
|
|
20
|
-
: `Upgrade to v${latest}` }) })) : null] })] }) }));
|
|
15
|
+
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors", "data-testid": "version-label", children: [displayVersion, updateAvailable && !didUpgrade ? (_jsx("span", { className: "absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400", "data-testid": "update-dot" })) : null] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-[280px] space-y-1 p-3 text-left", children: [_jsx("div", { className: "mb-1.5 text-xs font-semibold", children: packageName }), description ? (_jsx("div", { className: "text-[10px] leading-snug opacity-70", children: description })) : null, _jsxs("div", { className: "border-t border-white/10 pt-1.5", children: [_jsx(Row, { label: "Version", value: displayVersion }), isDev && branch ? _jsx(Row, { label: "Branch", value: branch }) : null, isDev && shortHash ? _jsx(Row, { label: "Commit", value: shortHash, mono: true }) : null, isDev && instancePath ? _jsx(Row, { label: "Path", value: instancePath, mono: true }) : null, latest ? (_jsx(Row, { label: "Latest", value: `v${latest}`, highlight: updateAvailable })) : null] }), didUpgrade ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("span", { className: "text-[10px] font-medium text-emerald-400", "data-testid": "upgrade-success", children: "Upgraded successfully \u2014 restart to apply" }) })) : upgradeError ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("span", { className: "text-[10px] font-medium text-red-400", "data-testid": "upgrade-error", children: "Upgrade failed" }) })) : updateAvailable ? (_jsx("div", { className: "border-t border-white/10 pt-1.5", children: _jsx("button", { type: "button", onClick: startUpgrade, disabled: isUpgrading, className: "inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50", "data-testid": "upgrade-button", children: isUpgrading ? 'Upgrading...' : `Upgrade to v${latest}` }) })) : null] })] }) }));
|
|
21
16
|
}
|
|
22
17
|
function Row({ label, value, highlight, mono, }) {
|
|
23
18
|
return (_jsxs("div", { className: "flex items-center justify-between gap-4 text-[10px]", children: [_jsx("span", { className: "opacity-60", children: label }), _jsx("span", { className: [
|
package/dist/src/presentation/web/components/common/version-badge/version-badge.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-badge.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"version-badge.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/version-badge/version-badge.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwD/C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAOnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAE3C,mFAAmF;AACnF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,WAAW,EAAE,KAWzB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,eAAe,EAAE,KAO7B,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,EAAE,KAWhC,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC"}
|
|
@@ -22,7 +22,6 @@ function withNpmVersion(latest) {
|
|
|
22
22
|
controller.enqueue(encoder.encode(`data: Upgrading to v${latest}...\n\n`));
|
|
23
23
|
setTimeout(() => {
|
|
24
24
|
controller.enqueue(encoder.encode(`event: done\ndata: ${JSON.stringify({ status: 'upgraded', currentVersion: '1.90.0', latestVersion: latest })}\n\n`));
|
|
25
|
-
controller.enqueue(encoder.encode(`event: restarting\ndata: restarting\n\n`));
|
|
26
25
|
controller.close();
|
|
27
26
|
}, 1000);
|
|
28
27
|
},
|
|
@@ -32,12 +31,6 @@ function withNpmVersion(latest) {
|
|
|
32
31
|
headers: { 'Content-Type': 'text/event-stream' },
|
|
33
32
|
});
|
|
34
33
|
}
|
|
35
|
-
if (url.includes('/api/version')) {
|
|
36
|
-
return new Response(JSON.stringify({ version: latest }), {
|
|
37
|
-
status: 200,
|
|
38
|
-
headers: { 'Content-Type': 'application/json' },
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
34
|
return originalFetch(input, init);
|
|
42
35
|
});
|
|
43
36
|
return _jsx(Story, {});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type UpgradeStatus = 'idle' | 'upgrading' | '
|
|
1
|
+
export type UpgradeStatus = 'idle' | 'upgrading' | 'upgraded' | 'up-to-date' | 'error';
|
|
2
2
|
export interface CliUpgradeState {
|
|
3
3
|
status: UpgradeStatus;
|
|
4
4
|
output: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cli-upgrade.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-cli-upgrade.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"use-cli-upgrade.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-cli-upgrade.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,aAAa,IAAI,eAAe,GAAG,iBAAiB,CA6EnE"}
|
|
@@ -1,46 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useCallback, useRef, useState } from 'react';
|
|
3
|
-
/** How often to poll the server during restart (ms). */
|
|
4
|
-
const RESTART_POLL_MS = 500;
|
|
5
|
-
/** Maximum time to wait for the server to come back after restart (ms). */
|
|
6
|
-
const RESTART_TIMEOUT_MS = 30_000;
|
|
7
|
-
/**
|
|
8
|
-
* Poll the server until it responds, then reload the page.
|
|
9
|
-
*/
|
|
10
|
-
function waitForServerAndReload(timeoutMs, pollMs) {
|
|
11
|
-
const deadline = Date.now() + timeoutMs;
|
|
12
|
-
const poll = () => {
|
|
13
|
-
if (Date.now() > deadline)
|
|
14
|
-
return;
|
|
15
|
-
fetch('/api/version', { method: 'GET', cache: 'no-store' })
|
|
16
|
-
.then((res) => {
|
|
17
|
-
if (res.ok) {
|
|
18
|
-
window.location.reload();
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
setTimeout(poll, pollMs);
|
|
22
|
-
}
|
|
23
|
-
})
|
|
24
|
-
.catch(() => {
|
|
25
|
-
setTimeout(poll, pollMs);
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
// Brief initial delay to let the old server shut down
|
|
29
|
-
setTimeout(poll, pollMs);
|
|
30
|
-
}
|
|
31
3
|
export function useCliUpgrade() {
|
|
32
4
|
const [status, setStatus] = useState('idle');
|
|
33
5
|
const [output, setOutput] = useState('');
|
|
34
6
|
const [errorMessage, setErrorMessage] = useState();
|
|
35
7
|
const abortRef = useRef(null);
|
|
36
|
-
const restartingRef = useRef(false);
|
|
37
8
|
const startUpgrade = useCallback(() => {
|
|
38
|
-
if (status === 'upgrading'
|
|
9
|
+
if (status === 'upgrading')
|
|
39
10
|
return;
|
|
40
11
|
setStatus('upgrading');
|
|
41
12
|
setOutput('');
|
|
42
13
|
setErrorMessage(undefined);
|
|
43
|
-
restartingRef.current = false;
|
|
44
14
|
const controller = new AbortController();
|
|
45
15
|
abortRef.current = controller;
|
|
46
16
|
fetch('/api/cli-upgrade', { method: 'POST', signal: controller.signal })
|
|
@@ -61,12 +31,6 @@ export function useCliUpgrade() {
|
|
|
61
31
|
const lines = buffer.split('\n');
|
|
62
32
|
buffer = lines.pop() ?? '';
|
|
63
33
|
for (const line of lines) {
|
|
64
|
-
if (line.startsWith('event: restarting')) {
|
|
65
|
-
restartingRef.current = true;
|
|
66
|
-
setStatus('restarting');
|
|
67
|
-
waitForServerAndReload(RESTART_TIMEOUT_MS, RESTART_POLL_MS);
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
34
|
if (line.startsWith('event: done')) {
|
|
71
35
|
// Next data line contains the final result
|
|
72
36
|
continue;
|
|
@@ -96,9 +60,6 @@ export function useCliUpgrade() {
|
|
|
96
60
|
}
|
|
97
61
|
})
|
|
98
62
|
.catch((err) => {
|
|
99
|
-
// If we're in restarting state, the connection dropping is expected
|
|
100
|
-
if (restartingRef.current)
|
|
101
|
-
return;
|
|
102
63
|
if (err instanceof DOMException && err.name === 'AbortError')
|
|
103
64
|
return;
|
|
104
65
|
setStatus('error');
|