specrails-desktop 2.36.0 → 2.42.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -247
- package/client/dist/assets/ActivityFeedPage-DoEMumQS.js +1 -0
- package/client/dist/assets/AgentBrowserCapture-DIh4K0gh.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-mbq4WEoO.js +2 -0
- package/client/dist/assets/AgentModeCodePane-CKh7zuA4.js +2 -0
- package/client/dist/assets/AgentModeJobsPane-BDokPiLJ.js +1 -0
- package/client/dist/assets/AgentsPage-BFVAZbBj.js +87 -0
- package/client/dist/assets/AnalyticsPage-3Y9LuWwz.js +1 -0
- package/client/dist/assets/CodePage-C9KyuV_C.js +3 -0
- package/client/dist/assets/DesktopAnalyticsPage-Bhi54bXQ.js +1 -0
- package/client/dist/assets/{DocsDialog-C76VdBJC.js → DocsDialog-Dj6mt4ga.js} +2 -2
- package/client/dist/assets/{DocsPage-ziMlj6B6.js → DocsPage-24yWglNI.js} +1 -1
- package/client/dist/assets/ExportDropdown-ophapHrT.js +1 -0
- package/client/dist/assets/InteractiveJobComposer-C1ucmxQh.js +19 -0
- package/client/dist/assets/JobDetailModal-DNWmgVHD.js +1 -0
- package/client/dist/assets/JobDetailPage-BcajZyuu.js +1 -0
- package/client/dist/assets/JobsPage-B9nTZw6e.js +1 -0
- package/client/dist/assets/LoopBuilderPage-Oc48iOFW.js +7 -0
- package/client/dist/assets/LoopPreviewModal-ae0Fr6SU.js +1 -0
- package/client/dist/assets/LoopsPage-CUEqzUBI.js +1 -0
- package/client/dist/assets/MinimizedChatsContext-Deg39peL.js +1 -0
- package/client/dist/assets/PluginsPage-C1xtARIx.js +2 -0
- package/client/dist/assets/ProjectSettingsDialog-JZzrXFBN.js +1 -0
- package/client/dist/assets/RepositoryDeliveries-CSDsiVUz.js +5 -0
- package/client/dist/assets/RepositoryScopeSelector-D-RCaknl.js +1 -0
- package/client/dist/assets/ReviewPacketPage-x5EfGTiL.js +1 -0
- package/client/dist/assets/TemplatePreviewModal-BSyuZxGq.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-DqyF0so-.js +14 -0
- package/client/dist/assets/Trans-SnMX4MhW.js +1 -0
- package/client/dist/assets/agent-BdT0SB1D.js +1 -0
- package/client/dist/assets/agent-Bh9K7iEt.js +1 -0
- package/client/dist/assets/agent-C4ibdFk9.js +1 -0
- package/client/dist/assets/agent-CSFY22Zo.js +1 -0
- package/client/dist/assets/agent-DAnqxUn8.js +1 -0
- package/client/dist/assets/agent-DTQiu0Mi.js +1 -0
- package/client/dist/assets/agent-T54WuR_Y.js +1 -0
- package/client/dist/assets/agent-i75WDZOA.js +1 -0
- package/client/dist/assets/browser-05vRDg_y.js +1 -0
- package/client/dist/assets/browser-Bulb-cB1.js +1 -0
- package/client/dist/assets/browser-C7f-Jsg1.js +1 -0
- package/client/dist/assets/browser-CG0PE1j_.js +1 -0
- package/client/dist/assets/browser-CMzaqAjo.js +1 -0
- package/client/dist/assets/browser-DMajYdNX.js +1 -0
- package/client/dist/assets/browser-DxcOHrdP.js +1 -0
- package/client/dist/assets/browser-ObE7xVo3.js +1 -0
- package/client/dist/assets/builder-765NeYTp.js +1 -0
- package/client/dist/assets/builder-8MG3V6ea.js +1 -0
- package/client/dist/assets/builder-B-1UBs5K.js +1 -0
- package/client/dist/assets/builder-BTiGnPT0.js +1 -0
- package/client/dist/assets/builder-Cx9Rz-7u.js +1 -0
- package/client/dist/assets/builder-DKFMELBl.js +1 -0
- package/client/dist/assets/builder-OcmKrC0h.js +1 -0
- package/client/dist/assets/builder-P9qVBXFZ.js +1 -0
- package/client/dist/assets/{button-CJqFnUOL.js → button-DCBqEaZl.js} +1 -1
- package/client/dist/assets/{code-CkUuW4m9.js → code-B37GRg9C.js} +1 -1
- package/client/dist/assets/{code-B0O8-p8k.js → code-BBOEZbf9.js} +1 -1
- package/client/dist/assets/{code-B1VLZDhS.js → code-BRm-jcyx.js} +1 -1
- package/client/dist/assets/{code-Bpj4Ddml.js → code-CF7w62CR.js} +1 -1
- package/client/dist/assets/{code-BykBZ5-e.js → code-CLuvJt2r.js} +1 -1
- package/client/dist/assets/{code-B86IMAfz.js → code-D0RCm59f.js} +1 -1
- package/client/dist/assets/code-DaZ-ZwCT.js +1 -0
- package/client/dist/assets/{code-cAqaqMTx.js → code-iIHkGaCL.js} +1 -1
- package/client/dist/assets/commands-0XjAftla.js +1 -0
- package/client/dist/assets/commands-BAWSYHjQ.js +1 -0
- package/client/dist/assets/commands-BBwowgiE.js +1 -0
- package/client/dist/assets/commands-BacjIZLN.js +1 -0
- package/client/dist/assets/commands-Bs62IAZ3.js +1 -0
- package/client/dist/assets/commands-CLPdh-Hh.js +1 -0
- package/client/dist/assets/commands-DlbFzgrp.js +1 -0
- package/client/dist/assets/commands-LjPSsi5F.js +1 -0
- package/client/dist/assets/common-B5AZNYMH.js +1 -0
- package/client/dist/assets/common-BFZ0c_vN.js +1 -0
- package/client/dist/assets/common-BrlwEnL7.js +1 -0
- package/client/dist/assets/common-BttQx3z4.js +1 -0
- package/client/dist/assets/common-CM65k_-e.js +1 -0
- package/client/dist/assets/common-D4mvFFlu.js +1 -0
- package/client/dist/assets/common-TZ9Ny96S.js +1 -0
- package/client/dist/assets/common-nFpSF4GC.js +1 -0
- package/client/dist/assets/dashboard-B14uYXkG.js +1 -0
- package/client/dist/assets/dashboard-BK_mez-z.js +1 -0
- package/client/dist/assets/dashboard-BfBir_6o.js +1 -0
- package/client/dist/assets/dashboard-Bt0cCzeG.js +1 -0
- package/client/dist/assets/dashboard-BwkjxI6H.js +1 -0
- package/client/dist/assets/{dashboard-C8WOEiPu.js → dashboard-C3bDKf7s.js} +1 -1
- package/client/dist/assets/dashboard-CdvjGfog.js +1 -0
- package/client/dist/assets/dashboard-fRrP0Kv0.js +1 -0
- package/client/dist/assets/dialog-SRw01_QU.js +45 -0
- package/client/dist/assets/dist-js-CJ_2XX1Y.js +1 -0
- package/client/dist/assets/formatDistanceToNow-DSj5DprF.js +1 -0
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-YhD8rIEs.js +1 -0
- package/client/dist/assets/index-DwAmL7m5.css +2 -0
- package/client/dist/assets/index-EzrkUb8B.js +76 -0
- package/client/dist/assets/{jira-api-B1-MUehg.js → jira-api-CSCqGr-Q.js} +1 -1
- package/client/dist/assets/{jobs-CN_zv4Gr.js → jobs-B8rrzfyZ.js} +1 -1
- package/client/dist/assets/{jobs-DUlWSYq2.js → jobs-BS6RTurf.js} +1 -1
- package/client/dist/assets/{jobs-Bpks6doU.js → jobs-BTT0Bsks.js} +1 -1
- package/client/dist/assets/{jobs-Bgq-PZkC.js → jobs-CezU69AE.js} +1 -1
- package/client/dist/assets/{jobs-SwYS2M-B.js → jobs-ClFJae0s.js} +1 -1
- package/client/dist/assets/{jobs-BAls3bWq.js → jobs-DJSFIFVy.js} +1 -1
- package/client/dist/assets/{jobs-DhxKgWFq.js → jobs-DhgGr8vm.js} +1 -1
- package/client/dist/assets/{jobs-B_TeSQxb.js → jobs-DzMjUcaN.js} +1 -1
- package/client/dist/assets/mcp-6rMoZfEO.js +1 -0
- package/client/dist/assets/mcp-BD8sL5mP.js +1 -0
- package/client/dist/assets/mcp-BkcA3I5s.js +1 -0
- package/client/dist/assets/mcp-CCpSelOh.js +1 -0
- package/client/dist/assets/mcp-CUAN6ORK.js +1 -0
- package/client/dist/assets/mcp-CqbRxRTE.js +1 -0
- package/client/dist/assets/mcp-DP2YfVhO.js +1 -0
- package/client/dist/assets/mcp-DUVQamDz.js +1 -0
- package/client/dist/assets/narration-B-ynWTpn.js +1 -0
- package/client/dist/assets/narration-Bj_laZwg.js +1 -0
- package/client/dist/assets/narration-BxHpmMv_.js +1 -0
- package/client/dist/assets/narration-C1Px0-0j.js +1 -0
- package/client/dist/assets/narration-CAXhGbzM.js +1 -0
- package/client/dist/assets/narration-DQ1l_Kq6.js +1 -0
- package/client/dist/assets/narration-XISXwqZd.js +1 -0
- package/client/dist/assets/narration-kwzfglQo.js +1 -0
- package/client/dist/assets/nav-1-Hh2kOz.js +1 -0
- package/client/dist/assets/nav-B34QkESm.js +1 -0
- package/client/dist/assets/nav-Bap_UXAq.js +1 -0
- package/client/dist/assets/{nav-pYuXq7sf.js → nav-BwxXIB24.js} +1 -1
- package/client/dist/assets/nav-Ch-zHBG5.js +1 -0
- package/client/dist/assets/nav-CygC_WN-.js +1 -0
- package/client/dist/assets/{nav-iwjCg5FR.js → nav-KnnLQtOQ.js} +1 -1
- package/client/dist/assets/nav-m00uxYUG.js +1 -0
- package/client/dist/assets/packet-BQ2tXfJI.js +1 -0
- package/client/dist/assets/packet-BdpOJ1Cy.js +1 -0
- package/client/dist/assets/packet-C3Ievb9R.js +1 -0
- package/client/dist/assets/packet-C4zJIG0Y.js +1 -0
- package/client/dist/assets/packet-Cx-zRuWn.js +1 -0
- package/client/dist/assets/packet-DUTGX52M.js +1 -0
- package/client/dist/assets/packet-DhsKtUPB.js +1 -0
- package/client/dist/assets/packet-z3LJ8Zyy.js +1 -0
- package/client/dist/assets/project-repositories-DYhTvwQ1.js +1 -0
- package/client/dist/assets/provider-capabilities-B-wOHfLP.js +1 -0
- package/client/dist/assets/settings-BBt2xtDQ.js +1 -0
- package/client/dist/assets/settings-BJB9RKJj.js +1 -0
- package/client/dist/assets/settings-CHwQR2rB.js +1 -0
- package/client/dist/assets/settings-CrMi3kSi.js +1 -0
- package/client/dist/assets/settings-DKyhDGD1.js +1 -0
- package/client/dist/assets/settings-Deupji9c.js +1 -0
- package/client/dist/assets/settings-DqRMmwAM.js +1 -0
- package/client/dist/assets/settings-J4rj6vo-.js +1 -0
- package/client/dist/assets/setup-2xGgu4Sk.js +1 -0
- package/client/dist/assets/setup-Ba11l2JA.js +1 -0
- package/client/dist/assets/setup-BzW4kMok.js +1 -0
- package/client/dist/assets/setup-COzwYhkJ.js +1 -0
- package/client/dist/assets/setup-CRVULhtF.js +1 -0
- package/client/dist/assets/setup-DgvlxwpE.js +1 -0
- package/client/dist/assets/setup-Dw_wYeEY.js +1 -0
- package/client/dist/assets/setup-ZPtEeJPW.js +1 -0
- package/client/dist/assets/spending-BqbdPm_4.js +1 -0
- package/client/dist/assets/square-Ci-PFcFe.js +1 -0
- package/client/dist/assets/{terminal-BFRZnMPP.js → terminal-BAzpHtpY.js} +1 -1
- package/client/dist/assets/{terminal-IahE4LW9.js → terminal-C7dHeR3x.js} +1 -1
- package/client/dist/assets/{terminal-tITa81iz.js → terminal-CMla5Qsz.js} +1 -1
- package/client/dist/assets/{terminal-BZiIu3rf.js → terminal-CdNXH-n9.js} +1 -1
- package/client/dist/assets/{terminal-ScjyXNxQ.js → terminal-Cw5bZsmV.js} +1 -1
- package/client/dist/assets/{terminal-C2NAd7BW.js → terminal-DFUP4eNv.js} +1 -1
- package/client/dist/assets/{terminal-d7GadXbN.js → terminal-DGqljeK_.js} +1 -1
- package/client/dist/assets/{terminal-QpXZU2Bn.js → terminal-cU70NodO.js} +1 -1
- package/client/dist/assets/useDesktop-RSMTyy7V.js +1 -0
- package/client/dist/assets/useSharedWebSocket-BOdS5_Iz.js +2 -0
- package/client/dist/index.html +34 -35
- package/docs/README.md +3 -0
- package/docs/agent-live-steering.md +57 -0
- package/docs/ci-cd.md +57 -0
- package/docs/code-explorer.md +48 -0
- package/docs/codex.md +12 -1
- package/docs/features/detachable-mission-windows.md +59 -0
- package/docs/guide/de/integrations/5-mcp-server.md +13 -9
- package/docs/guide/de/integrations/6-agent-chat.md +1 -0
- package/docs/guide/en/integrations/5-mcp-server.md +13 -9
- package/docs/guide/en/integrations/6-agent-chat.md +1 -0
- package/docs/guide/es/integrations/5-mcp-server.md +13 -9
- package/docs/guide/es/integrations/6-agent-chat.md +1 -0
- package/docs/guide/fr/integrations/5-mcp-server.md +13 -9
- package/docs/guide/fr/integrations/6-agent-chat.md +1 -0
- package/docs/guide/it/integrations/5-mcp-server.md +13 -9
- package/docs/guide/it/integrations/6-agent-chat.md +1 -0
- package/docs/guide/ja/integrations/5-mcp-server.md +13 -9
- package/docs/guide/ja/integrations/6-agent-chat.md +1 -0
- package/docs/guide/pt/integrations/5-mcp-server.md +13 -9
- package/docs/guide/pt/integrations/6-agent-chat.md +1 -0
- package/docs/guide/zh/integrations/5-mcp-server.md +13 -9
- package/docs/guide/zh/integrations/6-agent-chat.md +1 -0
- package/docs/internals/README.md +1 -0
- package/docs/internals/browser-capture-performance.md +55 -3
- package/docs/internals/browser-login-popups.md +45 -0
- package/docs/internals/browser-native-retina-audit.md +39 -0
- package/docs/internals/ci-cd-audit.md +39 -0
- package/docs/internals/core-runtime-updates.md +68 -0
- package/docs/internals/embedded-browser-native-webview-evaluation.md +2 -0
- package/docs/internals/implementation-reliability-audit.md +93 -0
- package/docs/internals/interactive-jobs.md +110 -6
- package/docs/internals/mcp-mission-audit.md +76 -0
- package/docs/internals/project-builder.md +404 -42
- package/docs/internals/safe-pr-review-flow.md +52 -10
- package/docs/internals/startup-recovery-audit.md +58 -0
- package/docs/mcp.md +74 -41
- package/docs/mission-processes.md +59 -0
- package/docs/multi-repo-projects.md +51 -0
- package/docs/platforms/windows-parity.md +70 -0
- package/docs/platforms/windows.md +13 -11
- package/docs/running-pipelines.md +14 -0
- package/mcp-bridge/dist/specrails-mcp.js +7186 -0
- package/package.json +9 -4
- package/server/dist/agent-chat-manager.js +537 -68
- package/server/dist/agent-chat-router.js +87 -6
- package/server/dist/agent-context-resolver.js +129 -25
- package/server/dist/agent-defaults.js +19 -11
- package/server/dist/agent-input-store.js +206 -0
- package/server/dist/agent-mcp-config.js +54 -15
- package/server/dist/agent-operator-prompt.js +255 -65
- package/server/dist/agent-spec-framing.js +202 -0
- package/server/dist/agent-steering.js +218 -0
- package/server/dist/agent-store.js +153 -0
- package/server/dist/api-not-found.js +8 -0
- package/server/dist/background-process-control.js +164 -0
- package/server/dist/background-process-service.js +61 -0
- package/server/dist/background-process-store.js +242 -0
- package/server/dist/background-windows-bootstrap.js +238 -0
- package/server/dist/blueprint-chat-manager.js +476 -62
- package/server/dist/blueprint-commit.js +21 -1
- package/server/dist/blueprint-draft-parser.js +122 -17
- package/server/dist/blueprint-generation.js +238 -0
- package/server/dist/blueprint-operator-prompt.js +91 -63
- package/server/dist/blueprint-router.js +55 -3
- package/server/dist/blueprint-spec-fixtures.js +85 -0
- package/server/dist/blueprint-spec-quality.js +57 -16
- package/server/dist/blueprint-store.js +92 -1
- package/server/dist/browser-capture-manager.js +86 -30
- package/server/dist/browser-playwright.js +168 -45
- package/server/dist/browser-viewport.js +26 -0
- package/server/dist/chat-manager.js +23 -15
- package/server/dist/chromium-archive.cjs +83 -0
- package/server/dist/chromium-resolver.js +72 -64
- package/server/dist/code-activity.js +145 -0
- package/server/dist/code-explorer-router.js +714 -114
- package/server/dist/core-compat.js +28 -1
- package/server/dist/core-execution.js +111 -0
- package/server/dist/core-package.js +4 -16
- package/server/dist/core-runtime.js +202 -0
- package/server/dist/core-update-manager.js +161 -60
- package/server/dist/core-update-state.js +29 -0
- package/server/dist/db.js +66 -35
- package/server/dist/delivery-evidence.js +142 -39
- package/server/dist/desktop-db.js +239 -43
- package/server/dist/desktop-router.js +109 -9
- package/server/dist/dev-ports.js +8 -3
- package/server/dist/file-provenance.js +34 -22
- package/server/dist/file-story-manager.js +62 -64
- package/server/dist/file-story.js +118 -35
- package/server/dist/file-summary-generator.js +46 -5
- package/server/dist/file-summary-manager.js +355 -106
- package/server/dist/framework-manager.js +98 -110
- package/server/dist/framework-reseed.js +76 -10
- package/server/dist/git-diagnostics.js +2 -2
- package/server/dist/headroom-manager.js +38 -3
- package/server/dist/host-control.js +52 -0
- package/server/dist/index.js +43 -2
- package/server/dist/interactive-job-session.js +149 -16
- package/server/dist/internal-api.js +48 -0
- package/server/dist/jira/jira-materializer.js +1 -0
- package/server/dist/json-tolerant.js +174 -0
- package/server/dist/legacy-migration.js +4 -2
- package/server/dist/loop-command-catalog.js +83 -21
- package/server/dist/loop-constants.js +6 -1
- package/server/dist/loop-decider.js +11 -1
- package/server/dist/loop-executors.js +194 -45
- package/server/dist/loop-factory.js +11 -4
- package/server/dist/loop-graph.js +90 -4
- package/server/dist/loop-run-manager.js +301 -69
- package/server/dist/loop-shell-invocation.js +21 -0
- package/server/dist/loop-step-idle.js +55 -0
- package/server/dist/loop-templates.js +31 -7
- package/server/dist/mcp/agent-capability.js +37 -4
- package/server/dist/mcp/guide.js +149 -36
- package/server/dist/mcp/mcp-admin-router.js +20 -4
- package/server/dist/mcp/mcp-server.js +89 -43
- package/server/dist/mcp/mcp-tiers.js +6 -5
- package/server/dist/mcp/mcp-token.js +3 -1
- package/server/dist/mcp/resources.js +5 -4
- package/server/dist/mcp/tools/catalog.js +4 -0
- package/server/dist/mcp/tools/code.js +125 -14
- package/server/dist/mcp/tools/context.js +153 -0
- package/server/dist/mcp/tools/git.js +15 -5
- package/server/dist/mcp/tools/jobs.js +84 -71
- package/server/dist/mcp/tools/loops.js +17 -6
- package/server/dist/mcp/tools/meta.js +74 -27
- package/server/dist/mcp/tools/mission.js +29 -0
- package/server/dist/mcp/tools/projects.js +22 -6
- package/server/dist/mcp/tools/rails.js +48 -11
- package/server/dist/mcp/tools/specs.js +86 -14
- package/server/dist/mcp/tools/support.js +1 -1
- package/server/dist/mcp/tools/types.js +117 -43
- package/server/dist/mcp/tools/watch.js +144 -51
- package/server/dist/milestone-chain-store.js +164 -0
- package/server/dist/milestone-chain.js +487 -0
- package/server/dist/milestone-progress.js +348 -0
- package/server/dist/mobile/mobile-devices.js +10 -7
- package/server/dist/mobile/mobile-gateway.js +2 -0
- package/server/dist/mobile/mobile-missions.js +214 -0
- package/server/dist/mobile/mobile-redact.js +17 -3
- package/server/dist/mobile/mobile-router.js +46 -4
- package/server/dist/mobile/mobile-ws.js +49 -4
- package/server/dist/multi-repo-bases.js +56 -0
- package/server/dist/multi-repo-checkout.js +101 -0
- package/server/dist/multi-repo-delivery.js +100 -0
- package/server/dist/multi-repo-execution-store.js +65 -0
- package/server/dist/multi-repo-execution.js +453 -0
- package/server/dist/offline-assemble.js +10 -8
- package/server/dist/openspec-runtime-plugin-commands.json +18 -0
- package/server/dist/openspec-runtime-plugin.js +120 -0
- package/server/dist/plugins/codex-spawn.js +49 -0
- package/server/dist/plugins/serena/manifest.js +2 -2
- package/server/dist/plugins/serena/templates/instructions.md +16 -0
- package/server/dist/pr-publisher.js +1 -1
- package/server/dist/profiles-router.js +3 -18
- package/server/dist/project-code-discovery.js +142 -0
- package/server/dist/project-git.js +19 -21
- package/server/dist/project-registry.js +272 -20
- package/server/dist/project-repositories.js +157 -0
- package/server/dist/project-repository-provenance.js +31 -0
- package/server/dist/project-router-background-processes.js +105 -0
- package/server/dist/project-router-git.js +75 -16
- package/server/dist/project-router-jobs.js +2 -126
- package/server/dist/project-router-loop-runs.js +72 -2
- package/server/dist/project-router-tickets.js +53 -8
- package/server/dist/project-router.js +239 -38
- package/server/dist/provider-detection.js +18 -6
- package/server/dist/provider-limit.js +64 -0
- package/server/dist/providers/claude-adapter.js +26 -1
- package/server/dist/providers/claude-background-tasks.js +18 -0
- package/server/dist/providers/claude-live-session.js +383 -0
- package/server/dist/providers/codex-adapter.js +19 -0
- package/server/dist/providers/codex-live-session.js +545 -0
- package/server/dist/providers/gemini-adapter.js +1 -0
- package/server/dist/providers/live-session-types.js +12 -0
- package/server/dist/providers/live-session.js +13 -0
- package/server/dist/providers/terminal-result.js +24 -0
- package/server/dist/queue-manager.js +2 -0
- package/server/dist/rail-isolated-launch.js +141 -16
- package/server/dist/rail-pr-decision.js +364 -99
- package/server/dist/rail-pr-store.js +24 -10
- package/server/dist/rail-worktree-release.js +34 -2
- package/server/dist/rail-worktrees-store.js +4 -4
- package/server/dist/rails-router.js +249 -55
- package/server/dist/repo-lock.js +92 -17
- package/server/dist/review-packet.js +23 -13
- package/server/dist/schemas/file-summary.v1.json +59 -59
- package/server/dist/schemas/profile.v1.json +137 -137
- package/server/dist/setup-manager.js +52 -8
- package/server/dist/shell-integration/bash-shim.bash +45 -0
- package/server/dist/shell-integration/fish-shim.fish +36 -0
- package/server/dist/shell-integration/powershell-shim.ps1 +48 -0
- package/server/dist/shell-integration/zsh-shim.zsh +47 -0
- package/server/dist/smash-runner.js +1 -0
- package/server/dist/spawn-lifecycle.js +44 -27
- package/server/dist/spec-contract-prompt.js +143 -0
- package/server/dist/spec-draft-parser.js +6 -1
- package/server/dist/spec-models.js +1 -0
- package/server/dist/stuck-run-detector.js +1 -0
- package/server/dist/terminal-manager.js +21 -1
- package/server/dist/terminal-shell-integration.js +4 -1
- package/server/dist/transient-children.js +619 -230
- package/server/dist/util/cli-prompt.js +78 -5
- package/server/dist/util/sqlite-migrations.js +20 -0
- package/server/dist/util/win-spawn.js +18 -3
- package/server/dist/util/windows-provider-shell.js +29 -0
- package/server/dist/verification-sentinel.js +14 -0
- package/server/dist/vitest-setup.js +2 -0
- package/server/dist/windows-job-supervisor.js +133 -0
- package/server/dist/workspace-manager.js +9 -30
- package/server/dist/worktree-manager.js +17 -2
- package/server/dist/worktree-overlay.js +3 -1
- package/client/dist/assets/ActivityFeedPage-tAQcWs1R.js +0 -1
- package/client/dist/assets/AgentBrowserCapture-BX8BNae5.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-BVAqCL0K.js +0 -2
- package/client/dist/assets/AgentModeCodePane-9XfqQc9c.js +0 -2
- package/client/dist/assets/AgentModeJobsPane-BCjLsPhc.js +0 -1
- package/client/dist/assets/AgentsPage-C8J_42sm.js +0 -87
- package/client/dist/assets/AnalyticsPage-BtQuyfJm.js +0 -1
- package/client/dist/assets/CodePage-BZ2MwdCu.js +0 -2
- package/client/dist/assets/DesktopAnalyticsPage-Bh_29V4g.js +0 -1
- package/client/dist/assets/ExportDropdown-BrtfWzEG.js +0 -1
- package/client/dist/assets/InteractiveJobComposer-BCZiSfzc.js +0 -19
- package/client/dist/assets/JobDetailModal-NAJmuYIT.js +0 -1
- package/client/dist/assets/JobDetailPage-fE0ZycUX.js +0 -1
- package/client/dist/assets/JobsPage-z5M_HVJG.js +0 -1
- package/client/dist/assets/LoopBuilderPage-j1FQS47c.js +0 -7
- package/client/dist/assets/LoopPreviewModal-DhDJjdCe.js +0 -1
- package/client/dist/assets/LoopsPage-Ll7zORZb.js +0 -1
- package/client/dist/assets/MinimizedChatsContext-Bd3OqR_S.js +0 -1
- package/client/dist/assets/PluginsPage-DN4kGvJt.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-OgsgxjzF.js +0 -1
- package/client/dist/assets/ReviewPacketPage-DFog4sXn.js +0 -1
- package/client/dist/assets/TemplatePreviewModal-L2XxqiOD.js +0 -1
- package/client/dist/assets/TicketDetailModal-CsF-AWZX.js +0 -14
- package/client/dist/assets/Trans-Bsz9_gyq.js +0 -1
- package/client/dist/assets/agent-BQgKv_2F.js +0 -1
- package/client/dist/assets/agent-C1NRDJqL.js +0 -1
- package/client/dist/assets/agent-CLNleiy6.js +0 -1
- package/client/dist/assets/agent-CmceArkQ.js +0 -1
- package/client/dist/assets/agent-D3UxQ3SR.js +0 -1
- package/client/dist/assets/agent-DB1JeE64.js +0 -1
- package/client/dist/assets/agent-DXkHcQ-D.js +0 -1
- package/client/dist/assets/agent-DjJJJ2M8.js +0 -1
- package/client/dist/assets/auth-D_5bQv5W.js +0 -1
- package/client/dist/assets/ban-E4EaZe3a.js +0 -1
- package/client/dist/assets/bot-DzuuuC5R.js +0 -1
- package/client/dist/assets/browser-BgqHDMXP.js +0 -1
- package/client/dist/assets/browser-CsKJtrpv.js +0 -1
- package/client/dist/assets/browser-Cu58EpZU.js +0 -1
- package/client/dist/assets/browser-CvXOJm-j.js +0 -1
- package/client/dist/assets/browser-DOrFh1c7.js +0 -1
- package/client/dist/assets/browser-DQv_Jo7x.js +0 -1
- package/client/dist/assets/browser-LPgxvJu2.js +0 -1
- package/client/dist/assets/browser-eL-3MIEI.js +0 -1
- package/client/dist/assets/builder-0IWtosUm.js +0 -1
- package/client/dist/assets/builder-Bf2N6XWn.js +0 -1
- package/client/dist/assets/builder-BnqaaBkT.js +0 -1
- package/client/dist/assets/builder-BxxfGgAO.js +0 -1
- package/client/dist/assets/builder-C5IIgWsq.js +0 -1
- package/client/dist/assets/builder-CHuahItu.js +0 -1
- package/client/dist/assets/builder-CjWosXL_.js +0 -1
- package/client/dist/assets/builder-CpCIOoKj.js +0 -1
- package/client/dist/assets/code-CHPkOkDS.js +0 -1
- package/client/dist/assets/commands-6tYQih5m.js +0 -1
- package/client/dist/assets/commands-BK2QinXN.js +0 -1
- package/client/dist/assets/commands-C2Nca76h.js +0 -1
- package/client/dist/assets/commands-CKdLihNX.js +0 -1
- package/client/dist/assets/commands-CYIBTAlc.js +0 -1
- package/client/dist/assets/commands-CjUtYJIM.js +0 -1
- package/client/dist/assets/commands-Cq_u_8y9.js +0 -1
- package/client/dist/assets/commands-D_ZHYQug.js +0 -1
- package/client/dist/assets/common-6MLbD-jM.js +0 -1
- package/client/dist/assets/common-BKGEu4rm.js +0 -1
- package/client/dist/assets/common-BNbnv8cE.js +0 -1
- package/client/dist/assets/common-BqGWtDbt.js +0 -1
- package/client/dist/assets/common-DBtTzeYm.js +0 -1
- package/client/dist/assets/common-DEW3Nr8n.js +0 -1
- package/client/dist/assets/common-DHsv9N5d.js +0 -1
- package/client/dist/assets/common-mkrEcW-Y.js +0 -1
- package/client/dist/assets/dashboard-B9GhC5ku.js +0 -1
- package/client/dist/assets/dashboard-CBnv6zOI.js +0 -1
- package/client/dist/assets/dashboard-CaP0fU87.js +0 -1
- package/client/dist/assets/dashboard-D4ZZ4x84.js +0 -1
- package/client/dist/assets/dashboard-DmuTQBX8.js +0 -1
- package/client/dist/assets/dashboard-DynLYj3d.js +0 -1
- package/client/dist/assets/dashboard-zj4gGFJ1.js +0 -1
- package/client/dist/assets/dialog-CdWCb02j.js +0 -45
- package/client/dist/assets/dist-bVqfYmby.js +0 -1
- package/client/dist/assets/dist-js-CWeUdf5Z.js +0 -1
- package/client/dist/assets/formatDistanceToNow-DQCvMgUc.js +0 -1
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-C16cxSe1.js +0 -1
- package/client/dist/assets/git-refresh-wTW0rO0Z.js +0 -1
- package/client/dist/assets/i18n-hnX2DPmo.js +0 -2
- package/client/dist/assets/index-DIhMEAVw.js +0 -66
- package/client/dist/assets/index-DwygcU7s.css +0 -2
- package/client/dist/assets/mcp-B8X8wBLu.js +0 -1
- package/client/dist/assets/mcp-C2AojZZN.js +0 -1
- package/client/dist/assets/mcp-D8BT78_L.js +0 -1
- package/client/dist/assets/mcp-Df5RWBNk.js +0 -1
- package/client/dist/assets/mcp-Dj7BgMQW.js +0 -1
- package/client/dist/assets/mcp-Q7iT7rcz.js +0 -1
- package/client/dist/assets/mcp-YlvNvJbW.js +0 -1
- package/client/dist/assets/mcp-mKFpTSRb.js +0 -1
- package/client/dist/assets/narration-4Z2VUhZw.js +0 -1
- package/client/dist/assets/narration-BGuiEDj3.js +0 -1
- package/client/dist/assets/narration-BuSoqRmv.js +0 -1
- package/client/dist/assets/narration-CB9t29fy.js +0 -1
- package/client/dist/assets/narration-CU3x8FHD.js +0 -1
- package/client/dist/assets/narration-CWeXhfP5.js +0 -1
- package/client/dist/assets/narration-DRaDnhT5.js +0 -1
- package/client/dist/assets/narration-DtEbQgCw.js +0 -1
- package/client/dist/assets/nav-ApJVg3xu.js +0 -1
- package/client/dist/assets/nav-BKNky1Bg.js +0 -1
- package/client/dist/assets/nav-C6vWWKYx.js +0 -1
- package/client/dist/assets/nav-CXJ6Aw89.js +0 -1
- package/client/dist/assets/nav-CsmFBIDf.js +0 -1
- package/client/dist/assets/nav-DjkmQJjd.js +0 -1
- package/client/dist/assets/packet-B1IxaL5f.js +0 -1
- package/client/dist/assets/packet-Bh5kkbiB.js +0 -1
- package/client/dist/assets/packet-By8fqYxW.js +0 -1
- package/client/dist/assets/packet-CZdvA44E.js +0 -1
- package/client/dist/assets/packet-CrjHRQCP.js +0 -1
- package/client/dist/assets/packet-Dwi2pTtx.js +0 -1
- package/client/dist/assets/packet-_-ZIa0IR.js +0 -1
- package/client/dist/assets/packet-n0W6E1Hn.js +0 -1
- package/client/dist/assets/play-DNlrawbS.js +0 -1
- package/client/dist/assets/provider-capabilities-Doej9lfa.js +0 -1
- package/client/dist/assets/settings-Bd0x4TBa.js +0 -1
- package/client/dist/assets/settings-C1-7cXzC.js +0 -1
- package/client/dist/assets/settings-CAFaT38b.js +0 -1
- package/client/dist/assets/settings-Ct3v1nW2.js +0 -1
- package/client/dist/assets/settings-DHh7_IF5.js +0 -1
- package/client/dist/assets/settings-DQXAmdcv.js +0 -1
- package/client/dist/assets/settings-guzlhpup.js +0 -1
- package/client/dist/assets/settings-sZfTPMEH.js +0 -1
- package/client/dist/assets/setup-3jWaoVUO.js +0 -1
- package/client/dist/assets/setup-BjgRneb2.js +0 -1
- package/client/dist/assets/setup-BzFIjv-f.js +0 -1
- package/client/dist/assets/setup-C4VfQsxE.js +0 -1
- package/client/dist/assets/setup-DfUkpDbN.js +0 -1
- package/client/dist/assets/setup-ECe90Pmu.js +0 -1
- package/client/dist/assets/setup-dlqC4Jmm.js +0 -1
- package/client/dist/assets/setup-jwfLMiM2.js +0 -1
- package/client/dist/assets/spending-EC9xqio-.js +0 -1
- package/client/dist/assets/useDesktop-BQVt8lFd.js +0 -1
|
@@ -4,20 +4,20 @@ Specrails puede exponerse **a sí mismo** a cualquier asistente de IA que hable
|
|
|
4
4
|
|
|
5
5
|
Esta es la dirección opuesta a las funciones de plugins y "Mis MCPs aprobados": esas dejan que Specrails *use* otros servidores MCP; esta deja que otras apps usen **Specrails**.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Viene activado de serie
|
|
8
8
|
|
|
9
|
-
Está **
|
|
9
|
+
Está **activado por defecto**: el servidor ya está en marcha la primera vez que abres la app, sin reiniciar ni tocar nada. Abre **Configuración ▸ MCP** para copiar la configuración de cliente, o para desactivarlo si no lo quieres.
|
|
10
10
|
|
|
11
11
|
Tú mantienes el control de *qué* puede hacer una IA externa mediante un conjunto de niveles de permiso:
|
|
12
12
|
|
|
13
13
|
| Nivel | Qué permite | Por defecto |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Lectura** | Listar e inspeccionar proyectos, specs, trabajos, analíticas… | Siempre activo (cuando MCP está habilitado) |
|
|
16
|
-
| **Escritura** | Crear y editar specs, cambiar la configuración y la config de los rails |
|
|
17
|
-
| **Lanzar IA** | Acciones que ejecutan una IA y **cuestan dinero** (lanzar un rail, generar una spec, enviar un turno de chat) |
|
|
18
|
-
| **Destructivo** | Borrar proyectos/specs/trabajos, detener trabajo en curso |
|
|
16
|
+
| **Escritura** | Crear y editar specs, cambiar la configuración y la config de los rails | Activado — desmárcalo para restringir |
|
|
17
|
+
| **Lanzar IA** | Acciones que ejecutan una IA y **cuestan dinero** (lanzar un rail, generar una spec, enviar un turno de chat) | Activado — desmárcalo para restringir |
|
|
18
|
+
| **Destructivo** | Borrar proyectos/specs/trabajos, detener trabajo en curso | Activado — desmárcalo para restringir |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Los cuatro niveles vienen concedidos de serie, así que un asistente conectado puede manejar toda la app desde el primer momento. Desmarca cualquier nivel que prefieras reservarte; si después tu asistente intenta algo que cubre ese nivel, Specrails lo rechaza con un mensaje claro que te indica qué nivel volver a activar.
|
|
21
21
|
|
|
22
22
|
## Conectar tu asistente
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <comando del bridge de Ajustes ▸ MCP>
|
|
|
50
50
|
|
|
51
51
|
La cabecera `Authorization: Bearer <token>` también funciona. Si cambiaste el puerto de la app, sustituye `4200` por el tuyo.
|
|
52
52
|
|
|
53
|
-
Una vez conectado, tu asistente ve
|
|
53
|
+
Una vez conectado, tu asistente ve **22 herramientas** que cubren toda la app — proyectos, specs, rails y trabajos, chat/Explore, agentes, plugins, Jira, loops, el explorador de código, analíticas, configuración — incluida una herramienta de **guía** incorporada que lee primero para entender cómo funciona Specrails sin que tú tengas que explicar nada.
|
|
54
|
+
|
|
55
|
+
Antes de actuar, el asistente puede usar `specrails_context` para consultar el estado actual del proyecto, las specs, las ejecuciones y Git. Las secciones no disponibles se indican expresamente; no significan que el proyecto esté vacío. `specrails_code(search)` busca texto en el código y `read_file` lee rangos concretos de líneas, indicando cómo continuar cuando queda contenido.
|
|
56
|
+
|
|
57
|
+
Cada sesión MCP externa conserva su propia selección de proyecto. En modo Misión, el proyecto predeterminado es el fijado en la conversación, que cambias desde la interfaz de misión; una selección MCP no puede sustituirlo. Un `projectId` explícito permite dirigir una operación intencionadamente a otro proyecto.
|
|
54
58
|
|
|
55
59
|
## Qué puedes hacer con él
|
|
56
60
|
|
|
57
|
-
Unas cuantas recetas una vez que tu asistente está conectado.
|
|
61
|
+
Unas cuantas recetas una vez que tu asistente está conectado. Todo viene activado por defecto; desmarca **Escritura** o **Lanzar IA** en Configuración ▸ MCP si por ahora prefieres que solo observe.
|
|
58
62
|
|
|
59
63
|
**Convierte en specs el trabajo de tus otras herramientas.** Si tu asistente también tiene conectados GitHub, Jira, Gmail o Slack, puede traerte el trabajo a Specrails:
|
|
60
64
|
> *"Coge las incidencias abiertas de GitHub de esta semana con la etiqueta 'bug', crea una spec para cada una en el proyecto de la API y lánzalas."*
|
|
@@ -64,7 +68,7 @@ Unas cuantas recetas una vez que tu asistente está conectado. Empieza con **Lec
|
|
|
64
68
|
**Piloto automático nocturno.** Déjalo en marcha con la app en la bandeja y vuelve a un informe:
|
|
65
69
|
> *"Aquí tienes 12 ideas. Convierte cada una en una spec, lánzalas de tres en tres por los rails, vigila cada trabajo y mañana dame un resumen de lo que terminó, lo que falló y lo que costó."*
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
Desmarca **Destructivo** y podrá trabajar toda la noche sin borrar nada nunca.
|
|
68
72
|
|
|
69
73
|
**En todos tus proyectos.** Algo que el panel no hace por sí solo:
|
|
70
74
|
> *"Revisa todos mis proyectos. Dime cuáles tienen specs en el backlog y ningún rail en marcha, y arranca el de mayor prioridad en cada uno."*
|
|
@@ -68,6 +68,7 @@ Las respuestas llegan fluidas y ya formateadas (encabezados, tablas, listas), ca
|
|
|
68
68
|
- **Minimiza sin perder nada.** Haz clic en la ✕ para devolver el panel a la burbuja: la conversación sigue en marcha. Vuelve a abrirlo y aterrizas en el último mensaje; no hay que reescribir nada.
|
|
69
69
|
- **Nueva conversación.** El botón **+** inicia un hilo limpio; el historial vive a nivel de app, por encima de cualquier proyecto concreto.
|
|
70
70
|
- **Cambia de misión.** El selector de misiones junto al selector de proyecto lista tus conversaciones de más reciente a más antigua — un punto pulsante marca aquellas donde el agente sigue trabajando, y una pequeña insignia cuenta los mensajes en cola. La búsqueda aparece cuando la lista supera las ocho, y el icono de papelera de cada fila elimina una misión tras una confirmación rápida en línea — incluso una en marcha (avisa primero y luego detiene al agente).
|
|
71
|
+
- **Encuentra una misión desde cualquier sitio.** Pulsa **⌘K** (o el botón **Buscar** del sidebar en modo Agente) y escribe cualquier fragmento que recuerdes: una palabra del título *o* de lo que se dijo dentro. Las misiones coinciden al instante por título desde memoria y, un latido después, llegan las coincidencias por contenido con el pasaje resaltado, más el proyecto anclado y cuándo tuvo actividad por última vez. En modo Agente las misiones son el primer grupo; en el tablero van justo después de Proyectos. Enter abre la misión.
|
|
71
72
|
|
|
72
73
|
## Algunas cosas que conviene saber
|
|
73
74
|
|
|
@@ -4,20 +4,20 @@ Specrails peut s'exposer **lui-même** à n'importe quel assistant IA qui parle
|
|
|
4
4
|
|
|
5
5
|
C'est la direction inverse des fonctionnalités plugins et « Mes MCP approuvés » : celles-ci permettent à Specrails d'*utiliser* d'autres serveurs MCP ; ceci permet à d'autres apps d'utiliser **Specrails**.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Activé d'emblée
|
|
8
8
|
|
|
9
|
-
C'est **
|
|
9
|
+
C'est **activé par défaut** : le serveur tourne déjà dès la première ouverture de l'app, sans redémarrage ni rien à basculer. Ouvrez **Paramètres ▸ MCP** pour copier la configuration client, ou pour le désactiver si vous n'en voulez pas.
|
|
10
10
|
|
|
11
11
|
Vous gardez le contrôle de *ce qu'*une IA externe peut faire grâce à un ensemble de niveaux de permission :
|
|
12
12
|
|
|
13
13
|
| Niveau | Ce qu'il autorise | Par défaut |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Lecture** | Lister et inspecter les projets, specs, jobs, analyses… | Toujours actif (lorsque MCP est activé) |
|
|
16
|
-
| **Écriture** | Créer et modifier des specs, changer les paramètres et la configuration des rails |
|
|
17
|
-
| **Lancement d'IA** | Actions qui exécutent une IA et **coûtent de l'argent** (lancer un rail, générer une spec, envoyer un tour de chat) |
|
|
18
|
-
| **Destructif** | Supprimer des projets/specs/jobs, arrêter un travail en cours |
|
|
16
|
+
| **Écriture** | Créer et modifier des specs, changer les paramètres et la configuration des rails | Activé — décochez pour restreindre |
|
|
17
|
+
| **Lancement d'IA** | Actions qui exécutent une IA et **coûtent de l'argent** (lancer un rail, générer une spec, envoyer un tour de chat) | Activé — décochez pour restreindre |
|
|
18
|
+
| **Destructif** | Supprimer des projets/specs/jobs, arrêter un travail en cours | Activé — décochez pour restreindre |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Les quatre niveaux sont accordés d'emblée : un assistant connecté peut piloter toute l'app immédiatement. Décochez tout niveau que vous préférez garder pour vous ; si votre assistant tente ensuite quelque chose que ce niveau couvre, Specrails refuse avec un message clair vous indiquant quel niveau réactiver.
|
|
21
21
|
|
|
22
22
|
## Connecter votre assistant
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <commande du bridge depuis Réglages ▸ MCP>
|
|
|
50
50
|
|
|
51
51
|
L'en-tête `Authorization: Bearer <token>` fonctionne aussi. Si vous avez changé le port de l'app, remplacez `4200`.
|
|
52
52
|
|
|
53
|
-
Une fois connecté, votre assistant voit
|
|
53
|
+
Une fois connecté, votre assistant voit **22 outils** couvrant toute l'app — projets, specs, rails et jobs, chat/Explore, agents, plugins, Jira, loops, l'explorateur de code, les analyses, les paramètres — dont un outil **guide** intégré qu'il lit en premier afin de comprendre le fonctionnement de Specrails sans que vous ayez à expliquer quoi que ce soit.
|
|
54
|
+
|
|
55
|
+
Avant d'agir, l'assistant peut utiliser `specrails_context` pour consulter l'état actuel du projet, des specs, des exécutions et de Git. Les sections indisponibles sont signalées explicitement ; elles ne signifient pas que le projet est vide. `specrails_code(search)` recherche du texte dans le code source, et `read_file` lit des plages de lignes précises en indiquant comment poursuivre lorsqu'il reste du contenu.
|
|
56
|
+
|
|
57
|
+
Chaque session MCP externe conserve sa propre sélection de projet. En mode Mission, le projet par défaut est celui épinglé à la conversation, que vous modifiez dans l'interface de mission ; une sélection MCP ne peut pas le remplacer. Un `projectId` explicite permet de cibler volontairement une opération dans un autre projet.
|
|
54
58
|
|
|
55
59
|
## Ce que vous pouvez en faire
|
|
56
60
|
|
|
57
|
-
Quelques recettes une fois votre assistant connecté.
|
|
61
|
+
Quelques recettes une fois votre assistant connecté. Tout est activé par défaut ; décochez **Écriture** ou **Lancement d'IA** dans Paramètres ▸ MCP si vous préférez qu'il se contente d'observer pour l'instant.
|
|
58
62
|
|
|
59
63
|
**Transformez le travail de vos autres outils en specs.** Si votre assistant a aussi GitHub, Jira, Gmail ou Slack connectés, il peut amener le travail jusqu'à Specrails pour vous :
|
|
60
64
|
> *« Prends les issues GitHub ouvertes cette semaine étiquetées "bug", crée une spec pour chacune dans le projet API, et lance-les. »*
|
|
@@ -64,7 +68,7 @@ Quelques recettes une fois votre assistant connecté. Commencez avec **Lecture**
|
|
|
64
68
|
**Pilote automatique nocturne.** Laissez-le tourner avec l'app dans la zone de notification et revenez à un rapport :
|
|
65
69
|
> *« Voici 12 idées. Transforme chacune en une spec, lance-les trois par trois à travers les rails, surveille chaque job, et demain donne-moi un résumé de ce qui s'est terminé, ce qui a échoué et ce que ça a coûté. »*
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
Décochez **Destructif** et il peut construire toute la nuit sans jamais rien supprimer.
|
|
68
72
|
|
|
69
73
|
**À travers tous vos projets.** Quelque chose que le tableau de bord ne fait pas tout seul :
|
|
70
74
|
> *« Vérifie tous mes projets. Dis-moi lesquels ont des specs dans le backlog sans aucun rail en cours, et démarre la plus prioritaire dans chacun. »*
|
|
@@ -68,6 +68,7 @@ Les réponses arrivent en flux fluide et s'affichent déjà mises en forme (titr
|
|
|
68
68
|
- **Réduire sans rien perdre.** Cliquez sur la ✕ pour renvoyer le panneau dans la bulle — la conversation continue de tourner. Rouvrez-le et vous atterrissez sur le dernier message ; rien n'est à retaper.
|
|
69
69
|
- **Nouvelle conversation.** Le bouton **+** démarre un fil vierge ; l'historique vit au niveau de l'application, au-dessus de tout projet individuel.
|
|
70
70
|
- **Changez de mission.** Le sélecteur de missions, à côté du sélecteur de projet, liste vos conversations de la plus récente à la plus ancienne — un point clignotant signale celles où l'agent travaille encore, et un petit badge compte les messages en file. La recherche apparaît dès que la liste dépasse huit entrées, et l'icône corbeille de chaque ligne supprime une mission après une confirmation rapide en ligne — même une mission en cours (elle prévient d'abord, puis arrête l'agent).
|
|
71
|
+
- **Retrouvez une mission de n'importe où.** Appuyez sur **⌘K** (ou le bouton **Rechercher** de la barre latérale en mode Agent) et tapez n'importe quel fragment dont vous vous souvenez — un mot du titre *ou* de ce qui a été dit dedans. Les missions correspondent instantanément par titre depuis la mémoire, puis un instant plus tard arrivent les correspondances par contenu avec le passage surligné, le projet épinglé et la date de dernière activité. En mode Agent, les missions forment le premier groupe ; sur le tableau, elles suivent les Projets. Entrée ouvre la mission.
|
|
71
72
|
|
|
72
73
|
## Quelques points à savoir
|
|
73
74
|
|
|
@@ -4,20 +4,20 @@ Specrails può esporre **se stesso** a qualsiasi assistente AI che parli il [Mod
|
|
|
4
4
|
|
|
5
5
|
Questa è la direzione opposta rispetto alle funzionalità dei plugin e degli "MCP approvati da me": quelle permettono a Specrails di *usare* altri server MCP; questa permette ad altre app di usare **Specrails**.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Attivo fin da subito
|
|
8
8
|
|
|
9
|
-
È **
|
|
9
|
+
È **attivo di default** — il server è già in esecuzione la prima volta che apri l'app, senza riavvii e senza toccare nulla. Apri **Impostazioni ▸ MCP** per copiare la configurazione client, o per disattivarlo se non lo vuoi.
|
|
10
10
|
|
|
11
11
|
Resti tu a controllare *cosa* può fare un'AI esterna tramite una serie di livelli di permesso:
|
|
12
12
|
|
|
13
13
|
| Livello | Cosa consente | Default |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Lettura** | Elencare e ispezionare progetti, spec, job, analisi… | Sempre attivo (quando l'MCP è abilitato) |
|
|
16
|
-
| **Scrittura** | Creare e modificare spec, cambiare impostazioni e configurazione dei rail |
|
|
17
|
-
| **AI-spawn** | Azioni che eseguono un'AI e **costano denaro** (lanciare un rail, generare una spec, inviare un turno di chat) |
|
|
18
|
-
| **Distruttivo** | Eliminare progetti/spec/job, fermare il lavoro in corso |
|
|
16
|
+
| **Scrittura** | Creare e modificare spec, cambiare impostazioni e configurazione dei rail | Attivo — deseleziona per limitare |
|
|
17
|
+
| **AI-spawn** | Azioni che eseguono un'AI e **costano denaro** (lanciare un rail, generare una spec, inviare un turno di chat) | Attivo — deseleziona per limitare |
|
|
18
|
+
| **Distruttivo** | Eliminare progetti/spec/job, fermare il lavoro in corso | Attivo — deseleziona per limitare |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Tutti e quattro i livelli sono concessi fin da subito, quindi un assistente collegato può guidare l'intera app da subito. Deseleziona qualsiasi livello che preferisci tenere per te; se poi il tuo assistente prova a fare qualcosa coperto da quel livello, Specrails rifiuta con un messaggio chiaro che ti indica quale livello riattivare.
|
|
21
21
|
|
|
22
22
|
## Collegare il tuo assistente
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <comando bridge da Impostazioni ▸ MCP>
|
|
|
50
50
|
|
|
51
51
|
Funziona anche l'header `Authorization: Bearer <token>`. Se hai cambiato la porta dell'app, sostituisci `4200`.
|
|
52
52
|
|
|
53
|
-
Una volta collegato, il tuo assistente vede
|
|
53
|
+
Una volta collegato, il tuo assistente vede **22 strumenti** che coprono l'intera app — progetti, spec, rail e job, chat/Explore, agenti, plugin, Jira, loop, l'esploratore del codice, le analisi, le impostazioni — incluso uno strumento **guida** integrato che legge per primo, così capisce come funziona Specrails senza che tu debba spiegargli nulla.
|
|
54
|
+
|
|
55
|
+
Prima di agire, l'assistente può usare `specrails_context` per consultare lo stato attuale del progetto, delle spec, delle esecuzioni e di Git. Le sezioni non disponibili vengono indicate esplicitamente; non significano che il progetto sia vuoto. `specrails_code(search)` cerca testo nel codice sorgente e `read_file` legge intervalli precisi di righe, indicando come continuare quando resta altro contenuto.
|
|
56
|
+
|
|
57
|
+
Ogni sessione MCP esterna mantiene la propria selezione del progetto. In modalità Missione, il progetto predefinito è quello fissato alla conversazione, che modifichi nell'interfaccia della missione; una selezione MCP non può sostituirlo. Un `projectId` esplicito permette di indirizzare intenzionalmente un'operazione a un altro progetto.
|
|
54
58
|
|
|
55
59
|
## Cosa puoi farci
|
|
56
60
|
|
|
57
|
-
Qualche ricetta una volta collegato il tuo assistente.
|
|
61
|
+
Qualche ricetta una volta collegato il tuo assistente. È tutto attivo di default; deseleziona **Scrittura** o **AI-spawn** in Impostazioni ▸ MCP se per ora preferisci che si limiti a osservare.
|
|
58
62
|
|
|
59
63
|
**Trasforma il lavoro degli altri tuoi strumenti in spec.** Se il tuo assistente ha collegati anche GitHub, Jira, Gmail o Slack, può portare il lavoro dentro Specrails al posto tuo:
|
|
60
64
|
> *"Prendi le issue GitHub aperte di questa settimana con etichetta 'bug', crea una spec per ognuna nel progetto API e lanciale."*
|
|
@@ -64,7 +68,7 @@ Qualche ricetta una volta collegato il tuo assistente. Parti con la **Lettura**
|
|
|
64
68
|
**Pilota automatico notturno.** Lascialo in esecuzione con l'app nella barra di sistema e torna a un resoconto:
|
|
65
69
|
> *"Ecco 12 idee. Trasforma ognuna in una spec, lanciale tre alla volta sui rail, tieni d'occhio ogni job e domani dammi un riepilogo di cosa è finito, cosa è fallito e quanto è costato."*
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
Deseleziona **Distruttivo** e potrà lavorare tutta la notte senza mai eliminare nulla.
|
|
68
72
|
|
|
69
73
|
**Su tutti i tuoi progetti.** Qualcosa che la dashboard da sola non fa:
|
|
70
74
|
> *"Controlla tutti i miei progetti. Dimmi quali hanno spec nel backlog e nessun rail in esecuzione, e avvia in ognuno quella a priorità più alta."*
|
|
@@ -68,6 +68,7 @@ Le risposte arrivano fluide e già formattate (titoli, tabelle, elenchi), ciascu
|
|
|
68
68
|
- **Riduci a icona, senza perdere nulla.** Clicca la ✕ per rimettere il pannello nella bolla — la conversazione continua a girare. Riaprilo e atterri sull'ultimo messaggio; nulla viene riscritto.
|
|
69
69
|
- **Nuova conversazione.** Il pulsante **+** avvia un thread pulito; la cronologia vive a livello di app, sopra qualunque singolo progetto.
|
|
70
70
|
- **Cambia missione.** Il selettore di missioni accanto al selettore di progetto elenca le conversazioni dalla più recente alla più vecchia — un punto pulsante segnala quelle in cui l'agente sta ancora lavorando, e un piccolo badge conta i messaggi in coda. La ricerca compare quando la lista supera le otto voci, e l'icona del cestino su ogni riga elimina una missione dopo una rapida conferma in linea — anche una in corso (prima avvisa, poi ferma l'agente).
|
|
71
|
+
- **Trova una missione da ovunque.** Premi **⌘K** (o il pulsante **Cerca** della barra laterale in modalità Agente) e digita un frammento qualsiasi che ricordi — una parola del titolo *o* di ciò che è stato detto dentro. Le missioni corrispondono all'istante per titolo dalla memoria e, un battito dopo, arrivano le corrispondenze per contenuto con il passaggio evidenziato, più il progetto fissato e l'ultima attività. In modalità Agente le missioni sono il primo gruppo; sulla board stanno subito dopo i Progetti. Invio apre la missione.
|
|
71
72
|
|
|
72
73
|
## Alcune cose da sapere
|
|
73
74
|
|
|
@@ -4,20 +4,20 @@ Specrails は、[Model Context Protocol](https://modelcontextprotocol.io) を話
|
|
|
4
4
|
|
|
5
5
|
これは、プラグインや「My approved MCPs」機能とは逆方向の働きをします。それらは Specrails が*ほかの* MCP サーバーを*使う*ためのものですが、こちらは他のアプリに **Specrails** を使わせるためのものです。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 最初からオン
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
これは**デフォルトでオン**です — 初めてアプリを開いた時点でサーバーはすでに動いており、再起動も切り替えも不要です。**Settings ▸ MCP** を開けばクライアント設定をコピーでき、不要ならそこでオフにできます。
|
|
10
10
|
|
|
11
11
|
外部の AI がどんな操作をできるかは、一連の権限ティアで*あなた*がコントロールできます。
|
|
12
12
|
|
|
13
13
|
| ティア | 許可される内容 | デフォルト |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Read**(読み取り) | プロジェクト、スペック、ジョブ、アナリティクスなどの一覧表示と確認 | 常時オン(MCP が有効なとき) |
|
|
16
|
-
| **Write**(書き込み) | スペックの作成・編集、設定やレール構成の変更 |
|
|
17
|
-
| **AI-spawn**(AI 起動) | AI を走らせて**お金がかかる**操作(レールの起動、スペックの生成、チャットターンの送信) |
|
|
18
|
-
| **Destructive**(破壊的操作) | プロジェクト/スペック/ジョブの削除、実行中の作業の停止 |
|
|
16
|
+
| **Write**(書き込み) | スペックの作成・編集、設定やレール構成の変更 | オン — 制限するならチェックを外す |
|
|
17
|
+
| **AI-spawn**(AI 起動) | AI を走らせて**お金がかかる**操作(レールの起動、スペックの生成、チャットターンの送信) | オン — 制限するならチェックを外す |
|
|
18
|
+
| **Destructive**(破壊的操作) | プロジェクト/スペック/ジョブの削除、実行中の作業の停止 | オン — 制限するならチェックを外す |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
4 つのティアはすべて最初から付与されているので、接続したアシスタントはすぐにアプリ全体を操作できます。自分だけに留めておきたいティアはチェックを外してください。その後アシスタントがそのティアに該当する操作を試みると、Specrails は拒否し、どのティアを再びオンにすればよいかを明確なメッセージで知らせます。
|
|
21
21
|
|
|
22
22
|
## アシスタントを接続する
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <設定 ▸ MCP のブリッジコマンド>
|
|
|
50
50
|
|
|
51
51
|
`Authorization: Bearer <token>` ヘッダーも使えます。アプリのポートを変更している場合は `4200` を置き換えてください。
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
接続が完了すると、アシスタントにはアプリ全体をカバーする **22 個のツール**が見えるようになります — プロジェクト、スペック、レールとジョブ、チャット/Explore、エージェント、プラグイン、Jira、ループ、コードエクスプローラー、アナリティクス、設定など。最初に読み込む組み込みの**ガイド**ツールも含まれているので、あなたが何も説明しなくても、アシスタントは Specrails の仕組みを理解できます。
|
|
54
|
+
|
|
55
|
+
操作の前に、アシスタントは `specrails_context` でプロジェクト、スペック、実行、Git の現在の状態を確認できます。取得できないセクションは明示され、プロジェクトが空であることを意味しません。`specrails_code(search)` はソースコード内のテキストを検索し、`read_file` は指定した行範囲を読み込みます。続きがある場合は、その読み方も返されます。
|
|
56
|
+
|
|
57
|
+
外部 MCP セッションごとに、選択中のプロジェクトは独立しています。ミッションモードでは、会話に固定されたプロジェクトがデフォルトになり、変更はミッション画面で行います。MCP 側の選択で上書きすることはできません。別のプロジェクトを意図的に操作する場合は、`projectId` を明示します。
|
|
54
58
|
|
|
55
59
|
## これで何ができるか
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
アシスタントを接続したあとの、いくつかのレシピを紹介します。すべてデフォルトでオンです。当面は観察だけさせたい場合は、Settings ▸ MCP で **Write**(書き込み)や **AI-spawn**(AI 起動)のチェックを外してください。
|
|
58
62
|
|
|
59
63
|
**ほかのツールにある作業をスペックに変える。** アシスタントが GitHub、Jira、Gmail、Slack にも接続されていれば、その作業をあなたの代わりに Specrails へ持ち込めます。
|
|
60
64
|
> *「今週の 'bug' ラベルの付いた未解決の GitHub Issue を取り込んで、API プロジェクトにそれぞれスペックを作って、起動して。」*
|
|
@@ -64,7 +68,7 @@ codex mcp add specrails -- <設定 ▸ MCP のブリッジコマンド>
|
|
|
64
68
|
**夜通しのオートパイロット。** アプリをトレイに置いたまま走らせておけば、戻ってきたときにはレポートができています。
|
|
65
69
|
> *「アイデアが 12 個あります。それぞれをスペックにして、レールで 3 つずつ起動して、すべてのジョブを見守って、明日になったら何が完了して、何が失敗して、いくらかかったかをまとめて教えて。」*
|
|
66
70
|
|
|
67
|
-
**Destructive
|
|
71
|
+
**Destructive**(破壊的操作)のチェックを外しておけば、何ひとつ削除することなく一晩中ビルドを続けられます。
|
|
68
72
|
|
|
69
73
|
**すべてのプロジェクトをまたいで。** ダッシュボードだけでは単独でできないことです。
|
|
70
74
|
> *「私のプロジェクトを全部チェックして。バックログにスペックがあるのにレールが 1 つも動いていないものを教えて、それぞれで最も優先度の高いものを 1 つ起動して。」*
|
|
@@ -67,6 +67,7 @@ pure-output action は spawn 前に拒否されます。詳細は
|
|
|
67
67
|
- **最小化しても失わない。** ✕ をクリックするとパネルはバブルへ戻ります——会話はそのまま動き続けます。開き直すと最新のメッセージに着地します。何も打ち直す必要はありません。
|
|
68
68
|
- **新しい会話。** **+** ボタンでまっさらなスレッドを始めます。履歴はアプリ全体にわたって存在し、個々のプロジェクトの上位にあります。
|
|
69
69
|
- **ミッションの切り替え。** プロジェクトセレクターの隣にあるミッションセレクターは、会話を新しい順に一覧表示します — 点滅するドットはエージェントがまだ作業中の会話を示し、小さなバッジはキュー内のメッセージ数を表します。リストが 8 件を超えると検索欄が現れます。各行のゴミ箱アイコンは、行内のクイック確認のあとにミッションを削除します — 実行中のものでも可能です(先に警告し、その後エージェントを停止します)。
|
|
70
|
+
- **どこからでもミッションを探す。** **⌘K**(またはエージェントモードのサイドバーの **検索** ボタン)を押して、覚えている断片を入力してください——タイトルの単語でも、*中で話された内容* でも構いません。ミッションはまずメモリからタイトルで即座に一致し、一拍おいて内容による一致がハイライト付きで届き、固定されたプロジェクトと最終アクティビティも表示されます。エージェントモードではミッションが最初のグループ、ボードではプロジェクトの直後に並びます。Enter でミッションを開きます。
|
|
70
71
|
|
|
71
72
|
## 知っておくとよいこと
|
|
72
73
|
|
|
@@ -4,20 +4,20 @@ O Specrails pode expor-se **a si próprio** a qualquer assistente de IA que fale
|
|
|
4
4
|
|
|
5
5
|
Este é o sentido oposto das funcionalidades de plugins e "Os meus MCPs aprovados": essas permitem que o Specrails *use* outros servidores MCP; esta permite que outras apps usem o **Specrails**.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Vem ativado de origem
|
|
8
8
|
|
|
9
|
-
Está **
|
|
9
|
+
Está **ativado por predefinição** — o servidor já está a correr na primeira vez que abre a app, sem reiniciar nem ligar nada. Abra **Definições ▸ MCP** para copiar a configuração de cliente, ou para o desligar se não o quiser.
|
|
10
10
|
|
|
11
11
|
Mantém o controlo *do que* uma IA externa pode fazer através de um conjunto de níveis de permissão:
|
|
12
12
|
|
|
13
13
|
| Nível | O que permite | Predefinição |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Leitura** | Listar e inspecionar projetos, specs, trabalhos, análises… | Sempre ativo (quando o MCP está ativado) |
|
|
16
|
-
| **Escrita** | Criar e editar specs, alterar definições e configuração de rails |
|
|
17
|
-
| **Invocação de IA** | Ações que correm uma IA e **custam dinheiro** (lançar um rail, gerar uma spec, enviar um turno de chat) |
|
|
18
|
-
| **Destrutivo** | Eliminar projetos/specs/trabalhos, parar trabalho em curso |
|
|
16
|
+
| **Escrita** | Criar e editar specs, alterar definições e configuração de rails | Ativado — desmarque para restringir |
|
|
17
|
+
| **Invocação de IA** | Ações que correm uma IA e **custam dinheiro** (lançar um rail, gerar uma spec, enviar um turno de chat) | Ativado — desmarque para restringir |
|
|
18
|
+
| **Destrutivo** | Eliminar projetos/specs/trabalhos, parar trabalho em curso | Ativado — desmarque para restringir |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Os quatro níveis vêm concedidos de origem, por isso um assistente ligado pode conduzir toda a app desde logo. Desmarque qualquer nível que prefira reservar para si; se depois o seu assistente tentar algo abrangido por esse nível, o Specrails recusa com uma mensagem clara que lhe diz qual o nível a voltar a ativar.
|
|
21
21
|
|
|
22
22
|
## Ligar o seu assistente
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <comando do bridge de Configurações ▸ MCP>
|
|
|
50
50
|
|
|
51
51
|
O cabeçalho `Authorization: Bearer <token>` também funciona. Se você mudou a porta do app, troque `4200`.
|
|
52
52
|
|
|
53
|
-
Uma vez ligado, o seu assistente vê
|
|
53
|
+
Uma vez ligado, o seu assistente vê **22 ferramentas** que cobrem a app inteira — projetos, specs, rails e trabalhos, chat/Explore, agentes, plugins, Jira, loops, o explorador de código, análises, definições — incluindo uma ferramenta de **guia** incorporada que lê primeiro, para que perceba como o Specrails funciona sem que lhe explique seja o que for.
|
|
54
|
+
|
|
55
|
+
Antes de agir, o assistente pode usar `specrails_context` para consultar o estado atual do projeto, das specs, das execuções e do Git. As secções indisponíveis são indicadas explicitamente; não significam que o projeto esteja vazio. `specrails_code(search)` procura texto no código-fonte e `read_file` lê intervalos específicos de linhas, indicando como continuar quando ainda há conteúdo.
|
|
56
|
+
|
|
57
|
+
Cada sessão MCP externa mantém a sua própria seleção de projeto. No modo Missão, o projeto predefinido é o que está fixado na conversa, que altera na interface da missão; uma seleção MCP não o pode substituir. Um `projectId` explícito permite direcionar intencionalmente uma operação para outro projeto.
|
|
54
58
|
|
|
55
59
|
## O que pode fazer com ele
|
|
56
60
|
|
|
57
|
-
Algumas receitas assim que o seu assistente estiver ligado.
|
|
61
|
+
Algumas receitas assim que o seu assistente estiver ligado. Está tudo ativo por predefinição; desmarque a **Escrita** ou a **Invocação de IA** em Definições ▸ MCP se por agora preferir que ele apenas observe.
|
|
58
62
|
|
|
59
63
|
**Transforme em specs o trabalho das suas outras ferramentas.** Se o seu assistente também tiver o GitHub, o Jira, o Gmail ou o Slack ligados, ele pode trazer esse trabalho para o Specrails por si:
|
|
60
64
|
> *"Pega nas issues abertas do GitHub desta semana com a etiqueta 'bug', cria uma spec para cada uma no projeto da API e lança-as."*
|
|
@@ -64,7 +68,7 @@ Algumas receitas assim que o seu assistente estiver ligado. Comece com a **Leitu
|
|
|
64
68
|
**Piloto automático durante a noite.** Deixe-o a correr com a app no tabuleiro (tray) e volte para encontrar um relatório:
|
|
65
69
|
> *"Aqui estão 12 ideias. Transforma cada uma numa spec, lança-as três de cada vez pelos rails, vigia todos os trabalhos e amanhã dá-me um resumo do que terminou, do que falhou e do que custou."*
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
Desmarque o **Destrutivo** e ele pode trabalhar a noite toda sem nunca eliminar nada.
|
|
68
72
|
|
|
69
73
|
**Em todos os seus projetos.** Algo que o painel não faz por si só:
|
|
70
74
|
> *"Verifica todos os meus projetos. Diz-me quais têm specs no backlog e nenhum rail a correr, e arranca o de prioridade mais alta em cada um."*
|
|
@@ -67,6 +67,7 @@ As respostas chegam de forma fluida e já formatadas (títulos, tabelas, listas)
|
|
|
67
67
|
- **Minimize sem perder nada.** Clique no ✕ para devolver o painel à bolha — a conversa continua rodando. Reabra e você chega na mensagem mais recente; nada é redigitado.
|
|
68
68
|
- **Nova conversa.** O botão **+** inicia um fio limpo; o histórico vive no nível da aplicação, acima de qualquer projeto individual.
|
|
69
69
|
- **Troque de missão.** O seletor de missões ao lado do seletor de projeto lista suas conversas da mais recente para a mais antiga — um ponto pulsante marca aquelas em que o agente ainda está trabalhando, e um pequeno selo conta as mensagens na fila. A busca aparece quando a lista passa de oito, e o ícone de lixeira de cada linha exclui uma missão após uma confirmação rápida em linha — mesmo uma em andamento (ele avisa primeiro e depois para o agente).
|
|
70
|
+
- **Encontre uma missão de qualquer lugar.** Pressione **⌘K** (ou o botão **Pesquisar** da barra lateral no modo Agente) e digite qualquer fragmento de que se lembre — uma palavra do título *ou* do que foi dito lá dentro. As missões coincidem na hora por título a partir da memória e, um instante depois, chegam as coincidências por conteúdo com o trecho destacado, mais o projeto fixado e quando teve atividade pela última vez. No modo Agente as missões são o primeiro grupo; no quadro ficam logo depois de Projetos. Enter abre a missão.
|
|
70
71
|
|
|
71
72
|
## Algumas coisas para saber
|
|
72
73
|
|
|
@@ -4,20 +4,20 @@ Specrails 可以把**自己**暴露给任何会说 [Model Context Protocol](http
|
|
|
4
4
|
|
|
5
5
|
这和插件以及「My approved MCPs」功能的方向正好相反:那些功能是让 Specrails 去*使用*别的 MCP 服务器;而这个功能是让别的应用来使用 **Specrails**。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 开箱即用
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
它**默认是开启的**——第一次打开应用时服务器就已经在运行,无需重启,也不用拨任何开关。打开 **Settings ▸ MCP** 可以复制客户端配置,或者在不需要时把它关掉。
|
|
10
10
|
|
|
11
11
|
通过一组权限层级,你可以始终掌控外部 AI 能透过它做*哪些*事:
|
|
12
12
|
|
|
13
13
|
| 层级 | 它允许什么 | 默认 |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| **Read** | 列出并查看项目、规格、任务、分析数据等等…… | 始终开启(在 MCP 启用时) |
|
|
16
|
-
| **Write** | 创建和编辑规格、修改设置与 rail 配置 |
|
|
17
|
-
| **AI-spawn** | 会运行 AI 并**产生费用**的操作(启动一条 rail、生成一份规格、发送一次聊天) |
|
|
18
|
-
| **Destructive** | 删除项目 / 规格 / 任务,停止正在运行的工作 |
|
|
16
|
+
| **Write** | 创建和编辑规格、修改设置与 rail 配置 | 开启——取消勾选即可限制 |
|
|
17
|
+
| **AI-spawn** | 会运行 AI 并**产生费用**的操作(启动一条 rail、生成一份规格、发送一次聊天) | 开启——取消勾选即可限制 |
|
|
18
|
+
| **Destructive** | 删除项目 / 规格 / 任务,停止正在运行的工作 | 开启——取消勾选即可限制 |
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
四个层级默认全部授予,所以接入的助手一开始就能驱动整个应用。把你想自己保留的层级取消勾选即可;之后如果助手试图做该层级涵盖的事,Specrails 会拒绝,并给出一条清晰的提示,告诉你该重新打开哪个层级。
|
|
21
21
|
|
|
22
22
|
## 连接你的助手
|
|
23
23
|
|
|
@@ -50,11 +50,15 @@ codex mcp add specrails -- <设置 ▸ MCP 中的 bridge 命令>
|
|
|
50
50
|
|
|
51
51
|
也可以使用 `Authorization: Bearer <token>` 请求头。如果修改过应用端口, 请替换 `4200`。
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
一旦连上,你的助手会看到 **22 个工具**,覆盖整个应用——项目、规格、rail 和任务、聊天 / Explore、agent、插件、Jira、loop、代码浏览器、分析、设置——其中包括一个内置的**指南(guide)**工具,它会先读这个工具,从而无需你解释任何东西就能理解 Specrails 是怎么运作的。
|
|
54
|
+
|
|
55
|
+
操作前,助手可以通过 `specrails_context` 了解项目、规格、执行任务和 Git 的当前状态。无法获取的部分会明确标注,并不表示项目为空。`specrails_code(search)` 用于搜索源代码中的文本,`read_file` 用于读取指定行范围;如果还有内容,会提供继续读取的信息。
|
|
56
|
+
|
|
57
|
+
每个外部 MCP 会话独立保存所选项目。在任务模式中,默认使用会话中固定的项目,需要在任务界面修改;MCP 的项目选择不能覆盖它。如果要有意操作另一个项目,可以明确传入 `projectId`。
|
|
54
58
|
|
|
55
59
|
## 你能用它做些什么
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
连上助手后,这里有几个上手的小配方。一切默认开启;如果你暂时只想让它观察,就在 Settings ▸ MCP 里取消勾选 **Write** 或 **AI-spawn**。
|
|
58
62
|
|
|
59
63
|
**把你其他工具里的工作变成规格。** 如果你的助手还连着 GitHub、Jira、Gmail 或 Slack,它就能替你把这些工作搬进 Specrails:
|
|
60
64
|
> *「把本周打了 'bug' 标签的开放 GitHub issue 拿过来,在 API 项目里为每个创建一份规格,然后启动它们。」*
|
|
@@ -64,7 +68,7 @@ codex mcp add specrails -- <设置 ▸ MCP 中的 bridge 命令>
|
|
|
64
68
|
**通宵自动驾驶。** 让应用待在托盘里跑着,回来时就能拿到一份报告:
|
|
65
69
|
> *「这里有 12 个点子。把每个变成一份规格,在 rail 上每次三个地启动它们,盯着每一个任务,明天给我一份总结:哪些完成了、哪些失败了、各花了多少钱。」*
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
取消勾选 **Destructive**,它就能跑一整夜而绝不会删掉任何东西。
|
|
68
72
|
|
|
69
73
|
**横跨你所有的项目。** 这是 dashboard 自己做不到的事:
|
|
70
74
|
> *「检查我所有的项目。告诉我哪些在 backlog 里有规格却没有 rail 在跑,并在每个项目里启动优先级最高的那一个。」*
|
|
@@ -66,6 +66,7 @@ spawn 前拒绝;详见 [Kimi matrix](../../../kimi.md)。
|
|
|
66
66
|
- **最小化,而不丢失。** 点击 ✕ 把面板收回气泡——对话仍在继续运行。重新打开时你会落在最新一条消息上;无需重新输入任何内容。
|
|
67
67
|
- **新建对话。** **+** 按钮开启一段全新的线程;历史记录存在于整个应用层面,凌驾于任何单个项目之上。
|
|
68
68
|
- **切换任务。** 项目选择器旁的任务选择器按从新到旧列出你的对话——跳动的圆点标记代理仍在工作的对话,小徽章显示排队消息的数量。列表超过八条时会出现搜索框;每行的垃圾桶图标在快速的行内确认后删除任务——即使是正在运行的任务(会先警告,然后停止代理)。
|
|
69
|
+
- **随时随地找到任务。** 按 **⌘K**(或代理模式下侧边栏的 **搜索** 按钮),输入你记得的任何片段——标题中的一个词,*或者* 对话里说过的内容。任务会立刻按标题从内存中匹配,紧接着按内容匹配的结果也会到达,并高亮匹配段落,同时显示固定的项目和最近活动时间。在代理模式下任务是第一组;在看板中紧跟在项目之后。按 Enter 打开任务。
|
|
69
70
|
|
|
70
71
|
## 一些需要知道的事
|
|
71
72
|
|
package/docs/internals/README.md
CHANGED
|
@@ -12,6 +12,7 @@ If you're a user looking for **how do I do X?** docs, head back to the [user gui
|
|
|
12
12
|
| [api-reference.md](api-reference.md) | REST endpoint catalogue under `/api/*` and `/api/projects/:projectId/*` |
|
|
13
13
|
| [configuration.md](configuration.md) | Settings, env vars, kill switches, advanced flags |
|
|
14
14
|
| [operations-runbook.md](operations-runbook.md) | Start/stop, port conflicts, recovery procedures, backups |
|
|
15
|
+
| [core-runtime-updates.md](core-runtime-updates.md) | Core runtime discovery, durable package updates, version reporting and recovery after partial workspace refresh |
|
|
15
16
|
| [openspec-workflow.md](openspec-workflow.md) | `opsx:*` change lifecycle — used by the app itself for structured change management |
|
|
16
17
|
| [adding-a-provider.md](adding-a-provider.md) | How to add a new AI CLI: one adapter file plus one entry in the registry |
|
|
17
18
|
| [profiles.md](profiles.md) | Agent profiles quick start: open the Agents section, pick a profile per rail at launch, author custom agents in Agent Studio. For the true file-format and snapshotting internals, read `server/profile-manager.ts` and the profile-manager section of `CLAUDE.md` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Embedded browser: performance + popup support
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The Playwright capture engine backs **Add Spec → From a website** (`BrowserCaptureModal`) and the screencast fallback for in-app browsing. Desktop browsing uses a native webview when available; this document covers the instrumented capture/fallback path, its tuning knobs, and OAuth popup handling. Local smoke timings below describe this pipeline, not a measured comparison with Cursor.
|
|
4
4
|
|
|
5
5
|
## Pipeline map
|
|
6
6
|
|
|
@@ -42,7 +42,9 @@ useBrowserCaptureSession (client) ───────────────
|
|
|
42
42
|
| **Ack-first screencast** — `screencastFrameAck` fires (fire-and-forget) *before* the handler/fan-out, overlapping Chromium's next capture with delivery. | `browser-playwright.ts` `startScreencast` | Higher fps ceiling, lower frame age. |
|
|
43
43
|
| **Wheel fast-path** — skip the redundant `mouse.move` when the cursor hasn't moved (tracked via `lastMouse`), and dispatch move+wheel back-to-back (`Promise.all`) so a concurrent wheel can't interleave between them. | `browser-playwright.ts` `dispatchInput` | ~2× fewer CDP commands per wheel; ordering hazard removed. |
|
|
44
44
|
| **Frame conflation for slow consumers** — skip a frame for any WS client whose `bufferedAmount` exceeds 1 MB (frames are independent JPEGs; `lastFrame` still updates). | `browser-capture-manager.ts` fan-out | Latency stays bounded under backpressure — staleness, not fps, is what reads as "sluggish". |
|
|
45
|
-
| **
|
|
45
|
+
| **Retina PNG capture** — the interactive page and JPEG stream keep their CSS dimensions; selected PNG regions are re-rasterized at display density (up to 2), bounded to a 3840×2400 viewport raster. | `browser-playwright.ts`, `browser-viewport.ts` | Higher-resolution capture artifacts without altering input units, page zoom, scroll, or responsive breakpoints. Desktop native browsing supplies Retina live rendering. |
|
|
46
|
+
| **Recoverable screencast startup** — partial CDP sessions are detached after rejection; the manager retries once, then closes the failed stream explicitly. Late frames from previous popup/root views are discarded. | Playwright handle + manager | A transient CDP failure no longer leaves a permanently blank, apparently ready session. |
|
|
47
|
+
| **Browser acceleration defaults** — no unconditional `--disable-gpu`; explicit compatibility override remains available. | `chromiumLaunchArgs` | Lets Chromium choose its rendering path; no universal measured speedup is claimed. |
|
|
46
48
|
| **Live URL bar** — `onNavigated` (main-frame `framenavigated`) broadcasts `nav` on in-page link clicks/redirects. | manager + playwright handle | URL bar no longer goes stale after clicking links. |
|
|
47
49
|
|
|
48
50
|
### Client
|
|
@@ -55,6 +57,42 @@ useBrowserCaptureSession (client) ───────────────
|
|
|
55
57
|
|
|
56
58
|
Select-mode hover-probe throttling (rAF + 40 ms) is untouched — element-picker precision is unchanged.
|
|
57
59
|
|
|
60
|
+
### Capture density and CDP streaming limitation
|
|
61
|
+
|
|
62
|
+
`resize` carries optional display `deviceScaleFactor` for **PNG capture density**;
|
|
63
|
+
`width`/`height`, pointer positions, DOM boxes, responsive presets, and capture
|
|
64
|
+
rectangles remain **CSS pixels**. Old clients without DPR remain supported.
|
|
65
|
+
The server normalizes finite dimensions and density, caps requested density to
|
|
66
|
+
`[1, 2]`, and lowers effective density when necessary to keep a full-viewport PNG
|
|
67
|
+
within 3840×2400. It serializes viewport changes and keeps only the newest pending
|
|
68
|
+
resize. The interactive Playwright context stays at its original DPR 1.
|
|
69
|
+
|
|
70
|
+
The **JPEG fallback stream remains 1 pixel per CSS pixel**. The native desktop
|
|
71
|
+
webview is the path for full-density live browsing. Several CDP alternatives were
|
|
72
|
+
tested and rejected rather than trading correctness for nominal frame dimensions:
|
|
73
|
+
|
|
74
|
+
- Context DPR 2 alone still emits a CSS-sized JPEG and changes delivered
|
|
75
|
+
`WheelEvent.deltaY` without changing native scroll distance.
|
|
76
|
+
- `setVisibleSize` plus `dontSetVisibleSize` enlarges the JPEG but leaves the
|
|
77
|
+
page in its upper-left quadrant with white padding. This caused the reported
|
|
78
|
+
quarter-page rendering regression.
|
|
79
|
+
- An explicit emulated `viewport` fills the raster at scroll zero but fixes a
|
|
80
|
+
document clip that stops following the viewport after scrolling.
|
|
81
|
+
- Top-level emulation `scale` fills the raster and follows scrolling, but
|
|
82
|
+
changes pointer coordinates and wheel-event units.
|
|
83
|
+
|
|
84
|
+
The production adapter therefore does **not** issue those emulation commands.
|
|
85
|
+
The smoke checks colored markers at all four edges of the decoded **JPEG** after
|
|
86
|
+
scroll/resize, as well as both DOM wheel deltas and actual native scroll distance.
|
|
87
|
+
|
|
88
|
+
High-density region screenshots use `Page.captureScreenshot` with **CSS** layout
|
|
89
|
+
metrics, scroll offsets, and `clip.scale` equal to effective capture density.
|
|
90
|
+
This leaves the interactive page untouched while re-rasterizing text/vector
|
|
91
|
+
detail. PNG dimensions are `rect × effective density` (rounded to pixels); the
|
|
92
|
+
DOM attachment still describes the original CSS rectangle. At density 1 the
|
|
93
|
+
existing Playwright capture path remains. A half-CSS-pixel stripe fixture verifies
|
|
94
|
+
detail missing from an interpolated 1× PNG, alongside diagonal/text comparisons.
|
|
95
|
+
|
|
58
96
|
## Popup support (OAuth login windows)
|
|
59
97
|
|
|
60
98
|
Pop-ups now work end-to-end — the design:
|
|
@@ -70,12 +108,12 @@ Pop-ups now work end-to-end — the design:
|
|
|
70
108
|
| Knob | Default | Effect |
|
|
71
109
|
|---|---|---|
|
|
72
110
|
| `SPECRAILS_BROWSER_SCREENCAST_QUALITY` (server env) | `70` | JPEG quality 1–100. Lower → smaller frames/higher fps; higher → crisper. |
|
|
111
|
+
| `SPECRAILS_BROWSER_DISABLE_GPU` (server env) | unset | Set exactly `true` to force Chromium software rendering for driver compatibility. |
|
|
73
112
|
| `localStorage['specrails-desktop:browser-capture-debug'] = '1'` (client) | off | Per-2s frame-pipeline stats in the console. |
|
|
74
113
|
| `MAX_CLIENT_BUFFERED_BYTES` (`browser-capture-manager.ts`) | 1 MB | WS backpressure threshold before frames are conflated per client. |
|
|
75
114
|
|
|
76
115
|
## Deferred / non-goals
|
|
77
116
|
|
|
78
|
-
- **DPR-aware streaming** (frames at `devicePixelRatio ×` for retina crispness) — costs 4× pixels; quality knob covers most of it. Revisit if crispness complaints appear.
|
|
79
117
|
- **Context prewarm on Add-Spec-modal open** — would shave the first-ever Chromium launch (~0.5–1 s); needs a hook outside the browser-capture surface. The shared context already persists across sessions, so only the first open pays it.
|
|
80
118
|
- **Input round-trip probe** — needs a server echo; the frame probe covers the visible symptom.
|
|
81
119
|
|
|
@@ -83,6 +121,20 @@ Pop-ups now work end-to-end — the design:
|
|
|
83
121
|
|
|
84
122
|
Unit coverage: `server/browser-capture-manager.test.ts` (deferred nav, conflation, full popup lifecycle), `server/browser-playwright.test.ts` (`screencastParams`), `server/project-router.browser.test.ts` (popup-view route), `client/src/lib/browser-frame-pipeline.test.ts` (latest-wins/drop/dispose/stats), `client/src/lib/browser-capture.test.ts` (coalescer, popup helpers).
|
|
85
123
|
|
|
124
|
+
`node scripts/smoke-browser-rendering.mjs` exercises the real exported Playwright
|
|
125
|
+
handle using generated pages and temporary profiles, with no Specrails DB or
|
|
126
|
+
external sites. It asserts fully painted CSS-sized JPEG frames, unchanged layout
|
|
127
|
+
and zoom, pointer/text/wheel input, resize, and correctly positioned PNG crops
|
|
128
|
+
at density 1, 2, and fractional 1.92 after scrolling (including 2000×1100 CSS).
|
|
129
|
+
It verifies real PNG detail against interpolated 1× images. It reports launch,
|
|
130
|
+
first-frame, input-command, received-frame
|
|
131
|
+
rate, and frame-byte diagnostics with acceleration defaults and the software
|
|
132
|
+
override. These timings exclude WS/client decoding and are not end-to-end input
|
|
133
|
+
latency. Earlier sample timings from the discarded enlarged-surface experiment
|
|
134
|
+
are intentionally omitted: a partly painted frame is not a valid performance
|
|
135
|
+
comparison. Run the smoke for current local diagnostics; no performance threshold
|
|
136
|
+
or Cursor-equivalence claim is asserted.
|
|
137
|
+
|
|
86
138
|
Manual QA feel-check list:
|
|
87
139
|
|
|
88
140
|
1. **Scroll fluidity** — open a long page (e.g. a docs site), trackpad-scroll fast: motion should track your fingers with no rubber-banding or seconds-later catch-up.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Browser authentication popup audit
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-05. Branch: `feat/codex-gpt-6-astra`.
|
|
4
|
+
|
|
5
|
+
## Scope and causes
|
|
6
|
+
|
|
7
|
+
The browser already supported first-level authentication windows. The audit found defects in nested windows, closure and asynchronous lifecycle handling, rather than a universal prohibition on `window.open`.
|
|
8
|
+
|
|
9
|
+
On macOS, a real WKWebView fixture reproduced two failures: the first popup's `on_new_window` handler explicitly denied another popup, and the installed Wry UI delegate did not implement `webViewDidClose:`. A page could deliver its authentication result with `postMessage` but leave its window open. The initial blank window, cross-origin redirects, shared cookies and opener relationship already worked.
|
|
10
|
+
|
|
11
|
+
The Chromium development path also completed the ordinary OAuth sequence. Regression tests reproduced missed children opened before subscription, closed pages adopted after an asynchronous opener lookup, missed closure notifications and an obsolete popup screencast failure disconnecting the whole session.
|
|
12
|
+
|
|
13
|
+
The review found two additional recovery problems in the streamed UI: browser navigation always targeted the root page even when a popup was visible, and switching back to the root changed the client optimistically while HTTP failures were ignored. Reloading a login could therefore reload its opener, or a failed view switch could enable root-page capture while the stream still showed the login.
|
|
14
|
+
|
|
15
|
+
## Implementation boundaries
|
|
16
|
+
|
|
17
|
+
- Native windows retain the engine-supplied `NewWindowFeatures`, including the opener configuration. They are actual related browser windows; an OAuth URL is not reopened in an unrelated browser profile.
|
|
18
|
+
- Nested native windows share the same pane owner and have a bounded live-window count. Closing a pane releases only its own windows. Creation failures produce an owner-scoped, localized error without exposing an OAuth URL or raw native error.
|
|
19
|
+
- The macOS close delegate handles only `webViewDidClose:` and forwards Wry's existing delegate behavior. It uses the public WebKit callback, without rewriting a site's JavaScript or exposing an application command to the page.
|
|
20
|
+
- Playwright subscription replay checks the direct opener, skips closed pages, deduplicates delivery and invalidates pending lookups when the parent closes. Late close subscriptions notify once. A superseded popup's failed CDP startup does not disconnect the opener.
|
|
21
|
+
- Streamed navigation targets the page selected when the action starts. Popup navigation returns `target: 'popup'` and does not replace or persist root-page metadata; the client takes popup metadata from the existing WebSocket events. View switching remains tied to server state, and failures remain visible without pretending a switch succeeded. Late responses are checked against the session, popup revision and latest switch request.
|
|
22
|
+
|
|
23
|
+
HTTP/HTTPS/about:blank navigation restrictions, Chromium request guards and the native app-command boundary remain enforced. This change does not disable browser origin isolation, alter an identity provider's COOP policy, or transfer cookies to the system browser.
|
|
24
|
+
|
|
25
|
+
## Reproducible acceptance checks
|
|
26
|
+
|
|
27
|
+
`node scripts/smoke-browser-popups.mjs` exercises the production Playwright page handle and session manager with temporary state and two synthetic local origins. It covers blank-window creation, cross-origin HTTP redirects, login input, cookies, `postMessage`, self-close, iframe-initiated login, nested second-factor windows, repeated immediate callbacks, late listener attachment and isolation between browser sessions.
|
|
28
|
+
|
|
29
|
+
The native popup fixture is under `src-tauri/examples/native-browser-popup-smoke.rs`. From `src-tauri`, run `cargo run --offline --example native-browser-popup-smoke --features native-browser-smoke` on macOS. It uses a temporary authentication fixture and an ephemeral browser store. It checks actual WebKit behavior, rather than substituting mocked window events: asynchronous opening, opener communication and cookies, nested windows, `_blank`, an iframe, immediate self-close, the window limit and retry, owner cleanup and denied remote app commands. The existing `native-browser-smoke` example also passes the Retina snapshot and selector regression checks after installing the popup delegate.
|
|
30
|
+
|
|
31
|
+
Unit and component regressions cover lifecycle races, navigation ownership, failed view switches and localized native popup errors. See the browser rendering and capture checks in [the Retina audit](browser-native-retina-audit.md) for the independent viewport and screenshot guarantees.
|
|
32
|
+
|
|
33
|
+
Completed checks for this patch:
|
|
34
|
+
|
|
35
|
+
- Server coverage: 282 files and 7,418 tests passed; 85.98% statements, 78.40% branches, 90.02% functions and 88.32% lines, with the existing thresholds.
|
|
36
|
+
- Client coverage: 354 files and 4,431 tests passed; 89.24% statements/lines, 83.00% branches and 74.58% functions, with the existing thresholds.
|
|
37
|
+
- Targeted popup checks: 120 server tests across the page handle, manager and HTTP routes; 61 client tests for the streamed browser and API; 63 client tests for the native pane, native API and locale parity.
|
|
38
|
+
- Rust: 26 library tests passed, plus `cargo check --offline --all-targets --features native-browser-smoke` and both actual WebKit smoke examples.
|
|
39
|
+
- Global TypeScript, the production server/client/CLI build and the Core 4.11.1 / Desktop 2.40.0 compatibility check passed.
|
|
40
|
+
|
|
41
|
+
No real Okta tenant, credentials, production database or user browser profile is used. Passing the synthetic OAuth flows does not certify every organization's identity-provider policy. Windows native behavior still needs a real Windows smoke run; macOS WebKit and Chromium are the locally exercised engines. Native changes require rebuilding the desktop application and do not replace an installed signed release.
|
|
42
|
+
|
|
43
|
+
## Reference
|
|
44
|
+
|
|
45
|
+
The [official Okta Auth JS documentation](https://github.com/okta/okta-auth-js/) describes popup flows that exchange results with `window.postMessage`, and a distinct redirect-based flow for external identity providers whose COOP headers separate browsing contexts. Preserving browser-native opener semantics is necessary; overriding those security policies in Specrails would not be a valid interoperability fix.
|