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,264 @@
1
+ "use strict";
2
+ // Codex (OpenAI) adapter for codex CLI 0.128.0+.
3
+ //
4
+ // Stream format observed live (2026-05-17):
5
+ // {"type":"thread.started","thread_id":"<UUID>"}
6
+ // {"type":"turn.started"}
7
+ // {"type":"item.completed","item":{"id":"item_0","type":"agent_message","text":"..."}}
8
+ // {"type":"item.completed","item":{"id":"item_1","type":"function_call",
9
+ // "name":"shell","arguments":"..."}}
10
+ // {"type":"turn.completed","usage":{"input_tokens":N,"cached_input_tokens":N,
11
+ // "output_tokens":N,"reasoning_output_tokens":N}}
12
+ //
13
+ // Codex does not emit `total_cost_usd`; cost is estimated downstream via
14
+ // server/pricing.ts. Codex does not honour Claude's OTEL env vars; signals are
15
+ // synthesised by server/codex-otel-bridge.ts.
16
+ //
17
+ // Spec: openspec/specs/multi-provider-architecture/spec.md
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports._CODEX_MIN_VERSION = exports.codexAdapter = void 0;
20
+ exports._compareSemver = compareSemver;
21
+ const child_process_1 = require("child_process");
22
+ const WHICH_CMD = process.platform === 'win32' ? 'where' : 'which';
23
+ const CODEX_MIN_VERSION = '0.128.0';
24
+ exports._CODEX_MIN_VERSION = CODEX_MIN_VERSION;
25
+ const CODEX_MODELS = [
26
+ { value: 'gpt-5.5', label: 'GPT-5.5', default: true },
27
+ { value: 'gpt-5.4', label: 'GPT-5.4' },
28
+ { value: 'gpt-5.4-mini', label: 'GPT-5.4 Mini' },
29
+ { value: 'gpt-5.3-codex', label: 'GPT-5.3 Codex' },
30
+ ];
31
+ const SANDBOX_FLAGS = ['--sandbox', 'workspace-write'];
32
+ const RAIL_SANDBOX_FLAGS = ['--sandbox', 'danger-full-access'];
33
+ // `codex exec resume` does NOT accept `--sandbox` (the flag only exists on
34
+ // `codex exec`); pass the policy as a `-c` config override instead so the
35
+ // resumed session honours workspace-write even when the per-project
36
+ // `.codex/config.toml` isn't on the spawn cwd (e.g. explore-cwd).
37
+ const SANDBOX_RESUME_FLAGS = ['-c', 'sandbox_mode="workspace-write"'];
38
+ const SKIP_GIT_CHECK = '--skip-git-repo-check';
39
+ /** Fold system prompt into the user prompt for providers without --system-prompt. */
40
+ function fold(systemPrompt, prompt) {
41
+ if (!systemPrompt)
42
+ return prompt;
43
+ return `${systemPrompt}\n\n---\n\n${prompt}`;
44
+ }
45
+ function buildCodexArgs(action, opts) {
46
+ const args = [];
47
+ switch (action) {
48
+ case 'chat-turn': {
49
+ // chat-turn (Explore) spawns codex from the app-managed explore-cwd,
50
+ // which already ships an AGENTS.md with the Explore stance. Folding the
51
+ // app's system prompt into the positional argv would double-inject the
52
+ // framing AND, because the user message in Explore is often very short
53
+ // ("quiero hacer un tetris"), the long system text dominates the prompt
54
+ // and codex responds to the system instructions instead of the user.
55
+ // Trust AGENTS.md and pass only the user prompt.
56
+ args.push('exec', '--json', ...SANDBOX_FLAGS, SKIP_GIT_CHECK);
57
+ args.push(opts.prompt);
58
+ args.push('--model', opts.model);
59
+ if (opts.extraArgs)
60
+ args.push(...opts.extraArgs);
61
+ return args;
62
+ }
63
+ case 'spec-gen':
64
+ case 'agent-refine':
65
+ case 'auto-title':
66
+ case 'setup-enrich': {
67
+ args.push('exec', '--json', ...SANDBOX_FLAGS, SKIP_GIT_CHECK);
68
+ args.push(fold(opts.systemPrompt, opts.prompt));
69
+ args.push('--model', opts.model);
70
+ if (opts.extraArgs)
71
+ args.push(...opts.extraArgs);
72
+ return args;
73
+ }
74
+ case 'chat-resume': {
75
+ if (!opts.sessionId) {
76
+ throw new Error(`${action} requires sessionId`);
77
+ }
78
+ // See chat-turn note: AGENTS.md in explore-cwd carries the Explore
79
+ // framing; the per-turn argv must stay user-text-only so codex doesn't
80
+ // mistake the system prompt for the user request.
81
+ args.push('exec', 'resume', '--json', ...SANDBOX_RESUME_FLAGS, SKIP_GIT_CHECK);
82
+ args.push(opts.sessionId);
83
+ args.push(opts.prompt);
84
+ args.push('--model', opts.model);
85
+ if (opts.extraArgs)
86
+ args.push(...opts.extraArgs);
87
+ return args;
88
+ }
89
+ case 'setup-enrich-resume': {
90
+ if (!opts.sessionId) {
91
+ throw new Error(`${action} requires sessionId`);
92
+ }
93
+ args.push('exec', 'resume', '--json', ...SANDBOX_RESUME_FLAGS, SKIP_GIT_CHECK);
94
+ args.push(opts.sessionId);
95
+ args.push(fold(opts.systemPrompt, opts.prompt));
96
+ args.push('--model', opts.model);
97
+ if (opts.extraArgs)
98
+ args.push(...opts.extraArgs);
99
+ return args;
100
+ }
101
+ case 'rail-job': {
102
+ // Rail jobs are headless implementation pipelines. They must run repo
103
+ // inspection, edits, tests, and git probes without interactive approval.
104
+ // On Windows, Codex's workspace-write sandbox can fail before the first
105
+ // shell command with `windows sandbox: spawn setup refresh`; full access
106
+ // matches the existing fully-autonomous rail contract.
107
+ args.push('exec', '--json', ...RAIL_SANDBOX_FLAGS, SKIP_GIT_CHECK);
108
+ args.push(fold(opts.systemPrompt, opts.prompt));
109
+ args.push('--model', opts.model);
110
+ if (opts.extraArgs)
111
+ args.push(...opts.extraArgs);
112
+ return args;
113
+ }
114
+ }
115
+ }
116
+ function parseCodexStreamLine(line) {
117
+ if (line.length === 0)
118
+ return null;
119
+ let parsed;
120
+ try {
121
+ parsed = JSON.parse(line);
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ const type = parsed.type;
127
+ if (!type)
128
+ return { kind: 'other', type: '<missing>', raw: parsed };
129
+ if (type === 'thread.started') {
130
+ const sid = parsed.thread_id;
131
+ if (sid)
132
+ return { kind: 'session-started', sessionId: sid };
133
+ return { kind: 'other', type, raw: parsed };
134
+ }
135
+ if (type === 'turn.completed') {
136
+ return { kind: 'result', payload: parsed };
137
+ }
138
+ if (type === 'item.completed') {
139
+ const item = parsed.item;
140
+ if (item?.type === 'agent_message') {
141
+ const text = item.text ?? '';
142
+ if (text)
143
+ return { kind: 'text-delta', text };
144
+ return { kind: 'other', type, raw: parsed };
145
+ }
146
+ if (item?.type === 'function_call' || item?.type === 'local_shell_call') {
147
+ const name = item.name ?? (item.type === 'local_shell_call' ? 'shell' : '<unnamed>');
148
+ const inputPreview = item.arguments ? item.arguments.slice(0, 200) : '';
149
+ return { kind: 'tool-use', name, inputPreview };
150
+ }
151
+ return { kind: 'other', type, raw: parsed };
152
+ }
153
+ return { kind: 'other', type, raw: parsed };
154
+ }
155
+ function extractCodexResult(events) {
156
+ let sessionId;
157
+ let resultPayload = null;
158
+ let turnCount = 0;
159
+ // First text-delta timestamp is unavailable from events (we'd need wall-clock
160
+ // tracking). duration_ms is left undefined and the manager-level wrapper
161
+ // synthesises it from the spawn-close timestamps if it wants to populate.
162
+ for (const ev of events) {
163
+ if (ev.kind === 'session-started')
164
+ sessionId = ev.sessionId;
165
+ else if (ev.kind === 'result') {
166
+ resultPayload = ev.payload;
167
+ turnCount += 1; // each turn.completed is one codex turn
168
+ }
169
+ }
170
+ if (!resultPayload) {
171
+ return { session_id: sessionId };
172
+ }
173
+ const usage = resultPayload.usage;
174
+ // OpenAI bills reasoning_output_tokens at the output rate, so we fold it
175
+ // into tokens_out for cost-estimation correctness.
176
+ const baseOut = usage?.output_tokens ?? 0;
177
+ const reasoning = usage?.reasoning_output_tokens ?? 0;
178
+ const tokensOut = baseOut + reasoning;
179
+ return {
180
+ tokens_in: usage?.input_tokens,
181
+ tokens_out: usage ? tokensOut : undefined,
182
+ tokens_cache_read: usage?.cached_input_tokens,
183
+ // Codex has no separate "cache creation" tier — left undefined.
184
+ tokens_cache_create: undefined,
185
+ // total_cost_usd intentionally absent — estimated via pricing.ts.
186
+ // Derive from the number of turn.completed events rather than hardcoding 1
187
+ // (a single `codex exec` normally emits exactly one, but don't assume it).
188
+ num_turns: turnCount || 1,
189
+ // Model on stream events is not present; manager-level wrapper passes
190
+ // the requested model in via the spawn args and stamps it on the row.
191
+ model: undefined,
192
+ duration_ms: undefined,
193
+ duration_api_ms: undefined,
194
+ session_id: sessionId,
195
+ };
196
+ }
197
+ function compareSemver(a, b) {
198
+ const aParts = a.split('.').map((n) => parseInt(n, 10));
199
+ const bParts = b.split('.').map((n) => parseInt(n, 10));
200
+ for (let i = 0; i < 3; i++) {
201
+ const av = aParts[i] ?? 0;
202
+ const bv = bParts[i] ?? 0;
203
+ if (av > bv)
204
+ return 1;
205
+ if (av < bv)
206
+ return -1;
207
+ }
208
+ return 0;
209
+ }
210
+ async function detectCodexInstalled() {
211
+ try {
212
+ (0, child_process_1.execSync)(`${WHICH_CMD} codex`, { stdio: 'ignore' });
213
+ }
214
+ catch {
215
+ return { installed: false, executable: false };
216
+ }
217
+ try {
218
+ const raw = (0, child_process_1.execSync)('codex --version', {
219
+ encoding: 'utf-8',
220
+ stdio: ['pipe', 'pipe', 'ignore'],
221
+ timeout: 3000,
222
+ }).trim();
223
+ const match = raw.match(/\d+\.\d+\.\d+/);
224
+ const version = match ? match[0] : raw;
225
+ const meetsMinimum = match ? compareSemver(version, CODEX_MIN_VERSION) >= 0 : false;
226
+ const result = {
227
+ installed: true,
228
+ executable: true,
229
+ version,
230
+ meetsMinimum,
231
+ };
232
+ if (!meetsMinimum) {
233
+ result.error = `codex ${version} is older than required ${CODEX_MIN_VERSION}. Upgrade with: brew upgrade codex (or follow https://developers.openai.com/codex).`;
234
+ }
235
+ return result;
236
+ }
237
+ catch {
238
+ return { installed: true, executable: false };
239
+ }
240
+ }
241
+ exports.codexAdapter = {
242
+ id: 'codex',
243
+ displayName: 'Codex CLI',
244
+ binary: 'codex',
245
+ minCliVersion: CODEX_MIN_VERSION,
246
+ projectDirName: '.codex',
247
+ instructionsFilename: 'AGENTS.md',
248
+ mcpRegistration: 'cli-add',
249
+ capabilities: {
250
+ nativeResume: true,
251
+ nativeStreamJson: true,
252
+ nativeCostUsd: false,
253
+ nativeOtelEnv: false,
254
+ profileEnvSupport: true,
255
+ systemPromptArg: false,
256
+ },
257
+ modelCatalog: () => CODEX_MODELS,
258
+ defaultModel: () => 'gpt-5.5',
259
+ buildArgs: buildCodexArgs,
260
+ parseStreamLine: parseCodexStreamLine,
261
+ extractResult: extractCodexResult,
262
+ baselineAgents: () => ['sr-architect', 'sr-developer', 'sr-reviewer'],
263
+ detectInstalled: detectCodexInstalled,
264
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ // Provider barrel. Importing this module registers every bundled adapter so
3
+ // managers can resolve them via `getAdapter`. Adapters themselves are pure
4
+ // const exports — testing an adapter in isolation does NOT side-effect the
5
+ // registry. Production code MUST import this module (not the adapter files
6
+ // directly) so the registration runs.
7
+ //
8
+ // Spec: openspec/specs/multi-provider-architecture/spec.md
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.UnknownProviderError = exports.codexAdapter = exports.claudeAdapter = exports.listAdapters = exports.hasAdapter = exports.getAdapter = void 0;
11
+ const registry_1 = require("./registry");
12
+ const claude_adapter_1 = require("./claude-adapter");
13
+ Object.defineProperty(exports, "claudeAdapter", { enumerable: true, get: function () { return claude_adapter_1.claudeAdapter; } });
14
+ const codex_adapter_1 = require("./codex-adapter");
15
+ Object.defineProperty(exports, "codexAdapter", { enumerable: true, get: function () { return codex_adapter_1.codexAdapter; } });
16
+ (0, registry_1.register)(claude_adapter_1.claudeAdapter);
17
+ (0, registry_1.register)(codex_adapter_1.codexAdapter);
18
+ var registry_2 = require("./registry");
19
+ Object.defineProperty(exports, "getAdapter", { enumerable: true, get: function () { return registry_2.getAdapter; } });
20
+ Object.defineProperty(exports, "hasAdapter", { enumerable: true, get: function () { return registry_2.hasAdapter; } });
21
+ Object.defineProperty(exports, "listAdapters", { enumerable: true, get: function () { return registry_2.listAdapters; } });
22
+ var types_1 = require("./types");
23
+ Object.defineProperty(exports, "UnknownProviderError", { enumerable: true, get: function () { return types_1.UnknownProviderError; } });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // In-process registry of ProviderAdapter instances. Adapter modules call
3
+ // `register(this)` on module load; managers look up by id via `getAdapter`.
4
+ //
5
+ // Spec: openspec/specs/multi-provider-architecture/spec.md
6
+ // - "Provider registry exposes lookup by id"
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.register = register;
9
+ exports.getAdapter = getAdapter;
10
+ exports.hasAdapter = hasAdapter;
11
+ exports.listAdapters = listAdapters;
12
+ exports._clearForTests = _clearForTests;
13
+ const types_1 = require("./types");
14
+ const _registry = new Map();
15
+ function register(adapter) {
16
+ _registry.set(adapter.id, adapter);
17
+ }
18
+ function getAdapter(id) {
19
+ const adapter = _registry.get(id);
20
+ if (!adapter) {
21
+ throw new types_1.UnknownProviderError(id, Array.from(_registry.keys()));
22
+ }
23
+ return adapter;
24
+ }
25
+ function hasAdapter(id) {
26
+ return _registry.has(id);
27
+ }
28
+ function listAdapters() {
29
+ return Array.from(_registry.values());
30
+ }
31
+ /**
32
+ * Reset the registry. Test-only — production code MUST NOT call this.
33
+ * Exported separately so production paths cannot mistakenly import it.
34
+ */
35
+ function _clearForTests() {
36
+ _registry.clear();
37
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ // Provider adapter contract.
3
+ //
4
+ // Managers (chat, queue, agent-refine, setup, profile, plugin, explore-cwd,
5
+ // result-event, project-router) consume this contract exclusively for
6
+ // spawn-time decisions. Branching on `adapter.capabilities.*` is fine;
7
+ // branching on `provider === 'claude'` is forbidden.
8
+ //
9
+ // Spec: openspec/specs/multi-provider-architecture/spec.md
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.UnknownProviderError = void 0;
12
+ class UnknownProviderError extends Error {
13
+ unknownId;
14
+ registered;
15
+ constructor(unknownId, registered) {
16
+ super(`unknown provider '${unknownId}'. Registered providers: ${registered.length > 0 ? registered.join(', ') : '(none)'}`);
17
+ this.name = 'UnknownProviderError';
18
+ this.unknownId = unknownId;
19
+ this.registered = registered;
20
+ }
21
+ }
22
+ exports.UnknownProviderError = UnknownProviderError;