specrails-desktop 2.62.0 → 2.63.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.
Files changed (181) hide show
  1. package/cli/dist/specrails-desktop.js +39 -5
  2. package/client/dist/assets/{ActivityFeedPage-C_pqc281.js → ActivityFeedPage-B1bpTy7O.js} +1 -1
  3. package/client/dist/assets/{AgentBrowserCapture-vz6rbDtu.js → AgentBrowserCapture-BussBbN3.js} +1 -1
  4. package/client/dist/assets/AgentModeAnalyticsPane-BiT1n3BU.js +2 -0
  5. package/client/dist/assets/AgentModeCodePane-CUjNfeKa.js +2 -0
  6. package/client/dist/assets/{AgentModeJobsPane-99fBBLri.js → AgentModeJobsPane-RVEwyS59.js} +1 -1
  7. package/client/dist/assets/AgentsPage-DKE-eMC5.js +118 -0
  8. package/client/dist/assets/AnalyticsPage-Bser2Ly3.js +1 -0
  9. package/client/dist/assets/BarChart-BDMqVFJy.js +55 -0
  10. package/client/dist/assets/CodePage-BK0grm6e.js +3 -0
  11. package/client/dist/assets/DesktopAnalyticsPage-DEBidZbs.js +1 -0
  12. package/client/dist/assets/{DocsDialog-XUCYKoq0.js → DocsDialog-Dhyo57n9.js} +1 -1
  13. package/client/dist/assets/{DocsPage-dOLC8bXA.js → DocsPage-BcEkPXd6.js} +1 -1
  14. package/client/dist/assets/{ExportDropdown-BvKQgwM9.js → ExportDropdown-mRmqdkjr.js} +1 -1
  15. package/client/dist/assets/IntegrationsPage-EAipiDWm.js +1 -0
  16. package/client/dist/assets/InteractiveJobComposer-BlCe3vrU.js +19 -0
  17. package/client/dist/assets/{JobDetailModal-CkiubrkZ.js → JobDetailModal-CkAejD1F.js} +1 -1
  18. package/client/dist/assets/{JobDetailPage-CNe4Wn7l.js → JobDetailPage-P-FS_lKz.js} +1 -1
  19. package/client/dist/assets/JobsPage-CoUXgYse.js +1 -0
  20. package/client/dist/assets/LoopBuilderPage-iFylNk68.js +1 -0
  21. package/client/dist/assets/{LoopPreviewModal-Dv3dxHr_.js → LoopPreviewModal-4obS_Ptg.js} +1 -1
  22. package/client/dist/assets/{LoopWindowSurface-DN2lbSnL.js → LoopWindowSurface-CLr5OPqj.js} +1 -1
  23. package/client/dist/assets/LoopsPage-eKpWFtCp.js +2 -0
  24. package/client/dist/assets/MinimizedChatsContext-BHIUPVmC.js +1 -0
  25. package/client/dist/assets/PluginsPage-BgTC2CQx.js +2 -0
  26. package/client/dist/assets/ProjectSettingsDialog-B4chTfU8.js +1 -0
  27. package/client/dist/assets/RepositoryDeliveries-DAIxIYsl.js +5 -0
  28. package/client/dist/assets/{RepositoryScopeSelector-DrtPqvc_.js → RepositoryScopeSelector-DeCoUsRN.js} +1 -1
  29. package/client/dist/assets/ReviewPacketPage-Cktv0-9b.js +4 -0
  30. package/client/dist/assets/{TemplatePreviewModal-DcFlhUxy.js → TemplatePreviewModal-BZTV1TM1.js} +1 -1
  31. package/client/dist/assets/TicketDetailModalContext-DiPngt2g.js +16 -0
  32. package/client/dist/assets/Trans-ZiXIfj50.js +1 -0
  33. package/client/dist/assets/{agentRuntime-TKQyg137.js → agentRuntime-BDvbJMmS.js} +1 -1
  34. package/client/dist/assets/{agentRuntime-DvhEe1um.js → agentRuntime-BKJfv5YD.js} +1 -1
  35. package/client/dist/assets/{agentRuntime-DxC6-9rN.js → agentRuntime-BxF81z52.js} +1 -1
  36. package/client/dist/assets/{agentRuntime-C_yLPKDy.js → agentRuntime-BxYS5V7u.js} +1 -1
  37. package/client/dist/assets/{agentRuntime-WSv8G0pW.js → agentRuntime-BzuwQQgn.js} +1 -1
  38. package/client/dist/assets/{agentRuntime-D2kYQqNO.js → agentRuntime-Dc9HG3BA.js} +1 -1
  39. package/client/dist/assets/{agentRuntime-Bjt7Ij6_.js → agentRuntime-DiCldqGG.js} +1 -1
  40. package/client/dist/assets/{agentRuntime-B-myNBUP.js → agentRuntime-es2ymSl-.js} +1 -1
  41. package/client/dist/assets/ban-wqfdzoXt.js +1 -0
  42. package/client/dist/assets/{button-D1xExSTF.js → button-4FS1ZDTp.js} +1 -1
  43. package/client/dist/assets/chevron-up-6EFqEHBj.js +1 -0
  44. package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +3 -0
  45. package/client/dist/assets/circle-x-D2ttKotB.js +1 -0
  46. package/client/dist/assets/createLucideIcon-DtODIU64.js +1 -0
  47. package/client/dist/assets/{dialog-CMgps2MY.js → dialog-DtdR05v1.js} +1 -1
  48. package/client/dist/assets/download-C9wP_42h.js +1 -0
  49. package/client/dist/assets/external-link-CZ6Q-v1-.js +1 -0
  50. package/client/dist/assets/file-text-C0blZHLh.js +1 -0
  51. package/client/dist/assets/{formatDistanceToNow-DlQY1Lm_.js → formatDistanceToNow-CdN5lTyD.js} +1 -1
  52. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-COUeq65G.js → getTimezoneOffsetInMilliseconds-62h40I4t.js} +1 -1
  53. package/client/dist/assets/git-branch-yf6LE1Bw.js +1 -0
  54. package/client/dist/assets/index-BgbCbIua.css +2 -0
  55. package/client/dist/assets/{index-CONHvEJw.js → index-CECj3joE.js} +40 -40
  56. package/client/dist/assets/jira-api-C_D_RDhl.js +1 -0
  57. package/client/dist/assets/jsx-runtime-BbYvbtY8.js +1 -0
  58. package/client/dist/assets/layers-BCLTgHXO.js +1 -0
  59. package/client/dist/assets/{lib-C7Mhm-gT.js → lib-CQJT8S6Q.js} +1 -1
  60. package/client/dist/assets/{lib-CGdyxIWg.js → lib-DWJfei6y.js} +1 -1
  61. package/client/dist/assets/loader-circle-BqV9xYGf.js +1 -0
  62. package/client/dist/assets/{loop-layout-BF8xMiNv.js → loop-layout-CyXj9223.js} +1 -1
  63. package/client/dist/assets/pencil-CxrRbDwb.js +1 -0
  64. package/client/dist/assets/plus-fHDdjBk1.js +1 -0
  65. package/client/dist/assets/{project-repositories-Cc3oNv8X.js → project-repositories-Be0CWklo.js} +1 -1
  66. package/client/dist/assets/react-dom-DDD8FYaU.js +1 -0
  67. package/client/dist/assets/rotate-ccw-DalJAQQX.js +1 -0
  68. package/client/dist/assets/save-LmPSfsvZ.js +1 -0
  69. package/client/dist/assets/search-BDVp3fkH.js +1 -0
  70. package/client/dist/assets/{settings-BKJZ2KEM.js → settings-BO2N-oPf.js} +1 -1
  71. package/client/dist/assets/{settings-LfFnl1UH.js → settings-BQChAs_w.js} +1 -1
  72. package/client/dist/assets/{settings-BV3jocIx.js → settings-BzmYlcQB.js} +1 -1
  73. package/client/dist/assets/{settings-BjM2Dw8_.js → settings-CGjXb6TX.js} +1 -1
  74. package/client/dist/assets/{settings-DA77M48m.js → settings-CMxEWY46.js} +1 -1
  75. package/client/dist/assets/{settings-P1IQvhnL.js → settings-C_dRSgI2.js} +1 -1
  76. package/client/dist/assets/{settings-eIMJjyK_.js → settings-Hw7av-B1.js} +1 -1
  77. package/client/dist/assets/{settings-CKu0LTib.js → settings-nryN6wuS.js} +1 -1
  78. package/client/dist/assets/sparkles-CCfUdFGY.js +1 -0
  79. package/client/dist/assets/spending-eWiZGhC_.js +1 -0
  80. package/client/dist/assets/square-D0JTbRSR.js +1 -0
  81. package/client/dist/assets/trash-D8zYUmTg.js +1 -0
  82. package/client/dist/assets/triangle-alert-Cxpn8bqr.js +1 -0
  83. package/client/dist/assets/upload-CCHvUkRs.js +1 -0
  84. package/client/dist/assets/{useDesktop-9Lwoel_8.js → useDesktop-C0mRIlHT.js} +1 -1
  85. package/client/dist/assets/{useRuntimeRuns-DL0xYoZ2.js → useRuntimeRuns-B1a6GChu.js} +1 -1
  86. package/client/dist/assets/useSharedWebSocket-CcsE5986.js +2 -0
  87. package/client/dist/assets/{value-s-gzBeyF.js → value-DtOOK0wQ.js} +1 -1
  88. package/client/dist/assets/x-Bu7X_eR2.js +1 -0
  89. package/client/dist/assets/zap-bugHyWzQ.js +1 -0
  90. package/client/dist/index.html +44 -45
  91. package/docs/ci-cd.md +8 -1
  92. package/docs/customizing.md +1 -0
  93. package/docs/getting-started.md +1 -1
  94. package/docs/guide/de/settings/5-project-environment.md +27 -0
  95. package/docs/guide/en/settings/5-project-environment.md +27 -0
  96. package/docs/guide/es/settings/5-project-environment.md +27 -0
  97. package/docs/guide/fr/settings/5-project-environment.md +27 -0
  98. package/docs/guide/it/settings/5-project-environment.md +27 -0
  99. package/docs/guide/ja/settings/5-project-environment.md +27 -0
  100. package/docs/guide/pt/settings/5-project-environment.md +27 -0
  101. package/docs/guide/zh/settings/5-project-environment.md +27 -0
  102. package/docs/internals/api-reference.md +3 -1
  103. package/docs/internals/configuration.md +46 -5
  104. package/docs/internals/core-runtime-updates.md +3 -3
  105. package/docs/internals/desktop-owned-workflows.md +10 -0
  106. package/docs/internals/programmatic-agent-runtime.md +16 -0
  107. package/docs/internals/safe-pr-review-flow.md +15 -0
  108. package/docs/internals/source-map.md +6 -1
  109. package/docs/mcp.md +1 -1
  110. package/docs/platforms/macos.md +2 -0
  111. package/docs/platforms/windows-parity.md +4 -4
  112. package/docs/platforms/windows.md +9 -9
  113. package/local-runner/dist/specrails-local-runner.js +1 -1
  114. package/package.json +8 -9
  115. package/server/dist/mcp/tools/env.js +38 -3
  116. package/server/dist/mcp/tools/loops.js +1 -1
  117. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +13 -3
  118. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +1 -1
  119. package/server/dist/modules/execution/runtime/queue-manager.js +8 -0
  120. package/server/dist/modules/loops/runtime/loop-executors.js +1 -0
  121. package/server/dist/modules/loops/runtime/loop-implement-recipe.js +13 -6
  122. package/server/dist/modules/loops/runtime/loop-run-manager.js +7 -0
  123. package/server/dist/modules/loops/runtime/loop-turn-limits.js +64 -0
  124. package/server/dist/modules/loops/runtime/loops-router.js +3 -1
  125. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +8 -0
  126. package/server/dist/modules/project-settings/adapters/http.js +24 -0
  127. package/server/dist/path-resolver.js +135 -20
  128. package/server/dist/project-env.js +265 -17
  129. package/server/dist/project-registry.js +14 -0
  130. package/server/dist/project-router-settings.js +17 -0
  131. package/server/dist/schemas/agent-runtime.schema.json +1 -1
  132. package/server/dist/worktree-node-modules.js +95 -1
  133. package/client/dist/assets/AgentModeAnalyticsPane-BHCcUahS.js +0 -2
  134. package/client/dist/assets/AgentModeCodePane-DhmxgG3W.js +0 -2
  135. package/client/dist/assets/AgentsPage-CTwm_6T8.js +0 -118
  136. package/client/dist/assets/AnalyticsPage-YD8MLoPa.js +0 -1
  137. package/client/dist/assets/BarChart-nBOMNfiy.js +0 -33
  138. package/client/dist/assets/CodePage-CLJn2F2e.js +0 -3
  139. package/client/dist/assets/DesktopAnalyticsPage-MWGQVbwp.js +0 -1
  140. package/client/dist/assets/IntegrationsPage-Bhy58lnQ.js +0 -1
  141. package/client/dist/assets/InteractiveJobComposer-DxOvwmBF.js +0 -19
  142. package/client/dist/assets/JobsPage-DSts_L_d.js +0 -1
  143. package/client/dist/assets/LoopBuilderPage-C9D9eer5.js +0 -1
  144. package/client/dist/assets/LoopsPage-DHgIreEW.js +0 -2
  145. package/client/dist/assets/MinimizedChatsContext-Ds2-R6qJ.js +0 -1
  146. package/client/dist/assets/PluginsPage-D1EJ9oja.js +0 -2
  147. package/client/dist/assets/ProjectSettingsDialog-DKpa1wKk.js +0 -1
  148. package/client/dist/assets/RepositoryDeliveries-CW4eKG3x.js +0 -5
  149. package/client/dist/assets/ReviewPacketPage-BtjPI0Cc.js +0 -4
  150. package/client/dist/assets/TicketDetailModalContext-Dea22CI-.js +0 -16
  151. package/client/dist/assets/Trans-CAY2Rd2f.js +0 -1
  152. package/client/dist/assets/ban-E4EaZe3a.js +0 -1
  153. package/client/dist/assets/chevron-up-CwGUHd6D.js +0 -1
  154. package/client/dist/assets/chunk-KS7C4IRE-DEKu087k.js +0 -3
  155. package/client/dist/assets/circle-x-CMYsN4ZH.js +0 -1
  156. package/client/dist/assets/createLucideIcon-Bjbbp_KS.js +0 -1
  157. package/client/dist/assets/dist-Bq10nS2m.js +0 -1
  158. package/client/dist/assets/download-CFHyyHcw.js +0 -1
  159. package/client/dist/assets/external-link-D6XxC_Cu.js +0 -1
  160. package/client/dist/assets/file-text-BcLCfcWZ.js +0 -1
  161. package/client/dist/assets/git-branch-BRM0F5GN.js +0 -1
  162. package/client/dist/assets/index-BacrO_ub.css +0 -2
  163. package/client/dist/assets/jira-api-C94VNHNY.js +0 -1
  164. package/client/dist/assets/jsx-runtime-zu2_FqZY.js +0 -1
  165. package/client/dist/assets/layers-eDMjG41I.js +0 -1
  166. package/client/dist/assets/loader-circle-DcygOQpC.js +0 -1
  167. package/client/dist/assets/pencil-C9RkrIPZ.js +0 -1
  168. package/client/dist/assets/plus-CsnjfkmX.js +0 -1
  169. package/client/dist/assets/react-dom-DiWzBDP9.js +0 -1
  170. package/client/dist/assets/rotate-ccw-Wh4id13q.js +0 -1
  171. package/client/dist/assets/save-B6wGWwBR.js +0 -1
  172. package/client/dist/assets/search-Cq_gE3Ik.js +0 -1
  173. package/client/dist/assets/sparkles-DrY8hb0X.js +0 -1
  174. package/client/dist/assets/spending-DemeFfrH.js +0 -1
  175. package/client/dist/assets/square-Ci-PFcFe.js +0 -1
  176. package/client/dist/assets/trash-2-BOU3WdZZ.js +0 -1
  177. package/client/dist/assets/triangle-alert-H9T4jAmh.js +0 -1
  178. package/client/dist/assets/upload-DYMjAQ6M.js +0 -1
  179. package/client/dist/assets/useSharedWebSocket-BEHPeU1Y.js +0 -2
  180. package/client/dist/assets/x-CBMI9ejn.js +0 -1
  181. package/client/dist/assets/zap-CHo3aCD1.js +0 -1
