specrails-desktop 2.30.1 → 2.30.2
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/client/dist/assets/{ActivityFeedPage-AQgpr9qG.js → ActivityFeedPage-9DZOvIcY.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-I7a0usG7.js → AgentBrowserCapture-DqyHbzk7.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-BqOVg15n.js → AgentModeCodePane-BAYyFRmY.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-4SG6FF27.js → AgentModeJobsPane-CTIHMUKN.js} +1 -1
- package/client/dist/assets/{AgentsPage-C3FgYlEi.js → AgentsPage-DuyJuaFs.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-BcMNByW5.js → AnalyticsPage-BY7gtCx6.js} +1 -1
- package/client/dist/assets/{CodePage-CgdDkXp-.js → CodePage-vyQr40Vl.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-DPMcS88n.js → DesktopAnalyticsPage-CkXUFj3F.js} +1 -1
- package/client/dist/assets/{DocsDialog-BC7574Zi.js → DocsDialog-PhdCJNVj.js} +1 -1
- package/client/dist/assets/{DocsPage-Dd9yilUg.js → DocsPage-BY-wDthx.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-CqC_0VQL.js → InteractiveJobComposer-C9I0A4KR.js} +1 -1
- package/client/dist/assets/{JobDetailModal-BFNXOhk1.js → JobDetailModal-I_RoQJV4.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DM-6zYpA.js → JobDetailPage-CU4FEnUC.js} +1 -1
- package/client/dist/assets/{JobsPage-1dkjPk1k.js → JobsPage-DcllM4Ip.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-BPeqz6cG.js → LoopBuilderPage-DGm_iuff.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-EdkyYaGN.js → LoopPreviewModal-BC-TeFdD.js} +1 -1
- package/client/dist/assets/{LoopsPage-nZfgiaK8.js → LoopsPage-SqglnXlp.js} +1 -1
- package/client/dist/assets/{PluginsPage-CwFfFBzW.js → PluginsPage-B89S8o1a.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-DHsxLFMT.js → ProjectSettingsDialog-nEs-ENrE.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-wcI3nGNr.js → TemplatePreviewModal-D4qW-J9B.js} +1 -1
- package/client/dist/assets/{TicketDetailModal-7EloKP1C.js → TicketDetailModal-CI47Dq9E.js} +2 -2
- package/client/dist/assets/{dist-js-zvt5ap3o.js → dist-js-Dj72W6qo.js} +1 -1
- package/client/dist/assets/{dist-js-Bt2zW2YG.js → dist-js-jwoXo0YD.js} +1 -1
- package/client/dist/assets/{index-xkzK3E5i.js → index-F9r8mWP_.js} +5 -5
- package/client/dist/index.html +2 -2
- package/package.json +1 -1
- package/server/dist/core-update-manager.js +10 -3
- package/server/dist/framework-manager.js +22 -8
package/client/dist/index.html
CHANGED
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
.specrails-splash__mark .pill { opacity: 1; }
|
|
205
205
|
}
|
|
206
206
|
</style>
|
|
207
|
-
<script type="module" crossorigin src="/assets/index-
|
|
207
|
+
<script type="module" crossorigin src="/assets/index-F9r8mWP_.js"></script>
|
|
208
208
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-CNC7AqOf.js">
|
|
209
209
|
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-zu2_FqZY.js">
|
|
210
210
|
<link rel="modulepreload" crossorigin href="/assets/react-dom-DiWzBDP9.js">
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-qrcBaLW1.js">
|
|
277
277
|
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-ByKli7Q_.js">
|
|
278
278
|
<link rel="modulepreload" crossorigin href="/assets/spending-DMnCXy84.js">
|
|
279
|
-
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModal-
|
|
279
|
+
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModal-CI47Dq9E.js">
|
|
280
280
|
<link rel="stylesheet" crossorigin href="/assets/index-Dh9i4CnN.css">
|
|
281
281
|
</head>
|
|
282
282
|
<body>
|
package/package.json
CHANGED
|
@@ -136,9 +136,16 @@ class CoreUpdateManager {
|
|
|
136
136
|
if (mat.errors.length > 0) {
|
|
137
137
|
throw new Error(`framework materialize failed: ${mat.errors.map((e) => `${e.provider}: ${e.message}`).join('; ')}`);
|
|
138
138
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
// A materialize that reports no errors but ALSO no materialized providers
|
|
140
|
+
// wrote nothing — swapping `current` at a nonexistent version dir would
|
|
141
|
+
// fail downstream with a misleading "swap-current failed". Surface the
|
|
142
|
+
// real condition instead (mirrors FrameworkManager.versionCheck's guard).
|
|
143
|
+
if (mat.providers.length === 0) {
|
|
144
|
+
throw new Error(`framework materialize completed without materializing any provider (requested: ${providers.join(', ') || 'none'})`);
|
|
145
|
+
}
|
|
146
|
+
const swapped = fm.swapCurrentDetailed(installed);
|
|
147
|
+
if (!swapped.ok) {
|
|
148
|
+
throw new Error(`framework swap-current failed${swapped.detail ? `: ${swapped.detail}` : ''}`);
|
|
142
149
|
}
|
|
143
150
|
this.latestVersion = installed;
|
|
144
151
|
this.lastCheckedAt = Date.now();
|
|
@@ -204,16 +204,30 @@ class FrameworkManager {
|
|
|
204
204
|
* `swap-current` only moves the version pointer (provider-invariant).
|
|
205
205
|
*/
|
|
206
206
|
swapCurrent(version, _provider = 'claude') {
|
|
207
|
+
return this.swapCurrentDetailed(version).ok;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Like `swapCurrent`, but on failure carries WHY it failed (`detail`) — the
|
|
211
|
+
* subprocess stderr/exit or the missing-CLI/verify-mismatch case — so callers
|
|
212
|
+
* (the core update channel) can surface an actionable error instead of the
|
|
213
|
+
* bare "swap-current failed".
|
|
214
|
+
*/
|
|
215
|
+
swapCurrentDetailed(version) {
|
|
207
216
|
const cli = this.resolveCli();
|
|
208
217
|
if (!cli)
|
|
209
|
-
return false;
|
|
218
|
+
return { ok: false, detail: 'no usable core CLI to run swap-current with' };
|
|
210
219
|
if (readCurrentFrameworkVersion(this.home) === version)
|
|
211
|
-
return true;
|
|
220
|
+
return { ok: true, detail: null };
|
|
212
221
|
const fwDir = frameworkRoot(this.home);
|
|
213
222
|
const res = (0, child_process_1.spawnSync)(nodeInterpreter(), [cli, 'swap-current', '--framework-dir', fwDir, '--version', version], { env: this.childEnv(), encoding: 'utf-8', timeout: 120_000 });
|
|
214
|
-
if (res.error || (res.status ?? 1) !== 0)
|
|
215
|
-
|
|
216
|
-
|
|
223
|
+
if (res.error || (res.status ?? 1) !== 0) {
|
|
224
|
+
const detail = (res.error?.message ?? `${res.stderr || res.stdout || ''}`.trim()) || `exit ${res.status ?? 'unknown'}`;
|
|
225
|
+
return { ok: false, detail };
|
|
226
|
+
}
|
|
227
|
+
if (readCurrentFrameworkVersion(this.home) !== version) {
|
|
228
|
+
return { ok: false, detail: `swap-current exited 0 but current still resolves to ${readCurrentFrameworkVersion(this.home) ?? 'nothing'}` };
|
|
229
|
+
}
|
|
230
|
+
return { ok: true, detail: null };
|
|
217
231
|
}
|
|
218
232
|
/**
|
|
219
233
|
* Compare the bundled core version with `framework/current`. When they differ
|
|
@@ -266,8 +280,8 @@ class FrameworkManager {
|
|
|
266
280
|
// No errors yet nothing materialized (empty/duplicate-only provider list).
|
|
267
281
|
return { swapped: false, version: current };
|
|
268
282
|
}
|
|
269
|
-
const
|
|
270
|
-
if (ok) {
|
|
283
|
+
const swap = this.swapCurrentDetailed(bundled);
|
|
284
|
+
if (swap.ok) {
|
|
271
285
|
try {
|
|
272
286
|
this.broadcast?.({ type: 'framework.updated', version: bundled });
|
|
273
287
|
}
|
|
@@ -281,7 +295,7 @@ class FrameworkManager {
|
|
|
281
295
|
this.broadcast?.({
|
|
282
296
|
type: 'framework.update_failed',
|
|
283
297
|
version: bundled,
|
|
284
|
-
errors: [{ provider: providers[0] ?? 'claude', message:
|
|
298
|
+
errors: [{ provider: providers[0] ?? 'claude', message: `swap-current failed${swap.detail ? `: ${swap.detail}` : ''}` }],
|
|
285
299
|
});
|
|
286
300
|
}
|
|
287
301
|
catch {
|