specrails-desktop 2.62.0 → 2.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/dist/specrails-desktop.js +39 -5
- package/client/dist/assets/{ActivityFeedPage-C_pqc281.js → ActivityFeedPage-Bn2MpG5M.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-vz6rbDtu.js → AgentBrowserCapture-CHlXWdXq.js} +1 -1
- package/client/dist/assets/AgentModeAnalyticsPane-yj-YCgrK.js +2 -0
- package/client/dist/assets/AgentModeCodePane-Xczcyghb.js +2 -0
- package/client/dist/assets/{AgentModeJobsPane-99fBBLri.js → AgentModeJobsPane-DtOW01ln.js} +1 -1
- package/client/dist/assets/AgentsPage-BMfJ4mzU.js +118 -0
- package/client/dist/assets/AnalyticsPage-CGn5cgtc.js +1 -0
- package/client/dist/assets/BarChart-BDMqVFJy.js +55 -0
- package/client/dist/assets/CodePage-C8NIginr.js +3 -0
- package/client/dist/assets/DesktopAnalyticsPage-C87r4y26.js +1 -0
- package/client/dist/assets/{DocsDialog-XUCYKoq0.js → DocsDialog-Z50a_KPv.js} +1 -1
- package/client/dist/assets/{DocsPage-dOLC8bXA.js → DocsPage-DIArbEPl.js} +1 -1
- package/client/dist/assets/{ExportDropdown-BvKQgwM9.js → ExportDropdown-CJdCqYd7.js} +1 -1
- package/client/dist/assets/IntegrationsPage-EAipiDWm.js +1 -0
- package/client/dist/assets/InteractiveJobComposer-BxLh4me-.js +19 -0
- package/client/dist/assets/{JobDetailModal-CkiubrkZ.js → JobDetailModal-C7dWoRu6.js} +1 -1
- package/client/dist/assets/{JobDetailPage-CNe4Wn7l.js → JobDetailPage-Ilu294WS.js} +1 -1
- package/client/dist/assets/JobsPage-fPq1hefb.js +1 -0
- package/client/dist/assets/LoopBuilderPage-5M7IypEP.js +1 -0
- package/client/dist/assets/{LoopPreviewModal-Dv3dxHr_.js → LoopPreviewModal-ChI3NQC7.js} +1 -1
- package/client/dist/assets/{LoopWindowSurface-DN2lbSnL.js → LoopWindowSurface-D1WB9i-9.js} +1 -1
- package/client/dist/assets/LoopsPage-CCwc0Biu.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-eH_KaAZ1.js +1 -0
- package/client/dist/assets/PluginsPage-DfDfEfbW.js +2 -0
- package/client/dist/assets/ProjectSettingsDialog-9NHnG8JQ.js +1 -0
- package/client/dist/assets/RepositoryDeliveries-DgzNnJmn.js +5 -0
- package/client/dist/assets/{RepositoryScopeSelector-DrtPqvc_.js → RepositoryScopeSelector-BSgUqk_u.js} +1 -1
- package/client/dist/assets/ReviewPacketPage-D34bGpSA.js +4 -0
- package/client/dist/assets/{TemplatePreviewModal-DcFlhUxy.js → TemplatePreviewModal-CcfSxWQ7.js} +1 -1
- package/client/dist/assets/TicketDetailModalContext-BoafEcm4.js +16 -0
- package/client/dist/assets/Trans-CVSryAL1.js +1 -0
- package/client/dist/assets/ban-wqfdzoXt.js +1 -0
- package/client/dist/assets/{button-D1xExSTF.js → button-4FS1ZDTp.js} +1 -1
- package/client/dist/assets/chevron-up-6EFqEHBj.js +1 -0
- package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +3 -0
- package/client/dist/assets/circle-x-D2ttKotB.js +1 -0
- package/client/dist/assets/createLucideIcon-DtODIU64.js +1 -0
- package/client/dist/assets/{dialog-CMgps2MY.js → dialog-DtdR05v1.js} +1 -1
- package/client/dist/assets/download-C9wP_42h.js +1 -0
- package/client/dist/assets/external-link-CZ6Q-v1-.js +1 -0
- package/client/dist/assets/file-text-C0blZHLh.js +1 -0
- package/client/dist/assets/{formatDistanceToNow-DlQY1Lm_.js → formatDistanceToNow-NVM6rK3i.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-COUeq65G.js → getTimezoneOffsetInMilliseconds-ZHg7WpdH.js} +1 -1
- package/client/dist/assets/git-branch-yf6LE1Bw.js +1 -0
- package/client/dist/assets/{index-CONHvEJw.js → index-Culan6y7.js} +40 -40
- package/client/dist/assets/{index-BacrO_ub.css → index-D1v33giW.css} +1 -1
- package/client/dist/assets/jira-api-Bl8xEIpk.js +1 -0
- package/client/dist/assets/jsx-runtime-BbYvbtY8.js +1 -0
- package/client/dist/assets/layers-BCLTgHXO.js +1 -0
- package/client/dist/assets/{lib-C7Mhm-gT.js → lib-CQJT8S6Q.js} +1 -1
- package/client/dist/assets/{lib-CGdyxIWg.js → lib-DWJfei6y.js} +1 -1
- package/client/dist/assets/loader-circle-BqV9xYGf.js +1 -0
- package/client/dist/assets/{loop-layout-BF8xMiNv.js → loop-layout-CyXj9223.js} +1 -1
- package/client/dist/assets/pencil-CxrRbDwb.js +1 -0
- package/client/dist/assets/plus-fHDdjBk1.js +1 -0
- package/client/dist/assets/{project-repositories-Cc3oNv8X.js → project-repositories-CvJf1a6H.js} +1 -1
- package/client/dist/assets/react-dom-DDD8FYaU.js +1 -0
- package/client/dist/assets/rotate-ccw-DalJAQQX.js +1 -0
- package/client/dist/assets/save-LmPSfsvZ.js +1 -0
- package/client/dist/assets/search-BDVp3fkH.js +1 -0
- package/client/dist/assets/{settings-BKJZ2KEM.js → settings-BO2N-oPf.js} +1 -1
- package/client/dist/assets/{settings-LfFnl1UH.js → settings-BQChAs_w.js} +1 -1
- package/client/dist/assets/{settings-BV3jocIx.js → settings-BzmYlcQB.js} +1 -1
- package/client/dist/assets/{settings-BjM2Dw8_.js → settings-CGjXb6TX.js} +1 -1
- package/client/dist/assets/{settings-DA77M48m.js → settings-CMxEWY46.js} +1 -1
- package/client/dist/assets/{settings-P1IQvhnL.js → settings-C_dRSgI2.js} +1 -1
- package/client/dist/assets/{settings-eIMJjyK_.js → settings-Hw7av-B1.js} +1 -1
- package/client/dist/assets/{settings-CKu0LTib.js → settings-nryN6wuS.js} +1 -1
- package/client/dist/assets/sparkles-CCfUdFGY.js +1 -0
- package/client/dist/assets/spending-BfjSJjBd.js +1 -0
- package/client/dist/assets/square-D0JTbRSR.js +1 -0
- package/client/dist/assets/trash-D8zYUmTg.js +1 -0
- package/client/dist/assets/triangle-alert-Cxpn8bqr.js +1 -0
- package/client/dist/assets/upload-CCHvUkRs.js +1 -0
- package/client/dist/assets/{useDesktop-9Lwoel_8.js → useDesktop-C5JVBeur.js} +1 -1
- package/client/dist/assets/{useRuntimeRuns-DL0xYoZ2.js → useRuntimeRuns-DohBmeg8.js} +1 -1
- package/client/dist/assets/useSharedWebSocket-CNOvmgTr.js +2 -0
- package/client/dist/assets/{value-s-gzBeyF.js → value-DtOOK0wQ.js} +1 -1
- package/client/dist/assets/x-Bu7X_eR2.js +1 -0
- package/client/dist/assets/zap-bugHyWzQ.js +1 -0
- package/client/dist/index.html +43 -44
- package/docs/ci-cd.md +8 -1
- package/docs/customizing.md +1 -0
- package/docs/getting-started.md +1 -1
- package/docs/guide/de/settings/5-project-environment.md +27 -0
- package/docs/guide/en/settings/5-project-environment.md +27 -0
- package/docs/guide/es/settings/5-project-environment.md +27 -0
- package/docs/guide/fr/settings/5-project-environment.md +27 -0
- package/docs/guide/it/settings/5-project-environment.md +27 -0
- package/docs/guide/ja/settings/5-project-environment.md +27 -0
- package/docs/guide/pt/settings/5-project-environment.md +27 -0
- package/docs/guide/zh/settings/5-project-environment.md +27 -0
- package/docs/internals/api-reference.md +3 -1
- package/docs/internals/configuration.md +46 -5
- package/docs/internals/safe-pr-review-flow.md +15 -0
- package/docs/internals/source-map.md +3 -1
- package/docs/mcp.md +1 -1
- package/docs/platforms/macos.md +2 -0
- package/docs/platforms/windows-parity.md +4 -4
- package/docs/platforms/windows.md +9 -9
- package/local-runner/dist/specrails-local-runner.js +1 -1
- package/package.json +8 -9
- package/server/dist/mcp/tools/env.js +38 -3
- package/server/dist/modules/execution/runtime/queue-manager.js +8 -0
- package/server/dist/modules/loops/runtime/loop-executors.js +1 -0
- package/server/dist/modules/loops/runtime/loop-run-manager.js +7 -0
- package/server/dist/modules/project-settings/adapters/http.js +24 -0
- package/server/dist/path-resolver.js +135 -20
- package/server/dist/project-env.js +265 -17
- package/server/dist/project-registry.js +14 -0
- package/server/dist/project-router-settings.js +17 -0
- package/server/dist/worktree-node-modules.js +95 -1
- package/client/dist/assets/AgentModeAnalyticsPane-BHCcUahS.js +0 -2
- package/client/dist/assets/AgentModeCodePane-DhmxgG3W.js +0 -2
- package/client/dist/assets/AgentsPage-CTwm_6T8.js +0 -118
- package/client/dist/assets/AnalyticsPage-YD8MLoPa.js +0 -1
- package/client/dist/assets/BarChart-nBOMNfiy.js +0 -33
- package/client/dist/assets/CodePage-CLJn2F2e.js +0 -3
- package/client/dist/assets/DesktopAnalyticsPage-MWGQVbwp.js +0 -1
- package/client/dist/assets/IntegrationsPage-Bhy58lnQ.js +0 -1
- package/client/dist/assets/InteractiveJobComposer-DxOvwmBF.js +0 -19
- package/client/dist/assets/JobsPage-DSts_L_d.js +0 -1
- package/client/dist/assets/LoopBuilderPage-C9D9eer5.js +0 -1
- package/client/dist/assets/LoopsPage-DHgIreEW.js +0 -2
- package/client/dist/assets/MinimizedChatsContext-Ds2-R6qJ.js +0 -1
- package/client/dist/assets/PluginsPage-D1EJ9oja.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-DKpa1wKk.js +0 -1
- package/client/dist/assets/RepositoryDeliveries-CW4eKG3x.js +0 -5
- package/client/dist/assets/ReviewPacketPage-BtjPI0Cc.js +0 -4
- package/client/dist/assets/TicketDetailModalContext-Dea22CI-.js +0 -16
- package/client/dist/assets/Trans-CAY2Rd2f.js +0 -1
- package/client/dist/assets/ban-E4EaZe3a.js +0 -1
- package/client/dist/assets/chevron-up-CwGUHd6D.js +0 -1
- package/client/dist/assets/chunk-KS7C4IRE-DEKu087k.js +0 -3
- package/client/dist/assets/circle-x-CMYsN4ZH.js +0 -1
- package/client/dist/assets/createLucideIcon-Bjbbp_KS.js +0 -1
- package/client/dist/assets/dist-Bq10nS2m.js +0 -1
- package/client/dist/assets/download-CFHyyHcw.js +0 -1
- package/client/dist/assets/external-link-D6XxC_Cu.js +0 -1
- package/client/dist/assets/file-text-BcLCfcWZ.js +0 -1
- package/client/dist/assets/git-branch-BRM0F5GN.js +0 -1
- package/client/dist/assets/jira-api-C94VNHNY.js +0 -1
- package/client/dist/assets/jsx-runtime-zu2_FqZY.js +0 -1
- package/client/dist/assets/layers-eDMjG41I.js +0 -1
- package/client/dist/assets/loader-circle-DcygOQpC.js +0 -1
- package/client/dist/assets/pencil-C9RkrIPZ.js +0 -1
- package/client/dist/assets/plus-CsnjfkmX.js +0 -1
- package/client/dist/assets/react-dom-DiWzBDP9.js +0 -1
- package/client/dist/assets/rotate-ccw-Wh4id13q.js +0 -1
- package/client/dist/assets/save-B6wGWwBR.js +0 -1
- package/client/dist/assets/search-Cq_gE3Ik.js +0 -1
- package/client/dist/assets/sparkles-DrY8hb0X.js +0 -1
- package/client/dist/assets/spending-DemeFfrH.js +0 -1
- package/client/dist/assets/square-Ci-PFcFe.js +0 -1
- package/client/dist/assets/trash-2-BOU3WdZZ.js +0 -1
- package/client/dist/assets/triangle-alert-H9T4jAmh.js +0 -1
- package/client/dist/assets/upload-DYMjAQ6M.js +0 -1
- package/client/dist/assets/useSharedWebSocket-BEHPeU1Y.js +0 -2
- package/client/dist/assets/x-CBMI9ejn.js +0 -1
- package/client/dist/assets/zap-CHo3aCD1.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t}from"./jsx-runtime-zu2_FqZY.js";import{r as n}from"./createLucideIcon-Bjbbp_KS.js";var r=e((e=>{var r=t(),i=n();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"./rolldown-runtime-CNC7AqOf.js";import{n as t}from"./jsx-runtime-BbYvbtY8.js";import{r as n}from"./createLucideIcon-DtODIU64.js";var r=e((e=>{var r=t(),i=n();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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-DtODIU64.js";var t={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};t.node;var n=e(t);export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-DtODIU64.js";var t={name:`zap`,size:24,node:[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]};t.node;var n=e(t);export{n as t};
|
package/client/dist/index.html
CHANGED
|
@@ -204,12 +204,12 @@
|
|
|
204
204
|
.specrails-splash__mark .pill { opacity: 1; }
|
|
205
205
|
}
|
|
206
206
|
</style>
|
|
207
|
-
<script type="module" crossorigin src="/assets/index-
|
|
207
|
+
<script type="module" crossorigin src="/assets/index-Culan6y7.js"></script>
|
|
208
208
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-CNC7AqOf.js">
|
|
209
|
-
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-
|
|
210
|
-
<link rel="modulepreload" crossorigin href="/assets/react-dom-
|
|
209
|
+
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BbYvbtY8.js">
|
|
210
|
+
<link rel="modulepreload" crossorigin href="/assets/react-dom-DDD8FYaU.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
212
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-
|
|
212
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-OB3PAWPO-B1EMk45A.js">
|
|
213
213
|
<link rel="modulepreload" crossorigin href="/assets/tauri-shell-DE6LfGPw.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="/assets/activity-DiyjsgQV.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="/assets/addspec-BOvgmcgk.js">
|
|
@@ -236,56 +236,55 @@
|
|
|
236
236
|
<link rel="modulepreload" crossorigin href="/assets/narration-DbHnz0qV.js">
|
|
237
237
|
<link rel="modulepreload" crossorigin href="/assets/nav--u7iPYlS.js">
|
|
238
238
|
<link rel="modulepreload" crossorigin href="/assets/packet-B0H15elv.js">
|
|
239
|
-
<link rel="modulepreload" crossorigin href="/assets/settings-
|
|
239
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-nryN6wuS.js">
|
|
240
240
|
<link rel="modulepreload" crossorigin href="/assets/setup-CKGUxKr-.js">
|
|
241
241
|
<link rel="modulepreload" crossorigin href="/assets/specs-DfIdoU5L.js">
|
|
242
242
|
<link rel="modulepreload" crossorigin href="/assets/subscriptionUsage-CdlE5Mg1.js">
|
|
243
243
|
<link rel="modulepreload" crossorigin href="/assets/terminal-BAzpHtpY.js">
|
|
244
244
|
<link rel="modulepreload" crossorigin href="/assets/tickets-D41ZMQpf.js">
|
|
245
|
-
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-
|
|
246
|
-
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-
|
|
247
|
-
<link rel="modulepreload" crossorigin href="/assets/Trans-
|
|
248
|
-
<link rel="modulepreload" crossorigin href="/assets/useDesktop-
|
|
245
|
+
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DtODIU64.js">
|
|
246
|
+
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-CNOvmgTr.js">
|
|
247
|
+
<link rel="modulepreload" crossorigin href="/assets/Trans-CVSryAL1.js">
|
|
248
|
+
<link rel="modulepreload" crossorigin href="/assets/useDesktop-C5JVBeur.js">
|
|
249
249
|
<link rel="modulepreload" crossorigin href="/assets/provider-capabilities-lePfeT_Y.js">
|
|
250
|
-
<link rel="modulepreload" crossorigin href="/assets/save-
|
|
251
|
-
<link rel="modulepreload" crossorigin href="/assets/spending-
|
|
252
|
-
<link rel="modulepreload" crossorigin href="/assets/chevron-up-
|
|
253
|
-
<link rel="modulepreload" crossorigin href="/assets/sparkles-
|
|
254
|
-
<link rel="modulepreload" crossorigin href="/assets/x-
|
|
255
|
-
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-
|
|
256
|
-
<link rel="modulepreload" crossorigin href="/assets/ban-
|
|
257
|
-
<link rel="modulepreload" crossorigin href="/assets/file-text-
|
|
258
|
-
<link rel="modulepreload" crossorigin href="/assets/circle-x-
|
|
259
|
-
<link rel="modulepreload" crossorigin href="/assets/download-
|
|
260
|
-
<link rel="modulepreload" crossorigin href="/assets/external-link-
|
|
261
|
-
<link rel="modulepreload" crossorigin href="/assets/git-branch-
|
|
262
|
-
<link rel="modulepreload" crossorigin href="/assets/layers-
|
|
263
|
-
<link rel="modulepreload" crossorigin href="/assets/loader-circle-
|
|
264
|
-
<link rel="modulepreload" crossorigin href="/assets/pencil-
|
|
265
|
-
<link rel="modulepreload" crossorigin href="/assets/square-
|
|
266
|
-
<link rel="modulepreload" crossorigin href="/assets/plus-
|
|
267
|
-
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-
|
|
268
|
-
<link rel="modulepreload" crossorigin href="/assets/search-
|
|
269
|
-
<link rel="modulepreload" crossorigin href="/assets/trash-
|
|
270
|
-
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-
|
|
271
|
-
<link rel="modulepreload" crossorigin href="/assets/jira-api-
|
|
272
|
-
<link rel="modulepreload" crossorigin href="/assets/zap-
|
|
250
|
+
<link rel="modulepreload" crossorigin href="/assets/save-LmPSfsvZ.js">
|
|
251
|
+
<link rel="modulepreload" crossorigin href="/assets/spending-BfjSJjBd.js">
|
|
252
|
+
<link rel="modulepreload" crossorigin href="/assets/chevron-up-6EFqEHBj.js">
|
|
253
|
+
<link rel="modulepreload" crossorigin href="/assets/sparkles-CCfUdFGY.js">
|
|
254
|
+
<link rel="modulepreload" crossorigin href="/assets/x-Bu7X_eR2.js">
|
|
255
|
+
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-eH_KaAZ1.js">
|
|
256
|
+
<link rel="modulepreload" crossorigin href="/assets/ban-wqfdzoXt.js">
|
|
257
|
+
<link rel="modulepreload" crossorigin href="/assets/file-text-C0blZHLh.js">
|
|
258
|
+
<link rel="modulepreload" crossorigin href="/assets/circle-x-D2ttKotB.js">
|
|
259
|
+
<link rel="modulepreload" crossorigin href="/assets/download-C9wP_42h.js">
|
|
260
|
+
<link rel="modulepreload" crossorigin href="/assets/external-link-CZ6Q-v1-.js">
|
|
261
|
+
<link rel="modulepreload" crossorigin href="/assets/git-branch-yf6LE1Bw.js">
|
|
262
|
+
<link rel="modulepreload" crossorigin href="/assets/layers-BCLTgHXO.js">
|
|
263
|
+
<link rel="modulepreload" crossorigin href="/assets/loader-circle-BqV9xYGf.js">
|
|
264
|
+
<link rel="modulepreload" crossorigin href="/assets/pencil-CxrRbDwb.js">
|
|
265
|
+
<link rel="modulepreload" crossorigin href="/assets/square-D0JTbRSR.js">
|
|
266
|
+
<link rel="modulepreload" crossorigin href="/assets/plus-fHDdjBk1.js">
|
|
267
|
+
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-DalJAQQX.js">
|
|
268
|
+
<link rel="modulepreload" crossorigin href="/assets/search-BDVp3fkH.js">
|
|
269
|
+
<link rel="modulepreload" crossorigin href="/assets/trash-D8zYUmTg.js">
|
|
270
|
+
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-Cxpn8bqr.js">
|
|
271
|
+
<link rel="modulepreload" crossorigin href="/assets/jira-api-Bl8xEIpk.js">
|
|
272
|
+
<link rel="modulepreload" crossorigin href="/assets/zap-bugHyWzQ.js">
|
|
273
273
|
<link rel="modulepreload" crossorigin href="/assets/clsx-CjueKrWZ.js">
|
|
274
274
|
<link rel="modulepreload" crossorigin href="/assets/utils-BC4DHlz2.js">
|
|
275
|
-
<link rel="modulepreload" crossorigin href="/assets/dialog-
|
|
276
|
-
<link rel="modulepreload" crossorigin href="/assets/lib-
|
|
277
|
-
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-
|
|
278
|
-
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-
|
|
279
|
-
<link rel="modulepreload" crossorigin href="/assets/button-
|
|
280
|
-
<link rel="modulepreload" crossorigin href="/assets/project-repositories-
|
|
281
|
-
<link rel="modulepreload" crossorigin href="/assets/RepositoryScopeSelector-
|
|
282
|
-
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-
|
|
275
|
+
<link rel="modulepreload" crossorigin href="/assets/dialog-DtdR05v1.js">
|
|
276
|
+
<link rel="modulepreload" crossorigin href="/assets/lib-DWJfei6y.js">
|
|
277
|
+
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-ZHg7WpdH.js">
|
|
278
|
+
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-NVM6rK3i.js">
|
|
279
|
+
<link rel="modulepreload" crossorigin href="/assets/button-4FS1ZDTp.js">
|
|
280
|
+
<link rel="modulepreload" crossorigin href="/assets/project-repositories-CvJf1a6H.js">
|
|
281
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryScopeSelector-BSgUqk_u.js">
|
|
282
|
+
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-BoafEcm4.js">
|
|
283
283
|
<link rel="modulepreload" crossorigin href="/assets/core-B3mKBIh5.js">
|
|
284
|
-
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-
|
|
285
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
286
|
-
<link rel="modulepreload" crossorigin href="/assets/useRuntimeRuns-DL0xYoZ2.js">
|
|
284
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-DgzNnJmn.js">
|
|
285
|
+
<link rel="modulepreload" crossorigin href="/assets/useRuntimeRuns-DohBmeg8.js">
|
|
287
286
|
<link rel="modulepreload" crossorigin href="/assets/event-Bt7f3wXe.js">
|
|
288
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
287
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D1v33giW.css">
|
|
289
288
|
</head>
|
|
290
289
|
<body>
|
|
291
290
|
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
package/docs/ci-cd.md
CHANGED
|
@@ -11,12 +11,19 @@ Desktop distributes an npm package and native installers. Their publication work
|
|
|
11
11
|
| `npm run build` then `npm run check:package` | A real npm tarball, isolated production install with lifecycle scripts disabled, CLI help/version, MCP and required runtime resources |
|
|
12
12
|
| Windows x64 and ARM64 jobs | Native filesystem/process regressions, terminal/background containment, client tests, bundled Core and native browser/mission window fixtures |
|
|
13
13
|
| macOS native job | Native Rust tests and browser, popup, multiwindow and mission window fixtures |
|
|
14
|
-
|
|
|
14
|
+
| Paired Core engine | Real Core acceptance suites, discovered as `*-paired.test.ts` and time-balanced across runners by `scripts/paired-core-shards.mjs` (2 shards on Linux/macOS, 4 on Windows) |
|
|
15
|
+
| Native release builds | Packaged resources and installer validation; Windows additionally exercises the installed NSIS artifact |
|
|
15
16
|
|
|
16
17
|
The npm package check does not start a server or exercise native postinstall rebuilds. Native platform jobs and installed application smoke tests provide separate evidence. Defining a Windows or signing job is not evidence that it has passed: inspect the corresponding GitHub run before claiming platform or release acceptance.
|
|
17
18
|
|
|
18
19
|
Actions are pinned to commit SHAs. Downloaded actionlint and gitleaks binaries have fixed checksums verified before execution. Actionlint checks workflow structure, expressions and action inputs; its ShellCheck integration is disabled, so it does not claim complete shell-script analysis. Dependabot covers root/client/MCP npm dependencies, GitHub Actions and Cargo.
|
|
19
20
|
|
|
21
|
+
## Pipeline speed
|
|
22
|
+
|
|
23
|
+
The CI critical path is kept near the slowest ordinary job (~8 min) rather than one long serial suite. Add a paired suite by naming it `*-paired.test.ts`; it is assigned automatically, and `scripts/paired-core-shards.test.mjs` fails if any suite is unassigned, duplicated or has a stale timing weight. Refresh `WEIGHTS` from a CI JUnit artifact when suites grow.
|
|
24
|
+
|
|
25
|
+
Tag builds can only restore caches saved on `main`, so `Release Rust cache` compiles the release profile on `main` (on `src-tauri/**` changes, daily, or manually) under the `desktop-release-*` shared keys that `Desktop Release` restores without saving. A cache miss only costs time: the release still compiles from scratch. Windows ships only NSIS, which removes a second compression pass, smoke install and upload per architecture.
|
|
26
|
+
|
|
20
27
|
## Release flow
|
|
21
28
|
|
|
22
29
|
1. A successful main `CI` run triggers `Release`. It checks out that exact revision, skips superseded main revisions and lets release-please maintain the release pull request or tag. The credential-bearing job does not install dependencies or run builds.
|
package/docs/customizing.md
CHANGED
|
@@ -138,6 +138,7 @@ Most settings live in the UI. A few app-level switches are env-only because they
|
|
|
138
138
|
|----------|--------|
|
|
139
139
|
| `SPECRAILS_CORE_BIN` | Override the `specrails-core` binary (default: `npx --yes --prefer-online specrails-core@^5.1.0` — the 5.1.0 floor is the release that quotes the command path in its Windows shell runner, so OpenSpec init works from an install directory with spaces; it is also the version bundled with the app) |
|
|
140
140
|
| `SPECRAILS_TECH_URL` | Override the specrails-tech proxy base URL |
|
|
141
|
+
| `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` | Budget in milliseconds for reading configured project environment names from your login shell (default `10000`, max `120000`). Raise it when the Environment card shows **Shell timed out**. See the [project environment guide](guide/en/settings/5-project-environment.md) |
|
|
141
142
|
| `SPECRAILS_AGENTS_SECTION=false` | Hide the Agents section from every project |
|
|
142
143
|
| `SPECRAILS_PLUGINS_SECTION=false` | Hide the Integrations section from every project |
|
|
143
144
|
| `SPECRAILS_JIRA_SECTION=false` | Hide the Jira integration and 404 its routes |
|
package/docs/getting-started.md
CHANGED
|
@@ -19,7 +19,7 @@ Two options:
|
|
|
19
19
|
Download a signed build for your OS from `https://specrails.dev/downloads/specrails-desktop/latest/`:
|
|
20
20
|
|
|
21
21
|
- **macOS** — `specrails-desktop-<version>-aarch64.dmg` (Apple Silicon, notarised)
|
|
22
|
-
- **Windows** — `specrails-desktop-<version>-x64-setup.exe` (NSIS
|
|
22
|
+
- **Windows** — `specrails-desktop-<version>-x64-setup.exe` (NSIS; `-arm64-setup.exe` on ARM64)
|
|
23
23
|
|
|
24
24
|
Open the installer, drag to Applications (macOS) or click through the wizard (Windows). The app bundles the server, so you don't need a separate process. The desktop app resolves your PATH for you at startup — no manual Homebrew/Volta/nvm setup needed — see [platforms/macos.md](platforms/macos.md) if anything looks off.
|
|
25
25
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Projektumgebung
|
|
2
|
+
|
|
3
|
+
Manche Projekte brauchen zur Laufzeit ein Zugangsdatum, etwa `NODE_AUTH_TOKEN` für private npm-Pakete. Füge unter **Projekteinstellungen → Umgebung** die **Namen** der Variablen hinzu, die deine Rails und Loops brauchen. Specrails speichert nur die Namen, nie die Werte.
|
|
4
|
+
|
|
5
|
+
## Woher die Werte kommen
|
|
6
|
+
|
|
7
|
+
Beim Start eines Laufs liest Specrails jeden konfigurierten Namen aus der Umgebung, mit der es gestartet wurde. Öffnest du Specrails über das Dock oder den Finder, enthält diese Umgebung nicht, was dein Shell-Profil exportiert. Deshalb liest Specrails fehlende Namen zusätzlich aus deiner Login-Shell (zum Beispiel `~/.zprofile` oder `~/.zshrc`). Bewahre das echte Zugangsdatum in deinem Shell-Profil auf, nicht im Repository.
|
|
8
|
+
|
|
9
|
+
Die Prüfung läuft im Hintergrund, wenn das Projekt geöffnet wird, wenn du die Namen änderst, und danach regelmäßig. Ein langsames Profil verzögert deine Läufe also nicht. Die Werte bleiben nur für dieses Projekt im Speicher.
|
|
10
|
+
|
|
11
|
+
## Die Statuschips lesen
|
|
12
|
+
|
|
13
|
+
Jeder gespeicherte Name zeigt einen Chip:
|
|
14
|
+
|
|
15
|
+
| Chip | Bedeutung | Was tun |
|
|
16
|
+
|------|-----------|---------|
|
|
17
|
+
| **Geerbt** | Specrails wurde mit der Variable gestartet. | Nichts. |
|
|
18
|
+
| **Aus Login-Shell** | Specrails hat sie aus deiner Login-Shell gelesen. | Nichts. |
|
|
19
|
+
| **Nicht definiert** | Deine Login-Shell exportiert sie nicht. | Füge ein `export` in dein Shell-Profil ein. |
|
|
20
|
+
| **Shell-Zeitüberschreitung** | Deine Login-Shell brauchte zu lange zum Starten. | Beschleunige das Profil oder erhöhe `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (Standard 10 Sekunden). |
|
|
21
|
+
| **Shell-Prüfung fehlgeschlagen** | Specrails konnte deine Login-Shell nicht lesen. | Korrigiere das Profil oder starte Specrails aus einem Terminal. |
|
|
22
|
+
|
|
23
|
+
Fahre mit der Maus über einen Chip, um die Erklärung zu sehen. Klicke nach der Korrektur deines Profils auf **Erneut prüfen**: Ein Neustart von Specrails ist nicht nötig.
|
|
24
|
+
|
|
25
|
+
Startet ein Lauf mit einem ungelösten Namen, zeigt sein Log eine `[environment]`-Zeile mit der Variable und ihrem Status. Der Lauf startet trotzdem. Der Wert erscheint nie in der App, in den Logs oder in den MCP-Tools.
|
|
26
|
+
|
|
27
|
+
Unter Windows verwendet Specrails nur die Umgebung, mit der es gestartet wurde.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Project environment
|
|
2
|
+
|
|
3
|
+
Some projects need a credential at run time, such as `NODE_AUTH_TOKEN` for private npm packages. In **Project Settings → Environment**, add the **names** of the variables your rails and loops need. Specrails stores only the names, never the values.
|
|
4
|
+
|
|
5
|
+
## Where the values come from
|
|
6
|
+
|
|
7
|
+
When a run starts, Specrails reads each configured name from the environment it was launched with. When you open Specrails from the Dock or Finder, that environment does not include what your shell profile exports, so Specrails also reads the missing names from your login shell (for example `~/.zprofile` or `~/.zshrc`). Keep the real credential in your shell profile, not in the repository.
|
|
8
|
+
|
|
9
|
+
The check runs in the background when the project opens, when you change the names, and regularly afterwards, so a slow profile does not delay your runs. Values stay in memory for that project only.
|
|
10
|
+
|
|
11
|
+
## Reading the status chips
|
|
12
|
+
|
|
13
|
+
Each saved name shows a chip:
|
|
14
|
+
|
|
15
|
+
| Chip | What it means | What to do |
|
|
16
|
+
|------|---------------|------------|
|
|
17
|
+
| **Inherited** | Specrails was started with the variable. | Nothing. |
|
|
18
|
+
| **From login shell** | Specrails read it from your login shell. | Nothing. |
|
|
19
|
+
| **Not defined** | Your login shell does not export it. | Add an `export` for it to your shell profile. |
|
|
20
|
+
| **Shell timed out** | Your login shell took too long to start. | Speed up the profile, or raise `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (default 10 seconds). |
|
|
21
|
+
| **Shell check failed** | Specrails could not read your login shell. | Fix the profile, or launch Specrails from a terminal. |
|
|
22
|
+
|
|
23
|
+
Hover a chip for the explanation. After fixing your profile, click **Check again**: you do not need to restart Specrails.
|
|
24
|
+
|
|
25
|
+
If a run starts while a name is unresolved, its log shows one `[environment]` line naming the variable and its status. The run still starts. The value is never shown in the app, the logs or the MCP tools.
|
|
26
|
+
|
|
27
|
+
On Windows, Specrails uses only the environment it was started with.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Entorno del proyecto
|
|
2
|
+
|
|
3
|
+
Algunos proyectos necesitan una credencial al ejecutarse, como `NODE_AUTH_TOKEN` para paquetes privados de npm. En **Ajustes del proyecto → Entorno**, añade los **nombres** de las variables que necesitan tus rails y loops. Specrails guarda solo los nombres, nunca los valores.
|
|
4
|
+
|
|
5
|
+
## De dónde salen los valores
|
|
6
|
+
|
|
7
|
+
Al iniciar una ejecución, Specrails lee cada nombre configurado del entorno con el que se abrió. Si abres Specrails desde el Dock o el Finder, ese entorno no incluye lo que exporta tu perfil de shell, así que Specrails también lee los nombres que faltan de tu login shell (por ejemplo `~/.zprofile` o `~/.zshrc`). Guarda la credencial real en tu perfil de shell, no en el repositorio.
|
|
8
|
+
|
|
9
|
+
La comprobación se hace en segundo plano al abrir el proyecto, al cambiar los nombres y periódicamente después, así que un perfil lento no retrasa tus ejecuciones. Los valores quedan en memoria solo para ese proyecto.
|
|
10
|
+
|
|
11
|
+
## Cómo leer los indicadores
|
|
12
|
+
|
|
13
|
+
Cada nombre guardado muestra un indicador:
|
|
14
|
+
|
|
15
|
+
| Indicador | Qué significa | Qué hacer |
|
|
16
|
+
|-----------|---------------|-----------|
|
|
17
|
+
| **Heredada** | Specrails se inició con la variable. | Nada. |
|
|
18
|
+
| **Del login shell** | Specrails la leyó de tu login shell. | Nada. |
|
|
19
|
+
| **No definida** | Tu login shell no la exporta. | Añade un `export` en tu perfil de shell. |
|
|
20
|
+
| **Shell agotó el tiempo** | Tu login shell tardó demasiado en arrancar. | Acelera el perfil o sube `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (10 segundos por defecto). |
|
|
21
|
+
| **Fallo al leer el shell** | Specrails no pudo leer tu login shell. | Corrige el perfil o abre Specrails desde una terminal. |
|
|
22
|
+
|
|
23
|
+
Pasa el ratón por encima de un indicador para ver la explicación. Tras corregir el perfil, pulsa **Comprobar de nuevo**: no hace falta reiniciar Specrails.
|
|
24
|
+
|
|
25
|
+
Si una ejecución arranca con un nombre sin resolver, su log muestra una línea `[environment]` con la variable y su estado. La ejecución arranca igualmente. El valor nunca aparece en la app, en los logs ni en las herramientas MCP.
|
|
26
|
+
|
|
27
|
+
En Windows, Specrails usa solo el entorno con el que se inició.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Environnement du projet
|
|
2
|
+
|
|
3
|
+
Certains projets ont besoin d'un identifiant à l'exécution, comme `NODE_AUTH_TOKEN` pour des paquets npm privés. Dans **Paramètres du projet → Environnement**, ajoutez les **noms** des variables dont vos rails et vos loops ont besoin. Specrails enregistre uniquement les noms, jamais les valeurs.
|
|
4
|
+
|
|
5
|
+
## D'où viennent les valeurs
|
|
6
|
+
|
|
7
|
+
Au démarrage d'une exécution, Specrails lit chaque nom configuré dans l'environnement avec lequel il a été lancé. Si vous ouvrez Specrails depuis le Dock ou le Finder, cet environnement ne contient pas ce qu'exporte votre profil de shell : Specrails lit donc aussi les noms manquants dans votre shell de connexion (par exemple `~/.zprofile` ou `~/.zshrc`). Gardez le véritable identifiant dans votre profil de shell, pas dans le dépôt.
|
|
8
|
+
|
|
9
|
+
La vérification s'exécute en arrière-plan à l'ouverture du projet, quand vous modifiez les noms, puis régulièrement : un profil lent ne retarde donc pas vos exécutions. Les valeurs restent en mémoire pour ce projet uniquement.
|
|
10
|
+
|
|
11
|
+
## Lire les pastilles d'état
|
|
12
|
+
|
|
13
|
+
Chaque nom enregistré affiche une pastille :
|
|
14
|
+
|
|
15
|
+
| Pastille | Signification | Que faire |
|
|
16
|
+
|----------|---------------|-----------|
|
|
17
|
+
| **Héritée** | Specrails a été lancé avec la variable. | Rien. |
|
|
18
|
+
| **Du shell de connexion** | Specrails l'a lue dans votre shell de connexion. | Rien. |
|
|
19
|
+
| **Non définie** | Votre shell de connexion ne l'exporte pas. | Ajoutez un `export` dans votre profil de shell. |
|
|
20
|
+
| **Délai du shell dépassé** | Votre shell de connexion a mis trop de temps à démarrer. | Allégez le profil ou augmentez `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (10 secondes par défaut). |
|
|
21
|
+
| **Échec de lecture du shell** | Specrails n'a pas pu lire votre shell de connexion. | Corrigez le profil ou lancez Specrails depuis un terminal. |
|
|
22
|
+
|
|
23
|
+
Survolez une pastille pour afficher l'explication. Après avoir corrigé votre profil, cliquez sur **Vérifier à nouveau** : inutile de redémarrer Specrails.
|
|
24
|
+
|
|
25
|
+
Si une exécution démarre alors qu'un nom n'est pas résolu, son journal affiche une ligne `[environment]` indiquant la variable et son état. L'exécution démarre quand même. La valeur n'apparaît jamais dans l'application, les journaux ou les outils MCP.
|
|
26
|
+
|
|
27
|
+
Sous Windows, Specrails utilise uniquement l'environnement avec lequel il a été lancé.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Ambiente del progetto
|
|
2
|
+
|
|
3
|
+
Alcuni progetti hanno bisogno di una credenziale durante l'esecuzione, come `NODE_AUTH_TOKEN` per i pacchetti npm privati. In **Impostazioni del progetto → Ambiente**, aggiungi i **nomi** delle variabili che servono ai tuoi rail e loop. Specrails salva solo i nomi, mai i valori.
|
|
4
|
+
|
|
5
|
+
## Da dove arrivano i valori
|
|
6
|
+
|
|
7
|
+
Quando un'esecuzione parte, Specrails legge ogni nome configurato dall'ambiente con cui è stato avviato. Se apri Specrails dal Dock o dal Finder, quell'ambiente non include ciò che esporta il tuo profilo della shell, quindi Specrails legge anche i nomi mancanti dalla tua login shell (per esempio `~/.zprofile` o `~/.zshrc`). Tieni la credenziale reale nel profilo della shell, non nel repository.
|
|
8
|
+
|
|
9
|
+
Il controllo avviene in background all'apertura del progetto, quando cambi i nomi e poi periodicamente, così un profilo lento non ritarda le esecuzioni. I valori restano in memoria solo per quel progetto.
|
|
10
|
+
|
|
11
|
+
## Leggere gli indicatori di stato
|
|
12
|
+
|
|
13
|
+
Ogni nome salvato mostra un indicatore:
|
|
14
|
+
|
|
15
|
+
| Indicatore | Significato | Cosa fare |
|
|
16
|
+
|------------|-------------|-----------|
|
|
17
|
+
| **Ereditata** | Specrails è stato avviato con la variabile. | Niente. |
|
|
18
|
+
| **Dalla login shell** | Specrails l'ha letta dalla tua login shell. | Niente. |
|
|
19
|
+
| **Non definita** | La tua login shell non la esporta. | Aggiungi un `export` nel profilo della shell. |
|
|
20
|
+
| **Timeout della shell** | La tua login shell ha impiegato troppo ad avviarsi. | Velocizza il profilo o aumenta `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (10 secondi di default). |
|
|
21
|
+
| **Lettura della shell non riuscita** | Specrails non è riuscito a leggere la tua login shell. | Correggi il profilo o avvia Specrails da un terminale. |
|
|
22
|
+
|
|
23
|
+
Passa il mouse su un indicatore per vedere la spiegazione. Dopo aver corretto il profilo, fai clic su **Verifica di nuovo**: non serve riavviare Specrails.
|
|
24
|
+
|
|
25
|
+
Se un'esecuzione parte con un nome non risolto, il suo log mostra una riga `[environment]` con la variabile e il suo stato. L'esecuzione parte comunque. Il valore non compare mai nell'app, nei log o negli strumenti MCP.
|
|
26
|
+
|
|
27
|
+
Su Windows, Specrails usa solo l'ambiente con cui è stato avviato.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# プロジェクト環境
|
|
2
|
+
|
|
3
|
+
プロジェクトによっては、プライベート npm パッケージ用の `NODE_AUTH_TOKEN` のように、実行時に認証情報が必要です。**プロジェクト設定 → 環境** で、rail と loop が必要とする変数の**名前**を追加します。Specrails が保存するのは名前だけで、値は保存しません。
|
|
4
|
+
|
|
5
|
+
## 値の取得元
|
|
6
|
+
|
|
7
|
+
実行の開始時に、Specrails は起動時の環境から設定済みの各名前を読み取ります。Dock や Finder から Specrails を開いた場合、その環境にはシェルのプロファイルが export する内容が含まれません。そのため Specrails は、不足している名前をログインシェル(例: `~/.zprofile` や `~/.zshrc`)からも読み取ります。実際の認証情報はリポジトリではなく、シェルのプロファイルに置いてください。
|
|
8
|
+
|
|
9
|
+
確認はプロジェクトを開いたとき、名前を変更したとき、その後も定期的にバックグラウンドで行われるため、プロファイルが遅くても実行は遅れません。値はそのプロジェクトのメモリ内にのみ保持されます。
|
|
10
|
+
|
|
11
|
+
## ステータスチップの見方
|
|
12
|
+
|
|
13
|
+
保存した各名前にチップが表示されます。
|
|
14
|
+
|
|
15
|
+
| チップ | 意味 | 対処 |
|
|
16
|
+
|--------|------|------|
|
|
17
|
+
| **継承** | Specrails はその変数を持って起動しました。 | 不要です。 |
|
|
18
|
+
| **ログインシェルから取得** | Specrails がログインシェルから読み取りました。 | 不要です。 |
|
|
19
|
+
| **未定義** | ログインシェルがその変数を export していません。 | シェルのプロファイルに `export` を追加します。 |
|
|
20
|
+
| **シェルがタイムアウト** | ログインシェルの起動に時間がかかりすぎました。 | プロファイルを軽くするか、`SPECRAILS_LOGIN_SHELL_TIMEOUT_MS`(既定は 10 秒)を増やします。 |
|
|
21
|
+
| **シェルの読み取りに失敗** | Specrails がログインシェルを読み取れませんでした。 | プロファイルを修正するか、ターミナルから Specrails を起動します。 |
|
|
22
|
+
|
|
23
|
+
チップにカーソルを合わせると説明が表示されます。プロファイルを修正したら **再確認** をクリックしてください。Specrails の再起動は不要です。
|
|
24
|
+
|
|
25
|
+
名前が未解決のまま実行が始まると、そのログに変数名とステータスを示す `[environment]` 行が 1 行表示されます。実行はそのまま開始されます。値がアプリ、ログ、MCP ツールに表示されることはありません。
|
|
26
|
+
|
|
27
|
+
Windows では、Specrails は起動時の環境のみを使用します。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Ambiente do projeto
|
|
2
|
+
|
|
3
|
+
Alguns projetos precisam de uma credencial durante a execução, como `NODE_AUTH_TOKEN` para pacotes npm privados. Em **Configurações do projeto → Ambiente**, adicione os **nomes** das variáveis de que seus rails e loops precisam. O Specrails guarda apenas os nomes, nunca os valores.
|
|
4
|
+
|
|
5
|
+
## De onde vêm os valores
|
|
6
|
+
|
|
7
|
+
Quando uma execução começa, o Specrails lê cada nome configurado do ambiente com que foi iniciado. Se você abre o Specrails pelo Dock ou pelo Finder, esse ambiente não inclui o que o seu perfil de shell exporta, então o Specrails também lê os nomes ausentes do seu login shell (por exemplo `~/.zprofile` ou `~/.zshrc`). Mantenha a credencial real no perfil do shell, não no repositório.
|
|
8
|
+
|
|
9
|
+
A verificação roda em segundo plano quando o projeto abre, quando você altera os nomes e periodicamente depois disso, para que um perfil lento não atrase suas execuções. Os valores ficam na memória apenas para aquele projeto.
|
|
10
|
+
|
|
11
|
+
## Como ler os indicadores de estado
|
|
12
|
+
|
|
13
|
+
Cada nome salvo mostra um indicador:
|
|
14
|
+
|
|
15
|
+
| Indicador | O que significa | O que fazer |
|
|
16
|
+
|-----------|-----------------|-------------|
|
|
17
|
+
| **Herdada** | O Specrails foi iniciado com a variável. | Nada. |
|
|
18
|
+
| **Do login shell** | O Specrails a leu do seu login shell. | Nada. |
|
|
19
|
+
| **Não definida** | Seu login shell não a exporta. | Adicione um `export` no perfil do shell. |
|
|
20
|
+
| **Tempo do shell esgotado** | Seu login shell demorou demais para iniciar. | Acelere o perfil ou aumente `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (padrão de 10 segundos). |
|
|
21
|
+
| **Falha ao ler o shell** | O Specrails não conseguiu ler seu login shell. | Corrija o perfil ou abra o Specrails a partir de um terminal. |
|
|
22
|
+
|
|
23
|
+
Passe o mouse sobre um indicador para ver a explicação. Depois de corrigir o perfil, clique em **Verificar novamente**: não é preciso reiniciar o Specrails.
|
|
24
|
+
|
|
25
|
+
Se uma execução começar com um nome não resolvido, o log mostra uma linha `[environment]` com a variável e seu estado. A execução começa mesmo assim. O valor nunca aparece no app, nos logs nem nas ferramentas MCP.
|
|
26
|
+
|
|
27
|
+
No Windows, o Specrails usa apenas o ambiente com que foi iniciado.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 项目环境
|
|
2
|
+
|
|
3
|
+
有些项目在运行时需要凭据,例如私有 npm 包所需的 `NODE_AUTH_TOKEN`。在 **项目设置 → 环境** 中,添加你的 rail 和 loop 需要的变量**名称**。Specrails 只保存名称,从不保存值。
|
|
4
|
+
|
|
5
|
+
## 值从哪里来
|
|
6
|
+
|
|
7
|
+
运行开始时,Specrails 会从它启动时的环境中读取每个已配置的名称。如果你从 Dock 或 Finder 打开 Specrails,该环境不包含你的 shell 配置文件导出的内容,因此 Specrails 还会从你的登录 shell(例如 `~/.zprofile` 或 `~/.zshrc`)读取缺失的名称。请把真实凭据放在 shell 配置文件中,而不是仓库里。
|
|
8
|
+
|
|
9
|
+
检查会在项目打开时、你修改名称时以及之后定期在后台进行,因此较慢的配置文件不会拖慢你的运行。值只保存在该项目的内存中。
|
|
10
|
+
|
|
11
|
+
## 如何阅读状态标签
|
|
12
|
+
|
|
13
|
+
每个已保存的名称都会显示一个标签:
|
|
14
|
+
|
|
15
|
+
| 标签 | 含义 | 处理方式 |
|
|
16
|
+
|------|------|----------|
|
|
17
|
+
| **已继承** | Specrails 启动时就带有该变量。 | 无需处理。 |
|
|
18
|
+
| **来自登录 shell** | Specrails 从你的登录 shell 读取到了它。 | 无需处理。 |
|
|
19
|
+
| **未定义** | 你的登录 shell 没有导出它。 | 在 shell 配置文件中添加 `export`。 |
|
|
20
|
+
| **Shell 超时** | 你的登录 shell 启动时间过长。 | 精简配置文件,或调高 `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS`(默认 10 秒)。 |
|
|
21
|
+
| **Shell 读取失败** | Specrails 无法读取你的登录 shell。 | 修复配置文件,或从终端启动 Specrails。 |
|
|
22
|
+
|
|
23
|
+
将鼠标悬停在标签上可查看说明。修复配置文件后,点击 **重新检查**,无需重启 Specrails。
|
|
24
|
+
|
|
25
|
+
如果运行开始时仍有名称未解析,其日志会显示一行 `[environment]`,写明变量和状态。运行仍会开始。值从不会出现在应用、日志或 MCP 工具中。
|
|
26
|
+
|
|
27
|
+
在 Windows 上,Specrails 只使用它启动时的环境。
|
|
@@ -435,7 +435,9 @@ Gated by `requireBrowserCaptureEnabled` — returns 404 when the feature is disa
|
|
|
435
435
|
| Method | Path | Notes |
|
|
436
436
|
|--------|------|-------|
|
|
437
437
|
| `GET` | `/settings` | Project settings, including `allowSubagents` (default `false`) and `subagentRuntime` (default `null`) |
|
|
438
|
-
| `PATCH` | `/settings` | Update. `allowSubagents` must be a boolean; `subagentRuntime` is `null` or `{ provider, model, effort: string \| null }` (strictly validated). A change to either refreshes the sub-agent policy of the project's open agent sessions |
|
|
438
|
+
| `PATCH` | `/settings` | Update. `allowSubagents` must be a boolean; `subagentRuntime` is `null` or `{ provider, model, effort: string \| null }` (strictly validated). A change to either refreshes the sub-agent policy of the project's open agent sessions. A change to `worktreeEnvPassthrough` (names only) re-warms the project's login-shell recovery |
|
|
439
|
+
| `GET` | `/env-passthrough/status` | Value-free resolution status of every configured `worktreeEnvPassthrough` name: `{ loginShellRecovery, timeoutMs, checking, names: [{ name, status, shell, checkedAt, exitCode }] }`. `status` is `inherited`, `recovered`, `not-defined`, `probe-timeout`, `probe-failed`, or `pending` for a name never checked. Probes first only when a missing name has no valid cached result. Never returns values |
|
|
440
|
+
| `POST` | `/env-passthrough/recheck` | Probe the login shell now (asynchronously, `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS`, default 10 s), then return the same payload as the status route |
|
|
439
441
|
| `GET` | `/terminal-settings` | Per-project terminal overrides |
|
|
440
442
|
| `PATCH` | `/terminal-settings` | Update |
|
|
441
443
|
| `GET` | `/agent-models` | Per-agent model overrides |
|
|
@@ -175,17 +175,58 @@ shell when a GUI launch does not supply it. A zsh login shell reads `~/.zprofile
|
|
|
175
175
|
adding it to tracked repository files. Windows uses its inherited environment.
|
|
176
176
|
|
|
177
177
|
Recovered values stay in a project-owned in-memory overlay, not the server's global
|
|
178
|
-
environment, SQLite or runtime snapshots.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
178
|
+
environment, SQLite or runtime snapshots. Removing a configured name drops its
|
|
179
|
+
recovered value and status immediately. A missing value remains absent: Desktop
|
|
180
|
+
never substitutes a dummy credential or treats a blocked package-manager command as passed.
|
|
181
|
+
|
|
182
|
+
#### Login-shell recovery and resolution status
|
|
183
|
+
|
|
184
|
+
The login-shell probe runs `$SHELL -l -i -c 'printf …'` and reads only the requested
|
|
185
|
+
names from a block bracketed by sentinels. Text a profile prints outside that block
|
|
186
|
+
(banners, instant prompts) is ignored. A complete block is accepted **whatever the
|
|
187
|
+
shell's exit status**; a non-zero exit is kept only as a diagnostic.
|
|
188
|
+
|
|
189
|
+
- **Asynchronous warm cache.** Desktop probes in the background when a project opens,
|
|
190
|
+
when its configured names change, and about a minute before a successful result
|
|
191
|
+
expires. The probe never blocks the server's event loop. Its budget is 10 seconds by
|
|
192
|
+
default; set `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` (milliseconds, capped at 120000) to
|
|
193
|
+
change it. The refresh stops when the project is removed.
|
|
194
|
+
- **Spawn-time reads.** Rail jobs, loop steps and retained runtime controls read the
|
|
195
|
+
warm cache synchronously. Only a name that was never checked (or whose success
|
|
196
|
+
expired) gets the short synchronous fallback, bounded at 1.5 seconds. When that
|
|
197
|
+
fallback fails, the asynchronous probe is started immediately so the next spawn can
|
|
198
|
+
use its result.
|
|
199
|
+
- **Lifetimes.** Recovered values stay valid for 10 minutes and are refreshed before
|
|
200
|
+
then; a failed refresh keeps a still-valid value. Failed or empty lookups are retried
|
|
201
|
+
after 30 seconds. Changing `SHELL`, `HOME` or `ZDOTDIR` discards cached results.
|
|
202
|
+
|
|
203
|
+
Each configured name has a value-free status, kept in the owning project's memory
|
|
204
|
+
together with the shell used and the time of the check:
|
|
205
|
+
|
|
206
|
+
| Status | Meaning |
|
|
207
|
+
|--------|---------|
|
|
208
|
+
| `inherited` | Present in the environment Desktop started with. |
|
|
209
|
+
| `recovered` | Read from the login shell. |
|
|
210
|
+
| `not-defined` | The probe succeeded but the shell does not export the name (also used on Windows, where there is no login-shell recovery). |
|
|
211
|
+
| `probe-timeout` | The shell did not print the block within the budget. |
|
|
212
|
+
| `probe-failed` | The shell could not be started, or its output had no complete sentinel block. |
|
|
213
|
+
|
|
214
|
+
`GET /api/projects/:projectId/env-passthrough/status` returns these statuses
|
|
215
|
+
(`pending` appears only for a name that has never been checked), and
|
|
216
|
+
`POST /api/projects/:projectId/env-passthrough/recheck` probes immediately. The
|
|
217
|
+
Project Settings environment card shows them as chips with a **Check again** action,
|
|
218
|
+
and the MCP `specrails_env` tool exposes them through `get`, `status` and `recheck`.
|
|
219
|
+
When a rail, loop or queued job starts with a configured name unresolved, its run log
|
|
220
|
+
receives one aggregated warning, for example
|
|
221
|
+
`[environment] NODE_AUTH_TOKEN not available (probe-timeout); configure it in the login shell or launch from a terminal`.
|
|
222
|
+
Statuses, logs and MCP output contain names and states only, never values.
|
|
183
223
|
|
|
184
224
|
A few env vars are read directly by the app. The two most useful operational ones:
|
|
185
225
|
|
|
186
226
|
| Variable | Description |
|
|
187
227
|
|----------|-------------|
|
|
188
228
|
| `SPECRAILS_TECH_URL` | Fallback specrails-tech base URL. Resolution order is the `specrails_tech_url` app setting **first**, then this env var, then `http://localhost:3000` — so a stored app setting takes precedence over this var. |
|
|
229
|
+
| `SPECRAILS_LOGIN_SHELL_TIMEOUT_MS` | Budget in milliseconds for the asynchronous login-shell probe that recovers configured project environment names (default `10000`, capped at `120000`). The synchronous cold fallback keeps its 1.5 s bound. See [Login-shell recovery](#login-shell-recovery-and-resolution-status). |
|
|
189
230
|
| `WM_ZOMBIE_TIMEOUT_MS` | Zombie-job detection timeout in milliseconds (default `1800000` = 30 min). This is a stuck-job watchdog, **not** a hard "kill after N minutes" cap. |
|
|
190
231
|
|
|
191
232
|
### Provider rollback gates
|
|
@@ -133,6 +133,21 @@ Both temporary checkouts use non-force cleanup, including after a Git runner exc
|
|
|
133
133
|
including proofs for historical misplaced links; symlinked destination ancestors confer no
|
|
134
134
|
authority. Registration paths, frozen manifests and Core scope remain unchanged. A failed run
|
|
135
135
|
keeps its old checkout; after updating Desktop, a fresh Relaunch receives the corrected layout.
|
|
136
|
+
- Warm reuse is gated by dependency freshness. Before preparing a new link for a package
|
|
137
|
+
directory, Desktop compares its dependency inputs in the base checkout and in the worktree: the
|
|
138
|
+
nearest lockfile found walking up to the Git top level (first of `pnpm-lock.yaml`, `yarn.lock`,
|
|
139
|
+
`package-lock.json`, `npm-shrinkwrap.json`, `bun.lock`, at the same relative position) and a
|
|
140
|
+
canonical digest of the `package.json` dependency, devDependency, optionalDependency and
|
|
141
|
+
peerDependency fields (scripts and other metadata are ignored). If either input differs, or one
|
|
142
|
+
cannot be read, the directory gets no `node_modules` and the run reports, on the
|
|
143
|
+
`rail.overlay_degraded` channel, for example
|
|
144
|
+
`apps/catalog: yarn.lock differs from the base checkout; dependencies will be installed in the worktree`.
|
|
145
|
+
Core's environment preparation then installs that directory cold from the worktree's own lockfile.
|
|
146
|
+
This prevents a base checkout on another branch, or behind the remote, from supplying packages
|
|
147
|
+
the run's code does not declare. Desktop never checks out, pulls or installs anything in the
|
|
148
|
+
user's checkout to make warm reuse possible. Links already present for a resumed run keep their
|
|
149
|
+
authentication; the guard only applies when a link is prepared. `SPECRAILS_WORKTREE_NODE_MODULES=false`
|
|
150
|
+
still disables warm reuse entirely.
|
|
136
151
|
- Per-unit settlement returns structured execution + delivery results. `onLoopRunFinished` receives
|
|
137
152
|
the engine outcome only; commit/status/ref/provenance/push failures cannot rewrite it.
|
|
138
153
|
- Before staging, settlement blocks active OpenSpec change directories introduced relative to
|
|
@@ -5,7 +5,7 @@ architectural dependency declaration. Search a heading or filename and read only
|
|
|
5
5
|
the relevant source and tests. Feature prefixes group the legacy server files;
|
|
6
6
|
new bounded modules live under `server/modules/`.
|
|
7
7
|
|
|
8
|
-
Includes
|
|
8
|
+
Includes 1044 source/build files. Nearby tests are linked where names
|
|
9
9
|
match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
10
10
|
|
|
11
11
|
## cli
|
|
@@ -848,7 +848,9 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
848
848
|
- [generate-icons.mjs](../../scripts/generate-icons.mjs)
|
|
849
849
|
- [generate-mobile-types.mjs](../../scripts/generate-mobile-types.mjs)
|
|
850
850
|
- [generate-source-map.mjs](../../scripts/generate-source-map.mjs) · [test](../../scripts/generate-source-map.test.mjs)
|
|
851
|
+
- [module-references.mjs](../../scripts/module-references.mjs) · [test](../../scripts/module-references.test.mjs)
|
|
851
852
|
- [obfuscate-chromium.mjs](../../scripts/obfuscate-chromium.mjs)
|
|
853
|
+
- [paired-core-shards.mjs](../../scripts/paired-core-shards.mjs) · [test](../../scripts/paired-core-shards.test.mjs)
|
|
852
854
|
- [patch-node-pty.mjs](../../scripts/patch-node-pty.mjs) · [test](../../scripts/patch-node-pty.test.mjs)
|
|
853
855
|
- [recover-desktop-channel.mjs](../../scripts/recover-desktop-channel.mjs) · [test](../../scripts/recover-desktop-channel.test.mjs)
|
|
854
856
|
- [release-policy.mjs](../../scripts/release-policy.mjs) · [test](../../scripts/release-policy.test.mjs)
|
package/docs/mcp.md
CHANGED
|
@@ -48,7 +48,7 @@ reading one description. The tools are:
|
|
|
48
48
|
| `specrails_loops` | Saved loop workflows |
|
|
49
49
|
| `specrails_code` | File discovery, literal content search, bounded line reads, summaries and provenance; AI summary regeneration is capability-gated |
|
|
50
50
|
| `specrails_git` | Repository/branch/worktree information, status, diffs and PR lookup |
|
|
51
|
-
| `specrails_env` | Project environment readiness and environment-file management |
|
|
51
|
+
| `specrails_env` | Project environment readiness and environment-file management; `get`/`status`/`recheck` report each configured name's value-free resolution status |
|
|
52
52
|
| `specrails_support` | Support triage, local diagnostics and specrails-core update workflows |
|
|
53
53
|
| `specrails_setup` | Add-project setup wizard surface |
|
|
54
54
|
| `specrails_analytics` | Per-project spending analytics + budget |
|
package/docs/platforms/macos.md
CHANGED
|
@@ -77,6 +77,8 @@ When the app runs without an active bundle (a runtimes-less build, or `npm run d
|
|
|
77
77
|
|
|
78
78
|
2. **Login-shell merge (async)** — right after the HTTP server starts listening, `augmentPathFromLoginShell()` spawns `$SHELL -l -i` once (1500 ms timeout) and merges whatever `PATH` that login + interactive shell exposes. This recovers the segments that Volta, nvm, fnm, asdf, etc. add only inside your interactive shell — whatever your `$SHELL` produces, no specific rc file is assumed. On timeout or non-zero exit, the fast-path `PATH` stays in effect and a single warning is logged.
|
|
79
79
|
|
|
80
|
+
Project environment names configured in Project Settings (for example `NODE_AUTH_TOKEN`) use a separate, per-project login-shell probe with a 10 s budget (`SPECRAILS_LOGIN_SHELL_TIMEOUT_MS`). It runs in the background, never writes to `process.env`, and reports a status per name. See [configuration](../internals/configuration.md#login-shell-recovery-and-resolution-status).
|
|
81
|
+
|
|
80
82
|
The resolved `PATH` is stored on `process.env.PATH`, so every downstream spawn inherits it (`QueueManager` → provider CLI, `SetupManager` → `npx specrails-core`, `terminalManager` PTYs, etc.).
|
|
81
83
|
|
|
82
84
|
## Broken-symlink detection
|