specrails-desktop 2.30.2 → 2.30.3
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-9DZOvIcY.js → ActivityFeedPage-CcBOllqm.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DqyHbzk7.js → AgentBrowserCapture-BOJkZUj_.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-BAYyFRmY.js → AgentModeCodePane-BIh67rGi.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-CTIHMUKN.js → AgentModeJobsPane-C5tkU2Ed.js} +1 -1
- package/client/dist/assets/{AgentsPage-DuyJuaFs.js → AgentsPage-CNlE_Uh4.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-BY7gtCx6.js → AnalyticsPage-cYcJxWPn.js} +1 -1
- package/client/dist/assets/{CodePage-vyQr40Vl.js → CodePage-D4QYa4t1.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-CkXUFj3F.js → DesktopAnalyticsPage-DCmgYV86.js} +1 -1
- package/client/dist/assets/{DocsDialog-PhdCJNVj.js → DocsDialog-BXnOgm7V.js} +1 -1
- package/client/dist/assets/{DocsPage-BY-wDthx.js → DocsPage-nFkHh-Dc.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-C9I0A4KR.js → InteractiveJobComposer-qoeZjwVY.js} +1 -1
- package/client/dist/assets/{JobDetailModal-I_RoQJV4.js → JobDetailModal-ChRBB9bc.js} +1 -1
- package/client/dist/assets/{JobDetailPage-CU4FEnUC.js → JobDetailPage-BuOnlndB.js} +1 -1
- package/client/dist/assets/{JobsPage-DcllM4Ip.js → JobsPage-C_UEIXWA.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-DGm_iuff.js → LoopBuilderPage-BV_wge0g.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-BC-TeFdD.js → LoopPreviewModal-Qk_Jaxo8.js} +1 -1
- package/client/dist/assets/{LoopsPage-SqglnXlp.js → LoopsPage-lLi6ax0p.js} +1 -1
- package/client/dist/assets/{PluginsPage-B89S8o1a.js → PluginsPage-DZIFv9kw.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-nEs-ENrE.js → ProjectSettingsDialog-DEHcyt_I.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-D4qW-J9B.js → TemplatePreviewModal-Bxbtnzob.js} +1 -1
- package/client/dist/assets/{TicketDetailModal-CI47Dq9E.js → TicketDetailModal-CqQ5gx7O.js} +2 -2
- package/client/dist/assets/{dist-js-jwoXo0YD.js → dist-js-CBhuoTO6.js} +1 -1
- package/client/dist/assets/{dist-js-Dj72W6qo.js → dist-js-eSxaoEw0.js} +1 -1
- package/client/dist/assets/{index-F9r8mWP_.js → index-CewRMo0W.js} +10 -10
- package/client/dist/index.html +2 -2
- package/package.json +1 -1
- package/server/dist/core-update-manager.js +17 -1
- package/server/dist/framework-manager.js +19 -2
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-CewRMo0W.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-CqQ5gx7O.js">
|
|
280
280
|
<link rel="stylesheet" crossorigin href="/assets/index-Dh9i4CnN.css">
|
|
281
281
|
</head>
|
|
282
282
|
<body>
|
package/package.json
CHANGED
|
@@ -116,7 +116,13 @@ class CoreUpdateManager {
|
|
|
116
116
|
}
|
|
117
117
|
this.updating = true;
|
|
118
118
|
this.emit('downloading', { version: requested });
|
|
119
|
-
|
|
119
|
+
// realpath the tmp root: on macOS os.tmpdir() is a symlinked path
|
|
120
|
+
// (/var/folders → /private/var/folders). The staged core's cli.js has an
|
|
121
|
+
// auto-run guard comparing import.meta.url (realpathed by Node's ESM
|
|
122
|
+
// loader) against process.argv[1] (the literal spawn arg) — a symlinked
|
|
123
|
+
// staging path makes them differ, so main() never runs and every
|
|
124
|
+
// install-framework/swap-current child exits 0 as a silent no-op.
|
|
125
|
+
const tmp = fs_1.default.mkdtempSync(path_1.default.join(realTmpDir(), 'core-update-'));
|
|
120
126
|
try {
|
|
121
127
|
this.npmInstallFn(`${exports.CORE_PACKAGE}@${requested}`, tmp);
|
|
122
128
|
const coreRoot = path_1.default.join(tmp, 'node_modules', exports.CORE_PACKAGE);
|
|
@@ -187,6 +193,16 @@ function uniqueProviders(values) {
|
|
|
187
193
|
const out = Array.from(new Set(values.filter((v) => typeof v === 'string' && v.length > 0)));
|
|
188
194
|
return out.length > 0 ? out : ['claude'];
|
|
189
195
|
}
|
|
196
|
+
/** os.tmpdir() with symlinks resolved (macOS /var/folders → /private/var/folders). */
|
|
197
|
+
function realTmpDir() {
|
|
198
|
+
const dir = os_1.default.tmpdir();
|
|
199
|
+
try {
|
|
200
|
+
return fs_1.default.realpathSync(dir);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return dir;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
190
206
|
/** GET the latest published version from the npm registry (no npm binary needed). */
|
|
191
207
|
async function fetchLatestFromRegistry() {
|
|
192
208
|
const controller = new AbortController();
|
|
@@ -26,6 +26,22 @@ const path_resolver_1 = require("./path-resolver");
|
|
|
26
26
|
function nodeInterpreter() {
|
|
27
27
|
return (0, path_resolver_1.resolveBundledNodeExe)() ?? process.execPath;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve symlinks in the CLI path we pass as the child's argv[1]. Core's
|
|
31
|
+
* cli.js auto-run guard compares import.meta.url (realpathed by Node's ESM
|
|
32
|
+
* loader) against pathToFileURL(process.argv[1]) — a symlinked argv[1] (e.g.
|
|
33
|
+
* a staging dir under macOS /var/folders) makes them differ, so main() never
|
|
34
|
+
* runs and the child exits 0 as a silent no-op. Realpathing here keeps the
|
|
35
|
+
* guard true regardless of where the core package lives.
|
|
36
|
+
*/
|
|
37
|
+
function realpathOrSelf(p) {
|
|
38
|
+
try {
|
|
39
|
+
return fs_1.default.realpathSync(p);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return p;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
29
45
|
/** `~/.specrails/framework` — same home as the registry. */
|
|
30
46
|
function frameworkRoot(home) {
|
|
31
47
|
return path_1.default.join((0, artifact_registry_1.resolveHome)(home), '.specrails', 'framework');
|
|
@@ -121,9 +137,10 @@ class FrameworkManager {
|
|
|
121
137
|
resolveCli() {
|
|
122
138
|
if (this.coreRoot) {
|
|
123
139
|
const cli = path_1.default.join(this.coreRoot, 'dist', 'installer', 'cli.js');
|
|
124
|
-
return fs_1.default.existsSync(cli) ? cli : null;
|
|
140
|
+
return fs_1.default.existsSync(cli) ? realpathOrSelf(cli) : null;
|
|
125
141
|
}
|
|
126
|
-
|
|
142
|
+
const bundled = (0, bundled_core_1.getBundledCoreCli)();
|
|
143
|
+
return bundled ? realpathOrSelf(bundled) : null;
|
|
127
144
|
}
|
|
128
145
|
/** True when a usable core (override or bundled) is present (else methods no-op). */
|
|
129
146
|
isAvailable() {
|