@@ -33,9 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.WORKTREE_DEPENDENCY_CACHES = void 0;
36
+ exports.DEPENDENCY_LOCKFILES = exports.WORKTREE_DEPENDENCY_CACHES = void 0;
37
37
  exports.isWorktreeNodeModulesEnabled = isWorktreeNodeModulesEnabled;
38
38
  exports.discoverPackageDirs = discoverPackageDirs;
39
+ exports.dependencyInputs = dependencyInputs;
40
+ exports.differingDependencyInput = differingDependencyInput;
39
41
  exports.authenticateWarmNodeModulesLinks = authenticateWarmNodeModulesLinks;
40
42
  exports.linkNodeModulesIntoWorktree = linkNodeModulesIntoWorktree;
41
43
  /**
@@ -48,7 +50,14 @@ exports.linkNodeModulesIntoWorktree = linkNodeModulesIntoWorktree;
48
50
  * Cleanup authority covers individual source-anchored links, never the entire
49
51
  * writable directory. Replaced packages and newly created files therefore keep
50
52
  * the existing ignored-artifact / recoverable-work settlement guarantees.
53
+ *
54
+ * Freshness guard: a package directory is linked only when its dependency inputs
55
+ * (nearest lockfile up to the Git top level + the manifest's dependency fields)
56
+ * match between the base checkout and the worktree. Otherwise the directory is
57
+ * left without node_modules so the runtime installs it cold from the worktree's
58
+ * own lockfile. The base checkout is only ever read.
51
59
  */
