specrails-desktop 2.0.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/.claude/commands/specrails/batch-implement.md +287 -0
- package/.claude/commands/specrails/compat-check.md +271 -0
- package/.claude/commands/specrails/doctor.md +62 -0
- package/.claude/commands/specrails/enrich.md +1635 -0
- package/.claude/commands/specrails/explore-spec.md +173 -0
- package/.claude/commands/specrails/health-check.md +527 -0
- package/.claude/commands/specrails/implement.md +1457 -0
- package/.claude/commands/specrails/memory-inspect.md +259 -0
- package/.claude/commands/specrails/opsx-diff.md +419 -0
- package/.claude/commands/specrails/propose-spec.md +102 -0
- package/.claude/commands/specrails/reconfig.md +89 -0
- package/.claude/commands/specrails/refactor-recommender.md +212 -0
- package/.claude/commands/specrails/retry.md +363 -0
- package/.claude/commands/specrails/telemetry.md +552 -0
- package/.claude/commands/specrails/why.md +96 -0
- package/LICENSE +21 -0
- package/README.md +290 -0
- package/cli/dist/specrails-desktop.js +1098 -0
- package/client/dist/assets/ActivityFeedPage-Gy4x8dBt.js +1 -0
- package/client/dist/assets/AgentsPage-CPgu--Fb.js +86 -0
- package/client/dist/assets/AnalyticsPage-B5sJEee2.js +1 -0
- package/client/dist/assets/BarChart-7IMQ8HY1.js +33 -0
- package/client/dist/assets/CodePage-CBdFvbwe.js +2 -0
- package/client/dist/assets/DesktopAnalyticsPage-w0rdTq4w.js +1 -0
- package/client/dist/assets/DocsDialog-BZUYM7wm.js +11 -0
- package/client/dist/assets/DocsPage-9QglWl46.js +11 -0
- package/client/dist/assets/ExportDropdown-BLZFXtNi.js +1 -0
- package/client/dist/assets/IntegrationsPage-BxBE4y99.js +3 -0
- package/client/dist/assets/JobDetailPage-DydWx_5S.js +16 -0
- package/client/dist/assets/JobsPage-20ibw0IO.js +1 -0
- package/client/dist/assets/abap-Bw6f2wDG.js +1 -0
- package/client/dist/assets/activity-BEIp_Y1A.js +1 -0
- package/client/dist/assets/activity-BdrPln96.js +1 -0
- package/client/dist/assets/activity-CpkRS8Sx.js +1 -0
- package/client/dist/assets/activity-DKCpESPt.js +1 -0
- package/client/dist/assets/activity-DOUVEjJi.js +1 -0
- package/client/dist/assets/activity-DRwkql_y.js +1 -0
- package/client/dist/assets/activity-DcDQ7tjw.js +1 -0
- package/client/dist/assets/activity-Dv6H7wEr.js +1 -0
- package/client/dist/assets/addon-image-3WCl5Vhd.js +1 -0
- package/client/dist/assets/addon-ligatures-C5OdliKs.js +2 -0
- package/client/dist/assets/addon-webgl-BbX6pSjl.js +44 -0
- package/client/dist/assets/addspec-B5yl4Loj.js +1 -0
- package/client/dist/assets/addspec-BEeF5-zc.js +1 -0
- package/client/dist/assets/addspec-D33ocMxf.js +1 -0
- package/client/dist/assets/addspec-DFswZ0jK.js +1 -0
- package/client/dist/assets/addspec-DRE-jZv7.js +1 -0
- package/client/dist/assets/addspec-DVZ15Jp8.js +1 -0
- package/client/dist/assets/addspec-Fkv91Opc.js +1 -0
- package/client/dist/assets/addspec-GWm4ffKl.js +1 -0
- package/client/dist/assets/agents-1nCDWRmP.js +1 -0
- package/client/dist/assets/agents-Bm9rPqnt.js +1 -0
- package/client/dist/assets/agents-CMxtJMLD.js +1 -0
- package/client/dist/assets/agents-DK-Dlc0i.js +1 -0
- package/client/dist/assets/agents-Q6Ldfpxx.js +1 -0
- package/client/dist/assets/agents-TeOSy-ax.js +1 -0
- package/client/dist/assets/agents-iTqjRajS.js +1 -0
- package/client/dist/assets/agents-s87sMGzL.js +1 -0
- package/client/dist/assets/agentstudio-B6Wb59E7.js +1 -0
- package/client/dist/assets/agentstudio-BADhZ41e.js +1 -0
- package/client/dist/assets/agentstudio-BSnWLR63.js +1 -0
- package/client/dist/assets/agentstudio-BdidyBzZ.js +1 -0
- package/client/dist/assets/agentstudio-CxlUllqI.js +1 -0
- package/client/dist/assets/agentstudio-D3I62TLJ.js +1 -0
- package/client/dist/assets/agentstudio-DuH9TogZ.js +1 -0
- package/client/dist/assets/agentstudio-Kw88_dUF.js +1 -0
- package/client/dist/assets/aiedit-BWxHGsYA.js +1 -0
- package/client/dist/assets/aiedit-D2ji6Qy0.js +1 -0
- package/client/dist/assets/aiedit-DAhZTvtk.js +1 -0
- package/client/dist/assets/aiedit-DJMny-D5.js +1 -0
- package/client/dist/assets/aiedit-DOcxERkU.js +1 -0
- package/client/dist/assets/aiedit-DvrcbwGv.js +1 -0
- package/client/dist/assets/aiedit-TTwzL1TS.js +1 -0
- package/client/dist/assets/aiedit-WBSjT_C1.js +1 -0
- package/client/dist/assets/analytics-BIdr0YfL.js +1 -0
- package/client/dist/assets/analytics-C6EzgtdE.js +1 -0
- package/client/dist/assets/analytics-C9Zc-rkM.js +1 -0
- package/client/dist/assets/analytics-CVx3YOc0.js +1 -0
- package/client/dist/assets/analytics-CYj0tfj7.js +1 -0
- package/client/dist/assets/analytics-CnY4kNG3.js +1 -0
- package/client/dist/assets/analytics-CrPCZRJ-.js +1 -0
- package/client/dist/assets/analytics-DMCto-TF.js +1 -0
- package/client/dist/assets/apex-Cw8_REBo.js +1 -0
- package/client/dist/assets/atom-one-dark-B-oHczHB.css +1 -0
- package/client/dist/assets/attachments-BIsSSnHJ.js +1 -0
- package/client/dist/assets/attachments-BW4L3l2L.js +1 -0
- package/client/dist/assets/attachments-Bcf6BG6V.js +1 -0
- package/client/dist/assets/attachments-Bke8sCU4.js +1 -0
- package/client/dist/assets/attachments-COcrGRFz.js +1 -0
- package/client/dist/assets/attachments-DYHGA2Dj.js +1 -0
- package/client/dist/assets/attachments-Dd92KpUH.js +1 -0
- package/client/dist/assets/attachments-DzdU6DV6.js +1 -0
- package/client/dist/assets/azcli-Cz6HAoOw.js +1 -0
- package/client/dist/assets/bat-CcJ-xyqL.js +1 -0
- package/client/dist/assets/bicep-z1WDCKYz.js +2 -0
- package/client/dist/assets/browser-5ErDlJoR.js +1 -0
- package/client/dist/assets/browser-Bc-YdlVg.js +1 -0
- package/client/dist/assets/browser-BlYF4OOq.js +1 -0
- package/client/dist/assets/browser-CT-ReZGt.js +1 -0
- package/client/dist/assets/browser-DGITz3fC.js +1 -0
- package/client/dist/assets/browser-JsAIGCEW.js +1 -0
- package/client/dist/assets/browser-M5-rbPlw.js +1 -0
- package/client/dist/assets/browser-Qya9cARy.js +1 -0
- package/client/dist/assets/cameligo-BRewOpfa.js +1 -0
- package/client/dist/assets/chat-BEGuC03z.js +1 -0
- package/client/dist/assets/chat-BEW60P_u.js +1 -0
- package/client/dist/assets/chat-BQNMD0PL.js +1 -0
- package/client/dist/assets/chat-BsbNGPW9.js +1 -0
- package/client/dist/assets/chat-CboQguCi.js +1 -0
- package/client/dist/assets/chat-DRCa9pOt.js +1 -0
- package/client/dist/assets/chat-DwUm6W9z.js +1 -0
- package/client/dist/assets/chat-yoXwguQu.js +1 -0
- package/client/dist/assets/chunk-CilyBKbf.js +1 -0
- package/client/dist/assets/clojure-DBjRWN6g.js +1 -0
- package/client/dist/assets/clsx-DnqN-uhr.js +1 -0
- package/client/dist/assets/code-AL1rVIMb.js +1 -0
- package/client/dist/assets/code-C0BKpkht.js +1 -0
- package/client/dist/assets/code-C0FTS3ew.js +1 -0
- package/client/dist/assets/code-CPcHxzxw.js +1 -0
- package/client/dist/assets/code-D3ryDniw.js +1 -0
- package/client/dist/assets/code-D3zVVQTj.js +1 -0
- package/client/dist/assets/code-PCmfS3dn.js +1 -0
- package/client/dist/assets/code-exI0G5Wd.js +1 -0
- package/client/dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- package/client/dist/assets/coffee-Cfk_XHGR.js +1 -0
- package/client/dist/assets/commands-B772IyDa.js +1 -0
- package/client/dist/assets/commands-BDDp6xFG.js +1 -0
- package/client/dist/assets/commands-CJxCry-o.js +1 -0
- package/client/dist/assets/commands-CfgY-_of.js +1 -0
- package/client/dist/assets/commands-DLrvnPNg.js +1 -0
- package/client/dist/assets/commands-IXMOKBYt.js +1 -0
- package/client/dist/assets/commands-UD1NzmwX.js +1 -0
- package/client/dist/assets/commands-sqrqsxyE.js +1 -0
- package/client/dist/assets/common-DCr6VzJ7.js +1 -0
- package/client/dist/assets/common-Dard9UNH.js +1 -0
- package/client/dist/assets/common-DeDELLZJ.js +1 -0
- package/client/dist/assets/common-DltqHaAe.js +1 -0
- package/client/dist/assets/common-Dmm1GhdD.js +1 -0
- package/client/dist/assets/common-DnjcgkPH.js +1 -0
- package/client/dist/assets/common-GbpxfPG8.js +1 -0
- package/client/dist/assets/common-wA36jmj1.js +1 -0
- package/client/dist/assets/cpp-BVob6BaP.js +1 -0
- package/client/dist/assets/csharp-C4fbRuOu.js +1 -0
- package/client/dist/assets/csp-DthFP_vT.js +1 -0
- package/client/dist/assets/css-CGMH0hcW.js +3 -0
- package/client/dist/assets/css.worker-Wv5dxAWO.js +89 -0
- package/client/dist/assets/cssMode-Cc6ozl-J.js +1 -0
- package/client/dist/assets/cypher-Pnf68BRV.js +1 -0
- package/client/dist/assets/dart-PMMOtxZX.js +1 -0
- package/client/dist/assets/dashboard-B4ixDVk8.js +1 -0
- package/client/dist/assets/dashboard-BZBADHSj.js +1 -0
- package/client/dist/assets/dashboard-C1MfeUHs.js +1 -0
- package/client/dist/assets/dashboard-C7SK6xu5.js +1 -0
- package/client/dist/assets/dashboard-CB6Le1yN.js +1 -0
- package/client/dist/assets/dashboard-CoTpMOBM.js +1 -0
- package/client/dist/assets/dashboard-Duo4DDCW.js +1 -0
- package/client/dist/assets/dashboard-I19DXBxw.js +1 -0
- package/client/dist/assets/dist-js-BY-Fv_fg.js +1 -0
- package/client/dist/assets/dist-js-Bakc4uxT.js +1 -0
- package/client/dist/assets/dockerfile-di1nsJCc.js +1 -0
- package/client/dist/assets/ecl-D_WVcB5M.js +1 -0
- package/client/dist/assets/editor-Br_kD0ds.css +1 -0
- package/client/dist/assets/editor.api2-XLGzZfbc.js +872 -0
- package/client/dist/assets/editor.main-CfXxHimg.js +6 -0
- package/client/dist/assets/editor.worker-Bd9IXS8d.js +26 -0
- package/client/dist/assets/elixir-OAdJEMOn.js +1 -0
- package/client/dist/assets/explore-4mFpnrKU.js +1 -0
- package/client/dist/assets/explore-A8Ltoblq.js +1 -0
- package/client/dist/assets/explore-B9A3iN2W.js +1 -0
- package/client/dist/assets/explore-BV5Xxlsn.js +1 -0
- package/client/dist/assets/explore-BrBJvfjP.js +1 -0
- package/client/dist/assets/explore-C3FSE42C.js +1 -0
- package/client/dist/assets/explore-D2EFgt8J.js +1 -0
- package/client/dist/assets/explore-hFc3HFcp.js +1 -0
- package/client/dist/assets/flow9-D3QEZjgn.js +1 -0
- package/client/dist/assets/format-command-CwGuwzGA.js +1 -0
- package/client/dist/assets/freemarker2-DP7J1gG3.js +3 -0
- package/client/dist/assets/fsharp-BF0k_8N8.js +1 -0
- package/client/dist/assets/go-BAQO5Jsz.js +1 -0
- package/client/dist/assets/graphql-hdFVFkiV.js +1 -0
- package/client/dist/assets/handlebars-BjRlucw6.js +1 -0
- package/client/dist/assets/hcl-DWnl1o-X.js +1 -0
- package/client/dist/assets/html-OumBQJ-U.js +1 -0
- package/client/dist/assets/html.worker-CQP8QQsS.js +502 -0
- package/client/dist/assets/htmlMode-CStc3zXM.js +1 -0
- package/client/dist/assets/index-CimDRRi7.css +2 -0
- package/client/dist/assets/index-XGZaKl_u.js +142 -0
- package/client/dist/assets/ini-CB-6OVu3.js +1 -0
- package/client/dist/assets/integrations-C3p12Ms6.js +1 -0
- package/client/dist/assets/integrations-Cr6hH7XR.js +1 -0
- package/client/dist/assets/integrations-Cublz3m6.js +1 -0
- package/client/dist/assets/integrations-D28q1kF6.js +1 -0
- package/client/dist/assets/integrations-DRdbki5W.js +1 -0
- package/client/dist/assets/integrations-DaC4SzzL.js +1 -0
- package/client/dist/assets/integrations-DmQYCUvN.js +1 -0
- package/client/dist/assets/integrations-HIlUxXVs.js +1 -0
- package/client/dist/assets/java-d1CmfiHX.js +1 -0
- package/client/dist/assets/javascript-CMk--e7g.js +1 -0
- package/client/dist/assets/jobs-BE1siB0M.js +1 -0
- package/client/dist/assets/jobs-BHcQ_Faf.js +1 -0
- package/client/dist/assets/jobs-CFfc2dNX.js +1 -0
- package/client/dist/assets/jobs-CSi5n8X_.js +1 -0
- package/client/dist/assets/jobs-Dc3X86PY.js +1 -0
- package/client/dist/assets/jobs-De5tASex.js +1 -0
- package/client/dist/assets/jobs-DsoXEdo7.js +1 -0
- package/client/dist/assets/jobs-Wl-ApPMb.js +1 -0
- package/client/dist/assets/json.worker-DzV-CpCQ.js +58 -0
- package/client/dist/assets/jsonMode-C2h3ZcjZ.js +7 -0
- package/client/dist/assets/julia-Bgv08lKa.js +1 -0
- package/client/dist/assets/kotlin-u98kaVTf.js +1 -0
- package/client/dist/assets/less-CjYwpgg5.js +2 -0
- package/client/dist/assets/lexon-YTjaAFBB.js +1 -0
- package/client/dist/assets/lib-CPxTMOAq.js +7 -0
- package/client/dist/assets/liquid-mI3KJrBE.js +1 -0
- package/client/dist/assets/lspLanguageFeatures-DU09ggWi.js +4 -0
- package/client/dist/assets/lua-BzmkWv27.js +1 -0
- package/client/dist/assets/m3-CFwk9fw0.js +1 -0
- package/client/dist/assets/markdown-CR5iMpSZ.js +1 -0
- package/client/dist/assets/mdx-C41VDTR_.js +1 -0
- package/client/dist/assets/mips-CcEalc17.js +1 -0
- package/client/dist/assets/monaco.contribution-CPObAXMC.js +2 -0
- package/client/dist/assets/msdax-BQbkawnr.js +1 -0
- package/client/dist/assets/mysql-GTlaaW_P.js +1 -0
- package/client/dist/assets/nav-0fwkrgHt.js +1 -0
- package/client/dist/assets/nav-BEL3MTwK.js +1 -0
- package/client/dist/assets/nav-B_G-TJDW.js +1 -0
- package/client/dist/assets/nav-C2YXcbZS.js +1 -0
- package/client/dist/assets/nav-ClzOE4mA.js +1 -0
- package/client/dist/assets/nav-CtYwmMgu.js +1 -0
- package/client/dist/assets/nav-D2bOGSEg.js +1 -0
- package/client/dist/assets/nav-iH1V5j6o.js +1 -0
- package/client/dist/assets/objective-c-Byu1T5if.js +1 -0
- package/client/dist/assets/pascal-BrfzBfRm.js +1 -0
- package/client/dist/assets/pascaligo-BXXKFUeo.js +1 -0
- package/client/dist/assets/perl-B3OikKq-.js +1 -0
- package/client/dist/assets/pgsql-CTsa0Acc.js +1 -0
- package/client/dist/assets/php-DiQh3FUW.js +1 -0
- package/client/dist/assets/pla-92uH8Fzm.js +1 -0
- package/client/dist/assets/postiats-BbeWkKUr.js +1 -0
- package/client/dist/assets/powerquery-DgDMzpsm.js +1 -0
- package/client/dist/assets/powershell-BfdUUzaG.js +1 -0
- package/client/dist/assets/preload-helper-DSXbuxSR.js +1 -0
- package/client/dist/assets/protobuf-BojW2ftW.js +2 -0
- package/client/dist/assets/pug-BxqTg3IU.js +1 -0
- package/client/dist/assets/python-Y27rKQtk.js +1 -0
- package/client/dist/assets/qsharp-BX_A-MW9.js +1 -0
- package/client/dist/assets/r-D9BMnxvJ.js +1 -0
- package/client/dist/assets/razor-Cd5-q9Bp.js +1 -0
- package/client/dist/assets/redis-5cJqEQJJ.js +1 -0
- package/client/dist/assets/redshift-d8BBqiwb.js +1 -0
- package/client/dist/assets/restructuredtext-C8a6yIcZ.js +1 -0
- package/client/dist/assets/ruby-egeh-6KX.js +1 -0
- package/client/dist/assets/rust-a3r9IInB.js +1 -0
- package/client/dist/assets/sb-y8iRIDei.js +1 -0
- package/client/dist/assets/scala-BPDK2AmK.js +1 -0
- package/client/dist/assets/scheme-BIWUEoOs.js +1 -0
- package/client/dist/assets/scss-CA-PSzwg.js +3 -0
- package/client/dist/assets/settings-55oDcbSh.js +1 -0
- package/client/dist/assets/settings-Bd4Tq1RB.js +1 -0
- package/client/dist/assets/settings-CCSM-Fhn.js +1 -0
- package/client/dist/assets/settings-D3e_bDoW.js +1 -0
- package/client/dist/assets/settings-DKbTkbn7.js +1 -0
- package/client/dist/assets/settings-Dxpo6_w7.js +1 -0
- package/client/dist/assets/settings-bt84e3Aa.js +1 -0
- package/client/dist/assets/settings-nu68QukM.js +1 -0
- package/client/dist/assets/setup-BMqwfbW9.js +1 -0
- package/client/dist/assets/setup-Bb5LcG28.js +1 -0
- package/client/dist/assets/setup-BeEx2_da.js +1 -0
- package/client/dist/assets/setup-CCCrB53Q.js +1 -0
- package/client/dist/assets/setup-CJA0ATmd.js +1 -0
- package/client/dist/assets/setup-CeiDbZcb.js +1 -0
- package/client/dist/assets/setup-Cus7TApA.js +1 -0
- package/client/dist/assets/setup-D9qOs2Xo.js +1 -0
- package/client/dist/assets/shell--LiT1Bja.js +1 -0
- package/client/dist/assets/solidity-DdqZccZg.js +1 -0
- package/client/dist/assets/sophia-S6-YxNG_.js +1 -0
- package/client/dist/assets/sparql-BSf5kMp2.js +1 -0
- package/client/dist/assets/specs-BFfu3u-a.js +1 -0
- package/client/dist/assets/specs-B__C8-8a.js +1 -0
- package/client/dist/assets/specs-CZ1PsXsC.js +1 -0
- package/client/dist/assets/specs-D2FzlLn9.js +1 -0
- package/client/dist/assets/specs-DaUTrNF9.js +1 -0
- package/client/dist/assets/specs-Dyc5hYeE.js +1 -0
- package/client/dist/assets/specs-cKEh2LXt.js +1 -0
- package/client/dist/assets/specs-k0PyLDVt.js +1 -0
- package/client/dist/assets/sql-D7KgjR8G.js +1 -0
- package/client/dist/assets/st-BnoDa-Ml.js +1 -0
- package/client/dist/assets/swift-DEUHTkUX.js +1 -0
- package/client/dist/assets/systemverilog-Tqb_KPnW.js +1 -0
- package/client/dist/assets/tcl-BmBFS2qq.js +1 -0
- package/client/dist/assets/terminal-80yDMgMF.js +1 -0
- package/client/dist/assets/terminal-Bje4ziIa.js +1 -0
- package/client/dist/assets/terminal-C2WYcFHF.js +1 -0
- package/client/dist/assets/terminal-CSONJOex.js +1 -0
- package/client/dist/assets/terminal-DEqzGtcr.js +1 -0
- package/client/dist/assets/terminal-DeWzh6ys.js +1 -0
- package/client/dist/assets/terminal-YOlsJCQj.js +1 -0
- package/client/dist/assets/terminal-lkZYR4wJ.js +1 -0
- package/client/dist/assets/tickets-CB7N30gm.js +1 -0
- package/client/dist/assets/tickets-CF2PYelu.js +1 -0
- package/client/dist/assets/tickets-DNOANUXr.js +1 -0
- package/client/dist/assets/tickets-DU1aqsbr.js +1 -0
- package/client/dist/assets/tickets-DYvafSaY.js +1 -0
- package/client/dist/assets/tickets-DlpC_iTg.js +1 -0
- package/client/dist/assets/tickets-DucYgtdl.js +1 -0
- package/client/dist/assets/tickets-clefmXLv.js +1 -0
- package/client/dist/assets/ts.worker-METxwbDZ.js +67719 -0
- package/client/dist/assets/tsMode-B0y_xEci.js +11 -0
- package/client/dist/assets/twig-BQV8igWC.js +1 -0
- package/client/dist/assets/typescript-BzK0OgwW.js +1 -0
- package/client/dist/assets/typespec-DlFroUGY.js +1 -0
- package/client/dist/assets/useProjectCache-DSaiGFjV.js +1 -0
- package/client/dist/assets/vb-BlrJpIMX.js +1 -0
- package/client/dist/assets/wgsl-BWgIc6FZ.js +298 -0
- package/client/dist/assets/workers-rt--R2Qy.js +1 -0
- package/client/dist/assets/xml-eX9QXAmI.js +1 -0
- package/client/dist/assets/yaml-fcsNkpOt.js +1 -0
- package/client/dist/index.html +246 -0
- package/docs/README.md +54 -0
- package/docs/cli.md +198 -0
- package/docs/codex.md +210 -0
- package/docs/creating-specs.md +197 -0
- package/docs/customizing.md +197 -0
- package/docs/getting-started.md +140 -0
- package/docs/internals/README.md +25 -0
- package/docs/internals/adding-a-provider.md +238 -0
- package/docs/internals/api-reference.md +634 -0
- package/docs/internals/architecture.md +332 -0
- package/docs/internals/configuration.md +172 -0
- package/docs/internals/openspec-workflow.md +282 -0
- package/docs/internals/operations-runbook.md +198 -0
- package/docs/internals/profiles.md +152 -0
- package/docs/platforms/macos.md +130 -0
- package/docs/platforms/windows.md +81 -0
- package/docs/running-pipelines.md +240 -0
- package/docs/terminal.md +138 -0
- package/docs/tracking-cost.md +155 -0
- package/package.json +82 -0
- package/server/dist/agent-generator.js +232 -0
- package/server/dist/agent-refine-db.js +124 -0
- package/server/dist/agent-refine-manager.js +526 -0
- package/server/dist/ai-invocations.js +111 -0
- package/server/dist/attachment-manager.js +299 -0
- package/server/dist/auth.js +207 -0
- package/server/dist/binary-probe.js +35 -0
- package/server/dist/browser-capture-manager.js +576 -0
- package/server/dist/browser-capture-types.js +28 -0
- package/server/dist/browser-network.js +149 -0
- package/server/dist/browser-playwright.js +888 -0
- package/server/dist/build-dirs.js +44 -0
- package/server/dist/changes-reader.js +120 -0
- package/server/dist/chat-manager.js +1060 -0
- package/server/dist/chromium-resolver.js +311 -0
- package/server/dist/code-explorer-router.js +788 -0
- package/server/dist/codex-otel-bridge.js +235 -0
- package/server/dist/command-resolver.js +102 -0
- package/server/dist/config.js +306 -0
- package/server/dist/context-budget.js +113 -0
- package/server/dist/context-scope.js +279 -0
- package/server/dist/contract-refine-runner.js +521 -0
- package/server/dist/core-compat.js +207 -0
- package/server/dist/core-package.js +14 -0
- package/server/dist/db.js +1034 -0
- package/server/dist/desktop-analytics.js +156 -0
- package/server/dist/desktop-db.js +456 -0
- package/server/dist/desktop-router.js +735 -0
- package/server/dist/docs-router.js +207 -0
- package/server/dist/explore-contract-refine.js +421 -0
- package/server/dist/explore-cwd-manager.js +242 -0
- package/server/dist/explore-draft-title.js +47 -0
- package/server/dist/explore-smash.js +450 -0
- package/server/dist/feature-flags.js +17 -0
- package/server/dist/file-provenance.js +382 -0
- package/server/dist/file-summary-generator.js +221 -0
- package/server/dist/file-summary-manager.js +689 -0
- package/server/dist/hooks.js +102 -0
- package/server/dist/ids.js +7 -0
- package/server/dist/index.js +586 -0
- package/server/dist/metrics.js +136 -0
- package/server/dist/mobile/index.js +16 -0
- package/server/dist/mobile/mobile-admin-router.js +84 -0
- package/server/dist/mobile/mobile-auth.js +67 -0
- package/server/dist/mobile/mobile-devices.js +80 -0
- package/server/dist/mobile/mobile-event-bus.js +39 -0
- package/server/dist/mobile/mobile-gateway.js +285 -0
- package/server/dist/mobile/mobile-mdns.js +81 -0
- package/server/dist/mobile/mobile-pairing.js +179 -0
- package/server/dist/mobile/mobile-redact.js +53 -0
- package/server/dist/mobile/mobile-router.js +411 -0
- package/server/dist/mobile/mobile-tls.js +86 -0
- package/server/dist/mobile/mobile-types.js +9 -0
- package/server/dist/mobile/mobile-ws.js +275 -0
- package/server/dist/path-resolver.js +298 -0
- package/server/dist/plugin-manager.js +617 -0
- package/server/dist/plugins/claude-approval.js +179 -0
- package/server/dist/plugins/claude-md-mutation.js +146 -0
- package/server/dist/plugins/codex-mcp.js +108 -0
- package/server/dist/plugins/contributors.js +72 -0
- package/server/dist/plugins/drift.js +58 -0
- package/server/dist/plugins/index.js +14 -0
- package/server/dist/plugins/json-mutation.js +120 -0
- package/server/dist/plugins/manager.js +32 -0
- package/server/dist/plugins/ownership.js +86 -0
- package/server/dist/plugins/paths.js +37 -0
- package/server/dist/plugins/prereq-installer.js +104 -0
- package/server/dist/plugins/rail-integration.js +79 -0
- package/server/dist/plugins/serena/index.js +13 -0
- package/server/dist/plugins/serena/install.js +91 -0
- package/server/dist/plugins/serena/instructions-content.js +21 -0
- package/server/dist/plugins/serena/manifest.js +111 -0
- package/server/dist/plugins/serena/verify.js +78 -0
- package/server/dist/plugins-router.js +215 -0
- package/server/dist/pricing.js +89 -0
- package/server/dist/profile-manager.js +310 -0
- package/server/dist/profiles-router.js +759 -0
- package/server/dist/project-registry.js +443 -0
- package/server/dist/project-router.js +4016 -0
- package/server/dist/proposal-manager.js +291 -0
- package/server/dist/provider-selection.js +69 -0
- package/server/dist/providers/claude-adapter.js +281 -0
- package/server/dist/providers/codex-adapter.js +264 -0
- package/server/dist/providers/index.js +23 -0
- package/server/dist/providers/registry.js +37 -0
- package/server/dist/providers/types.js +22 -0
- package/server/dist/queue-manager.js +1511 -0
- package/server/dist/rails-router.js +362 -0
- package/server/dist/rails-store.js +116 -0
- package/server/dist/result-event.js +106 -0
- package/server/dist/schemas/profile.v1.json +151 -0
- package/server/dist/setup-manager.js +1165 -0
- package/server/dist/setup-prerequisites.js +372 -0
- package/server/dist/smash-runner.js +663 -0
- package/server/dist/spec-draft-parser.js +133 -0
- package/server/dist/spec-launcher-manager.js +174 -0
- package/server/dist/spec-models.js +32 -0
- package/server/dist/specrails-tech-client.js +82 -0
- package/server/dist/spending.js +448 -0
- package/server/dist/telemetry-compactor.js +180 -0
- package/server/dist/telemetry-export.js +317 -0
- package/server/dist/telemetry-receiver.js +224 -0
- package/server/dist/terminal-manager.js +633 -0
- package/server/dist/terminal-marks-store.js +117 -0
- package/server/dist/terminal-osc-parser.js +159 -0
- package/server/dist/terminal-settings.js +282 -0
- package/server/dist/terminal-shell-integration.js +196 -0
- package/server/dist/ticket-broadcast.js +47 -0
- package/server/dist/ticket-store.js +397 -0
- package/server/dist/ticket-watcher.js +117 -0
- package/server/dist/types.js +10 -0
- package/server/dist/user-mcp-config.js +117 -0
- package/server/dist/util/cli-prompt.js +181 -0
- package/server/dist/util/secure-fs.js +50 -0
- package/server/dist/util/win-spawn.js +43 -0
- package/server/dist/webhook-manager.js +89 -0
- package/server/dist/ws-routing.js +47 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<!--
|
|
7
|
+
Content-Security-Policy (B7). 'unsafe-inline'/'unsafe-eval' are required by
|
|
8
|
+
the inline anti-FOUC script, Tailwind's injected styles, the Vite dev runtime,
|
|
9
|
+
and Monaco — so script/style stay permissive. The value comes from locking
|
|
10
|
+
down what we CAN without breaking the app: connect only to self + the local
|
|
11
|
+
sidecar (http/ws on localhost/127.0.0.1) and https/wss; no <object>, no
|
|
12
|
+
<base> hijack, and no framing (anti-clickjacking).
|
|
13
|
+
-->
|
|
14
|
+
<meta
|
|
15
|
+
http-equiv="Content-Security-Policy"
|
|
16
|
+
content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:* https: wss:; worker-src 'self' blob:; child-src 'self' blob:; object-src 'none'; base-uri 'self'; frame-ancestors 'none'"
|
|
17
|
+
/>
|
|
18
|
+
<title>Specrails</title>
|
|
19
|
+
<!--
|
|
20
|
+
Anti-FOUC: read the cached theme synchronously and apply it to <html>
|
|
21
|
+
BEFORE Vite's module bundle loads. Without this, every boot would flash
|
|
22
|
+
the default Dracula palette for one frame before the chosen theme
|
|
23
|
+
paints. Allow-list matches THEME_IDS in client/src/lib/themes.ts.
|
|
24
|
+
-->
|
|
25
|
+
<script>
|
|
26
|
+
(function () {
|
|
27
|
+
// One-time migration: legacy `specrails-hub:*` localStorage keys are
|
|
28
|
+
// renamed to `specrails-desktop:*` (Specrails Hub → Specrails rebrand).
|
|
29
|
+
// Must run BEFORE the anti-FOUC theme/language reads below so the very
|
|
30
|
+
// first paint after an upgrade still honours the user's saved settings.
|
|
31
|
+
try {
|
|
32
|
+
var legacyPrefix = 'specrails-hub:'
|
|
33
|
+
var newPrefix = 'specrails-desktop:'
|
|
34
|
+
var legacyKeys = []
|
|
35
|
+
for (var i = 0; i < localStorage.length; i++) {
|
|
36
|
+
var key = localStorage.key(i)
|
|
37
|
+
if (key && key.indexOf(legacyPrefix) === 0) legacyKeys.push(key)
|
|
38
|
+
}
|
|
39
|
+
for (var j = 0; j < legacyKeys.length; j++) {
|
|
40
|
+
var oldKey = legacyKeys[j]
|
|
41
|
+
var renamed = newPrefix + oldKey.slice(legacyPrefix.length)
|
|
42
|
+
if (localStorage.getItem(renamed) === null) {
|
|
43
|
+
localStorage.setItem(renamed, localStorage.getItem(oldKey))
|
|
44
|
+
}
|
|
45
|
+
localStorage.removeItem(oldKey)
|
|
46
|
+
}
|
|
47
|
+
} catch (_) { /* storage unavailable — nothing to migrate */ }
|
|
48
|
+
try {
|
|
49
|
+
var k = 'specrails-desktop:ui-theme'
|
|
50
|
+
var allowed = ['dracula', 'aurora-light', 'obsidian-dark', 'matrix', 'specrails']
|
|
51
|
+
var v = localStorage.getItem(k)
|
|
52
|
+
document.documentElement.dataset.theme =
|
|
53
|
+
v && allowed.indexOf(v) !== -1 ? v : 'specrails'
|
|
54
|
+
} catch (_) {
|
|
55
|
+
document.documentElement.dataset.theme = 'specrails'
|
|
56
|
+
}
|
|
57
|
+
})()
|
|
58
|
+
</script>
|
|
59
|
+
<!--
|
|
60
|
+
Inline splash: renders instantly while the JS bundle parses + initAuth()
|
|
61
|
+
polls the sidecar. Faded out as soon as React mounts (see main.tsx).
|
|
62
|
+
-->
|
|
63
|
+
<style>
|
|
64
|
+
/* Theme-aware splash. Three CSS variables set at <html> level by the
|
|
65
|
+
anti-FOUC boot script via [data-theme="..."]; the splash reads them
|
|
66
|
+
so the loading screen always matches the user's chosen theme. */
|
|
67
|
+
html[data-theme="dracula"] {
|
|
68
|
+
--splash-bg: #282a36;
|
|
69
|
+
--splash-fg: #f8f8f2;
|
|
70
|
+
--splash-primary: #bd93f9;
|
|
71
|
+
--splash-secondary: #ff79c6;
|
|
72
|
+
--splash-muted: #6272a4;
|
|
73
|
+
}
|
|
74
|
+
html[data-theme="aurora-light"] {
|
|
75
|
+
--splash-bg: #fafbfd;
|
|
76
|
+
--splash-fg: #1a1d2b;
|
|
77
|
+
--splash-primary: #5733e0;
|
|
78
|
+
--splash-secondary: #d62a85;
|
|
79
|
+
--splash-muted: #5b6178;
|
|
80
|
+
}
|
|
81
|
+
html[data-theme="obsidian-dark"] {
|
|
82
|
+
--splash-bg: #10121a;
|
|
83
|
+
--splash-fg: #e3e6f0;
|
|
84
|
+
--splash-primary: #b78cf5;
|
|
85
|
+
--splash-secondary: #f48fc7;
|
|
86
|
+
--splash-muted: #8b8fa3;
|
|
87
|
+
}
|
|
88
|
+
html[data-theme="matrix"] {
|
|
89
|
+
--splash-bg: #08120e;
|
|
90
|
+
--splash-fg: #b8ffd9;
|
|
91
|
+
--splash-primary: #00ff66;
|
|
92
|
+
--splash-secondary: #4fd1c5;
|
|
93
|
+
--splash-muted: #4a8f6e;
|
|
94
|
+
}
|
|
95
|
+
html[data-theme="specrails"] {
|
|
96
|
+
--splash-bg: #08070f;
|
|
97
|
+
--splash-fg: #ededf5;
|
|
98
|
+
--splash-primary: #00c3d2;
|
|
99
|
+
--splash-secondary: #9a6fce;
|
|
100
|
+
--splash-muted: #6b6f8c;
|
|
101
|
+
}
|
|
102
|
+
html, body {
|
|
103
|
+
margin: 0;
|
|
104
|
+
background: var(--splash-bg);
|
|
105
|
+
color: var(--splash-fg);
|
|
106
|
+
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", sans-serif;
|
|
107
|
+
}
|
|
108
|
+
#specrails-splash {
|
|
109
|
+
position: fixed;
|
|
110
|
+
inset: 0;
|
|
111
|
+
display: flex;
|
|
112
|
+
align-items: center;
|
|
113
|
+
justify-content: center;
|
|
114
|
+
flex-direction: column;
|
|
115
|
+
gap: 18px;
|
|
116
|
+
background:
|
|
117
|
+
radial-gradient(1200px 600px at 50% 40%, color-mix(in srgb, var(--splash-primary) 10%, transparent), transparent 60%),
|
|
118
|
+
radial-gradient(900px 500px at 80% 80%, color-mix(in srgb, var(--splash-secondary) 8%, transparent), transparent 60%),
|
|
119
|
+
var(--splash-bg);
|
|
120
|
+
z-index: 9999;
|
|
121
|
+
opacity: 1;
|
|
122
|
+
transition: opacity 220ms ease-out, visibility 0s linear 220ms;
|
|
123
|
+
-webkit-font-smoothing: antialiased;
|
|
124
|
+
-webkit-app-region: drag;
|
|
125
|
+
}
|
|
126
|
+
#specrails-splash.is-hidden {
|
|
127
|
+
opacity: 0;
|
|
128
|
+
visibility: hidden;
|
|
129
|
+
}
|
|
130
|
+
.specrails-splash__mark {
|
|
131
|
+
width: 136px;
|
|
132
|
+
height: 136px;
|
|
133
|
+
display: block;
|
|
134
|
+
overflow: visible;
|
|
135
|
+
}
|
|
136
|
+
.specrails-splash__mark .pill {
|
|
137
|
+
transform-box: fill-box;
|
|
138
|
+
transform-origin: center;
|
|
139
|
+
animation: splash-pill-travel 2.4s ease-in-out infinite;
|
|
140
|
+
}
|
|
141
|
+
.specrails-splash__mark .pill-body {
|
|
142
|
+
filter:
|
|
143
|
+
drop-shadow(0 0 14px var(--splash-primary))
|
|
144
|
+
drop-shadow(0 0 26px color-mix(in srgb, var(--splash-secondary) 55%, transparent));
|
|
145
|
+
}
|
|
146
|
+
.specrails-splash__mark .bar-1 {
|
|
147
|
+
animation: splash-bar 2.4s ease-in-out infinite;
|
|
148
|
+
}
|
|
149
|
+
.specrails-splash__mark .bar-2 {
|
|
150
|
+
animation: splash-bar 2.4s ease-in-out infinite;
|
|
151
|
+
animation-delay: 0.4s;
|
|
152
|
+
}
|
|
153
|
+
.specrails-splash__glow {
|
|
154
|
+
position: absolute;
|
|
155
|
+
inset: 0;
|
|
156
|
+
pointer-events: none;
|
|
157
|
+
background: radial-gradient(
|
|
158
|
+
ellipse 60% 45% at 50% 50%,
|
|
159
|
+
color-mix(in srgb, var(--splash-primary) 22%, transparent) 0%,
|
|
160
|
+
color-mix(in srgb, var(--splash-primary) 6%, transparent) 30%,
|
|
161
|
+
transparent 58%
|
|
162
|
+
);
|
|
163
|
+
animation: splash-glow 2.4s ease-in-out infinite;
|
|
164
|
+
}
|
|
165
|
+
/* The pill rides the rails: fades in from the left, rests in the
|
|
166
|
+
centre for ~0.5s, then shoots off to the right and fades out. */
|
|
167
|
+
@keyframes splash-pill-travel {
|
|
168
|
+
0% { transform: translateX(-1000px); opacity: 0; }
|
|
169
|
+
28% { transform: translateX(0); opacity: 1; }
|
|
170
|
+
48% { transform: translateX(0); opacity: 1;
|
|
171
|
+
animation-timing-function: cubic-bezier(0.6, 0, 0.85, 0.15); }
|
|
172
|
+
60% { transform: translateX(1100px); opacity: 0; }
|
|
173
|
+
100% { transform: translateX(1100px); opacity: 0; }
|
|
174
|
+
}
|
|
175
|
+
@keyframes splash-bar {
|
|
176
|
+
0%, 100% { opacity: 0.28; }
|
|
177
|
+
50% { opacity: 0.6; }
|
|
178
|
+
}
|
|
179
|
+
@keyframes splash-glow {
|
|
180
|
+
0%, 100% { opacity: 0.1; }
|
|
181
|
+
28%, 48% { opacity: 0.45; }
|
|
182
|
+
60% { opacity: 0.1; }
|
|
183
|
+
}
|
|
184
|
+
@media (prefers-reduced-motion: reduce) {
|
|
185
|
+
.specrails-splash__mark .pill,
|
|
186
|
+
.specrails-splash__mark .bar-1,
|
|
187
|
+
.specrails-splash__mark .bar-2,
|
|
188
|
+
.specrails-splash__glow {
|
|
189
|
+
animation: none;
|
|
190
|
+
}
|
|
191
|
+
.specrails-splash__mark .pill { opacity: 1; }
|
|
192
|
+
}
|
|
193
|
+
</style>
|
|
194
|
+
<script type="module" crossorigin src="/assets/index-XGZaKl_u.js"></script>
|
|
195
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-CilyBKbf.js">
|
|
196
|
+
<link rel="modulepreload" crossorigin href="/assets/preload-helper-DSXbuxSR.js">
|
|
197
|
+
<link rel="modulepreload" crossorigin href="/assets/clsx-DnqN-uhr.js">
|
|
198
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-Dv6H7wEr.js">
|
|
199
|
+
<link rel="modulepreload" crossorigin href="/assets/addspec-GWm4ffKl.js">
|
|
200
|
+
<link rel="modulepreload" crossorigin href="/assets/agents-CMxtJMLD.js">
|
|
201
|
+
<link rel="modulepreload" crossorigin href="/assets/agentstudio-CxlUllqI.js">
|
|
202
|
+
<link rel="modulepreload" crossorigin href="/assets/aiedit-TTwzL1TS.js">
|
|
203
|
+
<link rel="modulepreload" crossorigin href="/assets/analytics-DMCto-TF.js">
|
|
204
|
+
<link rel="modulepreload" crossorigin href="/assets/attachments-BIsSSnHJ.js">
|
|
205
|
+
<link rel="modulepreload" crossorigin href="/assets/browser-Qya9cARy.js">
|
|
206
|
+
<link rel="modulepreload" crossorigin href="/assets/chat-BsbNGPW9.js">
|
|
207
|
+
<link rel="modulepreload" crossorigin href="/assets/code-D3zVVQTj.js">
|
|
208
|
+
<link rel="modulepreload" crossorigin href="/assets/commands-IXMOKBYt.js">
|
|
209
|
+
<link rel="modulepreload" crossorigin href="/assets/common-wA36jmj1.js">
|
|
210
|
+
<link rel="modulepreload" crossorigin href="/assets/dashboard-Duo4DDCW.js">
|
|
211
|
+
<link rel="modulepreload" crossorigin href="/assets/explore-hFc3HFcp.js">
|
|
212
|
+
<link rel="modulepreload" crossorigin href="/assets/integrations-D28q1kF6.js">
|
|
213
|
+
<link rel="modulepreload" crossorigin href="/assets/jobs-DsoXEdo7.js">
|
|
214
|
+
<link rel="modulepreload" crossorigin href="/assets/nav-BEL3MTwK.js">
|
|
215
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-bt84e3Aa.js">
|
|
216
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-BeEx2_da.js">
|
|
217
|
+
<link rel="modulepreload" crossorigin href="/assets/specs-cKEh2LXt.js">
|
|
218
|
+
<link rel="modulepreload" crossorigin href="/assets/terminal-CSONJOex.js">
|
|
219
|
+
<link rel="modulepreload" crossorigin href="/assets/tickets-DucYgtdl.js">
|
|
220
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CimDRRi7.css">
|
|
221
|
+
</head>
|
|
222
|
+
<body>
|
|
223
|
+
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
|
224
|
+
<div class="specrails-splash__glow" aria-hidden="true"></div>
|
|
225
|
+
<svg
|
|
226
|
+
class="specrails-splash__mark"
|
|
227
|
+
viewBox="64 166 384 182"
|
|
228
|
+
role="img"
|
|
229
|
+
aria-label="Specrails"
|
|
230
|
+
>
|
|
231
|
+
<defs>
|
|
232
|
+
<linearGradient id="splash-pillfill" x1="0" y1="0" x2="1" y2="0">
|
|
233
|
+
<stop offset="0%" stop-color="var(--splash-primary)"></stop>
|
|
234
|
+
<stop offset="100%" stop-color="var(--splash-secondary)"></stop>
|
|
235
|
+
</linearGradient>
|
|
236
|
+
</defs>
|
|
237
|
+
<rect class="bar-1" x="80" y="182" width="352" height="18" rx="9" fill="var(--splash-muted)"></rect>
|
|
238
|
+
<rect class="bar-2" x="80" y="314" width="352" height="18" rx="9" fill="var(--splash-muted)"></rect>
|
|
239
|
+
<g class="pill">
|
|
240
|
+
<rect class="pill-body" x="80" y="220" width="352" height="72" rx="36" fill="url(#splash-pillfill)"></rect>
|
|
241
|
+
</g>
|
|
242
|
+
</svg>
|
|
243
|
+
</div>
|
|
244
|
+
<div id="root"></div>
|
|
245
|
+
</body>
|
|
246
|
+
</html>
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# specrails-desktop documentation
|
|
2
|
+
|
|
3
|
+
Welcome. These guides are written for **you, the user**: how to get specrails-desktop running, how to use each feature, and what to do when something looks off.
|
|
4
|
+
|
|
5
|
+
If you're contributing to the app itself or building on its API, head over to [`internals/`](internals/) for the technical deep dive.
|
|
6
|
+
|
|
7
|
+
## Start here
|
|
8
|
+
|
|
9
|
+
1. [Getting started](getting-started.md) — install the app, register your first project, run your first pipeline. ~10 minutes.
|
|
10
|
+
|
|
11
|
+
## Doing things
|
|
12
|
+
|
|
13
|
+
| Guide | Use it when… |
|
|
14
|
+
|-------|-------------|
|
|
15
|
+
| [Creating specs](creating-specs.md) | …you want to draft a spec, compare two specs, save a draft, split a big epic, or refine an existing spec |
|
|
16
|
+
| [Running pipelines](running-pipelines.md) | …you want to launch the AI pipeline against a spec, manage rails, pick agent profiles, or install plugins |
|
|
17
|
+
| [Using Codex](codex.md) | …you added a project with OpenAI's Codex CLI instead of (or alongside) Claude |
|
|
18
|
+
| [Tracking cost](tracking-cost.md) | …you want to see what AI is costing you and which specs are the most expensive |
|
|
19
|
+
| [Customising the app](customizing.md) | …you want to change theme, configure settings, set a budget, or turn on telemetry |
|
|
20
|
+
| [Terminal panel](terminal.md) | …you want to use the built-in terminal: shortcuts, shell integration, drag-and-drop |
|
|
21
|
+
| [CLI reference](cli.md) | …you want to drive specrails-desktop from the terminal instead of (or alongside) the dashboard |
|
|
22
|
+
|
|
23
|
+
## Platform-specific notes
|
|
24
|
+
|
|
25
|
+
- [macOS](platforms/macos.md) — Finder/Dock launches, PATH resolution, broken-symlink diagnostics
|
|
26
|
+
- [Windows](platforms/windows.md) — installer formats, SmartScreen, PowerShell, ConPTY
|
|
27
|
+
|
|
28
|
+
## Looking for something specific?
|
|
29
|
+
|
|
30
|
+
- **"How do I install it?"** → [Getting started](getting-started.md#install)
|
|
31
|
+
- **"How do I add a project?"** → [Getting started](getting-started.md#add-a-project)
|
|
32
|
+
- **"Quick vs Explore mode?"** → [Creating specs › Creating a spec](creating-specs.md#creating-a-spec)
|
|
33
|
+
- **"How do I use Codex instead of Claude?"** → [Using Codex](codex.md)
|
|
34
|
+
- **"How do I compare two specs?"** → [Creating specs › Compare two specs side by side](creating-specs.md#compare-two-specs-side-by-side)
|
|
35
|
+
- **"What's a draft?"** → [Creating specs › Drafts](creating-specs.md#drafts)
|
|
36
|
+
- **"What's SMASH?"** → [Creating specs › SMASH a big spec](creating-specs.md#smash-a-big-spec)
|
|
37
|
+
- **"What's a rail?"** → [Running pipelines › Rails](running-pipelines.md#rails)
|
|
38
|
+
- **"What's an agent profile?"** → [Running pipelines › Agent profiles](running-pipelines.md#agent-profiles)
|
|
39
|
+
- **"How do I install Serena?"** → [Running pipelines › Plugins](running-pipelines.md#plugins)
|
|
40
|
+
- **"How much did I spend last week?"** → [Tracking cost](tracking-cost.md)
|
|
41
|
+
- **"How do I change the theme?"** → [Customising the app › Themes](customizing.md#themes)
|
|
42
|
+
- **"How do I set a daily budget?"** → [Customising the app › Budget](customizing.md#budget)
|
|
43
|
+
|
|
44
|
+
## Internals
|
|
45
|
+
|
|
46
|
+
If you're hacking on the app, building on its API, or just curious about how it works:
|
|
47
|
+
|
|
48
|
+
- [Architecture](internals/architecture.md) — server modules, client layout, WebSocket protocol
|
|
49
|
+
- [API reference](internals/api-reference.md) — REST routes catalogue
|
|
50
|
+
- [Configuration](internals/configuration.md) — env vars, kill switches, advanced settings
|
|
51
|
+
- [Operations runbook](internals/operations-runbook.md) — start/stop, recovery, backups
|
|
52
|
+
- [OpenSpec workflow](internals/openspec-workflow.md) — `opsx:*` change lifecycle (used by the app itself)
|
|
53
|
+
- [Profiles deep dive](internals/profiles.md) — agent profile internals
|
|
54
|
+
- [Adding a provider](internals/adding-a-provider.md) — one-file guide to wiring a third AI CLI adapter
|
package/docs/cli.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# CLI reference
|
|
2
|
+
|
|
3
|
+
The `specrails-desktop` CLI does three things:
|
|
4
|
+
|
|
5
|
+
1. **Manages the app server** — start, stop, status.
|
|
6
|
+
2. **Manages projects** — list, add, remove.
|
|
7
|
+
3. **Routes commands into the running server** — implement specs, run health checks, pass raw prompts to your AI CLI.
|
|
8
|
+
|
|
9
|
+
Everything here is grouped by what you're trying to do, not by alphabetical order of flags.
|
|
10
|
+
|
|
11
|
+
## Manage the app
|
|
12
|
+
|
|
13
|
+
### Start it
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
specrails-desktop start
|
|
17
|
+
specrails-desktop start --port 5000 # custom port (default 4200)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`start` daemonises the server, writes its PID to `~/.specrails/manager.pid`, and streams the server's stdout/stderr to `~/.specrails/desktop.log` automatically. The command polls until the server is ready, prints `[specrails-desktop] server started on http://127.0.0.1:<port>`, and returns — it does **not** keep streaming logs to your shell.
|
|
21
|
+
|
|
22
|
+
To watch the server logs:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
tail -f ~/.specrails/desktop.log
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If you're using the desktop app, it bundles the server and starts it for you. You don't need `specrails-desktop start` at all.
|
|
29
|
+
|
|
30
|
+
### Stop it
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
specrails-desktop stop
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Sends `SIGTERM` to the app process. The server then shuts down cleanly and removes its own PID file.
|
|
37
|
+
|
|
38
|
+
### See what it's doing
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
specrails-desktop status # server status + registered projects
|
|
42
|
+
specrails-desktop --status # one-shot status, compact text output
|
|
43
|
+
specrails-desktop --jobs # see the note below
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`--status` prints a compact status line that includes the app version. The bare `status` subcommand prints whether the app is running (with its PID and URL) plus the registered project count and names — but no version. Both are plain text, handy to read or grep, not JSON.
|
|
47
|
+
|
|
48
|
+
> **Note on `--jobs`:** there is no app-level jobs endpoint today, so `--jobs` prints a message that jobs history requires a manager with SQLite persistence and exits non-zero against a running server. Job history lives **per project** — view it on the project's **Jobs** page (right sidebar) in the dashboard instead.
|
|
49
|
+
|
|
50
|
+
## Manage projects
|
|
51
|
+
|
|
52
|
+
### List
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
specrails-desktop list
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Prints every registered project in three columns: **ID**, **NAME**, **PATH**.
|
|
59
|
+
|
|
60
|
+
### Add
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
specrails-desktop add . # register the current directory
|
|
64
|
+
specrails-desktop add /path/to/project # or an explicit path
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Registers the project with the app. The path can be **absolute or relative** (it's resolved against your current directory) and must exist. If the project doesn't have specrails-core installed, the next dashboard visit triggers the setup wizard.
|
|
68
|
+
|
|
69
|
+
### Remove
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
specrails-desktop remove <project-id>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Unregisters the project (use the **ID** from `specrails-desktop list`). Does **not** delete the project directory or its specrails-core installation. To re-register, just `add` it again — job history under `~/.specrails/projects/<slug>/jobs.sqlite` is preserved.
|
|
76
|
+
|
|
77
|
+
## Run things in the active project
|
|
78
|
+
|
|
79
|
+
`specrails-desktop` auto-detects which project you're in by matching your **exact** current directory against registered project paths. Run commands from the project's **root directory** — subdirectories are **not** auto-resolved (path matching is exact, with no parent-directory walking). From anywhere else, use `--project`.
|
|
80
|
+
|
|
81
|
+
If the app is running but no project is registered for your directory, you'll see:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
[specrails-desktop] error: server is running but no project registered for the current directory.
|
|
85
|
+
Run: specrails-desktop add <cwd>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Implement a spec
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
cd ~/repos/my-app
|
|
92
|
+
specrails-desktop implement "#42"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This is shorthand for `specrails-desktop /specrails:implement "#42"` — the app queues a rail job that you can monitor in the Dashboard. Token usage and cost are tracked in Analytics.
|
|
96
|
+
|
|
97
|
+
### Implement a batch
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
specrails-desktop batch-implement "#40" "#41" "#43"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Shorthand for `/specrails:batch-implement` — runs the listed specs in one dependency-aware job.
|
|
104
|
+
|
|
105
|
+
### Health check
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
specrails-desktop health-check
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Runs `/specrails:health-check`: a comprehensive codebase health pass (tests, linting, coverage, complexity, dependency audit), comparing against previous runs to surface regressions.
|
|
112
|
+
|
|
113
|
+
### Compatibility check
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
specrails-desktop compat-check
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Runs `/specrails:compat-check`: snapshots the current API surface and detects breaking changes against a prior baseline, generating a migration guide when breaking changes are found.
|
|
120
|
+
|
|
121
|
+
### Known verbs
|
|
122
|
+
|
|
123
|
+
These are all shorthand for `/specrails:<verb>` — the app auto-prefixes:
|
|
124
|
+
|
|
125
|
+
| Verb | What it does |
|
|
126
|
+
|------|--------------|
|
|
127
|
+
| `implement` | Queue a rail job for one spec |
|
|
128
|
+
| `batch-implement` | Queue one job that implements many specs |
|
|
129
|
+
| `why` | Explain why a chunk of code looks the way it does |
|
|
130
|
+
| `propose-spec` | Explore an idea and produce a structured spec proposal |
|
|
131
|
+
| `get-backlog-specs` | View the prioritised spec backlog |
|
|
132
|
+
| `auto-propose-backlog-specs` | Auto-propose new spec ideas from the backlog |
|
|
133
|
+
| `refactor-recommender` | Scan the codebase and recommend high-leverage refactors |
|
|
134
|
+
| `health-check` | Run the codebase health check |
|
|
135
|
+
| `compat-check` | Detect breaking API changes against a baseline |
|
|
136
|
+
| `enrich` | Run the agent enrichment workflow |
|
|
137
|
+
|
|
138
|
+
### Pass a raw prompt
|
|
139
|
+
|
|
140
|
+
Anything that isn't a known verb (or starts with `/`) is forwarded verbatim to your AI CLI in the project directory:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
specrails-desktop "summarise the changes since main"
|
|
144
|
+
specrails-desktop /opsx:ff
|
|
145
|
+
specrails-desktop /any:custom:command "with arguments"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The app still tracks cost in Analytics under `surface=job`.
|
|
149
|
+
|
|
150
|
+
### Target a specific project from anywhere
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
specrails-desktop --project my-app implement "#42"
|
|
154
|
+
specrails-desktop --project ~/repos/api-srv batch-implement "#5" "#6"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`--project` accepts a project name or absolute path. Use it when you want to launch work in a project from outside its directory (e.g. from a CI runner or your home directory). Both `--project` and `--port` may appear **anywhere** in the command, not just at the front.
|
|
158
|
+
|
|
159
|
+
## Providers
|
|
160
|
+
|
|
161
|
+
The CLI is provider-agnostic in name but **always launches the project's primary provider**. CLI-routed jobs (and the offline fallback below) run on whichever provider you set as the default when you added the project — there's no flag to pick Claude vs Codex from the CLI. To choose an engine per spec or per rail on a multi-provider project, use the **dashboard** (Add Spec engine selector, rail header engine selector). See [Codex](codex.md).
|
|
162
|
+
|
|
163
|
+
## OpenSpec workflow
|
|
164
|
+
|
|
165
|
+
Bundled `opsx:*` commands for structured change management of the app itself. Run them from the project directory:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
specrails-desktop /opsx:new # start a new change
|
|
169
|
+
specrails-desktop /opsx:ff # fast-forward — create all artifacts in one go
|
|
170
|
+
specrails-desktop /opsx:continue # step through artifact creation one at a time
|
|
171
|
+
specrails-desktop /opsx:apply # implement the change in this conversation
|
|
172
|
+
specrails-desktop /opsx:verify # completeness / correctness / coherence review
|
|
173
|
+
specrails-desktop /opsx:sync # sync delta specs to main specs (no archive)
|
|
174
|
+
specrails-desktop /opsx:archive # archive to openspec/changes/archive/
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`opsx:apply` and `opsx:verify` run **in the conversation** — `apply` edits code and flips tasks from `- [ ]` to `- [x]`; `verify` reads the change artifacts and writes a completeness/correctness/coherence report. They do **not** queue a server job or spawn the Architect → Developer → Reviewer pipeline (that's the separate `/specrails:implement` flow). Full lifecycle reference: [internals/openspec-workflow.md](internals/openspec-workflow.md).
|
|
178
|
+
|
|
179
|
+
## Diagnostic flags
|
|
180
|
+
|
|
181
|
+
| Flag | What it does |
|
|
182
|
+
|------|--------------|
|
|
183
|
+
| `--port <n>` | Connect to (or start) the app on a non-default port |
|
|
184
|
+
| `--project <name\|path>` | Target a specific project from anywhere |
|
|
185
|
+
| `--status` | One-shot status print (compact text) |
|
|
186
|
+
| `--jobs` | Print job history (per-project only — see the note above) |
|
|
187
|
+
| `--version`, `-v` | Print the CLI version and exit |
|
|
188
|
+
| `--help`, `-h` | Print usage and exit |
|
|
189
|
+
|
|
190
|
+
## When the app isn't running
|
|
191
|
+
|
|
192
|
+
If you invoke a command that routes work (`implement`, `batch-implement`, a raw prompt, …) while the app is not running, the CLI falls back to spawning the **`claude`** binary directly in the current directory — no queue, no Analytics tracking, and always Claude regardless of the project's primary provider. You'll see a `manager not running — invoking claude directly` line. Start the app first if you want jobs to appear in the dashboard.
|
|
193
|
+
|
|
194
|
+
## Where to go next
|
|
195
|
+
|
|
196
|
+
- [Getting started](getting-started.md) — install and onboard.
|
|
197
|
+
- [Running pipelines](running-pipelines.md) — what happens when you `implement`.
|
|
198
|
+
- [Internals: API reference](internals/api-reference.md) — what the CLI actually calls.
|