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.
Files changed (28) hide show
  1. package/client/dist/assets/{ActivityFeedPage-9DZOvIcY.js → ActivityFeedPage-CcBOllqm.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-DqyHbzk7.js → AgentBrowserCapture-BOJkZUj_.js} +1 -1
  3. package/client/dist/assets/{AgentModeCodePane-BAYyFRmY.js → AgentModeCodePane-BIh67rGi.js} +2 -2
  4. package/client/dist/assets/{AgentModeJobsPane-CTIHMUKN.js → AgentModeJobsPane-C5tkU2Ed.js} +1 -1
  5. package/client/dist/assets/{AgentsPage-DuyJuaFs.js → AgentsPage-CNlE_Uh4.js} +1 -1
  6. package/client/dist/assets/{AnalyticsPage-BY7gtCx6.js → AnalyticsPage-cYcJxWPn.js} +1 -1
  7. package/client/dist/assets/{CodePage-vyQr40Vl.js → CodePage-D4QYa4t1.js} +1 -1
  8. package/client/dist/assets/{DesktopAnalyticsPage-CkXUFj3F.js → DesktopAnalyticsPage-DCmgYV86.js} +1 -1
  9. package/client/dist/assets/{DocsDialog-PhdCJNVj.js → DocsDialog-BXnOgm7V.js} +1 -1
  10. package/client/dist/assets/{DocsPage-BY-wDthx.js → DocsPage-nFkHh-Dc.js} +1 -1
  11. package/client/dist/assets/{InteractiveJobComposer-C9I0A4KR.js → InteractiveJobComposer-qoeZjwVY.js} +1 -1
  12. package/client/dist/assets/{JobDetailModal-I_RoQJV4.js → JobDetailModal-ChRBB9bc.js} +1 -1
  13. package/client/dist/assets/{JobDetailPage-CU4FEnUC.js → JobDetailPage-BuOnlndB.js} +1 -1
  14. package/client/dist/assets/{JobsPage-DcllM4Ip.js → JobsPage-C_UEIXWA.js} +1 -1
  15. package/client/dist/assets/{LoopBuilderPage-DGm_iuff.js → LoopBuilderPage-BV_wge0g.js} +1 -1
  16. package/client/dist/assets/{LoopPreviewModal-BC-TeFdD.js → LoopPreviewModal-Qk_Jaxo8.js} +1 -1
  17. package/client/dist/assets/{LoopsPage-SqglnXlp.js → LoopsPage-lLi6ax0p.js} +1 -1
  18. package/client/dist/assets/{PluginsPage-B89S8o1a.js → PluginsPage-DZIFv9kw.js} +1 -1
  19. package/client/dist/assets/{ProjectSettingsDialog-nEs-ENrE.js → ProjectSettingsDialog-DEHcyt_I.js} +1 -1
  20. package/client/dist/assets/{TemplatePreviewModal-D4qW-J9B.js → TemplatePreviewModal-Bxbtnzob.js} +1 -1
  21. package/client/dist/assets/{TicketDetailModal-CI47Dq9E.js → TicketDetailModal-CqQ5gx7O.js} +2 -2
  22. package/client/dist/assets/{dist-js-jwoXo0YD.js → dist-js-CBhuoTO6.js} +1 -1
  23. package/client/dist/assets/{dist-js-Dj72W6qo.js → dist-js-eSxaoEw0.js} +1 -1
  24. package/client/dist/assets/{index-F9r8mWP_.js → index-CewRMo0W.js} +10 -10
  25. package/client/dist/index.html +2 -2
  26. package/package.json +1 -1
  27. package/server/dist/core-update-manager.js +17 -1
  28. package/server/dist/framework-manager.js +19 -2
@@ -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-F9r8mWP_.js"></script>
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-CI47Dq9E.js">
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specrails-desktop",
3
- "version": "2.30.2",
3
+ "version": "2.30.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -116,7 +116,13 @@ class CoreUpdateManager {
116
116
  }
117
117
  this.updating = true;
118
118
  this.emit('downloading', { version: requested });
119
- const tmp = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'core-update-'));
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
- return (0, bundled_core_1.getBundledCoreCli)();
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() {