specrails-desktop 2.61.0 → 2.62.0
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-C_pqc281.js +1 -0
- package/client/dist/assets/{AgentBrowserCapture-CkNWDZT3.js → AgentBrowserCapture-vz6rbDtu.js} +1 -1
- package/client/dist/assets/AgentModeAnalyticsPane-BHCcUahS.js +2 -0
- package/client/dist/assets/AgentModeCodePane-DhmxgG3W.js +2 -0
- package/client/dist/assets/{AgentModeJobsPane-U1J6PaBo.js → AgentModeJobsPane-99fBBLri.js} +1 -1
- package/client/dist/assets/{AgentsPage-CXrqu5vo.js → AgentsPage-CTwm_6T8.js} +3 -3
- package/client/dist/assets/{AnalyticsPage-Cvtt-LOO.js → AnalyticsPage-YD8MLoPa.js} +1 -1
- package/client/dist/assets/CodePage-CLJn2F2e.js +3 -0
- package/client/dist/assets/{DesktopAnalyticsPage-CsDFy5rp.js → DesktopAnalyticsPage-MWGQVbwp.js} +1 -1
- package/client/dist/assets/{DocsDialog-CSlMPemn.js → DocsDialog-XUCYKoq0.js} +1 -1
- package/client/dist/assets/{DocsPage-BKlYAvWq.js → DocsPage-dOLC8bXA.js} +1 -1
- package/client/dist/assets/{ExportDropdown-CweP_1GP.js → ExportDropdown-BvKQgwM9.js} +1 -1
- package/client/dist/assets/InteractiveJobComposer-DxOvwmBF.js +19 -0
- package/client/dist/assets/{JobDetailModal-DYyGq1Vp.js → JobDetailModal-CkiubrkZ.js} +1 -1
- package/client/dist/assets/JobDetailPage-CNe4Wn7l.js +1 -0
- package/client/dist/assets/JobsPage-DSts_L_d.js +1 -0
- package/client/dist/assets/LoopBuilderPage-C9D9eer5.js +1 -0
- package/client/dist/assets/{LoopPreviewModal-DkLRfsYX.js → LoopPreviewModal-Dv3dxHr_.js} +1 -1
- package/client/dist/assets/{LoopWindowSurface-CuACkXFV.js → LoopWindowSurface-DN2lbSnL.js} +1 -1
- package/client/dist/assets/{LoopsPage-ClSrWzDd.js → LoopsPage-DHgIreEW.js} +2 -2
- package/client/dist/assets/MinimizedChatsContext-Ds2-R6qJ.js +1 -0
- package/client/dist/assets/PluginsPage-D1EJ9oja.js +2 -0
- package/client/dist/assets/ProjectSettingsDialog-DKpa1wKk.js +1 -0
- package/client/dist/assets/{RepositoryDeliveries-DJCm1pZr.js → RepositoryDeliveries-CW4eKG3x.js} +1 -1
- package/client/dist/assets/{RepositoryScopeSelector-CeCr6Jz-.js → RepositoryScopeSelector-DrtPqvc_.js} +1 -1
- package/client/dist/assets/ReviewPacketPage-BtjPI0Cc.js +4 -0
- package/client/dist/assets/{TemplatePreviewModal-B8yd1AGU.js → TemplatePreviewModal-DcFlhUxy.js} +1 -1
- package/client/dist/assets/TicketDetailModalContext-Dea22CI-.js +16 -0
- package/client/dist/assets/{Trans-D5eOjfvG.js → Trans-CAY2Rd2f.js} +1 -1
- package/client/dist/assets/agent-5bSixVzz.js +1 -0
- package/client/dist/assets/agent-BR4EHfhq.js +1 -0
- package/client/dist/assets/agent-C0IKkJP8.js +1 -0
- package/client/dist/assets/agent-C7li9ayC.js +1 -0
- package/client/dist/assets/agent-D0dRmEen.js +1 -0
- package/client/dist/assets/{agent-BjttZLIl.js → agent-DZVGHm7H.js} +1 -1
- package/client/dist/assets/agent-Dip4h2YE.js +1 -0
- package/client/dist/assets/agent-Pp-P-n1p.js +1 -0
- package/client/dist/assets/ban-E4EaZe3a.js +1 -0
- package/client/dist/assets/chevron-up-CwGUHd6D.js +1 -0
- package/client/dist/assets/dist-Bq10nS2m.js +1 -0
- package/client/dist/assets/{formatDistanceToNow-DZ3VWsHq.js → formatDistanceToNow-DlQY1Lm_.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-9JiGlFrx.js → getTimezoneOffsetInMilliseconds-COUeq65G.js} +1 -1
- package/client/dist/assets/index-BacrO_ub.css +2 -0
- package/client/dist/assets/index-CONHvEJw.js +83 -0
- package/client/dist/assets/{jira-api-Bp0zXwjg.js → jira-api-C94VNHNY.js} +1 -1
- package/client/dist/assets/layers-eDMjG41I.js +1 -0
- package/client/dist/assets/{project-repositories-CadLZOnr.js → project-repositories-Cc3oNv8X.js} +1 -1
- package/client/dist/assets/save-B6wGWwBR.js +1 -0
- package/client/dist/assets/{settings-Dn-pXukr.js → settings-BKJZ2KEM.js} +1 -1
- package/client/dist/assets/{settings-BBj_kZaD.js → settings-BV3jocIx.js} +1 -1
- package/client/dist/assets/{settings-COlH_P33.js → settings-BjM2Dw8_.js} +1 -1
- package/client/dist/assets/settings-CKu0LTib.js +1 -0
- package/client/dist/assets/{settings-D77mC_Lb.js → settings-DA77M48m.js} +1 -1
- package/client/dist/assets/{settings-ByVE7jdZ.js → settings-LfFnl1UH.js} +1 -1
- package/client/dist/assets/{settings-DZKy7MqN.js → settings-P1IQvhnL.js} +1 -1
- package/client/dist/assets/{settings-B5Hy_Kol.js → settings-eIMJjyK_.js} +1 -1
- package/client/dist/assets/{spending-DQDNtM8q.js → spending-DemeFfrH.js} +1 -1
- package/client/dist/assets/{useDesktop-DKNbOF0u.js → useDesktop-9Lwoel_8.js} +1 -1
- package/client/dist/assets/{useRuntimeRuns-D3YMw9qx.js → useRuntimeRuns-DL0xYoZ2.js} +1 -1
- package/client/dist/assets/{useSharedWebSocket-DaWuiO0S.js → useSharedWebSocket-BEHPeU1Y.js} +2 -2
- package/client/dist/assets/zap-CHo3aCD1.js +1 -0
- package/client/dist/index.html +23 -19
- package/docs/guide/de/integrations/6-agent-chat.md +11 -0
- package/docs/guide/en/integrations/6-agent-chat.md +11 -0
- package/docs/guide/es/integrations/6-agent-chat.md +11 -0
- package/docs/guide/fr/integrations/6-agent-chat.md +11 -0
- package/docs/guide/it/integrations/6-agent-chat.md +11 -0
- package/docs/guide/ja/integrations/6-agent-chat.md +11 -0
- package/docs/guide/pt/integrations/6-agent-chat.md +11 -0
- package/docs/guide/zh/integrations/6-agent-chat.md +11 -0
- package/docs/internals/README.md +1 -0
- package/docs/internals/agent-sessions.md +157 -0
- package/docs/internals/api-reference.md +33 -4
- package/docs/internals/configuration.md +34 -0
- package/docs/internals/core-runtime-updates.md +10 -3
- package/docs/internals/operations-runbook.md +11 -0
- package/docs/internals/programmatic-agent-runtime.md +1 -1
- package/docs/internals/source-map.md +40 -1
- package/mcp-bridge/dist/specrails-mcp.js +82 -15
- package/package.json +1 -1
- package/server/dist/agent-mcp-config.js +41 -0
- package/server/dist/core-compat.js +2 -0
- package/server/dist/desktop-db.js +101 -4
- package/server/dist/desktop-router.js +31 -2
- package/server/dist/index.js +58 -0
- package/server/dist/mcp/tools/app-settings.js +11 -0
- package/server/dist/mcp/tools/mission.js +45 -2
- package/server/dist/mcp/tools/specs.js +2 -2
- package/server/dist/modules/accounting/runtime/result-event.js +9 -1
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +25 -0
- package/server/dist/modules/agent-sessions/adapters/host-process.js +73 -0
- package/server/dist/modules/agent-sessions/adapters/http.js +31 -0
- package/server/dist/modules/agent-sessions/adapters/rpc-client.js +147 -0
- package/server/dist/modules/agent-sessions/application/session-event-pump.js +99 -0
- package/server/dist/modules/agent-sessions/domain/availability.js +25 -0
- package/server/dist/modules/agent-sessions/domain/errors.js +23 -0
- package/server/dist/modules/agent-sessions/domain/host-state.js +80 -0
- package/server/dist/modules/agent-sessions/domain/projection.js +147 -0
- package/server/dist/modules/agent-sessions/domain/protocol.js +59 -0
- package/server/dist/modules/agent-sessions/domain/subagent-policy.js +34 -0
- package/server/dist/modules/agent-sessions/index.js +31 -0
- package/server/dist/modules/agent-sessions/ports.js +2 -0
- package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +43 -0
- package/server/dist/modules/agent-sessions/runtime/session-host-registry.js +226 -0
- package/server/dist/modules/agents/runtime/agent-store.js +3 -1
- package/server/dist/modules/loops/runtime/loop-implement-recipe.js +15 -4
- package/server/dist/modules/loops/runtime/loop-run-manager.js +4 -0
- package/server/dist/modules/missions/runtime/agent-chat-manager.js +137 -40
- package/server/dist/modules/missions/runtime/agent-chat-router.js +68 -0
- package/server/dist/modules/missions/runtime/agent-operator-prompt.js +8 -9
- package/server/dist/modules/missions/runtime/agent-session-store.js +133 -0
- package/server/dist/modules/missions/runtime/core-session-runner.js +204 -0
- package/server/dist/modules/missions/runtime/mission-core-sessions.js +286 -0
- package/server/dist/modules/missions/runtime/mission-session-projector.js +168 -0
- package/server/dist/modules/project-settings/adapters/http.js +14 -2
- package/server/dist/modules/project-settings/adapters/sqlite.js +30 -2
- package/server/dist/modules/project-settings/domain.js +24 -0
- package/server/dist/modules/project-settings/index.js +2 -1
- package/server/dist/modules/specs/runtime/spec-models.js +1 -1
- package/server/dist/plugins/codex-spawn.js +15 -7
- package/server/dist/project-registry.js +32 -0
- package/server/dist/project-router-settings.js +7 -1
- package/server/dist/providers/claude-adapter.js +6 -1
- package/client/dist/assets/ActivityFeedPage-Wi5XNgoG.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-CXz2j-Bt.js +0 -2
- package/client/dist/assets/AgentModeCodePane-DnsBPtpS.js +0 -2
- package/client/dist/assets/CodePage-D35o-MFO.js +0 -3
- package/client/dist/assets/InteractiveJobComposer-CFKvbQeJ.js +0 -19
- package/client/dist/assets/JobDetailPage-C6gpdYvj.js +0 -1
- package/client/dist/assets/JobsPage-CgS0pnKd.js +0 -1
- package/client/dist/assets/LoopBuilderPage-jUp20DSZ.js +0 -1
- package/client/dist/assets/MinimizedChatsContext-CroAs6Kh.js +0 -1
- package/client/dist/assets/PluginsPage-nCKQOwRL.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-BVDYwllU.js +0 -1
- package/client/dist/assets/ReviewPacketPage-kTErrEjx.js +0 -4
- package/client/dist/assets/TicketDetailModalContext-YBJX3RmP.js +0 -16
- package/client/dist/assets/agent--8QAfoXL.js +0 -1
- package/client/dist/assets/agent-3HxXkIWX.js +0 -1
- package/client/dist/assets/agent-CpFCz32T.js +0 -1
- package/client/dist/assets/agent-DVnw6ybO.js +0 -1
- package/client/dist/assets/agent-Z5s_GTP0.js +0 -1
- package/client/dist/assets/agent-hv57-zyG.js +0 -1
- package/client/dist/assets/agent-xGrZ_aN1.js +0 -1
- package/client/dist/assets/index-Bfunvi6w.css +0 -2
- package/client/dist/assets/index-lTGJJTuk.js +0 -83
- package/client/dist/assets/save-OsUqVn99.js +0 -1
- package/client/dist/assets/settings-Dbyd6gmj.js +0 -1
- package/client/dist/assets/zap-CUOlvtT1.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-Bjbbp_KS.js";var t=e(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]);export{t};
|
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-CONHvEJw.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">
|
|
@@ -213,7 +213,7 @@
|
|
|
213
213
|
<link rel="modulepreload" crossorigin href="/assets/tauri-shell-DE6LfGPw.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="/assets/activity-DiyjsgQV.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="/assets/addspec-BOvgmcgk.js">
|
|
216
|
-
<link rel="modulepreload" crossorigin href="/assets/agent-
|
|
216
|
+
<link rel="modulepreload" crossorigin href="/assets/agent-Dip4h2YE.js">
|
|
217
217
|
<link rel="modulepreload" crossorigin href="/assets/agentRuntime-C_yLPKDy.js">
|
|
218
218
|
<link rel="modulepreload" crossorigin href="/assets/agents-Doe1sHY5.js">
|
|
219
219
|
<link rel="modulepreload" crossorigin href="/assets/agentstudio-BzugqB_N.js">
|
|
@@ -236,28 +236,30 @@
|
|
|
236
236
|
<link rel="modulepreload" crossorigin href="/assets/narration-DbHnz0qV.js">
|
|
237
237
|
<link rel="modulepreload" crossorigin href="/assets/nav--u7iPYlS.js">
|
|
238
238
|
<link rel="modulepreload" crossorigin href="/assets/packet-B0H15elv.js">
|
|
239
|
-
<link rel="modulepreload" crossorigin href="/assets/settings-
|
|
239
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-CKu0LTib.js">
|
|
240
240
|
<link rel="modulepreload" crossorigin href="/assets/setup-CKGUxKr-.js">
|
|
241
241
|
<link rel="modulepreload" crossorigin href="/assets/specs-DfIdoU5L.js">
|
|
242
242
|
<link rel="modulepreload" crossorigin href="/assets/subscriptionUsage-CdlE5Mg1.js">
|
|
243
243
|
<link rel="modulepreload" crossorigin href="/assets/terminal-BAzpHtpY.js">
|
|
244
244
|
<link rel="modulepreload" crossorigin href="/assets/tickets-D41ZMQpf.js">
|
|
245
245
|
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-Bjbbp_KS.js">
|
|
246
|
-
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-
|
|
247
|
-
<link rel="modulepreload" crossorigin href="/assets/Trans-
|
|
248
|
-
<link rel="modulepreload" crossorigin href="/assets/useDesktop-
|
|
246
|
+
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-BEHPeU1Y.js">
|
|
247
|
+
<link rel="modulepreload" crossorigin href="/assets/Trans-CAY2Rd2f.js">
|
|
248
|
+
<link rel="modulepreload" crossorigin href="/assets/useDesktop-9Lwoel_8.js">
|
|
249
249
|
<link rel="modulepreload" crossorigin href="/assets/provider-capabilities-lePfeT_Y.js">
|
|
250
|
-
<link rel="modulepreload" crossorigin href="/assets/save-
|
|
251
|
-
<link rel="modulepreload" crossorigin href="/assets/spending-
|
|
250
|
+
<link rel="modulepreload" crossorigin href="/assets/save-B6wGWwBR.js">
|
|
251
|
+
<link rel="modulepreload" crossorigin href="/assets/spending-DemeFfrH.js">
|
|
252
|
+
<link rel="modulepreload" crossorigin href="/assets/chevron-up-CwGUHd6D.js">
|
|
252
253
|
<link rel="modulepreload" crossorigin href="/assets/sparkles-DrY8hb0X.js">
|
|
253
254
|
<link rel="modulepreload" crossorigin href="/assets/x-CBMI9ejn.js">
|
|
254
|
-
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-
|
|
255
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
255
|
+
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-Ds2-R6qJ.js">
|
|
256
|
+
<link rel="modulepreload" crossorigin href="/assets/ban-E4EaZe3a.js">
|
|
256
257
|
<link rel="modulepreload" crossorigin href="/assets/file-text-BcLCfcWZ.js">
|
|
257
258
|
<link rel="modulepreload" crossorigin href="/assets/circle-x-CMYsN4ZH.js">
|
|
258
259
|
<link rel="modulepreload" crossorigin href="/assets/download-CFHyyHcw.js">
|
|
259
260
|
<link rel="modulepreload" crossorigin href="/assets/external-link-D6XxC_Cu.js">
|
|
260
261
|
<link rel="modulepreload" crossorigin href="/assets/git-branch-BRM0F5GN.js">
|
|
262
|
+
<link rel="modulepreload" crossorigin href="/assets/layers-eDMjG41I.js">
|
|
261
263
|
<link rel="modulepreload" crossorigin href="/assets/loader-circle-DcygOQpC.js">
|
|
262
264
|
<link rel="modulepreload" crossorigin href="/assets/pencil-C9RkrIPZ.js">
|
|
263
265
|
<link rel="modulepreload" crossorigin href="/assets/square-Ci-PFcFe.js">
|
|
@@ -266,22 +268,24 @@
|
|
|
266
268
|
<link rel="modulepreload" crossorigin href="/assets/search-Cq_gE3Ik.js">
|
|
267
269
|
<link rel="modulepreload" crossorigin href="/assets/trash-2-BOU3WdZZ.js">
|
|
268
270
|
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-H9T4jAmh.js">
|
|
269
|
-
<link rel="modulepreload" crossorigin href="/assets/jira-api-
|
|
271
|
+
<link rel="modulepreload" crossorigin href="/assets/jira-api-C94VNHNY.js">
|
|
272
|
+
<link rel="modulepreload" crossorigin href="/assets/zap-CHo3aCD1.js">
|
|
270
273
|
<link rel="modulepreload" crossorigin href="/assets/clsx-CjueKrWZ.js">
|
|
271
274
|
<link rel="modulepreload" crossorigin href="/assets/utils-BC4DHlz2.js">
|
|
272
275
|
<link rel="modulepreload" crossorigin href="/assets/dialog-CMgps2MY.js">
|
|
273
276
|
<link rel="modulepreload" crossorigin href="/assets/lib-CGdyxIWg.js">
|
|
274
|
-
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-
|
|
275
|
-
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-
|
|
277
|
+
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-COUeq65G.js">
|
|
278
|
+
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-DlQY1Lm_.js">
|
|
276
279
|
<link rel="modulepreload" crossorigin href="/assets/button-D1xExSTF.js">
|
|
277
|
-
<link rel="modulepreload" crossorigin href="/assets/project-repositories-
|
|
278
|
-
<link rel="modulepreload" crossorigin href="/assets/RepositoryScopeSelector-
|
|
279
|
-
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-
|
|
280
|
+
<link rel="modulepreload" crossorigin href="/assets/project-repositories-Cc3oNv8X.js">
|
|
281
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryScopeSelector-DrtPqvc_.js">
|
|
282
|
+
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-Dea22CI-.js">
|
|
280
283
|
<link rel="modulepreload" crossorigin href="/assets/core-B3mKBIh5.js">
|
|
281
|
-
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-
|
|
282
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
284
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-CW4eKG3x.js">
|
|
285
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-Bq10nS2m.js">
|
|
286
|
+
<link rel="modulepreload" crossorigin href="/assets/useRuntimeRuns-DL0xYoZ2.js">
|
|
283
287
|
<link rel="modulepreload" crossorigin href="/assets/event-Bt7f3wXe.js">
|
|
284
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
288
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BacrO_ub.css">
|
|
285
289
|
</head>
|
|
286
290
|
<body>
|
|
287
291
|
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
|
@@ -67,6 +67,17 @@ Antworten strömen flüssig herein und landen bereits formatiert (Überschriften
|
|
|
67
67
|
- **Ohne Git keine PR-Phase.** Ein Projekt ohne Git-Repository (oder ohne Commits) bekommt trotzdem eine Run-Karte — Fortschritt, Log, Fehler und Wiederherstellung —, aber es gibt keinen Branch und keinen PR-Schritt; die Karte sagt das.
|
|
68
68
|
- **`@rail-N`.** Tippe `@` und wähle ein Rail, um es in deiner Nachricht zu referenzieren, mit seinen Specs und ob es frei, belegt oder in Entscheidung ist.
|
|
69
69
|
|
|
70
|
+
## Sub-Agenten
|
|
71
|
+
|
|
72
|
+
Manche Anbieter können Teile einer Aufgabe an **Sub-Agenten** abgeben – Helfer, die parallel arbeiten und weitermachen, nachdem der Agent geantwortet hat. Sub-Agenten sind **standardmäßig aus**, weil sie die Kosten einer Anfrage vervielfachen.
|
|
73
|
+
|
|
74
|
+
- **Pro Projekt einschalten.** Öffne in den Projekteinstellungen den Bereich **Sub-Agenten** und aktiviere **Sub-Agenten in diesem Projekt erlauben**. Das gilt für Missionen, Explore und Verfeinerungen dieses Projekts; Implement-Pipelines sind nie betroffen. Missionen ohne Projekt folgen **App-Einstellungen → KI-Anbieter → Sub-Agenten in Missionen ohne Projekt erlauben**.
|
|
75
|
+
- **Wählen Sie, wer sie ausführt.** Unter **Sub-Agenten ausführen mit** lässt die Standardoption **Wie der Missions-Agent** das CLI der Mission sie nativ starten: am schnellsten, und sie teilen dessen Prompt-Cache. Wählen Sie stattdessen Anbieter, Modell und Aufwand, um Anbieter zu kombinieren – etwa eine Codex-Mission mit Claude-Sub-Agenten. Missionen, die bereits diesen Anbieter nutzen, bleiben mit diesem Modell nativ; bei einem anderen Anbieter startet Specrails jeden Sub-Agenten selbst, was kälter startet und mehr kosten kann, Ihnen aber mehr Kontrolle gibt und die echten Kosten jedes einzelnen zeigt. Specrails fragt vor dem Wechsel nach einer Bestätigung, und diese Sub-Agenten tragen in der Mission ein Anbieter-Badge.
|
|
76
|
+
- **Bei der Arbeit zusehen.** Die von einer Antwort gestarteten Agenten erscheinen als eine kompakte Zeile unter dieser Antwort. Sie bleibt offen, solange sie arbeiten, und klappt sich zu einer Zusammenfassung mit Gesamtzeit und Tokens zusammen, sobald alle fertig sind. Klappe eine Zeile auf, um Ergebnis und Kosten zu lesen oder die Aktivität live zu verfolgen. Jeder Start bleibt an seiner Stelle im Gespräch, spätere Starts vermischen sich also nie mit früheren. Stoppe einen laufenden Agenten in seiner Zeile oder alle über die Zeile.
|
|
77
|
+
- **Der Agent macht selbst weiter.** Wenn Hintergrund-Agenten fertig sind, setzt der Agent fort und berichtet, was sie gefunden haben – markiert mit *Nach Hintergrund-Agenten fortgesetzt*.
|
|
78
|
+
- **Die Einstellung zu ändern ist sicher.** Eine Mission mit laufenden Agenten übernimmt die Änderung, sobald diese fertig sind; sie sagt es dir und bietet **Agenten stoppen und jetzt übernehmen** an.
|
|
79
|
+
- **Nichts startet heimlich neu.** Durch einen Neustart unterbrochene Agenten bleiben als unterbrochen markiert; **Neu starten** entwirft nur eine Nachricht, die den Agenten bittet, diese Arbeit erneut zu erledigen.
|
|
80
|
+
|
|
70
81
|
## Ein paar Dinge, die du wissen solltest
|
|
71
82
|
|
|
72
83
|
- **Ausführen und Autonom kosten Geld**, weil sie KI laufen lassen. Der Agent hebt kostenverursachende Aktionen hervor, bevor er sie ausführt; belasse die Stufe bei Beobachten oder Bearbeiten, wenn du nur schauen und aufräumen willst.
|
|
@@ -66,6 +66,17 @@ Replies stream in smoothly and land formatted (headings, tables, lists), each wi
|
|
|
66
66
|
- **No git, no PR phase.** A project without a git repository (or without commits) still gets a run card — progress, log, failure and recovery — but there is no branch and no PR step; the card says so.
|
|
67
67
|
- **`@rail-N`.** Type `@` and pick a rail to reference it in your message, with its specs and whether it is free, busy or awaiting a decision.
|
|
68
68
|
|
|
69
|
+
## Sub-agents
|
|
70
|
+
|
|
71
|
+
Some providers can hand parts of a task to **sub-agents** — helpers that work in parallel and keep going after the agent replies. Sub-agents are **off by default**: they multiply what one request costs.
|
|
72
|
+
|
|
73
|
+
- **Turn them on per project.** Open the project's **Settings → Sub-agents** and switch on **Allow sub-agents in this project**. It covers that project's missions, explore and refinements; Implement pipelines are never affected. Missions without a project follow **App settings → AI providers → Allow sub-agents in missions without a project**.
|
|
74
|
+
- **Choose who runs them.** Under **Run sub-agents with**, the default **Same as the mission agent** lets the mission's own CLI launch them natively: fastest, and they share its prompt cache. Pick a provider, model and effort instead to mix providers — for example a Codex mission with Claude sub-agents. Missions already on that provider stay native with that model; on another provider Specrails launches each sub-agent itself, which starts colder and can cost more, but gives you more control and shows each one's real cost. Specrails asks you to confirm before switching, and those sub-agents carry a provider badge in the mission.
|
|
75
|
+
- **Watch them work.** The agents a reply launched appear as one compact line under that reply. It stays open while they work, and once they all finish it folds into a summary with the total time and tokens. Expand a row to read its result and what it cost, or to follow its activity live. Each launch stays at its point in the conversation, so later launches never mix with earlier ones. Stop a running agent from its row, or stop them all from the line.
|
|
76
|
+
- **The agent follows up on its own.** When background agents finish, the agent continues and posts what they found, marked *Continued after background agents*.
|
|
77
|
+
- **Changing the setting is safe.** A mission with agents still running applies the change once they finish; it tells you so and offers **Stop agents and apply now**.
|
|
78
|
+
- **Nothing restarts behind your back.** Agents interrupted by a restart stay marked as interrupted; **Relaunch** only drafts a message asking the agent to redo that work.
|
|
79
|
+
|
|
69
80
|
## A few things to know
|
|
70
81
|
|
|
71
82
|
- **Operate and Autonomous cost money** because they run AI. The agent surfaces cost-incurring actions before doing them; keep the level at Observe or Edit if you just want to look and tidy.
|
|
@@ -67,6 +67,17 @@ Las respuestas llegan fluidas y ya formateadas (encabezados, tablas, listas), ca
|
|
|
67
67
|
- **Sin git no hay fase de PR.** Un proyecto sin repositorio git (o sin commits) también tiene card de ejecución — progreso, log, fallo y recuperación — pero no hay rama ni paso de PR; la card lo indica.
|
|
68
68
|
- **`@rail-N`.** Escribe `@` y elige un rail para referenciarlo en tu mensaje, con sus specs y si está libre, ocupado o pendiente de decisión.
|
|
69
69
|
|
|
70
|
+
## Sub-agentes
|
|
71
|
+
|
|
72
|
+
Algunos proveedores pueden repartir partes de una tarea entre **sub-agentes**: ayudantes que trabajan en paralelo y siguen después de que el agente responda. Los sub-agentes vienen **desactivados por defecto** porque multiplican lo que cuesta una petición.
|
|
73
|
+
|
|
74
|
+
- **Actívalos por proyecto.** Abre **Configuración → Sub-agentes** del proyecto y activa **Permitir sub-agentes en este proyecto**. Cubre las misiones, la exploración y los refinamientos de ese proyecto; los pipelines de Implement nunca se ven afectados. Las misiones sin proyecto siguen **Ajustes de la app → Proveedores de IA → Permitir sub-agentes en misiones sin proyecto**.
|
|
75
|
+
- **Elige quién los ejecuta.** En **Ejecutar sub-agentes con**, la opción por defecto **Igual que el agente de la misión** deja que el propio CLI de la misión los lance de forma nativa: es lo más rápido y comparten su caché de prompt. Elige en su lugar un proveedor, modelo y esfuerzo para combinar proveedores — por ejemplo, una misión en Codex con sub-agentes en Claude. Las misiones que ya usan ese proveedor siguen siendo nativas con ese modelo; con otro proveedor, Specrails lanza cada sub-agente por su cuenta, que arranca en frío y puede costar más, pero te da más control y muestra el coste real de cada uno. Specrails te pide confirmación antes del cambio, y esos sub-agentes llevan una etiqueta con su proveedor en la misión.
|
|
76
|
+
- **Míralos trabajar.** Los agentes que lanza una respuesta aparecen como una línea compacta bajo esa respuesta. Se mantiene abierta mientras trabajan y, cuando terminan todos, se pliega en un resumen con el tiempo y los tokens totales. Despliega una fila para leer su resultado y lo que costó, o para seguir su actividad en directo. Cada lanzamiento se queda en su punto de la conversación, así que los siguientes nunca se mezclan con los anteriores. Detén un agente en marcha desde su fila, o todos desde la línea.
|
|
77
|
+
- **El agente retoma solo.** Cuando terminan los agentes en segundo plano, el agente continúa y publica lo que encontraron, marcado como *Continuó tras los agentes en segundo plano*.
|
|
78
|
+
- **Cambiar el ajuste es seguro.** Una misión con agentes en marcha aplica el cambio cuando terminan; te lo indica y ofrece **Detener agentes y aplicar ya**.
|
|
79
|
+
- **Nada se relanza a tus espaldas.** Los agentes interrumpidos por un reinicio quedan marcados como interrumpidos; **Relanzar** solo redacta un mensaje pidiendo al agente que rehaga ese trabajo.
|
|
80
|
+
|
|
70
81
|
## Algunas cosas que conviene saber
|
|
71
82
|
|
|
72
83
|
- **Opera y Autónomo cuestan dinero** porque ejecutan IA. El agente saca a la luz las acciones que generan coste antes de hacerlas; mantén el nivel en Observa o Edita si solo quieres mirar y ordenar.
|
|
@@ -67,6 +67,17 @@ Les réponses arrivent en flux fluide et s'affichent déjà mises en forme (titr
|
|
|
67
67
|
- **Sans git, pas de phase PR.** Un projet sans dépôt git (ou sans commits) a quand même une carte d'exécution — progression, log, échec et récupération — mais il n'y a ni branche ni étape PR ; la carte le dit.
|
|
68
68
|
- **`@rail-N`.** Tapez `@` et choisissez un rail pour le référencer dans votre message, avec ses specs et son état : libre, occupé ou en attente de décision.
|
|
69
69
|
|
|
70
|
+
## Sous-agents
|
|
71
|
+
|
|
72
|
+
Certains fournisseurs peuvent confier des parties d'une tâche à des **sous-agents** : des assistants qui travaillent en parallèle et continuent après la réponse de l'agent. Les sous-agents sont **désactivés par défaut** car ils multiplient le coût d'une demande.
|
|
73
|
+
|
|
74
|
+
- **Activez-les par projet.** Ouvrez **Réglages → Sous-agents** du projet et activez **Autoriser les sous-agents dans ce projet**. Cela couvre les missions, l'exploration et les affinages du projet ; les pipelines Implement ne sont jamais concernés. Les missions sans projet suivent **Réglages de l'app → Fournisseurs d'IA → Autoriser les sous-agents dans les missions sans projet**.
|
|
75
|
+
- **Choisissez qui les exécute.** Sous **Exécuter les sous-agents avec**, l'option par défaut **Comme l'agent de la mission** laisse le CLI de la mission les lancer nativement : c'est le plus rapide, et ils partagent son cache de prompt. Choisissez plutôt un fournisseur, un modèle et un effort pour mélanger les fournisseurs — par exemple une mission Codex avec des sous-agents Claude. Les missions déjà sur ce fournisseur restent natives avec ce modèle ; sur un autre fournisseur, Specrails lance lui-même chaque sous-agent, qui démarre à froid et peut coûter plus, mais vous donne plus de contrôle et affiche le coût réel de chacun. Specrails demande une confirmation avant le changement, et ces sous-agents portent un badge de fournisseur dans la mission.
|
|
76
|
+
- **Suivez leur travail.** Les agents lancés par une réponse apparaissent sur une ligne compacte sous cette réponse. Elle reste ouverte pendant qu'ils travaillent et se replie en un résumé avec la durée et les jetons totaux une fois qu'ils ont tous fini. Dépliez une ligne pour lire son résultat et son coût, ou suivre son activité en direct. Chaque lancement reste à sa place dans la conversation : les suivants ne se mélangent jamais aux précédents. Arrêtez un agent en cours depuis sa ligne, ou tous depuis la ligne de résumé.
|
|
77
|
+
- **L'agent reprend tout seul.** Quand les agents en arrière-plan ont fini, l'agent continue et publie ce qu'ils ont trouvé, marqué *Suite après les agents en arrière-plan*.
|
|
78
|
+
- **Changer le réglage est sans risque.** Une mission dont des agents tournent applique le changement quand ils ont fini ; elle vous l'indique et propose **Arrêter les agents et appliquer**.
|
|
79
|
+
- **Rien ne redémarre dans votre dos.** Les agents interrompus par un redémarrage restent marqués interrompus ; **Relancer** rédige seulement un message demandant à l'agent de refaire ce travail.
|
|
80
|
+
|
|
70
81
|
## Quelques points à savoir
|
|
71
82
|
|
|
72
83
|
- **Opérer et Autonome coûtent de l'argent** car ils exécutent de l'IA. L'agent met en avant les actions génératrices de coût avant de les réaliser ; gardez le niveau sur Observer ou Modifier si vous voulez juste regarder et ranger.
|
|
@@ -67,6 +67,17 @@ Le risposte arrivano fluide e già formattate (titoli, tabelle, elenchi), ciascu
|
|
|
67
67
|
- **Senza git niente fase PR.** Un progetto senza repository git (o senza commit) ha comunque una card di esecuzione — progresso, log, fallimento e recupero — ma non c'è branch né passaggio PR; la card lo dice.
|
|
68
68
|
- **`@rail-N`.** Digita `@` e scegli un rail per citarlo nel messaggio, con le sue spec e se è libero, occupato o in attesa di decisione.
|
|
69
69
|
|
|
70
|
+
## Sotto-agenti
|
|
71
|
+
|
|
72
|
+
Alcuni provider possono affidare parti di un compito a **sotto-agenti**: aiutanti che lavorano in parallelo e proseguono dopo la risposta dell'agente. I sotto-agenti sono **disattivati per impostazione predefinita** perché moltiplicano il costo di una richiesta.
|
|
73
|
+
|
|
74
|
+
- **Attivali per progetto.** Apri **Impostazioni → Sotto-agenti** del progetto e attiva **Consenti sotto-agenti in questo progetto**. Vale per missioni, esplorazione e rifiniture del progetto; le pipeline Implement non sono mai interessate. Le missioni senza progetto seguono **Impostazioni dell'app → Provider di IA → Consenti sotto-agenti nelle missioni senza progetto**.
|
|
75
|
+
- **Scegli chi li esegue.** In **Esegui i sotto-agenti con**, l'opzione predefinita **Come l'agente della missione** lascia che il CLI della missione li avvii nativamente: è la più veloce e condividono la sua cache del prompt. Scegli invece provider, modello ed effort per combinare provider — ad esempio una missione Codex con sotto-agenti Claude. Le missioni che usano già quel provider restano native con quel modello; con un altro provider Specrails avvia da sé ogni sotto-agente, che parte a freddo e può costare di più, ma ti dà più controllo e mostra il costo reale di ciascuno. Specrails chiede conferma prima del cambio, e quei sotto-agenti mostrano un badge del provider nella missione.
|
|
76
|
+
- **Guardali lavorare.** Gli agenti avviati da una risposta compaiono come una riga compatta sotto quella risposta. Resta aperta mentre lavorano e, quando finiscono tutti, si chiude in un riepilogo con tempo e token totali. Espandi una riga per leggerne il risultato e il costo, o seguirne l'attività dal vivo. Ogni avvio resta al suo punto della conversazione, quindi i successivi non si mescolano mai ai precedenti. Ferma un agente in corso dalla sua riga, o tutti dalla riga di riepilogo.
|
|
77
|
+
- **L'agente riprende da solo.** Quando gli agenti in background finiscono, l'agente prosegue e pubblica ciò che hanno trovato, con l'etichetta *Proseguito dopo gli agenti in background*.
|
|
78
|
+
- **Cambiare l'impostazione è sicuro.** Una missione con agenti attivi applica la modifica quando finiscono; te lo segnala e offre **Ferma gli agenti e applica ora**.
|
|
79
|
+
- **Niente si riavvia di nascosto.** Gli agenti interrotti da un riavvio restano segnati come interrotti; **Rilancia** si limita a preparare un messaggio che chiede all'agente di rifare quel lavoro.
|
|
80
|
+
|
|
70
81
|
## Alcune cose da sapere
|
|
71
82
|
|
|
72
83
|
- **Opera e Autonomo costano denaro** perché eseguono IA. L'agente mette in evidenza le azioni che generano costi prima di eseguirle; tieni il livello su Osserva o Modifica se vuoi solo guardare e mettere in ordine.
|
|
@@ -67,6 +67,17 @@ Agent Chat は組み込みの **Specrails MCP サーバー**を通じてアプ
|
|
|
67
67
|
- **git がなければ PR フェーズもない。** git リポジトリ(またはコミット)のないプロジェクトにも実行カードはあります——進捗、ログ、失敗と復旧——ただしブランチも PR ステップもありません。カードにそう書かれます。
|
|
68
68
|
- **`@rail-N`。** `@` を入力して rail を選ぶと、その spec と状態(空き・使用中・決定待ち)付きでメッセージから参照できます。
|
|
69
69
|
|
|
70
|
+
## サブエージェント
|
|
71
|
+
|
|
72
|
+
一部のプロバイダーは、タスクの一部を**サブエージェント**に任せられます。サブエージェントは並行して動き、エージェントが返信した後も作業を続けるヘルパーです。1 回の依頼のコストが大きく増えるため、サブエージェントは**既定でオフ**です。
|
|
73
|
+
|
|
74
|
+
- **プロジェクトごとにオンにする。** プロジェクトの**設定 → サブエージェント**を開き、**このプロジェクトでサブエージェントを許可**をオンにします。そのプロジェクトのミッション、探索、リファインに適用され、Implement パイプラインには一切影響しません。プロジェクトのないミッションは**アプリ設定 → AI プロバイダー → プロジェクトのないミッションでサブエージェントを許可**に従います。
|
|
75
|
+
- **実行するプロバイダーを選ぶ。** **サブエージェントの実行環境** の既定値 **ミッションのエージェントと同じ** では、ミッション自身の CLI がネイティブに起動します。最も速く、プロンプトキャッシュも共有されます。代わりにプロバイダー・モデル・エフォートを選ぶと、たとえば Codex のミッションで Claude のサブエージェントを使うなど、プロバイダーを組み合わせられます。すでにそのプロバイダーを使うミッションはそのモデルでネイティブのまま、別のプロバイダーでは Specrails が各サブエージェントを自ら起動します。コールドスタートでコストが増えることがありますが、より細かく制御でき、それぞれの実コストも表示されます。切り替え前に確認が表示され、これらのサブエージェントにはミッション内でプロバイダーのバッジが付きます。
|
|
76
|
+
- **作業を見守る。** 返信が起動したエージェントは、その返信の下に 1 行のコンパクトな表示で現れます。作業中は開いたままで、すべて完了すると合計時間とトークンをまとめた 1 行に折りたたまれます。行を展開すると、結果とコストを読んだり、アクティビティをライブで追ったりできます。各起動は会話のその位置に残るため、後の起動が前のものと混ざることはありません。実行中のエージェントは行から停止でき、まとめての停止は要約行から行えます。
|
|
77
|
+
- **エージェントは自分で続ける。** バックグラウンドのエージェントが終わると、エージェントは作業を続けて結果を投稿します。その投稿には「バックグラウンドエージェントの後に続行」と表示されます。
|
|
78
|
+
- **設定の変更は安全。** エージェントが動作中のミッションは、それらの完了後に変更を適用します。その旨が表示され、**エージェントを停止して今すぐ適用**も選べます。
|
|
79
|
+
- **勝手に再起動しない。** 再起動で中断されたエージェントは中断済みとして残ります。**再起動**は、その作業のやり直しをエージェントに頼むメッセージを下書きするだけです。
|
|
80
|
+
|
|
70
81
|
## 知っておくとよいこと
|
|
71
82
|
|
|
72
83
|
- **操作と自律は料金が発生します**。AI を実行するからです。エージェントは料金の発生する操作を実行する前に前面に示します。眺めて整理したいだけなら、レベルは観察か編集にしておいてください。
|
|
@@ -67,6 +67,17 @@ As respostas chegam de forma fluida e já formatadas (títulos, tabelas, listas)
|
|
|
67
67
|
- **Sem git, sem fase de PR.** Um projeto sem repositório git (ou sem commits) também recebe um card de execução — progresso, log, falha e recuperação — mas não há branch nem etapa de PR; o card avisa.
|
|
68
68
|
- **`@rail-N`.** Digite `@` e escolha um rail para referenciá-lo na mensagem, com suas specs e se está livre, ocupado ou aguardando decisão.
|
|
69
69
|
|
|
70
|
+
## Subagentes
|
|
71
|
+
|
|
72
|
+
Alguns provedores podem distribuir partes de uma tarefa para **subagentes**: ajudantes que trabalham em paralelo e continuam depois que o agente responde. Os subagentes vêm **desativados por padrão** porque multiplicam o custo de um pedido.
|
|
73
|
+
|
|
74
|
+
- **Ative por projeto.** Abra **Configurações → Subagentes** do projeto e ative **Permitir subagentes neste projeto**. Vale para missões, exploração e refinamentos do projeto; os pipelines de Implement nunca são afetados. Missões sem projeto seguem **Configurações do app → Provedores de IA → Permitir subagentes em missões sem projeto**.
|
|
75
|
+
- **Escolha quem os executa.** Em **Executar sub-agentes com**, a opção padrão **Igual ao agente da missão** deixa o próprio CLI da missão iniciá-los nativamente: é o mais rápido, e eles compartilham o cache de prompt. Escolha um provedor, modelo e esforço para combinar provedores — por exemplo, uma missão em Codex com subagentes em Claude. Missões que já usam esse provedor continuam nativas com esse modelo; com outro provedor, o Specrails inicia cada subagente por conta própria, que começa a frio e pode custar mais, mas dá mais controle e mostra o custo real de cada um. O Specrails pede confirmação antes da troca, e esses subagentes exibem um selo do provedor na missão.
|
|
76
|
+
- **Acompanhe o trabalho.** Os agentes iniciados por uma resposta aparecem como uma linha compacta abaixo dela. Ela fica aberta enquanto trabalham e, quando todos terminam, se recolhe num resumo com o tempo e os tokens totais. Expanda uma linha para ler o resultado e o custo, ou acompanhar a atividade ao vivo. Cada lançamento fica no seu ponto da conversa, então os seguintes nunca se misturam com os anteriores. Pare um agente em execução pela linha dele, ou todos pela linha de resumo.
|
|
77
|
+
- **O agente continua sozinho.** Quando os agentes em segundo plano terminam, o agente continua e publica o que encontraram, marcado como *Continuou após os agentes em segundo plano*.
|
|
78
|
+
- **Mudar a configuração é seguro.** Uma missão com agentes em execução aplica a mudança quando eles terminam; ela avisa e oferece **Parar agentes e aplicar agora**.
|
|
79
|
+
- **Nada reinicia escondido.** Agentes interrompidos por um reinício ficam marcados como interrompidos; **Relançar** só rascunha uma mensagem pedindo ao agente que refaça esse trabalho.
|
|
80
|
+
|
|
70
81
|
## Algumas coisas para saber
|
|
71
82
|
|
|
72
83
|
- **Opera e Autônomo custam dinheiro** porque executam IA. O agente destaca as ações que geram custo antes de fazê-las; mantenha o nível em Observa ou Edita se você só quer olhar e organizar.
|
|
@@ -67,6 +67,17 @@ Agent Chat 通过内嵌的 **Specrails MCP 服务器**来驱动应用,因此
|
|
|
67
67
|
- **没有 git 就没有 PR 阶段。** 没有 git 仓库(或没有提交)的项目同样有运行卡片——进度、日志、失败与恢复——但没有分支也没有 PR 步骤;卡片会明确说明。
|
|
68
68
|
- **`@rail-N`。** 输入 `@` 并选择一条 rail 即可在消息中引用它,附带其 spec 以及空闲、忙碌或待决定的状态。
|
|
69
69
|
|
|
70
|
+
## 子代理
|
|
71
|
+
|
|
72
|
+
部分提供商可以把任务的一部分交给**子代理**——它们并行工作,并在代理回复后继续运行。由于子代理会让单次请求的成本成倍增加,它们**默认关闭**。
|
|
73
|
+
|
|
74
|
+
- **按项目开启。** 打开项目的**设置 → 子代理**,开启**在此项目中允许子代理**。它适用于该项目的任务、探索和细化;Implement 流水线永远不受影响。无项目的任务遵循**应用设置 → AI 提供商 → 在无项目的任务中允许子代理**。
|
|
75
|
+
- **选择由谁运行。** 在 **子代理运行方式** 中,默认的 **与任务代理相同** 会让任务自身的 CLI 原生启动它们:速度最快,并共享其提示缓存。也可以改选提供方、模型和推理强度来混用提供方——例如 Codex 任务搭配 Claude 子代理。已使用该提供方的任务保持原生并使用该模型;使用其他提供方时,Specrails 会自行启动每个子代理,冷启动可能更慢、更贵,但你能获得更多控制,并看到每个子代理的真实成本。切换前 Specrails 会请你确认,这些子代理在任务中会显示提供方标记。
|
|
76
|
+
- **查看它们的工作。** 某条回复启动的代理会以一行紧凑的形式显示在该回复下方。它们工作时保持展开,全部完成后会折叠成一行摘要,显示总时长和 token。展开某一行可查看其结果和花费,或实时跟踪其活动。每次启动都会停留在对话中对应的位置,之后的启动不会与之前的混在一起。可在行内停止正在运行的代理,或在摘要行中全部停止。
|
|
77
|
+
- **代理会自行跟进。** 后台代理完成后,代理会继续工作并发布它们的发现,标注为*在后台代理完成后继续*。
|
|
78
|
+
- **更改设置是安全的。** 仍有代理在运行的任务会在它们完成后应用更改;任务会提示这一点,并提供**停止代理并立即应用**。
|
|
79
|
+
- **不会在背后重新启动。** 因重启而中断的代理会保持“已中断”状态;**重新启动**只会起草一条消息,请代理重做该工作。
|
|
80
|
+
|
|
70
81
|
## 一些需要知道的事
|
|
71
82
|
|
|
72
83
|
- **操作和自主会产生费用**,因为它们运行 AI。智能体会在执行会产生费用的操作前把它们摆到明面上;如果你只想查看和整理,就把级别保持在观察或编辑。
|
package/docs/internals/README.md
CHANGED
|
@@ -17,6 +17,7 @@ Start with [the modular architecture decision](modular-architecture.md),
|
|
|
17
17
|
| [configuration.md](configuration.md) | Settings, env vars, kill switches, advanced flags |
|
|
18
18
|
| [operations-runbook.md](operations-runbook.md) | Start/stop, port conflicts, recovery procedures, backups |
|
|
19
19
|
| [core-runtime-updates.md](core-runtime-updates.md) | Core runtime discovery, durable package updates, version reporting and recovery after partial workspace refresh |
|
|
20
|
+
| [agent-sessions.md](agent-sessions.md) | Core resident agent sessions in Desktop: host per scope, runner seam, projection, rebuild, sub-agent UI and rollout flag |
|
|
20
21
|
| [programmatic-agent-runtime.md](programmatic-agent-runtime.md) | Paired Core build, per-role providers/local models, project settings, saved execution recovery and delivery boundaries |
|
|
21
22
|
| [programmatic-agent-runtime-validation.md](programmatic-agent-runtime-validation.md) | Paired implementation test results, packaging evidence and release limitations |
|
|
22
23
|
| [openspec-workflow.md](openspec-workflow.md) | `opsx:*` change lifecycle — used by the app itself for structured change management |
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Core agent sessions in Desktop
|
|
2
|
+
|
|
3
|
+
Specrails Core runs conversational agent work as **resident sessions**: one
|
|
4
|
+
provider process per conversation that survives between turns, owns its
|
|
5
|
+
sub-agents and records everything in a durable journal. Desktop hosts that
|
|
6
|
+
runtime, projects its events into its own tables and renders them. This page is
|
|
7
|
+
the map for that split. The OpenSpec change
|
|
8
|
+
[`core-agent-sessions-host`](../../openspec/changes/core-agent-sessions-host/design.md)
|
|
9
|
+
holds the decisions; Core's side is documented in Core's `docs/agent-sessions/`.
|
|
10
|
+
|
|
11
|
+
## Who owns what
|
|
12
|
+
|
|
13
|
+
| Concern | Owner |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| Provider processes, provider frames, sub-agent lifecycle, steering, interrupt | Core drivers (Claude stream-json, Codex app-server) |
|
|
16
|
+
| Usage normalisation (per-turn deltas, billed vs estimated cost) | Core |
|
|
17
|
+
| Durable journal `~/.specrails/sessions/<scope>/sessions.sqlite` | Core (single writer per scope) |
|
|
18
|
+
| Host supervision (one host per scope), protocol client, generic projection | Desktop [`server/modules/agent-sessions`](../../server/modules/agent-sessions/README.md) |
|
|
19
|
+
| Surface tables, accounting rows, WebSocket events, UI | Desktop surfaces (missions today) |
|
|
20
|
+
| Queue, receipts, MCP capability, tiers, titles, PR/rail cards | Desktop product rules (unchanged) |
|
|
21
|
+
|
|
22
|
+
Desktop never interprets provider frames and never branches on provider ids:
|
|
23
|
+
it relies on the driver capabilities Core declares in `initialize`.
|
|
24
|
+
|
|
25
|
+
## Scopes and hosts
|
|
26
|
+
|
|
27
|
+
A scope is a project slug, or `global` for missions without a pinned project.
|
|
28
|
+
Desktop starts `specrails-core runtime host --stdio --scope <scope>` lazily on
|
|
29
|
+
the first session of that scope ([`CoreHostLauncher`](../../server/modules/agent-sessions/adapters/host-process.ts))
|
|
30
|
+
and supervises it in the [`SessionHostRegistry`](../../server/modules/agent-sessions/runtime/session-host-registry.ts):
|
|
31
|
+
|
|
32
|
+
- pings with a timeout; unexpected exits restart with capped backoff;
|
|
33
|
+
- after a restart, tracked sessions are resumed and replayed from their cursors;
|
|
34
|
+
- repeated failures mark the scope `degraded`: new turns use the legacy
|
|
35
|
+
transport and the mission shows a notice with Retry;
|
|
36
|
+
- causes a restart cannot fix degrade at once: another host owns the journal
|
|
37
|
+
(`journal_locked`), the protocol does not match, or Core lacks the host;
|
|
38
|
+
- removing a project stops its host; app shutdown sends `host.shutdown`, then
|
|
39
|
+
tree-kills.
|
|
40
|
+
|
|
41
|
+
## Turns: the runner seam
|
|
42
|
+
|
|
43
|
+
Missions run turns through `nativeLiveSessionRunner(adapter) ?? runAiCliInvocation`.
|
|
44
|
+
[`createCoreSessionRunner`](../../server/modules/missions/runtime/core-session-runner.ts)
|
|
45
|
+
is a third implementation of that contract. [`MissionCoreSessions.prepareTurn`](../../server/modules/missions/runtime/mission-core-sessions.ts)
|
|
46
|
+
selects it when the scope is available and Core lists a driver for the
|
|
47
|
+
conversation's provider. The runner opens or resumes the session, sends the
|
|
48
|
+
prompt as one input, maps user-turn events to `AdapterEvent`s, delivers steer
|
|
49
|
+
through `session.send`, and returns Core's normalised usage. Stop goes through a
|
|
50
|
+
`TurnHandle` (`session.interrupt`); deleting a mission calls `session.close`.
|
|
51
|
+
|
|
52
|
+
MCP: each turn mints a capability and rewrites the conversation's capability
|
|
53
|
+
file; the bridge re-reads it per request, so a resident provider always presents
|
|
54
|
+
the current turn's capability. The capability outlives the turn while
|
|
55
|
+
background work may still call Specrails tools, until the next turn rotates it
|
|
56
|
+
or Core retires the process. Structured MCP specs include the Specrails bridge,
|
|
57
|
+
external servers and app-installed plugin servers.
|
|
58
|
+
|
|
59
|
+
## Projection
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Core journal ──session.event──▶ SessionEventPump ──ProjectionOp[]──▶ ProjectionSink (surface)
|
|
63
|
+
(seq, dedupe, (domain/projection.ts, one transaction:
|
|
64
|
+
gap fill) pure reducer) rows + cursor, then WS
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- [`SessionEventPump`](../../server/modules/agent-sessions/application/session-event-pump.ts)
|
|
68
|
+
applies each `(sessionId, seq)` once and in order; gaps and `session.lagged`
|
|
69
|
+
are filled from `session.events`. On attach it rebuilds in-memory state up to
|
|
70
|
+
the sink cursor without re-applying.
|
|
71
|
+
- [`MissionSessionProjector`](../../server/modules/missions/runtime/mission-session-projector.ts)
|
|
72
|
+
is the missions sink. It persists what happens outside user turns: sub-agents
|
|
73
|
+
(`agent_subagents`) and their output (`agent_subagent_events`), resident phase
|
|
74
|
+
and cursor (`agent_session_cursors`), and continuation turns as messages with
|
|
75
|
+
`turn_origin` `subagent`/`system` plus invocations with `origin`. User turns
|
|
76
|
+
are settled by the mission manager.
|
|
77
|
+
- Continuation turns get a deterministic invocation id, so replay never records
|
|
78
|
+
a turn twice. `POST /api/agent/conversations/:id/session/rebuild` resets the
|
|
79
|
+
derived rows and replays the journal silently (see the
|
|
80
|
+
[API reference](api-reference.md)).
|
|
81
|
+
|
|
82
|
+
## Sub-agent policy
|
|
83
|
+
|
|
84
|
+
[`resolveSubagentPolicy`](../../server/modules/agent-sessions/domain/subagent-policy.ts)
|
|
85
|
+
maps `(surface, project setting, app setting)` to `policy.subagents`. A
|
|
86
|
+
conversation with a project follows the project's "Allow sub-agents" setting.
|
|
87
|
+
A conversation without a project follows the app setting. Both default to off.
|
|
88
|
+
Implement pipelines are not a surface, so they never resolve a policy. The
|
|
89
|
+
composition root wires the resolver into `MissionCoreSessions`. Settings
|
|
90
|
+
routes call `ProjectRegistry.notifySettingsChanged`, and
|
|
91
|
+
`MissionCoreSessions.refreshSubagentPolicy` then sends the complete policy to
|
|
92
|
+
each open session of that scope. Core's `session.update` replaces the policy as
|
|
93
|
+
a whole and ignores unchanged configurations, so the resident process is not
|
|
94
|
+
restarted for nothing. A session with running sub-agents reports the change as
|
|
95
|
+
deferred, and the mission offers "Stop agents and apply now". If Core rejects
|
|
96
|
+
a policy with `policy_unenforceable`, the mission shows a localized error that
|
|
97
|
+
names the provider and the setting.
|
|
98
|
+
|
|
99
|
+
## Sub-agent runtime (who launches them)
|
|
100
|
+
|
|
101
|
+
The hybrid runtime decides who launches sub-agents once the policy allows them.
|
|
102
|
+
[`resolveSubagentRuntime`](../../server/modules/agent-sessions/domain/subagent-policy.ts)
|
|
103
|
+
maps the "Run sub-agents with" choice (project setting `subagentRuntime`, or the
|
|
104
|
+
app setting for missions without a project), the mission's provider and the
|
|
105
|
+
Core capabilities to `policy.subagentRuntime`:
|
|
106
|
+
|
|
107
|
+
| Choice | Mission provider | Runtime sent to Core |
|
|
108
|
+
| --- | --- | --- |
|
|
109
|
+
| `null` (same as the mission agent) | any | `{ mode: 'native' }` |
|
|
110
|
+
| provider P, model M, effort E | P | `{ mode: 'native', model?, effort? }`. Only overrides the driver declares through `capabilities.subagentModel` / `subagentEffort` are sent (Claude: model only, Codex: both) |
|
|
111
|
+
| provider P, model M, effort E | not P | `{ mode: 'delegated', driver: P, model: M, effort? }` |
|
|
112
|
+
|
|
113
|
+
When Core lacks `capabilities.delegation`, or P is not one of its drivers, the
|
|
114
|
+
mission stays native and receives an `agent_session_notice` with code
|
|
115
|
+
`subagents.delegation_unsupported` or `subagents.driver_unavailable` and the
|
|
116
|
+
`provider`. A setting change refreshes open sessions like the policy does.
|
|
117
|
+
|
|
118
|
+
In a delegated session Core disables the provider's own sub-agent tool and the
|
|
119
|
+
mission agent launches sub-agents through the Specrails MCP: `specrails_mission`
|
|
120
|
+
actions `subagent_start`, `subagent_wait`, `subagent_list` and `subagent_stop`
|
|
121
|
+
call `AgentChatManager.delegateSubagent` / `waitSubagents` / `stopSubagents`,
|
|
122
|
+
which map to Core's `session.delegate`, `session.waitSubagents` and
|
|
123
|
+
`session.stopSubagents`. `MissionCoreSessions` adds a short system prompt
|
|
124
|
+
addendum that tells the agent how to delegate. Each delegated sub-agent is a
|
|
125
|
+
Core child session (its own process, no shared prompt cache), mirrored into the
|
|
126
|
+
mission's tree with `delegated: { driver, model }`; results nobody waited for
|
|
127
|
+
arrive as a system continuation turn. Its usage is billed separately
|
|
128
|
+
(`subagent.usage` with `billing: 'separate'`): the projector records it as its
|
|
129
|
+
own invocation (`core-subagent:<conversation>:<subagent>:<seq>`, origin
|
|
130
|
+
`subagent`, the child's provider) on top of the parent's cost. Migration 34
|
|
131
|
+
adds `delegated_driver` / `delegated_model` to `agent_subagents`.
|
|
132
|
+
|
|
133
|
+
## UI
|
|
134
|
+
|
|
135
|
+
The client keeps session state in [`MissionSessionsContext`](../../client/src/features/missions/context/MissionSessionsContext.tsx)
|
|
136
|
+
over a pure reducer ([`mission-sessions.ts`](../../client/src/features/missions/lib/mission-sessions.ts)).
|
|
137
|
+
Each launch renders as a compact line under the message whose `core_turn_id`
|
|
138
|
+
started it. `agent_done` carries `coreTurnId`, so the anchor exists without a
|
|
139
|
+
reload. A launch whose reply has no text sits after the message that preceded
|
|
140
|
+
it. The line is expanded while agents work and folds once they finish. The
|
|
141
|
+
sidebar keeps a live dot for missions with background work. Details are in the
|
|
142
|
+
[missions feature guide](../../client/src/features/missions/README.md).
|
|
143
|
+
|
|
144
|
+
## Rollout
|
|
145
|
+
|
|
146
|
+
`SPECRAILS_CORE_SESSIONS` (`auto` by default, `on` or `off`, see
|
|
147
|
+
[configuration](configuration.md)) gates the Core path. It only takes effect
|
|
148
|
+
when the selected Core advertises `sessions` and its session contract matches
|
|
149
|
+
([`core-compat.ts`](../../server/core-compat.ts)). Otherwise, missions keep
|
|
150
|
+
their legacy transports.
|
|
151
|
+
|
|
152
|
+
## Verify
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npx vitest run server/modules/agent-sessions server/modules/missions
|
|
156
|
+
npm run test --prefix client -- src/features/missions
|
|
157
|
+
```
|
|
@@ -93,8 +93,8 @@ Example — register a project that uses both Claude and Gemini:
|
|
|
93
93
|
|
|
94
94
|
| Method | Path | Notes |
|
|
95
95
|
|--------|------|-------|
|
|
96
|
-
| `GET` | `/settings` | App-wide settings |
|
|
97
|
-
| `PUT` | `/settings` | Update any subset of `{ port?, specrailsTechUrl?, costAlertThresholdUsd? }` |
|
|
96
|
+
| `GET` | `/settings` | App-wide settings, including `allowSubagents` (default `false`) and `subagentRuntime` (default `null`) |
|
|
97
|
+
| `PUT` | `/settings` | Update any subset of `{ port?, specrailsTechUrl?, costAlertThresholdUsd?, allowSubagents?, subagentRuntime? }`. `subagentRuntime` is `null` (same as the mission agent) or `{ provider, model, effort: string \| null }` for missions without a project; an invalid value returns `400`. `allowSubagents` is the app-wide "Allow sub-agents" setting for missions without a project. It must be a boolean (otherwise `400` and nothing is written), and a change refreshes the policy of open sessions |
|
|
98
98
|
| `GET` | `/budget` | App-wide budget config |
|
|
99
99
|
| `PATCH` | `/budget` | Update the app-wide daily budget |
|
|
100
100
|
| `GET` | `/theme` | Current UI theme (defaults to `specrails`) |
|
|
@@ -149,6 +149,35 @@ Proxies the external specrails-tech agents service (base URL from `desktop_setti
|
|
|
149
149
|
| `POST` | `/agents` | Create an agent entry |
|
|
150
150
|
| `PATCH` | `/agents/:id` | Update |
|
|
151
151
|
|
|
152
|
+
### Missions: Core agent session sub-agents (`/api/agent/*`)
|
|
153
|
+
|
|
154
|
+
These routes are available when a mission ran in a Core agent session (`SPECRAILS_CORE_SESSIONS`, see [agent sessions](../../server/modules/agent-sessions/README.md)). Rows are Desktop's rebuildable projection of Core's session journal.
|
|
155
|
+
|
|
156
|
+
| Method | Path | Notes |
|
|
157
|
+
|--------|------|-------|
|
|
158
|
+
| `GET` | `/agent/active-turns` | Reconnect snapshot. Besides `turns`, the response includes `sessions[]`: `{ conversationId, residentPhase, processAlive, liveSubagents, subagents }` for missions with background work. |
|
|
159
|
+
| `GET` | `/agent/conversations/:id` | Includes `session`: `{ residentPhase, processAlive, liveSubagents, subagents }`, or `null` when the mission never ran in Core. |
|
|
160
|
+
| `GET` | `/agent/conversations/:id/subagents` | `{ subagents, session }`. Each sub-agent has id, parent, kind, agent type, description, phase (`running`/`idle`/`failed`/`stopped`/`killed`/`interrupted`), reason, restarts, launching Core turn, timestamps, usage, tool uses, duration and result summary. Sub-agents Specrails launched on another provider carry `delegated: { driver, model }`; their usage is recorded as separate `subagent` invocations. |
|
|
161
|
+
| `GET` | `/agent/conversations/:id/subagents/:subagentId/events?after=&limit=` | Paged sub-agent transcript `{ events: [{ seq, channel, delta?, tool?, createdAt }], hasMore }`. `limit` is 1–1000. |
|
|
162
|
+
| `POST` | `/agent/conversations/:id/subagents/stop` | Body `{ subagentIds? }` (all when omitted). Returns `{ stopped }`; `502` when the session host is unavailable. |
|
|
163
|
+
| `POST` | `/agent/conversations/:id/session/rebuild` | Operator repair: replays the mission's Core journal into its sub-agent rows, events, resident state and cursor. Turns already recorded as messages/invocations are not duplicated; the replay is silent, then clients receive `agent_resident_state` and one `agent_subagent` per row. Returns `{ lastSeq, subagents }`; `409` while a turn runs or when the mission has no Core session; `502` when the host is unavailable. |
|
|
164
|
+
|
|
165
|
+
| `GET` | `/agent/session-hosts` | `{ hosts: [{ scope, status, detail, code }] }`: one entry per Core session host scope (project slug or `global`). `code` explains a degraded scope (`journal_locked`, `protocol_mismatch`, `driver_unavailable`). |
|
|
166
|
+
| `POST` | `/agent/session-hosts/:scope/retry` | Starts a degraded scope again. Returns `{ host }`, or `502` with `{ error, host }` when it is still unavailable. |
|
|
167
|
+
|
|
168
|
+
WebSocket events for these missions:
|
|
169
|
+
|
|
170
|
+
- `agent_resident_state`, `agent_subagent`, `agent_subagent_event`;
|
|
171
|
+
- `agent_turn_started` / `agent_turn_done` for turns Core starts after sub-agents finish (origin `subagent` or `system`);
|
|
172
|
+
- `agent_session_updated` (`applied` / `deferred`) and `agent_session_notice` (`level`, `code`, `message`, optional `scope`). The notice covers provider warnings such as `policy.subagent_blocked`, and a turn that fell back to the legacy transport (`host_degraded`, `journal_locked`);
|
|
173
|
+
- `agent_sessions_host` (app-level, no `projectId`): `{ scope, status, detail, code }` on every host status change.
|
|
174
|
+
|
|
175
|
+
Background turns also stream `agent_stream`, `agent_tool` and `agent_tool_result` with a `turnId`.
|
|
176
|
+
|
|
177
|
+
`agent_session_notice` with code `subagents.delegation_unsupported` or `subagents.driver_unavailable` (and `provider`) says a "Run sub-agents with" choice cannot be honoured, so the mission stays native. In delegated missions the agent uses the `specrails_mission` MCP actions `subagent_start`, `subagent_wait`, `subagent_list` and `subagent_stop`.
|
|
178
|
+
|
|
179
|
+
`agent_error` may carry `code` and `provider` for failures the client explains in the user's language. One example is `policy_unenforceable`, sent when a provider cannot honour "Allow sub-agents: off".
|
|
180
|
+
|
|
152
181
|
### Webhooks
|
|
153
182
|
|
|
154
183
|
| Method | Path | Notes |
|
|
@@ -405,8 +434,8 @@ Gated by `requireBrowserCaptureEnabled` — returns 404 when the feature is disa
|
|
|
405
434
|
|
|
406
435
|
| Method | Path | Notes |
|
|
407
436
|
|--------|------|-------|
|
|
408
|
-
| `GET` | `/settings` | Project settings |
|
|
409
|
-
| `PATCH` | `/settings` | Update |
|
|
437
|
+
| `GET` | `/settings` | Project settings, including `allowSubagents` (default `false`) and `subagentRuntime` (default `null`) |
|
|
438
|
+
| `PATCH` | `/settings` | Update. `allowSubagents` must be a boolean; `subagentRuntime` is `null` or `{ provider, model, effort: string \| null }` (strictly validated). A change to either refreshes the sub-agent policy of the project's open agent sessions |
|
|
410
439
|
| `GET` | `/terminal-settings` | Per-project terminal overrides |
|
|
411
440
|
| `PATCH` | `/terminal-settings` | Update |
|
|
412
441
|
| `GET` | `/agent-models` | Per-agent model overrides |
|
|
@@ -205,6 +205,40 @@ its native key/config, and Kimi via `kimi login` or user-managed
|
|
|
205
205
|
`~/.kimi-code/config.toml`. See [Kimi](../kimi.md), [Codex](../codex.md), and
|
|
206
206
|
[Gemini](../gemini.md).
|
|
207
207
|
|
|
208
|
+
### Core agent sessions (rollout)
|
|
209
|
+
|
|
210
|
+
| Variable | Effect |
|
|
211
|
+
|----------|--------|
|
|
212
|
+
| `SPECRAILS_CORE_SESSIONS` | `auto` (default) uses Core's agent session host (`specrails-core runtime host`) when the selected Core advertises the `sessions` capability and its session contract is compatible. `on` behaves like `auto` but is reported as forced. `off` keeps conversational features on their legacy transports. It cannot enable sessions on a Core that lacks them, and Desktop logs the reason. |
|
|
213
|
+
|
|
214
|
+
With sessions enabled, Desktop runs one Core host per project, plus one for
|
|
215
|
+
project-less missions. Session journals live in
|
|
216
|
+
`~/.specrails/sessions/<project>/sessions.sqlite`, owned by Core. Desktop
|
|
217
|
+
stores only a rebuildable projection. See
|
|
218
|
+
[agent sessions](../../server/modules/agent-sessions/README.md).
|
|
219
|
+
|
|
220
|
+
**Allow sub-agents** is a setting, not a flag, and it is off by default. The
|
|
221
|
+
project setting `allowSubagents` (`config.allow_subagents`) applies to that
|
|
222
|
+
project's conversational agents (missions, explore, refinements). The app
|
|
223
|
+
setting (`agent_allow_subagents` in `desktop_settings`) covers missions without
|
|
224
|
+
a project. Implement pipelines never read it. Desktop sends the resolved value
|
|
225
|
+
to Core as `policy.subagents`. Core enforces it through the provider switch, and
|
|
226
|
+
it also stops any sub-agent a provider starts anyway. A change reaches open
|
|
227
|
+
sessions immediately: idle sessions apply it, and sessions with running
|
|
228
|
+
sub-agents report it as deferred. The setting is read-only over the Specrails
|
|
229
|
+
MCP, so an agent cannot grant itself sub-agents.
|
|
230
|
+
|
|
231
|
+
**Run sub-agents with** chooses who launches them. The project setting
|
|
232
|
+
`subagentRuntime` (`config.subagent_runtime`, JSON) and the app setting
|
|
233
|
+
(`agent_subagent_runtime` in `desktop_settings`) hold `null` (the default: the
|
|
234
|
+
mission agent's own provider launches native sub-agents) or
|
|
235
|
+
`{ provider, model, effort }`. Missions on that provider keep native sub-agents
|
|
236
|
+
with that model and effort; missions on another provider get sub-agents that
|
|
237
|
+
Core launches on the chosen provider (delegated), at the cost of a cold start
|
|
238
|
+
and no shared prompt cache. The UI asks for confirmation before leaving the
|
|
239
|
+
default. The setting is read-only over the Specrails MCP. See
|
|
240
|
+
[agent sessions](agent-sessions.md#sub-agent-runtime-who-launches-them).
|
|
241
|
+
|
|
208
242
|
For the full catalogue of feature flags and kill switches (`SPECRAILS_*` server gates, `VITE_FEATURE_*` client flags, `SPECRAILS_CODEX_BETA`, `SPECRAILS_GEMINI_BETA`, `SPECRAILS_EXPLORE_*`), see [../customizing.md](../customizing.md#environment-variables).
|
|
209
243
|
|
|
210
244
|
---
|
|
@@ -13,15 +13,22 @@ framework is rejected rather than silently replacing an update.
|
|
|
13
13
|
|
|
14
14
|
## Persistence and publication
|
|
15
15
|
|
|
16
|
-
The release bundle pins Core 6.
|
|
16
|
+
The release bundle pins Core 6.5.0 in `desktop-release.yml` and
|
|
17
17
|
`scripts/assemble-bundled-core.lock.json`. Core 6 is the Desktop-only engine: it
|
|
18
18
|
publishes integration contract 5.1 (no standalone `update`) and ships only the
|
|
19
19
|
implement and retry workflows (Batch was folded into implement; Desktop no
|
|
20
20
|
longer requires `batch-implement` but stays compatible with Cores that still ship it). Update both pins together and check compatibility against
|
|
21
21
|
the staged published package; retained runs still use their original runtime.
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
`scripts/assemble-bundled-core.mjs` relocates any pnpm virtual store a
|
|
24
|
+
dependency leaks into its tarball (today `@langchain/langgraph-sdk` ships
|
|
25
|
+
`dist/node_modules/.pnpm/…` and imports it by relative path) to
|
|
26
|
+
`<dir>/_pnpm/<entry>`, rewriting the relative imports that cross it, so the
|
|
27
|
+
module still loads while every staged path stays inside the MSI budget
|
|
28
|
+
(`MAX_STAGED_RELATIVE_PATH`, 120 characters).
|
|
29
|
+
|
|
30
|
+
The paired CI checkout uses the immutable Core 6.5.0 release commit
|
|
31
|
+
`187f9d24533a99fb1f37c7805b3c5b1375040d25`. Bundle smoke checks use Node 22.22.3,
|
|
25
32
|
matching Core's minimum supported Node version and the Desktop release runtime.
|
|
26
33
|
|
|
27
34
|
Desktop updates retain the complete npm installation, including dependencies,
|
|
@@ -140,6 +140,17 @@ If a single provider or feature is breaking the app, you can turn it off with an
|
|
|
140
140
|
|
|
141
141
|
These are the most common ops escape hatches; see [Configuration → Environment variables](configuration.md#environment-variables) for the complete list of gates and flags.
|
|
142
142
|
|
|
143
|
+
### Missions on Core agent sessions
|
|
144
|
+
|
|
145
|
+
With `SPECRAILS_CORE_SESSIONS` at `auto` (the default) or `on`, missions run in a Core host
|
|
146
|
+
process per project scope (`specrails-core runtime host --stdio --scope …`).
|
|
147
|
+
The server log prefix is `[agent-sessions]`.
|
|
148
|
+
|
|
149
|
+
- **Status.** The server logs each scope's transitions: `starting`, `ready`, `restarting`, `degraded`. `GET /api/agent/session-hosts` lists them. A degraded scope sends new mission turns through the legacy transport, and the mission shows why, with a **Retry** button (`POST /api/agent/session-hosts/:scope/retry`). Crashes degrade a scope after repeated failures. Some causes degrade it at once, without restart attempts: another Desktop instance holding the journal (`journal_locked`), an incompatible Core (`protocol_mismatch`), or a Core without the host (`driver_unavailable`). Close the other instance or fix Core, then retry.
|
|
150
|
+
- **Session data.** Core owns the journals in `~/.specrails/sessions/<project>/sessions.sqlite`. Desktop's tables (`agent_session_cursors`, `agent_subagents`, `agent_subagent_events`) are a projection. If they look wrong, rebuild them for one mission with `POST /api/agent/conversations/:id/session/rebuild`. This never duplicates messages or spend.
|
|
151
|
+
- **Turn it off.** `SPECRAILS_CORE_SESSIONS=off` returns every mission to the legacy transports. Missions keep their history; sub-agent cards remain for past turns.
|
|
152
|
+
- **Live check (paid, opt-in).** `SPECRAILS_LIVE_PROVIDER_SMOKE=1 npx vitest run server/modules/missions/runtime/mission-core-sessions.live.test.ts` runs real Claude missions against the local `../specrails-core` build. Add `SPECRAILS_LIVE_PROVIDERS=claude,codex` to include Codex, and `SPECRAILS_LIVE_<PROVIDER>_MODEL` to pick a model the account can use.
|
|
153
|
+
|
|
143
154
|
### Per-project reset (keeps the registration)
|
|
144
155
|
|
|
145
156
|
To clear one project's job history, invocations, and telemetry pointers while keeping it registered, delete just that project's `jobs.sqlite` with the app stopped:
|