specrails-desktop 2.27.0 → 2.28.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 (135) hide show
  1. package/client/dist/assets/{ActivityFeedPage-BlkNVXCv.js → ActivityFeedPage-DcMmDAP3.js} +1 -1
  2. package/client/dist/assets/AgentBrowserCapture-CZ3oc1UL.js +1 -0
  3. package/client/dist/assets/AgentIntegrationsModal-DkqooCFn.js +1 -0
  4. package/client/dist/assets/{AgentModeCodePane-BUR_QxqR.js → AgentModeCodePane-CM77ljte.js} +2 -2
  5. package/client/dist/assets/{AgentModeJobsPane-CnRXelns.js → AgentModeJobsPane-DbZzogbi.js} +1 -1
  6. package/client/dist/assets/AgentsPage-BZIml7eL.js +86 -0
  7. package/client/dist/assets/{AnalyticsPage-C_eT3I3i.js → AnalyticsPage-B4qflNxi.js} +1 -1
  8. package/client/dist/assets/{BarChart-DuzYxiJ6.js → BarChart-Ckstq9fl.js} +1 -1
  9. package/client/dist/assets/CodePage-DFZXLbI1.js +2 -0
  10. package/client/dist/assets/{DesktopAnalyticsPage-BSeBkF2n.js → DesktopAnalyticsPage-DbgMa8OO.js} +1 -1
  11. package/client/dist/assets/{DocsDialog-CGzqDyN3.js → DocsDialog-BQc9Kwev.js} +2 -2
  12. package/client/dist/assets/DocsPage-OsV44ECy.js +11 -0
  13. package/client/dist/assets/{ExportDropdown-IehskH-7.js → ExportDropdown-a43XHO3Y.js} +1 -1
  14. package/client/dist/assets/IntegrationsPage-C3E8hZhB.js +1 -0
  15. package/client/dist/assets/InteractiveJobComposer-zj8SrOAl.js +19 -0
  16. package/client/dist/assets/JobDetailModal-Cm6ZeVoh.js +1 -0
  17. package/client/dist/assets/JobDetailPage-DN67LsdX.js +1 -0
  18. package/client/dist/assets/JobsPage-DF9wKGbw.js +1 -0
  19. package/client/dist/assets/LoopBuilderPage-RJ6GGjli.js +7 -0
  20. package/client/dist/assets/{LoopPreviewModal-BNUQ9iL8.js → LoopPreviewModal-B2wmifF6.js} +1 -1
  21. package/client/dist/assets/LoopsPage-DdlvH-dJ.js +1 -0
  22. package/client/dist/assets/PluginsPage-9DI0a6jI.js +2 -0
  23. package/client/dist/assets/ProjectSettingsDialog-dgy5hqPd.js +1 -0
  24. package/client/dist/assets/{TemplatePreviewModal-C6mndL8D.js → TemplatePreviewModal-CERf1IYB.js} +1 -1
  25. package/client/dist/assets/agent-BRJCESkc2.js +1 -0
  26. package/client/dist/assets/agent-BuYz6fJd.js +1 -0
  27. package/client/dist/assets/agent-CxnRzL6Z.js +1 -0
  28. package/client/dist/assets/agent-D4JAuEGN2.js +1 -0
  29. package/client/dist/assets/agent-DNQlI8EN.js +1 -0
  30. package/client/dist/assets/agent-DyzUH89R.js +1 -0
  31. package/client/dist/assets/agent-MaTxBlg5.js +1 -0
  32. package/client/dist/assets/agent-ostmMYNz2.js +1 -0
  33. package/client/dist/assets/{brain-Dia32foa.js → brain-BPbhM1Jx.js} +1 -1
  34. package/client/dist/assets/{dist-js-D_4k5prK.js → dist-js-Byjcju1W.js} +1 -1
  35. package/client/dist/assets/{dist-js-DN7Pxudf.js → dist-js-Dh-9lbLD.js} +1 -1
  36. package/client/dist/assets/index-89SuhD4Y.js +158 -0
  37. package/client/dist/assets/index-DOGzWJhO.css +2 -0
  38. package/client/dist/assets/integrations-By80EBkf.js +1 -0
  39. package/client/dist/assets/integrations-CAjq5tdW2.js +1 -0
  40. package/client/dist/assets/integrations-CG2dp3Kd.js +1 -0
  41. package/client/dist/assets/integrations-CP_aiV_8.js +1 -0
  42. package/client/dist/assets/integrations-CUNe3t9l2.js +1 -0
  43. package/client/dist/assets/integrations-CWjh5VRk.js +1 -0
  44. package/client/dist/assets/integrations-JOHSCvB3.js +1 -0
  45. package/client/dist/assets/integrations-RJfzXkPx2.js +1 -0
  46. package/client/dist/assets/{lib-BxSZPd0W.js → lib-yKyTNJ1c.js} +1 -1
  47. package/client/dist/assets/nav-B2_ToNqS.js +1 -0
  48. package/client/dist/assets/nav-BAMkVEId.js +1 -0
  49. package/client/dist/assets/nav-BTg8s-cD.js +1 -0
  50. package/client/dist/assets/nav-BY_4EWRv.js +1 -0
  51. package/client/dist/assets/nav-CVXtv0wX2.js +1 -0
  52. package/client/dist/assets/nav-D0Erv9ZJ2.js +1 -0
  53. package/client/dist/assets/nav-DUuw9VIU2.js +1 -0
  54. package/client/dist/assets/nav-S4HM94vW.js +1 -0
  55. package/client/dist/assets/{upload-4u055Eea.js → upload-Qh1NE3xi.js} +1 -1
  56. package/client/dist/assets/{value-C3Qe3VXm.js → value-BMPeyInx.js} +1 -1
  57. package/client/dist/index.html +29 -29
  58. package/package.json +1 -1
  59. package/server/dist/agent-chat-router.js +2 -0
  60. package/server/dist/agent-operator-prompt.js +10 -3
  61. package/server/dist/global-plugins-router.js +62 -0
  62. package/server/dist/headroom-manager.js +971 -0
  63. package/server/dist/headroom-routing.js +53 -0
  64. package/server/dist/index.js +7 -0
  65. package/server/dist/mcp/guide.js +3 -0
  66. package/server/dist/mcp/tools/jobs.js +52 -9
  67. package/server/dist/path-resolver.js +10 -3
  68. package/server/dist/project-router-jobs.js +56 -6
  69. package/server/dist/setup-manager.js +32 -29
  70. package/server/dist/setup-prerequisites.js +3 -1
  71. package/server/dist/transient-children.js +152 -13
  72. package/server/dist/util/cli-prompt.js +3 -0
  73. package/client/dist/assets/AgentBrowserCapture-76Ri2QR1.js +0 -1
  74. package/client/dist/assets/AgentIntegrationsModal-D9hVgaBR.js +0 -1
  75. package/client/dist/assets/AgentsPage-DEt9vpzh.js +0 -86
  76. package/client/dist/assets/CodePage-72-FLBNw.js +0 -2
  77. package/client/dist/assets/DocsPage-BB3VGFM9.js +0 -11
  78. package/client/dist/assets/IntegrationsPage-X8bLyuDk.js +0 -3
  79. package/client/dist/assets/InteractiveJobComposer-D1HUALME.js +0 -19
  80. package/client/dist/assets/JobDetailModal-CMg6aKSO.js +0 -1
  81. package/client/dist/assets/JobDetailPage-Bg01rzeu.js +0 -1
  82. package/client/dist/assets/JobsPage-Cwkm9yYc.js +0 -1
  83. package/client/dist/assets/LoopBuilderPage-4uPNN8Xn.js +0 -7
  84. package/client/dist/assets/LoopsPage-DLXESZxq.js +0 -1
  85. package/client/dist/assets/ProjectSettingsDialog-DP6hAug-.js +0 -1
  86. package/client/dist/assets/agent-B0Rg_eLw2.js +0 -1
  87. package/client/dist/assets/agent-B8f79myL.js +0 -1
  88. package/client/dist/assets/agent-BCH7a3z-.js +0 -1
  89. package/client/dist/assets/agent-BELAd4RF.js +0 -1
  90. package/client/dist/assets/agent-BrCnHlvX2.js +0 -1
  91. package/client/dist/assets/agent-CrcIj6WE2.js +0 -1
  92. package/client/dist/assets/agent-CtwLUmjl.js +0 -1
  93. package/client/dist/assets/agent-xG4qLg4R.js +0 -1
  94. package/client/dist/assets/index-BbVOi-dY.js +0 -158
  95. package/client/dist/assets/index-o3Q2Lii5.css +0 -2
  96. package/client/dist/assets/integrations-BQNkrfr7.js +0 -1
  97. package/client/dist/assets/integrations-BdN2f6bP.js +0 -1
  98. package/client/dist/assets/integrations-BrIUJmVf.js +0 -1
  99. package/client/dist/assets/integrations-CuWnMR5L.js +0 -1
  100. package/client/dist/assets/integrations-Cyp7cSYv2.js +0 -1
  101. package/client/dist/assets/integrations-DDR3OHdq.js +0 -1
  102. package/client/dist/assets/integrations-DVxi8b0j2.js +0 -1
  103. package/client/dist/assets/integrations-RuNEX3La2.js +0 -1
  104. package/client/dist/assets/nav-BFCUtHUQ2.js +0 -1
  105. package/client/dist/assets/nav-BouzorQ5.js +0 -1
  106. package/client/dist/assets/nav-Bpr-K0tD.js +0 -1
  107. package/client/dist/assets/nav-CpFrRDXd2.js +0 -1
  108. package/client/dist/assets/nav-CzKzuwH8.js +0 -1
  109. package/client/dist/assets/nav-Dkv4Vlr_2.js +0 -1
  110. package/client/dist/assets/nav-GG6azCbh.js +0 -1
  111. package/client/dist/assets/nav-prHkMqcr.js +0 -1
  112. /package/client/dist/assets/{activity-D8vQJrpW.js → activity-Dbl71S-E.js} +0 -0
  113. /package/client/dist/assets/{addspec-DxW6oPsk.js → addspec-DrXqP8ip.js} +0 -0
  114. /package/client/dist/assets/{agents-Cev2oFfX.js → agents-CGDn_3kB.js} +0 -0
  115. /package/client/dist/assets/{agentstudio-CZm2rOzt.js → agentstudio-Dxe_94PK.js} +0 -0
  116. /package/client/dist/assets/{aiedit-DYtnZU9H.js → aiedit-DrfHQnlz.js} +0 -0
  117. /package/client/dist/assets/{analytics-Ce-sPORu.js → analytics-CxDYcBl9.js} +0 -0
  118. /package/client/dist/assets/{attachments-Ci6_42Kh.js → attachments-DvxQbBTC.js} +0 -0
  119. /package/client/dist/assets/{auth-Cvsb7-Ek.js → auth-DpZq5p1e.js} +0 -0
  120. /package/client/dist/assets/{browser-CdS6O1Qb.js → browser-DM8G151q.js} +0 -0
  121. /package/client/dist/assets/{chat-VMflhzxn.js → chat-0dg5hOo_.js} +0 -0
  122. /package/client/dist/assets/{code-thSEptMx.js → code-B62fClk-.js} +0 -0
  123. /package/client/dist/assets/{commands-CckaBWdV.js → commands-DCJ-R9E4.js} +0 -0
  124. /package/client/dist/assets/{common-CYaT2yHp.js → common-DXrmj6WD.js} +0 -0
  125. /package/client/dist/assets/{dashboard-BawQCyrV.js → dashboard-DBuLfWo9.js} +0 -0
  126. /package/client/dist/assets/{explore-BKVV5JSu.js → explore-_XyU5e7R.js} +0 -0
  127. /package/client/dist/assets/{jira-B3613-gj.js → jira-DeIjwCK3.js} +0 -0
  128. /package/client/dist/assets/{jobs-D5sZzgLs.js → jobs-DrYmsKy5.js} +0 -0
  129. /package/client/dist/assets/{loops-Brnx4Fji.js → loops-CO6q75W8.js} +0 -0
  130. /package/client/dist/assets/{mcp-CIH0pH1K.js → mcp-HwBbQDk0.js} +0 -0
  131. /package/client/dist/assets/{settings-BFv6UbKV.js → settings-BYCMtxOz.js} +0 -0
  132. /package/client/dist/assets/{setup-RiUHzq7E.js → setup-D2CmgAro.js} +0 -0
  133. /package/client/dist/assets/{specs-CmEZY57v.js → specs-PGIOzMtc.js} +0 -0
  134. /package/client/dist/assets/{terminal-DFPNRLKp.js → terminal-CFt56A5f.js} +0 -0
  135. /package/client/dist/assets/{tickets-CkfbISuK.js → tickets-BHv3ewvq.js} +0 -0
