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,282 @@
1
+ # OpenSpec (opsx) Workflow
2
+
3
+ > **Note:** The OpenSpec Changes UI (the `/changes` route in the dashboard) was removed in the SPEA-341 redesign. There is no dashboard surface for the `opsx:*` workflow — you drive it from a Claude Code conversation, not from the app UI.
4
+
5
+ OpenSpec is the structured change-management workflow this repository uses to evolve itself. Every feature, fix, or refactor goes through a lifecycle of **artifacts** — from a proposal to an archived implementation — so that whoever (human or AI) picks up the work always has the full context.
6
+
7
+ This is a **contributor** workflow: it manages the app's _own_ changes under `openspec/`. It is not a per-project end-user feature exposed in the dashboard.
8
+
9
+ ---
10
+
11
+ ## How it works
12
+
13
+ The `opsx:*` commands are **Claude Code slash commands** (defined in `.claude/commands/opsx/`). When you type one in a Claude Code conversation, the assistant drives the standalone **`openspec` Node CLI** to scaffold change directories, read artifact templates, and report status — then does the actual artifact authoring, code edits, and verification **directly in the conversation**.
14
+
15
+ Two consequences worth internalizing:
16
+
17
+ - **They do not require the specrails-desktop server.** `opsx:*` is independent of the app process; nothing is queued, no rail is launched, and nothing streams to the Dashboard.
18
+ - **They are distinct from `/specrails:implement`.** The Architect → Developer → Reviewer agent pipeline is a _separate_ flow (`specrails-desktop implement`, backed by the `sr-architect` / `sr-developer` / `sr-reviewer` agents). `opsx:apply` does **not** spawn those agents — it implements tasks itself, in the same conversation.
19
+
20
+ Under the hood the assistant calls the `openspec` binary for state, e.g.:
21
+
22
+ ```bash
23
+ openspec list --json # active + recent changes
24
+ openspec new change "<name>" # scaffold a change directory
25
+ openspec status --change "<name>" --json # artifact graph + progress
26
+ openspec instructions <artifact-id> --change "<name>" --json # template + context
27
+ openspec instructions apply --change "<name>" --json # apply context files
28
+ ```
29
+
30
+ You normally won't run these by hand — the slash command orchestrates them for you.
31
+
32
+ ---
33
+
34
+ ## Where changes live
35
+
36
+ Changes are scaffolded under your project's `openspec/` directory:
37
+
38
+ ```
39
+ openspec/
40
+ config.yaml # selects the workflow schema (here: spec-driven)
41
+ changes/
42
+ <name>/ # an active change
43
+ proposal.md
44
+ design.md
45
+ tasks.md
46
+ specs/<capability>/spec.md
47
+ ...
48
+ archive/ # completed changes, date-prefixed
49
+ 2026-04-20-pipeline-telemetry/
50
+ 2026-04-24-add-agents-profiles/
51
+ ...
52
+ specs/ # main (synced) capability specs
53
+ ```
54
+
55
+ Archives land under `openspec/changes/archive/` (singular `archive`) with a `YYYY-MM-DD-<name>` directory name.
56
+
57
+ ---
58
+
59
+ ## Artifacts are schema-driven
60
+
61
+ There is **no fixed list** of artifact filenames. The set is determined by the **workflow schema** declared in `openspec/config.yaml` (`schema: spec-driven` in this repo). The assistant reads the live artifact graph from `openspec status --change <name> --json` and never assumes specific names.
62
+
63
+ For the default **`spec-driven`** schema the artifacts are:
64
+
65
+ | Artifact | Purpose |
66
+ |----------|---------|
67
+ | `proposal.md` | Why / What changes / Capabilities / Impact |
68
+ | `specs/<capability>/spec.md` | One delta spec per capability listed in the proposal |
69
+ | `design.md` | Technical decisions, architecture, implementation approach |
70
+ | `tasks.md` | Checkboxed implementation tasks (`- [ ]` / `- [x]`) |
71
+
72
+ Some changes also carry `context-bundle.md` and a `.openspec.yaml` marker. Other schemas define a different artifact set entirely — always trust the CLI status output, not a hardcoded list.
73
+
74
+ ---
75
+
76
+ ## The change lifecycle
77
+
78
+ ```
79
+ opsx:explore (optional) think through the idea first — no code
80
+
81
+
82
+ opsx:new scaffold the change, show the first artifact template
83
+
84
+
85
+ opsx:ff generate all apply-ready artifacts in one pass
86
+ │ (or opsx:continue to create one artifact at a time and review each)
87
+
88
+
89
+ opsx:apply implement the tasks in-conversation, flipping - [ ] → - [x]
90
+
91
+
92
+ opsx:verify in-conversation Completeness / Correctness / Coherence report
93
+
94
+
95
+ opsx:sync (when needed) merge delta specs into openspec/specs/
96
+
97
+
98
+ opsx:archive move the change to openspec/changes/archive/YYYY-MM-DD-<name>/
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Commands reference
104
+
105
+ Run these as Claude Code slash commands inside a conversation in the repo.
106
+
107
+ ### `opsx:explore` — Think before you build
108
+
109
+ A thinking-partner mode for shaping an idea, investigating the codebase, or comparing approaches. It reads files and draws diagrams but **never writes application code**. It may capture decisions into OpenSpec artifacts if you ask, but it won't implement.
110
+
111
+ ```
112
+ /opsx:explore real-time collaboration
113
+ ```
114
+
115
+ Use it when the problem is still fuzzy. When things crystallize, it can flow straight into a proposal.
116
+
117
+ ---
118
+
119
+ ### `opsx:new` — Start a new change
120
+
121
+ Scaffolds the change directory and **shows the first artifact's template and instructions** — then stops and waits for your direction. It deliberately creates **no artifacts yet**.
122
+
123
+ ```
124
+ /opsx:new add-user-auth
125
+ ```
126
+
127
+ You can also pass a description instead of a name and let the assistant derive a kebab-case name.
128
+
129
+ ---
130
+
131
+ ### `opsx:ff` — Fast-forward artifact creation
132
+
133
+ Generates every artifact required to start implementation in one pass (in dependency order, reading each upstream artifact for context). Best when the task is well-defined and you want to go straight to `opsx:apply`.
134
+
135
+ ```
136
+ /opsx:ff add-user-auth
137
+ ```
138
+
139
+ The assistant loops the schema's artifacts, creating each one until everything `apply.requires` is done.
140
+
141
+ ---
142
+
143
+ ### `opsx:continue` — Create the next artifact, one at a time
144
+
145
+ Creates exactly **one** artifact per invocation — the next one whose dependencies are satisfied — then stops. Use it when you want to review and adjust each artifact before the next is drafted.
146
+
147
+ ```
148
+ /opsx:continue add-user-auth
149
+ ```
150
+
151
+ Run it repeatedly until all artifacts exist, then move on to `opsx:apply`.
152
+
153
+ ---
154
+
155
+ ### `opsx:apply` — Implement the change
156
+
157
+ Reads the change's context files (via `openspec instructions apply --json`), then **implements the tasks directly in the conversation** — making the code edits and marking each task `- [ ]` → `- [x]` in the tasks file as it goes. It loops until all tasks are complete or it hits something that needs your input.
158
+
159
+ ```
160
+ /opsx:apply add-user-auth
161
+ ```
162
+
163
+ > **Not the app pipeline.** `opsx:apply` does the work itself, in-conversation. It does **not** queue a server job, spawn Architect/Developer/Reviewer agents, or stream to the Dashboard. For the agent pipeline, use `specrails-desktop implement` instead.
164
+
165
+ ---
166
+
167
+ ### `opsx:verify` — Verify the implementation
168
+
169
+ Reads the artifacts and builds an in-conversation **verification report** across three dimensions:
170
+
171
+ - **Completeness** — are all `tasks.md` checkboxes done? Are all spec requirements implemented?
172
+ - **Correctness** — does the implementation match the requirements and cover the scenarios?
173
+ - **Coherence** — does the code follow the decisions in `design.md` and the project's patterns?
174
+
175
+ ```
176
+ /opsx:verify add-user-auth
177
+ ```
178
+
179
+ Issues are graded CRITICAL / WARNING / SUGGESTION with file/line references. Resolve any CRITICALs (manually or by re-running `opsx:apply`), then verify again before archiving.
180
+
181
+ ---
182
+
183
+ ### `opsx:sync` — Sync delta specs to main specs
184
+
185
+ When a change adds, modifies, removes, or renames requirements, `opsx:sync` merges those delta specs (`openspec/changes/<name>/specs/`) into the main specs at `openspec/specs/<capability>/spec.md`. It's an **agent-driven intelligent merge** — it can add a single scenario without rewriting the whole requirement, and is idempotent. The change stays active; archive it once implementation is done.
186
+
187
+ ```
188
+ /opsx:sync add-user-auth
189
+ ```
190
+
191
+ ---
192
+
193
+ ### `opsx:archive` — Archive a completed change
194
+
195
+ Moves the change to `openspec/changes/archive/YYYY-MM-DD-<name>/`. Before moving, it checks artifact and task completion (warning if anything is incomplete) and, when delta specs exist, offers to sync them first.
196
+
197
+ ```
198
+ /opsx:archive add-user-auth
199
+ ```
200
+
201
+ ---
202
+
203
+ ### `opsx:bulk-archive` — Archive several changes at once
204
+
205
+ Archives multiple completed changes in a single operation, checking the codebase to resolve spec conflicts intelligently. Use it when you've finished a batch of parallel changes.
206
+
207
+ ```
208
+ /opsx:bulk-archive
209
+ ```
210
+
211
+ ---
212
+
213
+ ### `opsx:onboard` — Guided walkthrough
214
+
215
+ A teaching mode that walks you through a complete OpenSpec cycle on real work in the codebase, narrating each step. Run it the first time you touch this workflow. (It checks that the `openspec` CLI is installed before starting.)
216
+
217
+ ```
218
+ /opsx:onboard
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Use cases
224
+
225
+ ### Feature implementation
226
+
227
+ ```
228
+ /opsx:ff add-user-auth # scaffold + generate all artifacts
229
+ # review the generated proposal / design / tasks
230
+ /opsx:apply add-user-auth # implement the tasks in-conversation
231
+ /opsx:verify add-user-auth # check completeness/correctness/coherence
232
+ /opsx:sync add-user-auth # merge delta specs into main specs (if any)
233
+ /opsx:archive add-user-auth # archive
234
+ ```
235
+
236
+ ### Bug fix
237
+
238
+ For a well-understood bug, go straight to fast-forward:
239
+
240
+ ```
241
+ /opsx:ff fix-token-refresh
242
+ # review the generated artifacts to confirm they describe the fix
243
+ /opsx:apply fix-token-refresh
244
+ /opsx:verify fix-token-refresh
245
+ /opsx:archive fix-token-refresh
246
+ ```
247
+
248
+ ### Refactor with careful artifact review
249
+
250
+ Use `opsx:explore` to think first, then create artifacts one at a time:
251
+
252
+ ```
253
+ /opsx:explore the auth system is getting unwieldy
254
+ /opsx:new refactor-auth
255
+ /opsx:continue refactor-auth # creates the proposal — review it
256
+ /opsx:continue refactor-auth # creates the next artifact — review it
257
+ # ...repeat until all artifacts exist...
258
+ /opsx:apply refactor-auth
259
+ /opsx:verify refactor-auth
260
+ /opsx:archive refactor-auth
261
+ ```
262
+
263
+ ---
264
+
265
+ ## Browsing changes via the app API
266
+
267
+ Although the dashboard `/changes` UI was removed, the server still **reads** the OpenSpec directory and exposes two read-only endpoints (per project):
268
+
269
+ | Endpoint | Returns |
270
+ |----------|---------|
271
+ | `GET /api/projects/:projectId/changes` | Active + archived changes (parsed from `openspec/changes/`) |
272
+ | `GET /api/projects/:projectId/changes/:changeId/artifacts/:artifact` | A single artifact's content (`proposal.md`, `design.md`, `tasks.md`, `delta-spec.md`, `context-bundle.md`) |
273
+
274
+ These are handy for tooling that wants to surface the artifact set without parsing the filesystem directly.
275
+
276
+ ---
277
+
278
+ ## Further reading
279
+
280
+ - [CLI reference](../cli.md) — the `specrails-desktop` CLI and its verbs
281
+ - [Architecture](architecture.md) — server modules and how the app is wired
282
+ - [Adding a provider](adding-a-provider.md) — extending the provider adapter contract
@@ -0,0 +1,198 @@
1
+ # Operations Runbook
2
+
3
+ Common operational procedures for running, recovering, and updating specrails-desktop. Everything here is verified against the shipped code. The app binds to `127.0.0.1` only.
4
+
5
+ For the full data-directory layout, every CLI flag, env vars, and app/project settings, see [Configuration](configuration.md).
6
+
7
+ ## Starting the app
8
+
9
+ ```bash
10
+ # Start the app server (daemonized — it detaches and returns once ready)
11
+ specrails-desktop start
12
+
13
+ # Start on a non-default port (the --port flag may appear in any position)
14
+ specrails-desktop --port 5000 start
15
+ ```
16
+
17
+ `start` writes the server PID to `~/.specrails/manager.pid` and appends the server's stdout/stderr to `~/.specrails/desktop.log`. The default port is `4200`.
18
+
19
+ ## Stopping the app
20
+
21
+ ```bash
22
+ specrails-desktop stop
23
+ ```
24
+
25
+ `stop` reads the PID file and sends `SIGTERM`. If the PID file is stale (no such process), it prints `[specrails-desktop] server is not running (stale pid file)` and removes the file for you — so you rarely need to delete `manager.pid` by hand.
26
+
27
+ ## Status / health check
28
+
29
+ The first thing to run when something looks wrong:
30
+
31
+ ```bash
32
+ # Is the app up? On what URL/PID? How many projects?
33
+ specrails-desktop status
34
+
35
+ # Same, against a custom port
36
+ specrails-desktop --port 5000 status
37
+
38
+ # One-line manager status (also usable as a script-friendly probe)
39
+ specrails-desktop --status
40
+ ```
41
+
42
+ `status` prints `server: running (pid <n>) on http://127.0.0.1:<port>`, the project count, and each project name. It exits non-zero when the app is not running.
43
+
44
+ > `specrails-desktop --jobs` is **not** functional against the running server — the server does not expose a cross-project `/api/jobs` route, so the command prints a message that jobs history requires a manager with SQLite persistence and exits `1`. Browse job history per project in the app's **Jobs** page instead.
45
+
46
+ ## App data location
47
+
48
+ All app data lives under `~/.specrails/` (the path is hardcoded to your home directory — there is no override env var):
49
+
50
+ ```
51
+ ~/.specrails/
52
+ desktop.sqlite # App-level SQLite: project registry + desktop_settings
53
+ desktop.token # Auto-generated API token (mode 0600)
54
+ manager.pid # PID of the running server (removed on a clean stop)
55
+ desktop.log # Server stdout/stderr (appended on each start)
56
+ projects/
57
+ <slug>/
58
+ jobs.sqlite # Per-project job history, invocations, telemetry pointers
59
+ ```
60
+
61
+ See [Configuration](configuration.md#specrails-directory-structure) for the complete per-project subtree (telemetry blobs, explore-cwd, terminals, attachments, etc.) and how the `<slug>` is derived.
62
+
63
+ > **Auth token caveat.** `~/.specrails/desktop.token` gates every `/api/*` request and WebSocket upgrade. Deleting it (or doing a full `rm -rf ~/.specrails`) regenerates a fresh token on the next start, which can leave an already-open browser tab or CLI on the old token — reload the app after a token reset. See [Configuration → Authentication](configuration.md#authentication).
64
+
65
+ ## Log files
66
+
67
+ The app already daemonizes and writes its output to `~/.specrails/desktop.log` on every `start` — you do not need to redirect anything yourself.
68
+
69
+ ```bash
70
+ # Follow the live log
71
+ tail -f ~/.specrails/desktop.log
72
+
73
+ # Show the last 200 lines
74
+ tail -n 200 ~/.specrails/desktop.log
75
+ ```
76
+
77
+ The log file is opened in append mode, so it accumulates across restarts. Truncate or rotate it manually if it grows large.
78
+
79
+ ## Backups
80
+
81
+ To back up all app data, copy the whole directory while the app is stopped:
82
+
83
+ ```bash
84
+ specrails-desktop stop
85
+ cp -r ~/.specrails/ ~/specrails-backup-$(date +%Y%m%d)/
86
+ ```
87
+
88
+ Your project source code and each project's `.specrails/` folder (specs, profiles, plugins) live in your repos, not here — they are not part of this backup.
89
+
90
+ ## Troubleshooting
91
+
92
+ ### Port already in use
93
+
94
+ ```bash
95
+ # Find the process bound to the port (use your custom port if not 4200)
96
+ lsof -i :4200
97
+
98
+ # Stop the app cleanly
99
+ specrails-desktop stop
100
+
101
+ # Last resort: kill by recorded PID
102
+ kill "$(cat ~/.specrails/manager.pid)"
103
+ ```
104
+
105
+ If you run the app on a custom port, point `lsof` and `status` at that port (`--port <n>`).
106
+
107
+ ### Server won't start after a crash
108
+
109
+ A clean `stop` already clears a stale PID file. If a crash left one behind and `start` still refuses:
110
+
111
+ ```bash
112
+ rm ~/.specrails/manager.pid
113
+ specrails-desktop start
114
+ ```
115
+
116
+ ### Registry database reset (loses project registrations)
117
+
118
+ > **Warning:** `desktop.sqlite` is the project registry *and* the app-settings store. Deleting it unregisters **every** project and resets all app settings. Your project source and each project's specrails-core install are untouched, but you must re-add each project afterward.
119
+
120
+ ```bash
121
+ # Back up first, then reset
122
+ cp ~/.specrails/desktop.sqlite ~/.specrails/desktop.sqlite.bak
123
+ specrails-desktop stop
124
+ rm -f ~/.specrails/desktop.sqlite* # the glob also clears the WAL/SHM sidecars
125
+ specrails-desktop start # re-creates an empty registry
126
+
127
+ # Re-register each project
128
+ specrails-desktop add /path/to/project-a
129
+ specrails-desktop add /path/to/project-b
130
+ ```
131
+
132
+ ### Per-project reset (keeps the registration)
133
+
134
+ To clear one project's job history, invocations, and telemetry pointers while keeping it registered, delete just that project's `jobs.sqlite` with the app stopped:
135
+
136
+ ```bash
137
+ specrails-desktop stop
138
+ rm -f ~/.specrails/projects/<slug>/jobs.sqlite*
139
+ specrails-desktop start
140
+ ```
141
+
142
+ The `<slug>` matches the project's directory name, lowercased with non-alphanumeric runs collapsed to hyphens (e.g. `My App v2!` → `my-app-v2`). The project's registration in `desktop.sqlite` and its on-disk `.specrails/` assets are left intact; the per-project DB is re-created empty on next start.
143
+
144
+ ## Updates
145
+
146
+ For an npm-installed server:
147
+
148
+ ```bash
149
+ npm update -g specrails-desktop
150
+ specrails-desktop stop && specrails-desktop start
151
+ ```
152
+
153
+ The desktop app self-updates via Tauri's passive updater — no manual step needed.
154
+
155
+ ## Desktop app
156
+
157
+ These commands require the **Rust toolchain** and `@tauri-apps/cli` (a devDependency), in addition to a checked-out repo with both `npm install` trees (root + `client/`).
158
+
159
+ ### Development
160
+
161
+ ```bash
162
+ npm run dev:desktop
163
+ ```
164
+
165
+ Runs `tauri dev` — a hot-reloading desktop window backed by the dev server.
166
+
167
+ ### Production build
168
+
169
+ ```bash
170
+ npm run build:desktop
171
+ ```
172
+
173
+ This single script chains the full pipeline: `build:server` → client build → `build:sidecar` → `tauri build`. There is **no** `npm run tauri` script — `npm run tauri dev` / `npm run tauri build` fail with `Missing script: tauri`.
174
+
175
+ The macOS build is signed + notarized. The Windows x64 and arm64 builds ship **unsigned** in v1 (users see a SmartScreen warning → "More info → Run anyway"). See [Windows](../platforms/windows.md) and [macOS](../platforms/macos.md) for platform specifics.
176
+
177
+ ### Build the server sidecar only
178
+
179
+ ```bash
180
+ npm run build:sidecar
181
+ ```
182
+
183
+ Bundles the Express server (and the `node-pty` native module) into the standalone sidecar that Tauri ships. `build:desktop` runs this for you; run it on its own only when iterating on server code for a desktop build.
184
+
185
+ ### Regenerate app icons
186
+
187
+ ```bash
188
+ npm run generate-icons
189
+ ```
190
+
191
+ Regenerates every icon size (PNG/ICNS/ICO) from `src-tauri/icons/icon.svg` via `tauri icon`. Requires the Rust toolchain + `@tauri-apps/cli`. Run after any icon design change.
192
+
193
+ ## Further reading
194
+
195
+ - [Configuration](configuration.md) — full data layout, app/project settings, auth token, env vars
196
+ - [CLI reference](../cli.md) — every command and flag in detail
197
+ - [Architecture](architecture.md) — server modules, data flow, WebSocket protocol
198
+ - [macOS](../platforms/macos.md) · [Windows](../platforms/windows.md) — platform-specific operations
@@ -0,0 +1,152 @@
1
+ # Profiles — Quick start
2
+
3
+ Profiles let you save a named combination of orchestrator model, agent
4
+ chain, per-agent models, and routing rules, and pick one per rail at
5
+ launch time. Different rails on the Dashboard can run different profiles
6
+ simultaneously — useful for batch runs where each feature needs a
7
+ different flavor of pipeline.
8
+
9
+ Requires **`specrails-core >= 4.1.0`** in the target project. Without
10
+ it, the app still lets you create/edit profiles but the pipeline runs in
11
+ legacy mode (a yellow banner on the Agents page tells you when this is
12
+ the case).
13
+
14
+ ---
15
+
16
+ ## 1. Open the Agents section
17
+
18
+ From any project, click **Agents** in the right sidebar (next to
19
+ Dashboard/Jobs/Analytics/Settings).
20
+
21
+ - **Profiles** tab — create and edit profiles.
22
+ - **Usage** tab — see which profiles are actually being used.
23
+ - **Catalog** tab — read the upstream `sr-*` agents or author custom
24
+ `custom-*` ones via the Studio.
25
+
26
+ When the project has no profiles yet, the empty state offers two entry
27
+ points:
28
+
29
+ - **Migrate from current agents** — reads your existing
30
+ `.claude/agents/` frontmatter models and creates a `default` profile
31
+ mirroring today's behavior (zero-loss). It requires the baseline trio
32
+ `sr-architect`, `sr-developer`, and `sr-reviewer` to be present — the
33
+ server rejects the migration if any is missing.
34
+ - **Blank profile** — start from scratch.
35
+
36
+ ## 2. Saved profiles vs selection
37
+
38
+ Two orthogonal concepts:
39
+
40
+ - **Saved profiles** — the set of profiles in the project (`.specrails/profiles/*.json`).
41
+ Committed to git, shared with the team.
42
+ - **Selection** — which profile this particular invocation uses. Per-rail,
43
+ per-launch.
44
+
45
+ Resolution order when no explicit selection is passed:
46
+
47
+ 1. The profile named `default` (or `project-default`).
48
+ 2. Legacy mode (no profile active).
49
+
50
+ ## 3. Pick a profile at launch
51
+
52
+ Profiles are picked on the **Dashboard rails board**, not in a separate
53
+ wizard. Each rail header has a compact profile dropdown
54
+ (`RailProfileSelector`):
55
+
56
+ - Pick a profile once and it persists across launches of that rail
57
+ (stored per rail; sent inline on `POST /rails/:i/launch`, or set on its
58
+ own via `PUT /rails/:i/profile`).
59
+ - Concurrent rails can run different profiles at the same time, so a batch
60
+ spread across rails can give each feature its own flavor of pipeline.
61
+ - The selector **self-hides** when the project has no profiles, so it never
62
+ leaves an empty gap in the rail header.
63
+
64
+ The "No profile" option is always available — use it to run a
65
+ rail exactly as it did pre-4.1.0.
66
+
67
+ ### Codex / multi-provider
68
+
69
+ Agent profiles are a **Claude-only** feature. When a rail's AI engine is
70
+ Codex, the app force-nulls the profile and runs the rail in legacy mode —
71
+ Codex has no agent-profile concept. The profile selector is hidden for
72
+ Codex rails, so a profile picked on one engine never silently applies to
73
+ the other.
74
+
75
+ ## 4. Author a custom agent (Agent Studio)
76
+
77
+ From the Catalog tab, create a new custom agent via:
78
+
79
+ - **Template** — start from one of ~50 curated templates spanning many
80
+ categories (engineering, product, data, security, …) — for example
81
+ Security Reviewer, Performance Profiler, Data Engineer, or UI/UX Polisher.
82
+ - **Generate** — describe the agent in natural language; Claude drafts the
83
+ full `.md` for you to review and edit before saving.
84
+ - **Blank** — start from a minimal template.
85
+ - **Duplicate** — copy any existing agent (upstream or custom).
86
+
87
+ Custom agents live at `.claude/agents/custom-*.md` and are never touched
88
+ by `specrails-core`'s installer/update scripts. Every save appends a new
89
+ version row; open **History** in the Studio to browse and restore.
90
+
91
+ Click **Test** in the Studio to run the current draft against a sample
92
+ task in an isolated `claude` invocation — no files are written, and you
93
+ see output, token count, and duration inline.
94
+
95
+ ## 5. Observe
96
+
97
+ - A **profile badge** (themed with the `accent-primary` color) appears on
98
+ each job row showing which profile it ran under.
99
+ - The **Usage** tab shows usage per profile for the last 7/30/90 days:
100
+ jobs, success rate, avg duration, avg tokens, and avg cost.
101
+ - The **diagnostic ZIP export** on a job includes `profile.json` with
102
+ the exact snapshot that rail used.
103
+
104
+ ## 6. Troubleshooting
105
+
106
+ - **Upgrade banner on Agents page** — `npx specrails-core@latest update`
107
+ in the project to bring it to ≥ 4.1.0.
108
+ - **Save disabled with "N issues to resolve"** — the live validator
109
+ enforces the baseline trio (`sr-architect`, `sr-developer`, `sr-reviewer`)
110
+ and routing ordering. Among the rules: a `default: true` routing rule (if
111
+ present) must be the **last** entry in `routing` and must target
112
+ `sr-developer`. Fix the listed issues and Save re-enables.
113
+ - **"agent 'xyz' already exists" (409)** — the name collides with an
114
+ existing file in `.claude/agents/`. Pick a different name.
115
+ - **The whole Agents section is missing** — it can be disabled server-side
116
+ with `SPECRAILS_AGENTS_SECTION=false`, which 404s the entire
117
+ `/profiles` router. Unset it (or leave it at its default) to restore the
118
+ section.
119
+
120
+ ## 7. Reserved paths
121
+
122
+ `specrails-core`'s installer guarantees it will never touch:
123
+
124
+ - `.specrails/profiles/**` — your profile catalog.
125
+ - `.claude/agents/custom-*.md` — your custom agents.
126
+
127
+ Everything else under `.specrails/` (install-config, specrails-version,
128
+ setup-templates) is managed by the installer and may be overwritten on
129
+ update.
130
+
131
+ ## 8. For developers
132
+
133
+ A few internals worth knowing if you're working on this surface:
134
+
135
+ - **Version gate.** Profile-aware spawns are gated by
136
+ `projectSupportsProfiles()` (`server/queue-manager.ts`), which reads the
137
+ project's `.specrails/specrails-version` and requires
138
+ `specrails-core >= 4.1.0`. Below that, the rail spawns in legacy mode and
139
+ no profile env var is injected.
140
+ - **Snapshot per job.** When a rail launches with a profile, the resolved
141
+ profile is written to
142
+ `~/.specrails/projects/<slug>/jobs/<jobId>/profile.json` (chmod `400`, so
143
+ mid-run edits are impossible) before the `claude` process spawns. The
144
+ spawn env then carries `SPECRAILS_PROFILE_PATH` pointing at that file.
145
+ The same snapshot is persisted to the `job_profiles` table for the Usage
146
+ analytics.
147
+ - **REST surface.** All profile operations live under
148
+ `/api/projects/:projectId/profiles` — list/get/create/update/delete,
149
+ `/:name/duplicate`, `/:name/rename`, `/resolve`, `/migrate-from-settings`,
150
+ `/analytics`, `/core-version`, and the catalog routes under `/catalog`.
151
+ The router 404s entirely when `SPECRAILS_AGENTS_SECTION=false`. See
152
+ [api-reference.md](api-reference.md) for the full route list.