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.
Files changed (455) hide show
  1. package/.claude/commands/specrails/batch-implement.md +287 -0
  2. package/.claude/commands/specrails/compat-check.md +271 -0
  3. package/.claude/commands/specrails/doctor.md +62 -0
  4. package/.claude/commands/specrails/enrich.md +1635 -0
  5. package/.claude/commands/specrails/explore-spec.md +173 -0
  6. package/.claude/commands/specrails/health-check.md +527 -0
  7. package/.claude/commands/specrails/implement.md +1457 -0
  8. package/.claude/commands/specrails/memory-inspect.md +259 -0
  9. package/.claude/commands/specrails/opsx-diff.md +419 -0
  10. package/.claude/commands/specrails/propose-spec.md +102 -0
  11. package/.claude/commands/specrails/reconfig.md +89 -0
  12. package/.claude/commands/specrails/refactor-recommender.md +212 -0
  13. package/.claude/commands/specrails/retry.md +363 -0
  14. package/.claude/commands/specrails/telemetry.md +552 -0
  15. package/.claude/commands/specrails/why.md +96 -0
  16. package/LICENSE +21 -0
  17. package/README.md +290 -0
  18. package/cli/dist/specrails-desktop.js +1098 -0
  19. package/client/dist/assets/ActivityFeedPage-Gy4x8dBt.js +1 -0
  20. package/client/dist/assets/AgentsPage-CPgu--Fb.js +86 -0
  21. package/client/dist/assets/AnalyticsPage-B5sJEee2.js +1 -0
  22. package/client/dist/assets/BarChart-7IMQ8HY1.js +33 -0
  23. package/client/dist/assets/CodePage-CBdFvbwe.js +2 -0
  24. package/client/dist/assets/DesktopAnalyticsPage-w0rdTq4w.js +1 -0
  25. package/client/dist/assets/DocsDialog-BZUYM7wm.js +11 -0
  26. package/client/dist/assets/DocsPage-9QglWl46.js +11 -0
  27. package/client/dist/assets/ExportDropdown-BLZFXtNi.js +1 -0
  28. package/client/dist/assets/IntegrationsPage-BxBE4y99.js +3 -0
  29. package/client/dist/assets/JobDetailPage-DydWx_5S.js +16 -0
  30. package/client/dist/assets/JobsPage-20ibw0IO.js +1 -0
  31. package/client/dist/assets/abap-Bw6f2wDG.js +1 -0
  32. package/client/dist/assets/activity-BEIp_Y1A.js +1 -0
  33. package/client/dist/assets/activity-BdrPln96.js +1 -0
  34. package/client/dist/assets/activity-CpkRS8Sx.js +1 -0
  35. package/client/dist/assets/activity-DKCpESPt.js +1 -0
  36. package/client/dist/assets/activity-DOUVEjJi.js +1 -0
  37. package/client/dist/assets/activity-DRwkql_y.js +1 -0
  38. package/client/dist/assets/activity-DcDQ7tjw.js +1 -0
  39. package/client/dist/assets/activity-Dv6H7wEr.js +1 -0
  40. package/client/dist/assets/addon-image-3WCl5Vhd.js +1 -0
  41. package/client/dist/assets/addon-ligatures-C5OdliKs.js +2 -0
  42. package/client/dist/assets/addon-webgl-BbX6pSjl.js +44 -0
  43. package/client/dist/assets/addspec-B5yl4Loj.js +1 -0
  44. package/client/dist/assets/addspec-BEeF5-zc.js +1 -0
  45. package/client/dist/assets/addspec-D33ocMxf.js +1 -0
  46. package/client/dist/assets/addspec-DFswZ0jK.js +1 -0
  47. package/client/dist/assets/addspec-DRE-jZv7.js +1 -0
  48. package/client/dist/assets/addspec-DVZ15Jp8.js +1 -0
  49. package/client/dist/assets/addspec-Fkv91Opc.js +1 -0
  50. package/client/dist/assets/addspec-GWm4ffKl.js +1 -0
  51. package/client/dist/assets/agents-1nCDWRmP.js +1 -0
  52. package/client/dist/assets/agents-Bm9rPqnt.js +1 -0
  53. package/client/dist/assets/agents-CMxtJMLD.js +1 -0
  54. package/client/dist/assets/agents-DK-Dlc0i.js +1 -0
  55. package/client/dist/assets/agents-Q6Ldfpxx.js +1 -0
  56. package/client/dist/assets/agents-TeOSy-ax.js +1 -0
  57. package/client/dist/assets/agents-iTqjRajS.js +1 -0
  58. package/client/dist/assets/agents-s87sMGzL.js +1 -0
  59. package/client/dist/assets/agentstudio-B6Wb59E7.js +1 -0
  60. package/client/dist/assets/agentstudio-BADhZ41e.js +1 -0
  61. package/client/dist/assets/agentstudio-BSnWLR63.js +1 -0
  62. package/client/dist/assets/agentstudio-BdidyBzZ.js +1 -0
  63. package/client/dist/assets/agentstudio-CxlUllqI.js +1 -0
  64. package/client/dist/assets/agentstudio-D3I62TLJ.js +1 -0
  65. package/client/dist/assets/agentstudio-DuH9TogZ.js +1 -0
  66. package/client/dist/assets/agentstudio-Kw88_dUF.js +1 -0
  67. package/client/dist/assets/aiedit-BWxHGsYA.js +1 -0
  68. package/client/dist/assets/aiedit-D2ji6Qy0.js +1 -0
  69. package/client/dist/assets/aiedit-DAhZTvtk.js +1 -0
  70. package/client/dist/assets/aiedit-DJMny-D5.js +1 -0
  71. package/client/dist/assets/aiedit-DOcxERkU.js +1 -0
  72. package/client/dist/assets/aiedit-DvrcbwGv.js +1 -0
  73. package/client/dist/assets/aiedit-TTwzL1TS.js +1 -0
  74. package/client/dist/assets/aiedit-WBSjT_C1.js +1 -0
  75. package/client/dist/assets/analytics-BIdr0YfL.js +1 -0
  76. package/client/dist/assets/analytics-C6EzgtdE.js +1 -0
  77. package/client/dist/assets/analytics-C9Zc-rkM.js +1 -0
  78. package/client/dist/assets/analytics-CVx3YOc0.js +1 -0
  79. package/client/dist/assets/analytics-CYj0tfj7.js +1 -0
  80. package/client/dist/assets/analytics-CnY4kNG3.js +1 -0
  81. package/client/dist/assets/analytics-CrPCZRJ-.js +1 -0
  82. package/client/dist/assets/analytics-DMCto-TF.js +1 -0
  83. package/client/dist/assets/apex-Cw8_REBo.js +1 -0
  84. package/client/dist/assets/atom-one-dark-B-oHczHB.css +1 -0
  85. package/client/dist/assets/attachments-BIsSSnHJ.js +1 -0
  86. package/client/dist/assets/attachments-BW4L3l2L.js +1 -0
  87. package/client/dist/assets/attachments-Bcf6BG6V.js +1 -0
  88. package/client/dist/assets/attachments-Bke8sCU4.js +1 -0
  89. package/client/dist/assets/attachments-COcrGRFz.js +1 -0
  90. package/client/dist/assets/attachments-DYHGA2Dj.js +1 -0
  91. package/client/dist/assets/attachments-Dd92KpUH.js +1 -0
  92. package/client/dist/assets/attachments-DzdU6DV6.js +1 -0
  93. package/client/dist/assets/azcli-Cz6HAoOw.js +1 -0
  94. package/client/dist/assets/bat-CcJ-xyqL.js +1 -0
  95. package/client/dist/assets/bicep-z1WDCKYz.js +2 -0
  96. package/client/dist/assets/browser-5ErDlJoR.js +1 -0
  97. package/client/dist/assets/browser-Bc-YdlVg.js +1 -0
  98. package/client/dist/assets/browser-BlYF4OOq.js +1 -0
  99. package/client/dist/assets/browser-CT-ReZGt.js +1 -0
  100. package/client/dist/assets/browser-DGITz3fC.js +1 -0
  101. package/client/dist/assets/browser-JsAIGCEW.js +1 -0
  102. package/client/dist/assets/browser-M5-rbPlw.js +1 -0
  103. package/client/dist/assets/browser-Qya9cARy.js +1 -0
  104. package/client/dist/assets/cameligo-BRewOpfa.js +1 -0
  105. package/client/dist/assets/chat-BEGuC03z.js +1 -0
  106. package/client/dist/assets/chat-BEW60P_u.js +1 -0
  107. package/client/dist/assets/chat-BQNMD0PL.js +1 -0
  108. package/client/dist/assets/chat-BsbNGPW9.js +1 -0
  109. package/client/dist/assets/chat-CboQguCi.js +1 -0
  110. package/client/dist/assets/chat-DRCa9pOt.js +1 -0
  111. package/client/dist/assets/chat-DwUm6W9z.js +1 -0
  112. package/client/dist/assets/chat-yoXwguQu.js +1 -0
  113. package/client/dist/assets/chunk-CilyBKbf.js +1 -0
  114. package/client/dist/assets/clojure-DBjRWN6g.js +1 -0
  115. package/client/dist/assets/clsx-DnqN-uhr.js +1 -0
  116. package/client/dist/assets/code-AL1rVIMb.js +1 -0
  117. package/client/dist/assets/code-C0BKpkht.js +1 -0
  118. package/client/dist/assets/code-C0FTS3ew.js +1 -0
  119. package/client/dist/assets/code-CPcHxzxw.js +1 -0
  120. package/client/dist/assets/code-D3ryDniw.js +1 -0
  121. package/client/dist/assets/code-D3zVVQTj.js +1 -0
  122. package/client/dist/assets/code-PCmfS3dn.js +1 -0
  123. package/client/dist/assets/code-exI0G5Wd.js +1 -0
  124. package/client/dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  125. package/client/dist/assets/coffee-Cfk_XHGR.js +1 -0
  126. package/client/dist/assets/commands-B772IyDa.js +1 -0
  127. package/client/dist/assets/commands-BDDp6xFG.js +1 -0
  128. package/client/dist/assets/commands-CJxCry-o.js +1 -0
  129. package/client/dist/assets/commands-CfgY-_of.js +1 -0
  130. package/client/dist/assets/commands-DLrvnPNg.js +1 -0
  131. package/client/dist/assets/commands-IXMOKBYt.js +1 -0
  132. package/client/dist/assets/commands-UD1NzmwX.js +1 -0
  133. package/client/dist/assets/commands-sqrqsxyE.js +1 -0
  134. package/client/dist/assets/common-DCr6VzJ7.js +1 -0
  135. package/client/dist/assets/common-Dard9UNH.js +1 -0
  136. package/client/dist/assets/common-DeDELLZJ.js +1 -0
  137. package/client/dist/assets/common-DltqHaAe.js +1 -0
  138. package/client/dist/assets/common-Dmm1GhdD.js +1 -0
  139. package/client/dist/assets/common-DnjcgkPH.js +1 -0
  140. package/client/dist/assets/common-GbpxfPG8.js +1 -0
  141. package/client/dist/assets/common-wA36jmj1.js +1 -0
  142. package/client/dist/assets/cpp-BVob6BaP.js +1 -0
  143. package/client/dist/assets/csharp-C4fbRuOu.js +1 -0
  144. package/client/dist/assets/csp-DthFP_vT.js +1 -0
  145. package/client/dist/assets/css-CGMH0hcW.js +3 -0
  146. package/client/dist/assets/css.worker-Wv5dxAWO.js +89 -0
  147. package/client/dist/assets/cssMode-Cc6ozl-J.js +1 -0
  148. package/client/dist/assets/cypher-Pnf68BRV.js +1 -0
  149. package/client/dist/assets/dart-PMMOtxZX.js +1 -0
  150. package/client/dist/assets/dashboard-B4ixDVk8.js +1 -0
  151. package/client/dist/assets/dashboard-BZBADHSj.js +1 -0
  152. package/client/dist/assets/dashboard-C1MfeUHs.js +1 -0
  153. package/client/dist/assets/dashboard-C7SK6xu5.js +1 -0
  154. package/client/dist/assets/dashboard-CB6Le1yN.js +1 -0
  155. package/client/dist/assets/dashboard-CoTpMOBM.js +1 -0
  156. package/client/dist/assets/dashboard-Duo4DDCW.js +1 -0
  157. package/client/dist/assets/dashboard-I19DXBxw.js +1 -0
  158. package/client/dist/assets/dist-js-BY-Fv_fg.js +1 -0
  159. package/client/dist/assets/dist-js-Bakc4uxT.js +1 -0
  160. package/client/dist/assets/dockerfile-di1nsJCc.js +1 -0
  161. package/client/dist/assets/ecl-D_WVcB5M.js +1 -0
  162. package/client/dist/assets/editor-Br_kD0ds.css +1 -0
  163. package/client/dist/assets/editor.api2-XLGzZfbc.js +872 -0
  164. package/client/dist/assets/editor.main-CfXxHimg.js +6 -0
  165. package/client/dist/assets/editor.worker-Bd9IXS8d.js +26 -0
  166. package/client/dist/assets/elixir-OAdJEMOn.js +1 -0
  167. package/client/dist/assets/explore-4mFpnrKU.js +1 -0
  168. package/client/dist/assets/explore-A8Ltoblq.js +1 -0
  169. package/client/dist/assets/explore-B9A3iN2W.js +1 -0
  170. package/client/dist/assets/explore-BV5Xxlsn.js +1 -0
  171. package/client/dist/assets/explore-BrBJvfjP.js +1 -0
  172. package/client/dist/assets/explore-C3FSE42C.js +1 -0
  173. package/client/dist/assets/explore-D2EFgt8J.js +1 -0
  174. package/client/dist/assets/explore-hFc3HFcp.js +1 -0
  175. package/client/dist/assets/flow9-D3QEZjgn.js +1 -0
  176. package/client/dist/assets/format-command-CwGuwzGA.js +1 -0
  177. package/client/dist/assets/freemarker2-DP7J1gG3.js +3 -0
  178. package/client/dist/assets/fsharp-BF0k_8N8.js +1 -0
  179. package/client/dist/assets/go-BAQO5Jsz.js +1 -0
  180. package/client/dist/assets/graphql-hdFVFkiV.js +1 -0
  181. package/client/dist/assets/handlebars-BjRlucw6.js +1 -0
  182. package/client/dist/assets/hcl-DWnl1o-X.js +1 -0
  183. package/client/dist/assets/html-OumBQJ-U.js +1 -0
  184. package/client/dist/assets/html.worker-CQP8QQsS.js +502 -0
  185. package/client/dist/assets/htmlMode-CStc3zXM.js +1 -0
  186. package/client/dist/assets/index-CimDRRi7.css +2 -0
  187. package/client/dist/assets/index-XGZaKl_u.js +142 -0
  188. package/client/dist/assets/ini-CB-6OVu3.js +1 -0
  189. package/client/dist/assets/integrations-C3p12Ms6.js +1 -0
  190. package/client/dist/assets/integrations-Cr6hH7XR.js +1 -0
  191. package/client/dist/assets/integrations-Cublz3m6.js +1 -0
  192. package/client/dist/assets/integrations-D28q1kF6.js +1 -0
  193. package/client/dist/assets/integrations-DRdbki5W.js +1 -0
  194. package/client/dist/assets/integrations-DaC4SzzL.js +1 -0
  195. package/client/dist/assets/integrations-DmQYCUvN.js +1 -0
  196. package/client/dist/assets/integrations-HIlUxXVs.js +1 -0
  197. package/client/dist/assets/java-d1CmfiHX.js +1 -0
  198. package/client/dist/assets/javascript-CMk--e7g.js +1 -0
  199. package/client/dist/assets/jobs-BE1siB0M.js +1 -0
  200. package/client/dist/assets/jobs-BHcQ_Faf.js +1 -0
  201. package/client/dist/assets/jobs-CFfc2dNX.js +1 -0
  202. package/client/dist/assets/jobs-CSi5n8X_.js +1 -0
  203. package/client/dist/assets/jobs-Dc3X86PY.js +1 -0
  204. package/client/dist/assets/jobs-De5tASex.js +1 -0
  205. package/client/dist/assets/jobs-DsoXEdo7.js +1 -0
  206. package/client/dist/assets/jobs-Wl-ApPMb.js +1 -0
  207. package/client/dist/assets/json.worker-DzV-CpCQ.js +58 -0
  208. package/client/dist/assets/jsonMode-C2h3ZcjZ.js +7 -0
  209. package/client/dist/assets/julia-Bgv08lKa.js +1 -0
  210. package/client/dist/assets/kotlin-u98kaVTf.js +1 -0
  211. package/client/dist/assets/less-CjYwpgg5.js +2 -0
  212. package/client/dist/assets/lexon-YTjaAFBB.js +1 -0
  213. package/client/dist/assets/lib-CPxTMOAq.js +7 -0
  214. package/client/dist/assets/liquid-mI3KJrBE.js +1 -0
  215. package/client/dist/assets/lspLanguageFeatures-DU09ggWi.js +4 -0
  216. package/client/dist/assets/lua-BzmkWv27.js +1 -0
  217. package/client/dist/assets/m3-CFwk9fw0.js +1 -0
  218. package/client/dist/assets/markdown-CR5iMpSZ.js +1 -0
  219. package/client/dist/assets/mdx-C41VDTR_.js +1 -0
  220. package/client/dist/assets/mips-CcEalc17.js +1 -0
  221. package/client/dist/assets/monaco.contribution-CPObAXMC.js +2 -0
  222. package/client/dist/assets/msdax-BQbkawnr.js +1 -0
  223. package/client/dist/assets/mysql-GTlaaW_P.js +1 -0
  224. package/client/dist/assets/nav-0fwkrgHt.js +1 -0
  225. package/client/dist/assets/nav-BEL3MTwK.js +1 -0
  226. package/client/dist/assets/nav-B_G-TJDW.js +1 -0
  227. package/client/dist/assets/nav-C2YXcbZS.js +1 -0
  228. package/client/dist/assets/nav-ClzOE4mA.js +1 -0
  229. package/client/dist/assets/nav-CtYwmMgu.js +1 -0
  230. package/client/dist/assets/nav-D2bOGSEg.js +1 -0
  231. package/client/dist/assets/nav-iH1V5j6o.js +1 -0
  232. package/client/dist/assets/objective-c-Byu1T5if.js +1 -0
  233. package/client/dist/assets/pascal-BrfzBfRm.js +1 -0
  234. package/client/dist/assets/pascaligo-BXXKFUeo.js +1 -0
  235. package/client/dist/assets/perl-B3OikKq-.js +1 -0
  236. package/client/dist/assets/pgsql-CTsa0Acc.js +1 -0
  237. package/client/dist/assets/php-DiQh3FUW.js +1 -0
  238. package/client/dist/assets/pla-92uH8Fzm.js +1 -0
  239. package/client/dist/assets/postiats-BbeWkKUr.js +1 -0
  240. package/client/dist/assets/powerquery-DgDMzpsm.js +1 -0
  241. package/client/dist/assets/powershell-BfdUUzaG.js +1 -0
  242. package/client/dist/assets/preload-helper-DSXbuxSR.js +1 -0
  243. package/client/dist/assets/protobuf-BojW2ftW.js +2 -0
  244. package/client/dist/assets/pug-BxqTg3IU.js +1 -0
  245. package/client/dist/assets/python-Y27rKQtk.js +1 -0
  246. package/client/dist/assets/qsharp-BX_A-MW9.js +1 -0
  247. package/client/dist/assets/r-D9BMnxvJ.js +1 -0
  248. package/client/dist/assets/razor-Cd5-q9Bp.js +1 -0
  249. package/client/dist/assets/redis-5cJqEQJJ.js +1 -0
  250. package/client/dist/assets/redshift-d8BBqiwb.js +1 -0
  251. package/client/dist/assets/restructuredtext-C8a6yIcZ.js +1 -0
  252. package/client/dist/assets/ruby-egeh-6KX.js +1 -0
  253. package/client/dist/assets/rust-a3r9IInB.js +1 -0
  254. package/client/dist/assets/sb-y8iRIDei.js +1 -0
  255. package/client/dist/assets/scala-BPDK2AmK.js +1 -0
  256. package/client/dist/assets/scheme-BIWUEoOs.js +1 -0
  257. package/client/dist/assets/scss-CA-PSzwg.js +3 -0
  258. package/client/dist/assets/settings-55oDcbSh.js +1 -0
  259. package/client/dist/assets/settings-Bd4Tq1RB.js +1 -0
  260. package/client/dist/assets/settings-CCSM-Fhn.js +1 -0
  261. package/client/dist/assets/settings-D3e_bDoW.js +1 -0
  262. package/client/dist/assets/settings-DKbTkbn7.js +1 -0
  263. package/client/dist/assets/settings-Dxpo6_w7.js +1 -0
  264. package/client/dist/assets/settings-bt84e3Aa.js +1 -0
  265. package/client/dist/assets/settings-nu68QukM.js +1 -0
  266. package/client/dist/assets/setup-BMqwfbW9.js +1 -0
  267. package/client/dist/assets/setup-Bb5LcG28.js +1 -0
  268. package/client/dist/assets/setup-BeEx2_da.js +1 -0
  269. package/client/dist/assets/setup-CCCrB53Q.js +1 -0
  270. package/client/dist/assets/setup-CJA0ATmd.js +1 -0
  271. package/client/dist/assets/setup-CeiDbZcb.js +1 -0
  272. package/client/dist/assets/setup-Cus7TApA.js +1 -0
  273. package/client/dist/assets/setup-D9qOs2Xo.js +1 -0
  274. package/client/dist/assets/shell--LiT1Bja.js +1 -0
  275. package/client/dist/assets/solidity-DdqZccZg.js +1 -0
  276. package/client/dist/assets/sophia-S6-YxNG_.js +1 -0
  277. package/client/dist/assets/sparql-BSf5kMp2.js +1 -0
  278. package/client/dist/assets/specs-BFfu3u-a.js +1 -0
  279. package/client/dist/assets/specs-B__C8-8a.js +1 -0
  280. package/client/dist/assets/specs-CZ1PsXsC.js +1 -0
  281. package/client/dist/assets/specs-D2FzlLn9.js +1 -0
  282. package/client/dist/assets/specs-DaUTrNF9.js +1 -0
  283. package/client/dist/assets/specs-Dyc5hYeE.js +1 -0
  284. package/client/dist/assets/specs-cKEh2LXt.js +1 -0
  285. package/client/dist/assets/specs-k0PyLDVt.js +1 -0
  286. package/client/dist/assets/sql-D7KgjR8G.js +1 -0
  287. package/client/dist/assets/st-BnoDa-Ml.js +1 -0
  288. package/client/dist/assets/swift-DEUHTkUX.js +1 -0
  289. package/client/dist/assets/systemverilog-Tqb_KPnW.js +1 -0
  290. package/client/dist/assets/tcl-BmBFS2qq.js +1 -0
  291. package/client/dist/assets/terminal-80yDMgMF.js +1 -0
  292. package/client/dist/assets/terminal-Bje4ziIa.js +1 -0
  293. package/client/dist/assets/terminal-C2WYcFHF.js +1 -0
  294. package/client/dist/assets/terminal-CSONJOex.js +1 -0
  295. package/client/dist/assets/terminal-DEqzGtcr.js +1 -0
  296. package/client/dist/assets/terminal-DeWzh6ys.js +1 -0
  297. package/client/dist/assets/terminal-YOlsJCQj.js +1 -0
  298. package/client/dist/assets/terminal-lkZYR4wJ.js +1 -0
  299. package/client/dist/assets/tickets-CB7N30gm.js +1 -0
  300. package/client/dist/assets/tickets-CF2PYelu.js +1 -0
  301. package/client/dist/assets/tickets-DNOANUXr.js +1 -0
  302. package/client/dist/assets/tickets-DU1aqsbr.js +1 -0
  303. package/client/dist/assets/tickets-DYvafSaY.js +1 -0
  304. package/client/dist/assets/tickets-DlpC_iTg.js +1 -0
  305. package/client/dist/assets/tickets-DucYgtdl.js +1 -0
  306. package/client/dist/assets/tickets-clefmXLv.js +1 -0
  307. package/client/dist/assets/ts.worker-METxwbDZ.js +67719 -0
  308. package/client/dist/assets/tsMode-B0y_xEci.js +11 -0
  309. package/client/dist/assets/twig-BQV8igWC.js +1 -0
  310. package/client/dist/assets/typescript-BzK0OgwW.js +1 -0
  311. package/client/dist/assets/typespec-DlFroUGY.js +1 -0
  312. package/client/dist/assets/useProjectCache-DSaiGFjV.js +1 -0
  313. package/client/dist/assets/vb-BlrJpIMX.js +1 -0
  314. package/client/dist/assets/wgsl-BWgIc6FZ.js +298 -0
  315. package/client/dist/assets/workers-rt--R2Qy.js +1 -0
  316. package/client/dist/assets/xml-eX9QXAmI.js +1 -0
  317. package/client/dist/assets/yaml-fcsNkpOt.js +1 -0
  318. package/client/dist/index.html +246 -0
  319. package/docs/README.md +54 -0
  320. package/docs/cli.md +198 -0
  321. package/docs/codex.md +210 -0
  322. package/docs/creating-specs.md +197 -0
  323. package/docs/customizing.md +197 -0
  324. package/docs/getting-started.md +140 -0
  325. package/docs/internals/README.md +25 -0
  326. package/docs/internals/adding-a-provider.md +238 -0
  327. package/docs/internals/api-reference.md +634 -0
  328. package/docs/internals/architecture.md +332 -0
  329. package/docs/internals/configuration.md +172 -0
  330. package/docs/internals/openspec-workflow.md +282 -0
  331. package/docs/internals/operations-runbook.md +198 -0
  332. package/docs/internals/profiles.md +152 -0
  333. package/docs/platforms/macos.md +130 -0
  334. package/docs/platforms/windows.md +81 -0
  335. package/docs/running-pipelines.md +240 -0
  336. package/docs/terminal.md +138 -0
  337. package/docs/tracking-cost.md +155 -0
  338. package/package.json +82 -0
  339. package/server/dist/agent-generator.js +232 -0
  340. package/server/dist/agent-refine-db.js +124 -0
  341. package/server/dist/agent-refine-manager.js +526 -0
  342. package/server/dist/ai-invocations.js +111 -0
  343. package/server/dist/attachment-manager.js +299 -0
  344. package/server/dist/auth.js +207 -0
  345. package/server/dist/binary-probe.js +35 -0
  346. package/server/dist/browser-capture-manager.js +576 -0
  347. package/server/dist/browser-capture-types.js +28 -0
  348. package/server/dist/browser-network.js +149 -0
  349. package/server/dist/browser-playwright.js +888 -0
  350. package/server/dist/build-dirs.js +44 -0
  351. package/server/dist/changes-reader.js +120 -0
  352. package/server/dist/chat-manager.js +1060 -0
  353. package/server/dist/chromium-resolver.js +311 -0
  354. package/server/dist/code-explorer-router.js +788 -0
  355. package/server/dist/codex-otel-bridge.js +235 -0
  356. package/server/dist/command-resolver.js +102 -0
  357. package/server/dist/config.js +306 -0
  358. package/server/dist/context-budget.js +113 -0
  359. package/server/dist/context-scope.js +279 -0
  360. package/server/dist/contract-refine-runner.js +521 -0
  361. package/server/dist/core-compat.js +207 -0
  362. package/server/dist/core-package.js +14 -0
  363. package/server/dist/db.js +1034 -0
  364. package/server/dist/desktop-analytics.js +156 -0
  365. package/server/dist/desktop-db.js +456 -0
  366. package/server/dist/desktop-router.js +735 -0
  367. package/server/dist/docs-router.js +207 -0
  368. package/server/dist/explore-contract-refine.js +421 -0
  369. package/server/dist/explore-cwd-manager.js +242 -0
  370. package/server/dist/explore-draft-title.js +47 -0
  371. package/server/dist/explore-smash.js +450 -0
  372. package/server/dist/feature-flags.js +17 -0
  373. package/server/dist/file-provenance.js +382 -0
  374. package/server/dist/file-summary-generator.js +221 -0
  375. package/server/dist/file-summary-manager.js +689 -0
  376. package/server/dist/hooks.js +102 -0
  377. package/server/dist/ids.js +7 -0
  378. package/server/dist/index.js +586 -0
  379. package/server/dist/metrics.js +136 -0
  380. package/server/dist/mobile/index.js +16 -0
  381. package/server/dist/mobile/mobile-admin-router.js +84 -0
  382. package/server/dist/mobile/mobile-auth.js +67 -0
  383. package/server/dist/mobile/mobile-devices.js +80 -0
  384. package/server/dist/mobile/mobile-event-bus.js +39 -0
  385. package/server/dist/mobile/mobile-gateway.js +285 -0
  386. package/server/dist/mobile/mobile-mdns.js +81 -0
  387. package/server/dist/mobile/mobile-pairing.js +179 -0
  388. package/server/dist/mobile/mobile-redact.js +53 -0
  389. package/server/dist/mobile/mobile-router.js +411 -0
  390. package/server/dist/mobile/mobile-tls.js +86 -0
  391. package/server/dist/mobile/mobile-types.js +9 -0
  392. package/server/dist/mobile/mobile-ws.js +275 -0
  393. package/server/dist/path-resolver.js +298 -0
  394. package/server/dist/plugin-manager.js +617 -0
  395. package/server/dist/plugins/claude-approval.js +179 -0
  396. package/server/dist/plugins/claude-md-mutation.js +146 -0
  397. package/server/dist/plugins/codex-mcp.js +108 -0
  398. package/server/dist/plugins/contributors.js +72 -0
  399. package/server/dist/plugins/drift.js +58 -0
  400. package/server/dist/plugins/index.js +14 -0
  401. package/server/dist/plugins/json-mutation.js +120 -0
  402. package/server/dist/plugins/manager.js +32 -0
  403. package/server/dist/plugins/ownership.js +86 -0
  404. package/server/dist/plugins/paths.js +37 -0
  405. package/server/dist/plugins/prereq-installer.js +104 -0
  406. package/server/dist/plugins/rail-integration.js +79 -0
  407. package/server/dist/plugins/serena/index.js +13 -0
  408. package/server/dist/plugins/serena/install.js +91 -0
  409. package/server/dist/plugins/serena/instructions-content.js +21 -0
  410. package/server/dist/plugins/serena/manifest.js +111 -0
  411. package/server/dist/plugins/serena/verify.js +78 -0
  412. package/server/dist/plugins-router.js +215 -0
  413. package/server/dist/pricing.js +89 -0
  414. package/server/dist/profile-manager.js +310 -0
  415. package/server/dist/profiles-router.js +759 -0
  416. package/server/dist/project-registry.js +443 -0
  417. package/server/dist/project-router.js +4016 -0
  418. package/server/dist/proposal-manager.js +291 -0
  419. package/server/dist/provider-selection.js +69 -0
  420. package/server/dist/providers/claude-adapter.js +281 -0
  421. package/server/dist/providers/codex-adapter.js +264 -0
  422. package/server/dist/providers/index.js +23 -0
  423. package/server/dist/providers/registry.js +37 -0
  424. package/server/dist/providers/types.js +22 -0
  425. package/server/dist/queue-manager.js +1511 -0
  426. package/server/dist/rails-router.js +362 -0
  427. package/server/dist/rails-store.js +116 -0
  428. package/server/dist/result-event.js +106 -0
  429. package/server/dist/schemas/profile.v1.json +151 -0
  430. package/server/dist/setup-manager.js +1165 -0
  431. package/server/dist/setup-prerequisites.js +372 -0
  432. package/server/dist/smash-runner.js +663 -0
  433. package/server/dist/spec-draft-parser.js +133 -0
  434. package/server/dist/spec-launcher-manager.js +174 -0
  435. package/server/dist/spec-models.js +32 -0
  436. package/server/dist/specrails-tech-client.js +82 -0
  437. package/server/dist/spending.js +448 -0
  438. package/server/dist/telemetry-compactor.js +180 -0
  439. package/server/dist/telemetry-export.js +317 -0
  440. package/server/dist/telemetry-receiver.js +224 -0
  441. package/server/dist/terminal-manager.js +633 -0
  442. package/server/dist/terminal-marks-store.js +117 -0
  443. package/server/dist/terminal-osc-parser.js +159 -0
  444. package/server/dist/terminal-settings.js +282 -0
  445. package/server/dist/terminal-shell-integration.js +196 -0
  446. package/server/dist/ticket-broadcast.js +47 -0
  447. package/server/dist/ticket-store.js +397 -0
  448. package/server/dist/ticket-watcher.js +117 -0
  449. package/server/dist/types.js +10 -0
  450. package/server/dist/user-mcp-config.js +117 -0
  451. package/server/dist/util/cli-prompt.js +181 -0
  452. package/server/dist/util/secure-fs.js +50 -0
  453. package/server/dist/util/win-spawn.js +43 -0
  454. package/server/dist/webhook-manager.js +89 -0
  455. 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.