60
+ const crypto_1 = require("crypto");
52
61
  const fs = __importStar(require("fs"));
53
62
  const path = __importStar(require("path"));
54
63
  const worktree_overlay_1 = require("./worktree-overlay");
@@ -112,6 +121,81 @@ function discoverPackageDirs(baseRepo) {
112
121
  walk('', 0);
113
122
  return found;
114
123
  }
124
+ /** Lockfiles in lookup priority order; the first one found in a directory wins. */
125
+ exports.DEPENDENCY_LOCKFILES = ['pnpm-lock.yaml', 'yarn.lock', 'package-lock.json', 'npm-shrinkwrap.json', 'bun.lock'];
126
+ const DEPENDENCY_FIELDS = ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies'];
127
+ function sha256(data) {
128
+ return (0, crypto_1.createHash)('sha256').update(data).digest('hex');
129
+ }
130
+ function canonicalJson(value) {
131
+ if (Array.isArray(value))
132
+ return `[${value.map(canonicalJson).join(',')}]`;
133
+ if (value && typeof value === 'object') {
134
+ const record = value;
135
+ return `{${Object.keys(record).sort().map(key => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(',')}}`;
136
+ }
137
+ return JSON.stringify(value) ?? 'null';
138
+ }
139
+ /** Git top level of a checkout: nearest ancestor holding a `.git` entry (dir
140
+ * for a clone, file for a linked worktree). Outside Git, the checkout itself
141
+ * bounds the lockfile search so it never escapes into unrelated parents. */
142
+ function gitTopLevel(checkoutRoot) {
143
+ const start = path.resolve(checkoutRoot);
144
+ for (let current = start;; current = path.dirname(current)) {
145
+ if (exists(path.join(current, '.git')))
146
+ return current;
147
+ if (path.dirname(current) === current)
148
+ return start;
149
+ }
150
+ }
151
+ /**
152
+ * Fingerprint the inputs that decide what a package directory installs. Never
153
+ * throws: unreadable inputs yield null digests, which compare as different.
154
+ */
155
+ function dependencyInputs(checkoutRoot, pkgRel) {
156
+ const top = gitTopLevel(checkoutRoot);
157
+ const pkgDir = pkgRel === '' ? path.resolve(checkoutRoot) : path.resolve(checkoutRoot, ...pkgRel.split('/'));
158
+ let lockfile = null;
159
+ for (let current = pkgDir; lockfile === null; current = path.dirname(current)) {
160
+ for (const name of exports.DEPENDENCY_LOCKFILES) {
161
+ const file = path.join(current, name);
162
+ if (!exists(file))
163
+ continue;
164
+ let digest = null;
165
+ try {
166
+ digest = sha256(fs.readFileSync(file));
167
+ }
168
+ catch { /* unreadable: never equal */ }
169
+ lockfile = { name, location: path.relative(pkgDir, current).split(path.sep).join('/'), digest };
170
+ break;
171
+ }
172
+ if (current === top || path.dirname(current) === current)
173
+ break;
174
+ }
175
+ let manifestDigest = null;
176
+ try {
177
+ const manifest = JSON.parse(fs.readFileSync(path.join(pkgDir, 'package.json'), 'utf8'));
178
+ const fields = {};
179
+ for (const field of DEPENDENCY_FIELDS)
180
+ if (manifest?.[field] !== undefined)
181
+ fields[field] = manifest[field];
182
+ manifestDigest = sha256(canonicalJson(fields));
183
+ }
184
+ catch { /* missing or unparsable manifest: never equal */ }
185
+ return { lockfile, manifestDigest };
186
+ }
187
+ /** Name of the first dependency input that differs, or null when warm reuse is safe. */
188
+ function differingDependencyInput(base, worktree) {
189
+ const a = base.lockfile, b = worktree.lockfile;
190
+ if (a || b) {
191
+ if (!a || !b || a.name !== b.name || a.location !== b.location || a.digest === null || a.digest !== b.digest) {
192
+ return (a ?? b).name;
193
+ }
194
+ }
195
+ if (base.manifestDigest === null || base.manifestDigest !== worktree.manifestDigest)
196
+ return 'package.json';
197
+ return null;
198
+ }
115
199
  /** Resolve a path through symlinks when possible; the literal path otherwise
116
200
  * (a nonexistent target must still compare, and must still compare EQUAL to an
117
201
  * equally-nonexistent expectation rather than silently authorizing). */