@@ -1 +1 @@
1
- import{t as e}from"./chunk-BNv3lrIs.js";import{Bn as t,qn as n}from"./index-BbVOi-dY.js";var r=e((e=>{var r=n(),i=t();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=r.useRef,l=r.useEffect,u=r.useMemo,d=r.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),i=e(((e,t)=>{t.exports=r()}));function a(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function o(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function s(){}var c=.7,l=1/c,u=`\\s*([+-]?\\d+)\\s*`,d=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,f=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,p=/^#([0-9a-f]{3,8})$/,m=RegExp(`^rgb\\(${u},${u},${u}\\)$`),h=RegExp(`^rgb\\(${f},${f},${f}\\)$`),ee=RegExp(`^rgba\\(${u},${u},${u},${d}\\)$`),g=RegExp(`^rgba\\(${f},${f},${f},${d}\\)$`),_=RegExp(`^hsl\\(${d},${f},${f}\\)$`),v=RegExp(`^hsla\\(${d},${f},${f},${d}\\)$`),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};a(s,C,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:b,formatHex:b,formatHex8:x,formatHsl:te,formatRgb:S,toString:S});function b(){return this.rgb().formatHex()}function x(){return this.rgb().formatHex8()}function te(){return I(this).formatHsl()}function S(){return this.rgb().formatRgb()}function C(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=p.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?w(t):n===3?new O(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?T(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?T(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=m.exec(e))?new O(t[1],t[2],t[3],1):(t=h.exec(e))?new O(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ee.exec(e))?T(t[1],t[2],t[3],t[4]):(t=g.exec(e))?T(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=_.exec(e))?F(t[1],t[2]/100,t[3]/100,1):(t=v.exec(e))?F(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?w(y[e]):e===`transparent`?new O(NaN,NaN,NaN,0):null}function w(e){return new O(e>>16&255,e>>8&255,e&255,1)}function T(e,t,n,r){return r<=0&&(e=t=n=NaN),new O(e,t,n,r)}function E(e){return e instanceof s||(e=C(e)),e?(e=e.rgb(),new O(e.r,e.g,e.b,e.opacity)):new O}function D(e,t,n,r){return arguments.length===1?E(e):new O(e,t,n,r??1)}function O(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}a(O,D,o(s,{brighter(e){return e=e==null?l:l**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new O(N(this.r),N(this.g),N(this.b),M(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatHex8:A,formatRgb:j,toString:j}));function k(){return`#${P(this.r)}${P(this.g)}${P(this.b)}`}function A(){return`#${P(this.r)}${P(this.g)}${P(this.b)}${P((isNaN(this.opacity)?1:this.opacity)*255)}`}function j(){let e=M(this.opacity);return`${e===1?`rgb(`:`rgba(`}${N(this.r)}, ${N(this.g)}, ${N(this.b)}${e===1?`)`:`, ${e})`}`}function M(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function N(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function P(e){return e=N(e),(e<16?`0`:``)+e.toString(16)}function F(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new R(e,t,n,r)}function I(e){if(e instanceof R)return new R(e.h,e.s,e.l,e.opacity);if(e instanceof s||(e=C(e)),!e)return new R;if(e instanceof R)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,c=a-i,l=(a+i)/2;return c?(o=t===a?(n-r)/c+(n<r)*6:n===a?(r-t)/c+2:(t-n)/c+4,c/=l<.5?a+i:2-a-i,o*=60):c=l>0&&l<1?0:o,new R(o,c,l,e.opacity)}function L(e,t,n,r){return arguments.length===1?I(e):new R(e,t,n,r??1)}function R(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}a(R,L,o(s,{brighter(e){return e=e==null?l:l**+e,new R(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new R(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new O(V(e>=240?e-240:e+120,i,r),V(e,i,r),V(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new R(z(this.h),B(this.s),B(this.l),M(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=M(this.opacity);return`${e===1?`hsl(`:`hsla(`}${z(this.h)}, ${B(this.s)*100}%, ${B(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function z(e){return e=(e||0)%360,e<0?e+360:e}function B(e){return Math.max(0,Math.min(1,e||0))}function V(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var H=e=>()=>e;function U(e,t){return function(n){return e+n*t}}function W(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function G(e){return(e=+e)==1?K:function(t,n){return n-t?W(t,n,e):H(isNaN(t)?n:t)}}function K(e,t){var n=t-e;return n?U(e,n):H(isNaN(e)?t:e)}var q=(function e(t){var n=G(t);function r(e,t){var r=n((e=D(e)).r,(t=D(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=K(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function J(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function ne(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function re(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o;for(o=0;o<r;++o)i[o]=$(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ie(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Y(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ae(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=$(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var X=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Z=new RegExp(X.source,`g`);function oe(e){return function(){return e}}function se(e){return function(t){return e(t)+``}}function Q(e,t){var n=X.lastIndex=Z.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=X.exec(e))&&(i=Z.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Y(r,i)})),n=Z.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?se(c[0].x):oe(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function $(e,t){var n=typeof t,r;return t==null||n===`boolean`?H(t):(n===`number`?Y:n===`string`?(r=C(t))?(t=r,q):Q:t instanceof C?q:t instanceof Date?ie:ne(t)?J:Array.isArray(t)?re:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ae:Y)(e,t)}export{C as a,q as i,Q as n,i as o,Y as r,$ as t};
1
+ import{t as e}from"./chunk-BNv3lrIs.js";import{Vn as t,Yn as n}from"./index-89SuhD4Y.js";var r=e((e=>{var r=n(),i=t();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=r.useRef,l=r.useEffect,u=r.useMemo,d=r.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),i=e(((e,t)=>{t.exports=r()}));function a(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function o(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function s(){}var c=.7,l=1/c,u=`\\s*([+-]?\\d+)\\s*`,d=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,f=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,p=/^#([0-9a-f]{3,8})$/,m=RegExp(`^rgb\\(${u},${u},${u}\\)$`),h=RegExp(`^rgb\\(${f},${f},${f}\\)$`),ee=RegExp(`^rgba\\(${u},${u},${u},${d}\\)$`),g=RegExp(`^rgba\\(${f},${f},${f},${d}\\)$`),_=RegExp(`^hsl\\(${d},${f},${f}\\)$`),v=RegExp(`^hsla\\(${d},${f},${f},${d}\\)$`),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};a(s,C,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:b,formatHex:b,formatHex8:x,formatHsl:te,formatRgb:S,toString:S});function b(){return this.rgb().formatHex()}function x(){return this.rgb().formatHex8()}function te(){return I(this).formatHsl()}function S(){return this.rgb().formatRgb()}function C(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=p.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?w(t):n===3?new O(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?T(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?T(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=m.exec(e))?new O(t[1],t[2],t[3],1):(t=h.exec(e))?new O(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ee.exec(e))?T(t[1],t[2],t[3],t[4]):(t=g.exec(e))?T(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=_.exec(e))?F(t[1],t[2]/100,t[3]/100,1):(t=v.exec(e))?F(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?w(y[e]):e===`transparent`?new O(NaN,NaN,NaN,0):null}function w(e){return new O(e>>16&255,e>>8&255,e&255,1)}function T(e,t,n,r){return r<=0&&(e=t=n=NaN),new O(e,t,n,r)}function E(e){return e instanceof s||(e=C(e)),e?(e=e.rgb(),new O(e.r,e.g,e.b,e.opacity)):new O}function D(e,t,n,r){return arguments.length===1?E(e):new O(e,t,n,r??1)}function O(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}a(O,D,o(s,{brighter(e){return e=e==null?l:l**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new O(N(this.r),N(this.g),N(this.b),M(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatHex8:A,formatRgb:j,toString:j}));function k(){return`#${P(this.r)}${P(this.g)}${P(this.b)}`}function A(){return`#${P(this.r)}${P(this.g)}${P(this.b)}${P((isNaN(this.opacity)?1:this.opacity)*255)}`}function j(){let e=M(this.opacity);return`${e===1?`rgb(`:`rgba(`}${N(this.r)}, ${N(this.g)}, ${N(this.b)}${e===1?`)`:`, ${e})`}`}function M(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function N(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function P(e){return e=N(e),(e<16?`0`:``)+e.toString(16)}function F(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new R(e,t,n,r)}function I(e){if(e instanceof R)return new R(e.h,e.s,e.l,e.opacity);if(e instanceof s||(e=C(e)),!e)return new R;if(e instanceof R)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,c=a-i,l=(a+i)/2;return c?(o=t===a?(n-r)/c+(n<r)*6:n===a?(r-t)/c+2:(t-n)/c+4,c/=l<.5?a+i:2-a-i,o*=60):c=l>0&&l<1?0:o,new R(o,c,l,e.opacity)}function L(e,t,n,r){return arguments.length===1?I(e):new R(e,t,n,r??1)}function R(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}a(R,L,o(s,{brighter(e){return e=e==null?l:l**+e,new R(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new R(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new O(V(e>=240?e-240:e+120,i,r),V(e,i,r),V(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new R(z(this.h),B(this.s),B(this.l),M(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=M(this.opacity);return`${e===1?`hsl(`:`hsla(`}${z(this.h)}, ${B(this.s)*100}%, ${B(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function z(e){return e=(e||0)%360,e<0?e+360:e}function B(e){return Math.max(0,Math.min(1,e||0))}function V(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var H=e=>()=>e;function U(e,t){return function(n){return e+n*t}}function W(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function G(e){return(e=+e)==1?K:function(t,n){return n-t?W(t,n,e):H(isNaN(t)?n:t)}}function K(e,t){var n=t-e;return n?U(e,n):H(isNaN(e)?t:e)}var q=(function e(t){var n=G(t);function r(e,t){var r=n((e=D(e)).r,(t=D(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=K(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function J(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function ne(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function re(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o;for(o=0;o<r;++o)i[o]=$(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ie(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Y(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ae(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=$(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var X=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Z=new RegExp(X.source,`g`);function oe(e){return function(){return e}}function se(e){return function(t){return e(t)+``}}function Q(e,t){var n=X.lastIndex=Z.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=X.exec(e))&&(i=Z.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Y(r,i)})),n=Z.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?se(c[0].x):oe(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function $(e,t){var n=typeof t,r;return t==null||n===`boolean`?H(t):(n===`number`?Y:n===`string`?(r=C(t))?(t=r,q):Q:t instanceof C?q:t instanceof Date?ie:ne(t)?J:Array.isArray(t)?re:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ae:Y)(e,t)}export{C as a,q as i,Q as n,i as o,Y as r,$ as t};
@@ -204,38 +204,38 @@
204
204
  .specrails-splash__mark .pill { opacity: 1; }
205
205
  }
206
206
  </style>
207
- <script type="module" crossorigin src="/assets/index-BbVOi-dY.js"></script>
207
+ <script type="module" crossorigin src="/assets/index-89SuhD4Y.js"></script>
208
208
  <link rel="modulepreload" crossorigin href="/assets/chunk-BNv3lrIs.js">
209
209
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DSXbuxSR.js">
210
210
  <link rel="modulepreload" crossorigin href="/assets/clsx-CNmW0Nip.js">
211
- <link rel="modulepreload" crossorigin href="/assets/auth-Cvsb7-Ek.js">
212
- <link rel="modulepreload" crossorigin href="/assets/activity-D8vQJrpW.js">
213
- <link rel="modulepreload" crossorigin href="/assets/addspec-DxW6oPsk.js">
214
- <link rel="modulepreload" crossorigin href="/assets/agent-CtwLUmjl.js">
215
- <link rel="modulepreload" crossorigin href="/assets/agents-Cev2oFfX.js">
216
- <link rel="modulepreload" crossorigin href="/assets/agentstudio-CZm2rOzt.js">
217
- <link rel="modulepreload" crossorigin href="/assets/aiedit-DYtnZU9H.js">
218
- <link rel="modulepreload" crossorigin href="/assets/analytics-Ce-sPORu.js">
219
- <link rel="modulepreload" crossorigin href="/assets/attachments-Ci6_42Kh.js">
220
- <link rel="modulepreload" crossorigin href="/assets/browser-CdS6O1Qb.js">
221
- <link rel="modulepreload" crossorigin href="/assets/chat-VMflhzxn.js">
222
- <link rel="modulepreload" crossorigin href="/assets/code-thSEptMx.js">
223
- <link rel="modulepreload" crossorigin href="/assets/commands-CckaBWdV.js">
224
- <link rel="modulepreload" crossorigin href="/assets/common-CYaT2yHp.js">
225
- <link rel="modulepreload" crossorigin href="/assets/dashboard-BawQCyrV.js">
226
- <link rel="modulepreload" crossorigin href="/assets/explore-BKVV5JSu.js">
227
- <link rel="modulepreload" crossorigin href="/assets/integrations-CuWnMR5L.js">
228
- <link rel="modulepreload" crossorigin href="/assets/jira-B3613-gj.js">
229
- <link rel="modulepreload" crossorigin href="/assets/jobs-D5sZzgLs.js">
230
- <link rel="modulepreload" crossorigin href="/assets/loops-Brnx4Fji.js">
231
- <link rel="modulepreload" crossorigin href="/assets/mcp-CIH0pH1K.js">
232
- <link rel="modulepreload" crossorigin href="/assets/nav-CzKzuwH8.js">
233
- <link rel="modulepreload" crossorigin href="/assets/settings-BFv6UbKV.js">
234
- <link rel="modulepreload" crossorigin href="/assets/setup-RiUHzq7E.js">
235
- <link rel="modulepreload" crossorigin href="/assets/specs-CmEZY57v.js">
236
- <link rel="modulepreload" crossorigin href="/assets/terminal-DFPNRLKp.js">
237
- <link rel="modulepreload" crossorigin href="/assets/tickets-CkfbISuK.js">
238
- <link rel="stylesheet" crossorigin href="/assets/index-o3Q2Lii5.css">
211
+ <link rel="modulepreload" crossorigin href="/assets/auth-DpZq5p1e.js">
212
+ <link rel="modulepreload" crossorigin href="/assets/activity-Dbl71S-E.js">
213
+ <link rel="modulepreload" crossorigin href="/assets/addspec-DrXqP8ip.js">
214
+ <link rel="modulepreload" crossorigin href="/assets/agent-MaTxBlg5.js">
215
+ <link rel="modulepreload" crossorigin href="/assets/agents-CGDn_3kB.js">
216
+ <link rel="modulepreload" crossorigin href="/assets/agentstudio-Dxe_94PK.js">
217
+ <link rel="modulepreload" crossorigin href="/assets/aiedit-DrfHQnlz.js">
218
+ <link rel="modulepreload" crossorigin href="/assets/analytics-CxDYcBl9.js">
219
+ <link rel="modulepreload" crossorigin href="/assets/attachments-DvxQbBTC.js">
220
+ <link rel="modulepreload" crossorigin href="/assets/browser-DM8G151q.js">
221
+ <link rel="modulepreload" crossorigin href="/assets/chat-0dg5hOo_.js">
222
+ <link rel="modulepreload" crossorigin href="/assets/code-B62fClk-.js">
223
+ <link rel="modulepreload" crossorigin href="/assets/commands-DCJ-R9E4.js">
224
+ <link rel="modulepreload" crossorigin href="/assets/common-DXrmj6WD.js">
225
+ <link rel="modulepreload" crossorigin href="/assets/dashboard-DBuLfWo9.js">
226
+ <link rel="modulepreload" crossorigin href="/assets/explore-_XyU5e7R.js">
227
+ <link rel="modulepreload" crossorigin href="/assets/integrations-By80EBkf.js">
228
+ <link rel="modulepreload" crossorigin href="/assets/jira-DeIjwCK3.js">
229
+ <link rel="modulepreload" crossorigin href="/assets/jobs-DrYmsKy5.js">
230
+ <link rel="modulepreload" crossorigin href="/assets/loops-CO6q75W8.js">
231
+ <link rel="modulepreload" crossorigin href="/assets/mcp-HwBbQDk0.js">
232
+ <link rel="modulepreload" crossorigin href="/assets/nav-BTg8s-cD.js">
233
+ <link rel="modulepreload" crossorigin href="/assets/settings-BYCMtxOz.js">
234
+ <link rel="modulepreload" crossorigin href="/assets/setup-D2CmgAro.js">
235
+ <link rel="modulepreload" crossorigin href="/assets/specs-PGIOzMtc.js">
236
+ <link rel="modulepreload" crossorigin href="/assets/terminal-CFt56A5f.js">
237
+ <link rel="modulepreload" crossorigin href="/assets/tickets-BHv3ewvq.js">
238
+ <link rel="stylesheet" crossorigin href="/assets/index-DOGzWJhO.css">
239
239
  </head>
240
240
  <body>
241
241
  <div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specrails-desktop",
3
- "version": "2.27.0",
3
+ "version": "2.28.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,6 +12,7 @@ const providers_1 = require("./providers");
12
12
  const agent_tier_1 = require("./agent-tier");
13
13
  const attachment_manager_1 = require("./attachment-manager");
14
14
  const agent_store_1 = require("./agent-store");
15
+ const transient_children_1 = require("./transient-children");
15
16
  function isAgentChatEnabled() {
16
17
  return process.env.SPECRAILS_AGENT_CHAT !== 'false';
17
18
  }
@@ -235,6 +236,7 @@ function createAgentChatRouter(deps) {
235
236
  router.delete('/conversations/:id', (req, res) => {
236
237
  const id = String(req.params.id);
237
238
  manager.abort(id);
239
+ (0, transient_children_1.killBackgroundProcessesForChat)(id);
238
240
  (0, agent_store_1.deleteAgentConversation)(desktopDb, id);
239
241
  // Cascade-remove the conversation's attachment directory (best-effort).
240
242
  void attachment_manager_1.attachmentManager.deleteAllAgent(id).catch((e) => console.error('[agent-chat] attachment cleanup failed:', e));
@@ -406,10 +406,17 @@ summary later.
406
406
  server/watch/tail command that should keep running (for example \`npm run dev\`,
407
407
  \`vite --host\`, \`tail -f\`, or a local service), propose
408
408
  \`specrails_jobs(background_start)\` with the command, project and cwd, wait for
409
- explicit yes, then call that tool. Do NOT use a raw shell/background-task
409
+ explicit yes, then call that tool with \`confirmed:true\`. Do NOT use a raw shell/background-task
410
410
  runner for these requests: only \`background_start\` emits the app events that
411
411
  create the killable chip above this agent chat's composer. You normally do not
412
- need to pass \`chatId\`; the in-app MCP origin conversation owns it.
412
+ need to pass \`chatId\`; the in-app MCP origin conversation owns it. If a
413
+ job/loop is still running, do not pass \`allowWhileBusy:true\` unless the user
414
+ explicitly confirms running concurrently.
415
+ - **Diagnose background chip failures from logs.** If user asks whether
416
+ background chip command failed or why it stopped, call
417
+ \`specrails_jobs(background_logs, pid)\` for that PID before asking
418
+ to relaunch. Explain from captured stdout/stderr tail; only say logs
419
+ unavailable if PID unknown/expired or captured output empty.
413
420
  - **Launch, then release the turn.** When a rail launch or job spawn is
414
421
  accepted (202), report the returned jobId(s)/ids VERBATIM and END YOUR REPLY
415
422
  immediately — do NOT sit on the turn watching the run. Progress streams live
@@ -480,4 +487,4 @@ When the user has no projects yet, or asks to add one:
480
487
  Setup is QUICK-only (fast, offline). Do NOT offer, mention, or attempt a "full"
481
488
  or "enrich" install — that flow is deprecated and not available through you.
482
489
  `;
483
- exports.OPERATOR_SYSTEM_PROMPT = `You are the Specrails operator agent, embedded inside the Specrails Desktop app; drive it on the user's behalf using the specrails_* MCP tools. Your full operator manual is the CLAUDE.md auto-loaded from your working directory — follow it. Non-negotiables: target a project with specrails_select_project or the projectId argument, and ask rather than guess when none is pinned; support/troubleshooting/install/usage/job-failure questions use specrails_support first and never become specs unless the user pivots to product work; missing agents/skills/slash commands concern the app-global specrails-core framework, never project-owned files — never say agents/skills/commands live inside the project; project setup checkpoints are not a core health signal, so pending/0 agents/0 commands must not trigger specrails_setup(install) or a project repair recommendation; offer core_update_check/core_update_apply only for global core updates, and if global core is current ask for the concrete job error/diagnostic; an on_review spec with an open PR, including a published pr_ready card, can be relaunched to continue that PR branch — do not require publish/discard/merge first; run long-lived server/watch/tail shell commands with specrails_jobs background_start, not a raw shell runner, so the app can show the killable background chip in this chat; short async 202 ops (spec generation, ai-edit) may be awaited with specrails_watch (projectId required), but after a rail/job LAUNCH is accepted end your reply immediately — progress streams live in the conversation's run card and the app; watch a launched run only when the user explicitly asks you to wait, with a bounded untilMs; never claim success from a 202 acceptance alone — verify from a terminal event or a domain read (e.g. specrails_jobs get); call the free-form autonomous rail mode Freestyle in prose — freestyle/factory:freestyle/{{cmd:freestyle}} are canonical API/id/token values for that same capability; respect the cumulative permission ladder observe / edit / operate / autonomous — if a tool is refused, name the level the user must Shift+Tab to, never work around it; when refining a spec, ground it in the real codebase FIRST (specrails_code tree/read_file/summary + specrails_specs list) and show the evolving draft as one fenced spec-draft JSON block (title, description, labels, priority, acceptanceCriteria) at the end of each turn that changed it — the app renders it as a live card; persist the refined spec with specrails_specs commit_draft (no conversationId) — never route it through create/generate, which regenerate the content with AI; commit_draft appends a Contract Layer by default via one short background AI pass — pass contractRefine false when the user declines it; report tool outputs faithfully, including failures. Format replies for easy reading: short paragraphs separated by blank lines, bullet lists for enumerations. When asking the user to pick between concrete choices, end the reply with a fenced options code block containing a JSON array of the 2-6 choice labels (rendered as clickable chips); never use that block otherwise.`;
490
+ exports.OPERATOR_SYSTEM_PROMPT = `You are the Specrails operator agent, embedded inside the Specrails Desktop app; drive it on the user's behalf using the specrails_* MCP tools. Your full operator manual is the CLAUDE.md auto-loaded from your working directory — follow it. Non-negotiables: target a project with specrails_select_project or the projectId argument, and ask rather than guess when none is pinned; support/troubleshooting/install/usage/job-failure questions use specrails_support first and never become specs unless the user pivots to product work; missing agents/skills/slash commands concern the app-global specrails-core framework, never project-owned files — never say agents/skills/commands live inside the project; project setup checkpoints are not a core health signal, so pending/0 agents/0 commands must not trigger specrails_setup(install) or a project repair recommendation; offer core_update_check/core_update_apply only for global core updates, and if global core is current ask for the concrete job error/diagnostic; an on_review spec with an open PR, including a published pr_ready card, can be relaunched to continue that PR branch — do not require publish/discard/merge first; run long-lived server/watch/tail shell commands with specrails_jobs background_start and confirmed:true after explicit user confirmation, not a raw shell runner, so the app can show the killable background chip in this chat; if a background chip exits/fails, use specrails_jobs background_logs for its pid before asking to relaunch; if a job/loop is still running, pass allowWhileBusy:true only after explicit concurrent confirmation; short async 202 ops (spec generation, ai-edit) may be awaited with specrails_watch (projectId required), but after a rail/job LAUNCH is accepted end your reply immediately — progress streams live in the conversation's run card and the app; watch a launched run only when the user explicitly asks you to wait, with a bounded untilMs; never claim success from a 202 acceptance alone — verify from a terminal event or a domain read (e.g. specrails_jobs get); call the free-form autonomous rail mode Freestyle in prose — freestyle/factory:freestyle/{{cmd:freestyle}} are canonical API/id/token values for that same capability; respect the cumulative permission ladder observe / edit / operate / autonomous — if a tool is refused, name the level the user must Shift+Tab to, never work around it; when refining a spec, ground it in the real codebase FIRST (specrails_code tree/read_file/summary + specrails_specs list) and show the evolving draft as one fenced spec-draft JSON block (title, description, labels, priority, acceptanceCriteria) at the end of each turn that changed it — the app renders it as a live card; persist the refined spec with specrails_specs commit_draft (no conversationId) — never route it through create/generate, which regenerate the content with AI; commit_draft appends a Contract Layer by default via one short background AI pass — pass contractRefine false when the user declines it; report tool outputs faithfully, including failures. Format replies for easy reading: short paragraphs separated by blank lines, bullet lists for enumerations. When asking the user to pick between concrete choices, end the reply with a fenced options code block containing a JSON array of the 2-6 choice labels (rendered as clickable chips); never use that block otherwise.`;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGlobalPluginsRouter = createGlobalPluginsRouter;
4
+ const express_1 = require("express");
5
+ function isProvider(value) {
6
+ return value === 'codex' || value === 'claude';
7
+ }
8
+ function createGlobalPluginsRouter(headroom) {
9
+ const router = (0, express_1.Router)();
10
+ router.get('/', async (_req, res) => {
11
+ res.json({
12
+ plugins: [
13
+ {
14
+ id: 'headroom-ai',
15
+ name: 'Headroom AI',
16
+ scope: 'global',
17
+ status: await headroom.getFreshState(),
18
+ },
19
+ { id: 'jira', name: 'Jira', scope: 'project' },
20
+ { id: 'serena', name: 'Serena', scope: 'project' },
21
+ ],
22
+ });
23
+ });
24
+ router.get('/headroom', async (_req, res) => {
25
+ res.json({ state: await headroom.getFreshState() });
26
+ });
27
+ router.get('/headroom/diagnostics', (_req, res) => {
28
+ res.json(headroom.diagnostics());
29
+ });
30
+ router.post('/headroom/install', async (_req, res) => {
31
+ const result = await headroom.install();
32
+ res.status(result.ok ? 200 : 409).json(result);
33
+ });
34
+ router.post('/headroom/activate', async (req, res) => {
35
+ const provider = req.body?.provider;
36
+ if (!isProvider(provider)) {
37
+ res.status(400).json({ error: 'provider must be codex or claude' });
38
+ return;
39
+ }
40
+ const result = await headroom.activate(provider);
41
+ res.status(result.ok ? 200 : 409).json(result);
42
+ });
43
+ router.post('/headroom/deactivate', async (req, res) => {
44
+ const provider = req.body?.provider;
45
+ if (!isProvider(provider)) {
46
+ res.status(400).json({ error: 'provider must be codex or claude' });
47
+ return;
48
+ }
49
+ const result = await headroom.deactivate(provider);
50
+ res.status(result.ok ? 200 : 409).json(result);
51
+ });
52
+ router.post('/headroom/uninstall', async (_req, res) => {
53
+ const result = await headroom.uninstall();
54
+ res.status(result.ok ? 200 : 409).json(result);
55
+ });
56
+ router.post('/headroom/port', async (req, res) => {
57
+ const port = Number(req.body?.port);
58
+ const result = await headroom.setPort(port);
59
+ res.status(result.ok ? 200 : 400).json(result);
60
+ });
61
+ return router;
62
+ }