@@ -305,6 +389,16 @@ function linkNodeModulesIntoWorktree(baseRepo, worktreePath) {
305
389
  }
306
390
  const dest = path.join(worktreePath, ...rel.split('/'));
307
391
  const legacy = authenticateWarmLink(baseRepo, worktreePath, rel, sourceRel);
392
+ if (!exists(dest)) {
393
+ // Freshness guard, only when a NEW link would be prepared: an existing
394
+ // (resumed or legacy) link keeps its authentication below.
395
+ const differing = differingDependencyInput(dependencyInputs(baseRepo, pkgRel), dependencyInputs(prefix ? path.join(worktreePath, ...prefix.split('/')) : worktreePath, pkgRel));
396
+ if (differing) {
397
+ const pkgDir = [prefix, pkgRel].filter(Boolean).join('/') || '.';
398
+ result.warnings.push(`${pkgDir}: ${differing} differs from the base checkout; dependencies will be installed in the worktree`);
399
+ continue;
400
+ }
401
+ }
308
402
  if (!exists(dest) || legacy) {
309
403
  let staging;
310
404
  let removedLegacy = false;
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AnalyticsPage-YD8MLoPa.js","assets/rolldown-runtime-CNC7AqOf.js","assets/jsx-runtime-zu2_FqZY.js","assets/chunk-KS7C4IRE-DEKu087k.js","assets/preload-helper-Czpn1I53.js","assets/useSharedWebSocket-BEHPeU1Y.js","assets/activity-DiyjsgQV.js","assets/addspec-BOvgmcgk.js","assets/agent-Dip4h2YE.js","assets/agentRuntime-C_yLPKDy.js","assets/agents-Doe1sHY5.js","assets/agentstudio-BzugqB_N.js","assets/aiedit-iIjz2_Qk.js","assets/analytics-BWynXPEm.js","assets/attachments-B53PG733.js","assets/browser-CG0PE1j_.js","assets/builder-CpS9liE9.js","assets/chat-BGD7MXAy.js","assets/code-DaZ-ZwCT.js","assets/commands-BAWSYHjQ.js","assets/common-Bdi0qN4S.js","assets/dashboard-XGdQ5mjw.js","assets/explore-DgBACn39.js","assets/integrations-Dwl9KQp0.js","assets/jira-FXr7u2lh.js","assets/jobs-De3EqaO0.js","assets/loops-WyWDkhok.js","assets/mcp-CUAN6ORK.js","assets/narration-DbHnz0qV.js","assets/nav--u7iPYlS.js","assets/packet-B0H15elv.js","assets/settings-CKu0LTib.js","assets/setup-CKGUxKr-.js","assets/specs-DfIdoU5L.js","assets/subscriptionUsage-CdlE5Mg1.js","assets/terminal-BAzpHtpY.js","assets/tickets-D41ZMQpf.js","assets/createLucideIcon-Bjbbp_KS.js","assets/Trans-CAY2Rd2f.js","assets/useDesktop-9Lwoel_8.js","assets/react-dom-DiWzBDP9.js","assets/provider-capabilities-lePfeT_Y.js","assets/spending-DemeFfrH.js","assets/clsx-CjueKrWZ.js","assets/formatDistanceToNow-DlQY1Lm_.js","assets/getTimezoneOffsetInMilliseconds-COUeq65G.js","assets/index-CONHvEJw.js","assets/tauri-shell-DE6LfGPw.js","assets/TicketDetailModalContext-Dea22CI-.js","assets/save-B6wGWwBR.js","assets/MinimizedChatsContext-Ds2-R6qJ.js","assets/chevron-up-CwGUHd6D.js","assets/sparkles-DrY8hb0X.js","assets/x-CBMI9ejn.js","assets/ban-E4EaZe3a.js","assets/file-text-BcLCfcWZ.js","assets/circle-x-CMYsN4ZH.js","assets/download-CFHyyHcw.js","assets/external-link-D6XxC_Cu.js","assets/git-branch-BRM0F5GN.js","assets/layers-eDMjG41I.js","assets/loader-circle-DcygOQpC.js","assets/pencil-C9RkrIPZ.js","assets/square-Ci-PFcFe.js","assets/plus-CsnjfkmX.js","assets/rotate-ccw-Wh4id13q.js","assets/search-Cq_gE3Ik.js","assets/trash-2-BOU3WdZZ.js","assets/triangle-alert-H9T4jAmh.js","assets/jira-api-C94VNHNY.js","assets/zap-CHo3aCD1.js","assets/dialog-CMgps2MY.js","assets/utils-BC4DHlz2.js","assets/lib-CGdyxIWg.js","assets/button-D1xExSTF.js","assets/RepositoryScopeSelector-DrtPqvc_.js","assets/project-repositories-Cc3oNv8X.js","assets/core-B3mKBIh5.js","assets/RepositoryDeliveries-CW4eKG3x.js","assets/dist-Bq10nS2m.js","assets/useRuntimeRuns-DL0xYoZ2.js","assets/event-Bt7f3wXe.js","assets/index-BacrO_ub.css","assets/ExportDropdown-BvKQgwM9.js","assets/BarChart-nBOMNfiy.js","assets/value-s-gzBeyF.js"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{n as i}from"./createLucideIcon-Bjbbp_KS.js";import{t as a}from"./loader-circle-DcygOQpC.js";import{t as o}from"./x-CBMI9ejn.js";import{t as s}from"./utils-BC4DHlz2.js";import{$ as c,Mt as l,Nt as u}from"./index-CONHvEJw.js";var d=e(t(),1),f=n(),p=(0,d.lazy)(()=>r(()=>import(`./AnalyticsPage-YD8MLoPa.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]))),m=420,h=560;function g(){let{t:e}=i(`agent`),{closeAnalyticsPane:t}=c(),[n,r]=(0,d.useState)(h),[g,_]=(0,d.useState)(!1),v=(0,d.useCallback)(e=>{let t=e.clientX,i=n,a=window.innerWidth-m;try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}let o=e=>{let n=Math.min(Math.max(i+(t-e.clientX),m),a);r(n)},s=()=>{window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s),window.addEventListener(`pointercancel`,s)},[n]);return(0,f.jsxs)(`div`,{className:s(`flex h-full flex-col overflow-hidden border-l border-border bg-background`,g&&`absolute inset-0 z-30 border-l-0`),style:g?void 0:{width:n,flexShrink:0},"data-testid":`agent-analytics-pane`,children:[(0,f.jsx)(`div`,{className:`relative flex items-center`,children:!g&&(0,f.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,onPointerDown:v,className:`absolute left-0 top-0 h-full w-1.5 -translate-x-full cursor-col-resize select-none touch-none hover:bg-accent-primary/20`,title:e(`workspace.resizeAnalytics`)})}),(0,f.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/60 bg-surface/40 px-3 py-1.5`,children:[(0,f.jsx)(`span`,{className:`text-xs font-medium text-foreground/70`,children:e(`workspace.analytics`)}),(0,f.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[(0,f.jsx)(`button`,{type:`button`,onClick:()=>_(e=>!e),"aria-label":e(g?`restore`:`maximize`),title:e(g?`restore`:`maximize`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:g?(0,f.jsx)(l,{className:`h-4 w-4`}):(0,f.jsx)(u,{className:`h-4 w-4`})}),(0,f.jsx)(`button`,{type:`button`,onClick:t,"aria-label":e(`workspace.closeAnalytics`),title:e(`workspace.closeAnalytics`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:(0,f.jsx)(o,{className:`h-4 w-4`})})]})]}),(0,f.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,f.jsx)(d.Suspense,{fallback:(0,f.jsx)(`div`,{className:`flex h-24 items-center justify-center text-muted-foreground`,children:(0,f.jsx)(a,{className:`h-4 w-4 animate-spin`})}),children:(0,f.jsx)(p,{})})})]})}export{g as AgentModeAnalyticsPane};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodePage-CLJn2F2e.js","assets/rolldown-runtime-CNC7AqOf.js","assets/jsx-runtime-zu2_FqZY.js","assets/react-dom-DiWzBDP9.js","assets/preload-helper-Czpn1I53.js","assets/chunk-KS7C4IRE-DEKu087k.js","assets/useSharedWebSocket-BEHPeU1Y.js","assets/activity-DiyjsgQV.js","assets/addspec-BOvgmcgk.js","assets/agent-Dip4h2YE.js","assets/agentRuntime-C_yLPKDy.js","assets/agents-Doe1sHY5.js","assets/agentstudio-BzugqB_N.js","assets/aiedit-iIjz2_Qk.js","assets/analytics-BWynXPEm.js","assets/attachments-B53PG733.js","assets/browser-CG0PE1j_.js","assets/builder-CpS9liE9.js","assets/chat-BGD7MXAy.js","assets/code-DaZ-ZwCT.js","assets/commands-BAWSYHjQ.js","assets/common-Bdi0qN4S.js","assets/dashboard-XGdQ5mjw.js","assets/explore-DgBACn39.js","assets/integrations-Dwl9KQp0.js","assets/jira-FXr7u2lh.js","assets/jobs-De3EqaO0.js","assets/loops-WyWDkhok.js","assets/mcp-CUAN6ORK.js","assets/narration-DbHnz0qV.js","assets/nav--u7iPYlS.js","assets/packet-B0H15elv.js","assets/settings-CKu0LTib.js","assets/setup-CKGUxKr-.js","assets/specs-DfIdoU5L.js","assets/subscriptionUsage-CdlE5Mg1.js","assets/terminal-BAzpHtpY.js","assets/tickets-D41ZMQpf.js","assets/createLucideIcon-Bjbbp_KS.js","assets/useDesktop-9Lwoel_8.js","assets/TicketDetailModalContext-Dea22CI-.js","assets/tauri-shell-DE6LfGPw.js","assets/Trans-CAY2Rd2f.js","assets/provider-capabilities-lePfeT_Y.js","assets/save-B6wGWwBR.js","assets/spending-DemeFfrH.js","assets/MinimizedChatsContext-Ds2-R6qJ.js","assets/chevron-up-CwGUHd6D.js","assets/sparkles-DrY8hb0X.js","assets/x-CBMI9ejn.js","assets/ban-E4EaZe3a.js","assets/file-text-BcLCfcWZ.js","assets/circle-x-CMYsN4ZH.js","assets/download-CFHyyHcw.js","assets/external-link-D6XxC_Cu.js","assets/git-branch-BRM0F5GN.js","assets/layers-eDMjG41I.js","assets/loader-circle-DcygOQpC.js","assets/pencil-C9RkrIPZ.js","assets/square-Ci-PFcFe.js","assets/plus-CsnjfkmX.js","assets/rotate-ccw-Wh4id13q.js","assets/search-Cq_gE3Ik.js","assets/trash-2-BOU3WdZZ.js","assets/triangle-alert-H9T4jAmh.js","assets/jira-api-C94VNHNY.js","assets/zap-CHo3aCD1.js","assets/dialog-CMgps2MY.js","assets/utils-BC4DHlz2.js","assets/clsx-CjueKrWZ.js","assets/lib-CGdyxIWg.js","assets/formatDistanceToNow-DlQY1Lm_.js","assets/getTimezoneOffsetInMilliseconds-COUeq65G.js","assets/button-D1xExSTF.js","assets/RepositoryScopeSelector-DrtPqvc_.js","assets/project-repositories-Cc3oNv8X.js","assets/index-CONHvEJw.js","assets/core-B3mKBIh5.js","assets/RepositoryDeliveries-CW4eKG3x.js","assets/dist-Bq10nS2m.js","assets/useRuntimeRuns-DL0xYoZ2.js","assets/event-Bt7f3wXe.js","assets/index-BacrO_ub.css"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./preload-helper-Czpn1I53.js";import{n as i}from"./createLucideIcon-Bjbbp_KS.js";import{t as a}from"./x-CBMI9ejn.js";import{$ as o,Mt as s,Nt as c,dt as l,ft as u}from"./index-CONHvEJw.js";var d=e(t(),1),f=n(),p=(0,d.lazy)(()=>r(()=>import(`./CodePage-CLJn2F2e.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82]))),m=420,h=560;function g({projectId:e,conversationId:t}){let{t:n}=i(`agent`),{closeCodePane:r}=o(),[g,_]=(0,d.useState)(h),[v,y]=(0,d.useState)(()=>window.innerWidth),[b,x]=(0,d.useState)(!1),S=(0,d.useRef)(null),C=(0,d.useRef)(null),w=Math.max(0,v-Math.min(m,v/2)),T=Math.min(m,w),E=Math.min(w,Math.max(T,g)),D=(0,d.useCallback)(e=>Math.min(w,Math.max(T,e)),[w,T]),O=`${e}:${t}`,k=(0,d.useCallback)(n=>{u(e,t,{path:n})},[e,t]);(0,d.useLayoutEffect)(()=>{let e=S.current,t=e?.parentElement;if(!e||!t)return;let n=()=>{let n=t.getBoundingClientRect().width||t.clientWidth||window.innerWidth,r=0;for(let n of t.children){if(n===e||!(n instanceof HTMLElement))continue;let t=getComputedStyle(n);t.display===`none`||t.position===`absolute`||t.position===`fixed`||Number(t.flexGrow)>0||(r+=n.getBoundingClientRect().width)}y(Math.max(0,n-r))},r=new ResizeObserver(n),i=()=>{r.disconnect(),r.observe(t);for(let n of t.children)n!==e&&r.observe(n);n()},a=new MutationObserver(i);return a.observe(t,{childList:!0}),i(),window.addEventListener(`resize`,n),()=>{r.disconnect(),a.disconnect(),window.removeEventListener(`resize`,n)}},[O]),(0,d.useEffect)(()=>()=>{C.current?.()},[O,b,w]);let A=(0,d.useCallback)(e=>{if(e.button!==0)return;e.preventDefault(),C.current?.();let t=e.clientX,n=E,r=e.pointerId,i=e.currentTarget;try{i.setPointerCapture(r)}catch{}let a=e=>{e.pointerId===r&&_(D(n+t-e.clientX))},o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s),window.removeEventListener(`blur`,o),i.removeEventListener(`lostpointercapture`,o);try{i.hasPointerCapture(r)&&i.releasePointerCapture(r)}catch{}C.current=null},s=e=>{e.pointerId===r&&o()};C.current=o,window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,s),window.addEventListener(`pointercancel`,s),window.addEventListener(`blur`,o),i.addEventListener(`lostpointercapture`,o)},[E,D]);return(0,f.jsxs)(`div`,{ref:S,className:`flex h-full min-w-0 flex-col overflow-hidden border-l border-border bg-background${b?` absolute inset-0 z-30 border-l-0`:` relative`}`,style:b?void 0:{width:E,maxWidth:`100%`,flexShrink:0},"data-testid":`agent-code-pane`,children:[!b&&(0,f.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,onPointerDown:A,tabIndex:0,"aria-label":n(`workspace.resizeCode`),"aria-valuemin":Math.round(T),"aria-valuemax":Math.round(w),"aria-valuenow":Math.round(E),onKeyDown:e=>{let t=e.key===`ArrowLeft`?E+32:e.key===`ArrowRight`?E-32:e.key===`Home`?T:e.key===`End`?w:null;t!==null&&(e.preventDefault(),_(D(t)))},className:`absolute inset-y-0 left-0 z-20 w-1.5 cursor-col-resize select-none touch-none hover:bg-accent-primary/20 focus-visible:bg-accent-primary/30 focus-visible:outline-none`,title:n(`workspace.resizeCode`)}),(0,f.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/60 bg-surface/40 px-3 py-1.5`,children:[(0,f.jsx)(`span`,{className:`text-xs font-medium text-foreground/70`,children:n(`workspace.files`)}),(0,f.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[(0,f.jsx)(`button`,{type:`button`,onClick:()=>{C.current?.(),x(e=>!e)},"aria-label":n(b?`restore`:`maximize`),title:n(b?`restore`:`maximize`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:b?(0,f.jsx)(s,{className:`h-4 w-4`}):(0,f.jsx)(c,{className:`h-4 w-4`})}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>{C.current?.(),r()},"aria-label":n(`workspace.closeFiles`),title:n(`workspace.closeFiles`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:(0,f.jsx)(a,{className:`h-4 w-4`})})]})]}),(0,f.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(0,f.jsx)(d.Suspense,{fallback:(0,f.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:`…`}),children:(0,f.jsx)(p,{embedded:!0,initialRepositoryId:l(e,t).repositoryId,onRepositoryChange:n=>u(e,t,{repositoryId:n}),initialPath:l(e,t).path,onSelectedPathChange:k},O)})})]},O)}export{g as AgentModeCodePane};