sliccy 6.120.2 → 6.122.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/dist/node-server/_shared/tray-signaling.d.ts +17 -0
- package/dist/node-server/_shared/tray-signaling.d.ts.map +1 -1
- package/dist/node-server/_shared/tray-signaling.js.map +1 -1
- package/dist/node-server/electron-tray-follower.d.ts +25 -8
- package/dist/node-server/electron-tray-follower.js +41 -9
- package/dist/node-server/hostfs-watch.d.ts +49 -0
- package/dist/node-server/hostfs-watch.js +125 -0
- package/dist/node-server/hostfs.d.ts +1 -2
- package/dist/node-server/index.js +10 -2
- package/dist/ui/.vite/manifest.json +155 -149
- package/dist/ui/assets/SKILL-CxxQT4Lx.js +75 -0
- package/dist/ui/assets/{account-store-D8X8RQZj.js → account-store-BeWWaisz.js} +1 -1
- package/dist/ui/assets/{account-store-SfugZBaZ.js → account-store-CrzQRVmk.js} +1 -1
- package/dist/ui/assets/{adobe-B1_spvgg.js → adobe-CU3EGPi1.js} +1 -1
- package/dist/ui/assets/{adobe-DgFjVD8s.js → adobe-CmJQOCEG.js} +1 -1
- package/dist/ui/assets/{agent-bridge-4QgeYgVw.js → agent-bridge-CxtEwZsO.js} +1 -1
- package/dist/ui/assets/{agent-panels-CLOQvNwx.js → agent-panels-D2g8j4Sb.js} +1 -1
- package/dist/ui/assets/{apply-layout-DtyAl0hp.js → apply-layout-M6igfUeQ.js} +1 -1
- package/dist/ui/assets/{apps-BEPPgN9K.js → apps-Dcr6dP3A.js} +1 -1
- package/dist/ui/assets/{auto-mount-table-gDMh6Ti9.js → auto-mount-table-C6w-8e_I.js} +1 -1
- package/dist/ui/assets/{azure-openai-B9P8QsP6.js → azure-openai-B2ax_lID.js} +1 -1
- package/dist/ui/assets/{azure-openai-CyZ9Ui4d.js → azure-openai-BtyN3IoK.js} +1 -1
- package/dist/ui/assets/backend-hostfs-CXNSj93M.js +1 -0
- package/dist/ui/assets/backend-hostfs-ZVYICVoE.js +1 -0
- package/dist/ui/assets/{cost-command-XUDMFE1u.js → browser-q8slJ96R.js} +645 -659
- package/dist/ui/assets/{bsh-watchdog-COvv_9Ni.js → bsh-watchdog-ClhQZQ2p.js} +1 -1
- package/dist/ui/assets/{cerebras-D7-dD3gu.js → cerebras-BsKWOUNG.js} +1 -1
- package/dist/ui/assets/{cerebras-CRXRLx94.js → cerebras-DUaxfafs.js} +1 -1
- package/dist/ui/assets/{connect-surface-6rLgBphF.js → connect-surface-DVIB7kxf.js} +1 -1
- package/dist/ui/assets/{core-Bh-r--NI.js → core-C2Fzha9I.js} +1 -1
- package/dist/ui/assets/cost-command-Ds2LwRkA.js +15 -0
- package/dist/ui/assets/{directed-approval-DVuDWoI8.js → directed-approval-Dm0LtHV8.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-CmarhXRU.js → ensure-speech-assets-BBbl4aXA.js} +1 -1
- package/dist/ui/assets/{esbuild-wasm-Dl3vgXvq.js → esbuild-wasm-PXHRTefD.js} +1 -1
- package/dist/ui/assets/ffmpeg-command-eHNhx1yC.js +66 -0
- package/dist/ui/assets/{fs-ChWHUqpw.js → fs-BkxAKjex.js} +2 -2
- package/dist/ui/assets/{fs-BTApuFnn.js → fs-C3q6Q4sP.js} +1 -1
- package/dist/ui/assets/{github-Bhe4r8yT.js → github-BcG9_uX5.js} +2 -2
- package/dist/ui/assets/{github-D-jaY3WO.js → github-C-8X0lJB.js} +1 -1
- package/dist/ui/assets/{github-copilot-BJLiYTwN.js → github-copilot-DNYQa3vN.js} +1 -1
- package/dist/ui/assets/{github-copilot-DlCLP45Y.js → github-copilot-OGxtOON4.js} +1 -1
- package/dist/ui/assets/{github-install-DRi0MxS5.js → github-install-ByCG7pmU.js} +1 -1
- package/dist/ui/assets/{github-zip-49aLHvK_.js → github-zip-Dy4vkVfQ.js} +1 -1
- package/dist/ui/assets/{guest-tool-gate-DHUAohY8.js → guest-tool-gate-CW5Twbdj.js} +1 -1
- package/dist/ui/assets/{help-Cejd-G4M.js → help-xL2fSGd3.js} +1 -1
- package/dist/ui/assets/{installer-VcJEC2uC.js → installer-CPS-l1D-.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-v2sDXVV_.js → js-realm-worker-prMqenKt.js} +1 -1
- package/dist/ui/assets/{kernel-worker-BOCtSlib.js → kernel-worker-DdroKmZo.js} +590 -655
- package/dist/ui/assets/lick-ws-bridge-CTypKosM.js +1 -0
- package/dist/ui/assets/{local-llm-DJoZEkZd.js → local-llm-D0mTvY7N.js} +1 -1
- package/dist/ui/assets/{local-llm-CXdmEK1l.js → local-llm-Drh6gTi0.js} +1 -1
- package/dist/ui/assets/{magick-wasm-Cjkds07K.js → magick-wasm-nq7J_5Mo.js} +1 -1
- package/dist/ui/assets/{main-CCHqhiJh.js → main-DSsincSj.js} +3 -3
- package/dist/ui/assets/{mount-D-wnvlrs.js → mount-CxIOoyoX.js} +2 -2
- package/dist/ui/assets/{mount-pXCQxF8h.js → mount-DnkQM4H_.js} +3 -3
- package/dist/ui/assets/{mount-recovery-CyIGmO6c.js → mount-recovery-pP0t0B5R.js} +1 -1
- package/dist/ui/assets/{new-session-5m_j1Lxi.js → new-session-TJkrfdmM.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-CvcoHHSK.js → oauth-bootstrap-Cflkal2z.js} +2 -2
- package/dist/ui/assets/{openai-codex-B49_Vaav.js → openai-codex-LMiNXBpR.js} +1 -1
- package/dist/ui/assets/{openai-codex-DeaaiupD.js → openai-codex-WrMiquZ6.js} +1 -1
- package/dist/ui/assets/{openrouter-_anKkItD.js → openrouter-CF6GBIsh.js} +1 -1
- package/dist/ui/assets/{openrouter-D5lnyZIJ.js → openrouter-Y72OhjGZ.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C32O4TGi.js → openrouter-oauth-iH7sVKzz.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-8Eifd0jg.js → openrouter-oauth-pLAIH3V3.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-B2rQwK-2.js → panel-rpc-handlers-E0Tvr752.js} +2 -2
- package/dist/ui/assets/{panelize-shell-rCfy6UTW.js → panelize-shell-Hn2-TJc6.js} +1 -1
- package/dist/ui/assets/{provider-BaPrv5Xx.js → provider-BxxPfI5S.js} +1 -1
- package/dist/ui/assets/{provider-BXp0BGZ2.js → provider-DZDGqjz1.js} +2 -2
- package/dist/ui/assets/{provider-settings-DdUjJgCk.js → provider-settings-BFUPdbhi.js} +1 -1
- package/dist/ui/assets/{provider-settings--fUWXqNi.js → provider-settings-Cr_y3ZO3.js} +1 -1
- package/dist/ui/assets/{provider-store-access-KNXv1l8_.js → provider-store-access-BgIb6-X8.js} +2 -2
- package/dist/ui/assets/provider-store-access-CJG-qJev.js +1 -0
- package/dist/ui/assets/{providers-5omoknr0.js → providers-Dz3RSRQx.js} +2 -2
- package/dist/ui/assets/{providers-BArdfPc3.js → providers-Rty0Ovfq.js} +1 -1
- package/dist/ui/assets/{quick-llm-BTT8VKf1.js → quick-llm-CvqNttpI.js} +1 -1
- package/dist/ui/assets/{recovery-screen-CgEKoDNt.js → recovery-screen-DX5Owqre.js} +1 -1
- package/dist/ui/assets/{redirect-uri-DgtoEJmu.js → redirect-uri-DEWLoW8H.js} +1 -1
- package/dist/ui/assets/remote-cache-3KNT1gsp.js +1 -0
- package/dist/ui/assets/{remote-cache-JAv9sQH_.js → remote-cache-BE5T1-53.js} +1 -1
- package/dist/ui/assets/{run-DkPJk9Ps.js → run-5X_LUY3w.js} +2 -2
- package/dist/ui/assets/run-B0Qw82nE.js +42 -0
- package/dist/ui/assets/{run-DT1YSMf5.js → run-BcjWAfpv.js} +1 -1
- package/dist/ui/assets/{session-freezer-Cju1rG12.js → session-freezer-DK9G_IkB.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-D3SmmUZq.js → setup-feature-flags-remote-BcUIm2b6.js} +1 -1
- package/dist/ui/assets/{setup-standalone-prelude-Xd3afxoD.js → setup-standalone-prelude-l7nnbPF5.js} +1 -1
- package/dist/ui/assets/{setup-sudo-OGVmwMl-.js → setup-sudo-BSQT2Dh-.js} +2 -2
- package/dist/ui/assets/{shared-CPVZc-MN.js → shared-URkGo6WP.js} +4 -4
- package/dist/ui/assets/{skills-CxfRrpAT.js → skills-CnWQfgYe.js} +1 -1
- package/dist/ui/assets/slicc-version-B8zEDiZF.js +1 -0
- package/dist/ui/assets/{snapshot-D2clR32B.js → snapshot-DWBFaMd4.js} +1 -1
- package/dist/ui/assets/{snapshot-features-5xPjvu_j.js → snapshot-features-c8X_wCzy.js} +1 -1
- package/dist/ui/assets/{state-CGXdxknG.js → state-UQWwnZ8X.js} +1 -1
- package/dist/ui/assets/{store-DjqBL5CO.js → store-B-BowqJY.js} +1 -1
- package/dist/ui/assets/{store-Cl6xmSWa.js → store-D426O4iV.js} +1 -1
- package/dist/ui/assets/{sudo-Ce04Ty7p.js → sudo-B8CRodhJ.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DELq6UY1.js → tray-sidecar-au4iFVvJ.js} +1 -1
- package/dist/ui/assets/tray-webrtc-CThDQcWx.js +1 -0
- package/dist/ui/assets/{upgrade-detection-CJVRd1Xz.js → upgrade-detection-WvRCLHXP.js} +1 -1
- package/dist/ui/assets/{wc-attach-CDWiDrxB.js → wc-attach-CQIHVqTH.js} +2 -2
- package/dist/ui/assets/{wc-extension-D5QaEq9K.js → wc-extension-DDlPWYwq.js} +2 -2
- package/dist/ui/assets/{wc-float-label-CyWrTj5p.js → wc-float-label-CE5oCxJ4.js} +1 -1
- package/dist/ui/assets/{wc-floatbar-online-f81QZ57b.js → wc-floatbar-online-BBRpuOSH.js} +1 -1
- package/dist/ui/assets/{wc-follower-Di5kkRYo.js → wc-follower-TkW182aB.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-CstFIMRH.js → wc-follower-oauth-BPhDEzGv.js} +1 -1
- package/dist/ui/assets/{wc-live-CxM9G2_r.js → wc-live-8nXQgC09.js} +4 -4
- package/dist/ui/assets/{wc-nav-DDcPc4RZ.js → wc-nav-DjyjVmrX.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-gdwRiuno.js → wc-onboarding-xIF0sbif.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DWyjjnMo.js → wc-placeholder-v2B6i349.js} +2 -2
- package/dist/ui/assets/{wc-settings-BqpXd3aC.js → wc-settings-DvrfTqdG.js} +2 -2
- package/dist/ui/assets/{wc-shell-zAMezdgn.js → wc-shell-CxUba4CU.js} +226 -174
- package/dist/ui/assets/{wc-shortcut-config-C4_oA-Bw.js → wc-shortcut-config-BLk3x477.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-Cot4K4eb.js → wc-sprinkles-IRaAZH5E.js} +2 -2
- package/dist/ui/assets/{wc-tray-J1eWS9EM.js → wc-tray-DCHo1uuz.js} +4 -4
- package/dist/ui/assets/{xai-grok-Bxqaozwj.js → xai-grok-BnPIwUZr.js} +1 -1
- package/dist/ui/assets/{xai-grok-CqlBiLGH.js → xai-grok-Dgkd5vUZ.js} +1 -1
- package/dist/ui/index.html +6 -6
- package/dist/ui/packages/webapp/index.html +6 -6
- package/package.json +2 -2
- package/dist/ui/assets/backend-hostfs-D7L9KrlQ.js +0 -1
- package/dist/ui/assets/backend-hostfs-MpP40IA8.js +0 -1
- package/dist/ui/assets/lick-ws-bridge-BD2lQGbd.js +0 -1
- package/dist/ui/assets/provider-store-access-CP9d_CSa.js +0 -1
- package/dist/ui/assets/slicc-version-D7xLOkdb.js +0 -1
- package/dist/ui/assets/tray-webrtc-DfkvaMcO.js +0 -1
|
@@ -387,6 +387,23 @@ export type FollowerAttachResult = {
|
|
|
387
387
|
code: 'INVALID_JOIN_CAPABILITY' | 'TRAY_EXPIRED';
|
|
388
388
|
error: string;
|
|
389
389
|
} | {
|
|
390
|
+
/**
|
|
391
|
+
* The tray moved. Rides on an HTTP 308 whose `Location` and
|
|
392
|
+
* `successor-version` link both name `joinUrl` (#1957), so this body is
|
|
393
|
+
* only ever observed by a client that suppressed redirect-following.
|
|
394
|
+
*/
|
|
395
|
+
action: 'redirect';
|
|
396
|
+
code: 'TRAY_SUPERSEDED';
|
|
397
|
+
error: string;
|
|
398
|
+
joinUrl: string;
|
|
399
|
+
} | {
|
|
400
|
+
/**
|
|
401
|
+
* The pre-#1957 supersede shape, on HTTP 409. Still emitted when the
|
|
402
|
+
* stored replacement does not parse as a URL — there is nowhere to
|
|
403
|
+
* redirect to, so the outcome really is terminal — and still accepted
|
|
404
|
+
* because a current client may be talking to a hub that predates the
|
|
405
|
+
* flip.
|
|
406
|
+
*/
|
|
390
407
|
action: 'fail';
|
|
391
408
|
code: 'TRAY_SUPERSEDED';
|
|
392
409
|
error: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tray-signaling.d.ts","sourceRoot":"","sources":["../src/tray-signaling.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tray-signaling.d.ts","sourceRoot":"","sources":["../src/tray-signaling.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tray-signaling.js","sourceRoot":"","sources":["../src/tray-signaling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tray-signaling.js","sourceRoot":"","sources":["../src/tray-signaling.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,15 @@ import { type FederatedCdpInspectableTarget } from './electron-federated-cdp.js'
|
|
|
4
4
|
export declare const TRAY_CONTROL_CHANNEL_LABEL = "tray-control";
|
|
5
5
|
/** Runtime tag advertised on attach + `hello`. */
|
|
6
6
|
export declare const FOLLOWER_RUNTIME_TAG = "slicc-electron";
|
|
7
|
+
/**
|
|
8
|
+
* The replacement join URL carried by a suppressed 3xx, or null. The hub's
|
|
9
|
+
* `Location` carries `json=true` (#1957) because platforms that auto-follow the
|
|
10
|
+
* redirect need it; this client re-appends nothing, so the parameter is dropped
|
|
11
|
+
* here rather than persisted into the next signaling client's join URL. A
|
|
12
|
+
* relative or unparseable target yields null, which the caller treats as "no
|
|
13
|
+
* replacement named" — never as a hop to a nonexistent tray.
|
|
14
|
+
*/
|
|
15
|
+
export declare function redirectLocation(status: number, location: string | null): string | null;
|
|
7
16
|
interface IceServerConfig {
|
|
8
17
|
urls: string | string[];
|
|
9
18
|
username?: string;
|
|
@@ -42,10 +51,17 @@ export declare class TrayFollowerSignaling {
|
|
|
42
51
|
/**
|
|
43
52
|
* Attach to the tray. Unlike poll/answer/ice, this tolerates a non-OK status
|
|
44
53
|
* and returns the decoded body: the tray signals `TRAY_SUPERSEDED` with an
|
|
45
|
-
* HTTP
|
|
46
|
-
* elected/connected) can also arrive on a
|
|
47
|
-
* decoding — as `post()` does — would strand
|
|
48
|
-
* `attachWithRedirects` interprets `result.code` /
|
|
54
|
+
* HTTP 308 + a replacement `joinUrl` (409 on hubs that predate #1957), and
|
|
55
|
+
* `wait` plans (leader not yet elected/connected) can also arrive on a
|
|
56
|
+
* non-2xx status. Throwing before decoding — as `post()` does — would strand
|
|
57
|
+
* the follower on both. `attachWithRedirects` interprets `result.code` /
|
|
58
|
+
* `result.action`.
|
|
59
|
+
*
|
|
60
|
+
* `redirect: 'manual'` keeps the supersede hop ours: undici surfaces the 308
|
|
61
|
+
* itself, headers intact, so `attachWithRedirects` keeps its own hop bound
|
|
62
|
+
* and reconstructs its signaling client against the replacement. Letting
|
|
63
|
+
* undici follow it instead would connect but leave `this.signaling` pointed
|
|
64
|
+
* at the dead tray, re-hopping on every reconnect for the rest of the run.
|
|
49
65
|
*/
|
|
50
66
|
attach(controllerId: string, runtime: string): Promise<{
|
|
51
67
|
status: number;
|
|
@@ -102,10 +118,11 @@ export declare class ElectronTrayFollower {
|
|
|
102
118
|
/**
|
|
103
119
|
* Attach to the tray, resolving the non-terminal attach outcomes the worker
|
|
104
120
|
* returns before a bootstrap is available:
|
|
105
|
-
* - superseded (HTTP
|
|
106
|
-
* header
|
|
107
|
-
*
|
|
108
|
-
*
|
|
121
|
+
* - superseded (HTTP 308 + `Location`, plus a `successor-version` `Link`
|
|
122
|
+
* header and a `joinUrl` in the body; 409 on hubs that predate #1957): the
|
|
123
|
+
* leader reconnected onto a fresh tray — follow the redirect (bounded
|
|
124
|
+
* hops). Any one of the three is enough, so a body shape this client does
|
|
125
|
+
* not recognize is not a dead end (#1957).
|
|
109
126
|
* - `wait` (leader not yet elected/connected, carries `retryAfterMs`): sleep
|
|
110
127
|
* then re-attach (bounded), as the shared Swift/Go followers do — otherwise
|
|
111
128
|
* a follower that raced leader election resolves "started" but is never
|
|
@@ -29,6 +29,26 @@ const SIGNALLING_TIMEOUT_MS = 10_000;
|
|
|
29
29
|
/** Bound on the bootstrap-event de-dup set so a long-lived follower can't grow
|
|
30
30
|
* it without limit (`cursor` already gates re-delivery; this is belt-only). */
|
|
31
31
|
const MAX_SEEN_EVENTS = 512;
|
|
32
|
+
/**
|
|
33
|
+
* The replacement join URL carried by a suppressed 3xx, or null. The hub's
|
|
34
|
+
* `Location` carries `json=true` (#1957) because platforms that auto-follow the
|
|
35
|
+
* redirect need it; this client re-appends nothing, so the parameter is dropped
|
|
36
|
+
* here rather than persisted into the next signaling client's join URL. A
|
|
37
|
+
* relative or unparseable target yields null, which the caller treats as "no
|
|
38
|
+
* replacement named" — never as a hop to a nonexistent tray.
|
|
39
|
+
*/
|
|
40
|
+
export function redirectLocation(status, location) {
|
|
41
|
+
if (status < 300 || status >= 400 || !location)
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const url = new URL(location);
|
|
45
|
+
url.searchParams.delete('json');
|
|
46
|
+
return url.toString();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
32
52
|
/** Minimal tray follower-bootstrap signalling client (mirrors slicc-cli's
|
|
33
53
|
* `internal/signaling`): POSTs join/poll/answer/ice to the join URL. */
|
|
34
54
|
export class TrayFollowerSignaling {
|
|
@@ -52,16 +72,24 @@ export class TrayFollowerSignaling {
|
|
|
52
72
|
/**
|
|
53
73
|
* Attach to the tray. Unlike poll/answer/ice, this tolerates a non-OK status
|
|
54
74
|
* and returns the decoded body: the tray signals `TRAY_SUPERSEDED` with an
|
|
55
|
-
* HTTP
|
|
56
|
-
* elected/connected) can also arrive on a
|
|
57
|
-
* decoding — as `post()` does — would strand
|
|
58
|
-
* `attachWithRedirects` interprets `result.code` /
|
|
75
|
+
* HTTP 308 + a replacement `joinUrl` (409 on hubs that predate #1957), and
|
|
76
|
+
* `wait` plans (leader not yet elected/connected) can also arrive on a
|
|
77
|
+
* non-2xx status. Throwing before decoding — as `post()` does — would strand
|
|
78
|
+
* the follower on both. `attachWithRedirects` interprets `result.code` /
|
|
79
|
+
* `result.action`.
|
|
80
|
+
*
|
|
81
|
+
* `redirect: 'manual'` keeps the supersede hop ours: undici surfaces the 308
|
|
82
|
+
* itself, headers intact, so `attachWithRedirects` keeps its own hop bound
|
|
83
|
+
* and reconstructs its signaling client against the replacement. Letting
|
|
84
|
+
* undici follow it instead would connect but leave `this.signaling` pointed
|
|
85
|
+
* at the dead tray, re-hopping on every reconnect for the rest of the run.
|
|
59
86
|
*/
|
|
60
87
|
async attach(controllerId, runtime) {
|
|
61
88
|
const res = await this.fetchImpl(this.joinUrl, {
|
|
62
89
|
method: 'POST',
|
|
63
90
|
headers: { 'content-type': 'application/json' },
|
|
64
91
|
body: JSON.stringify({ controllerId, runtime }),
|
|
92
|
+
redirect: 'manual',
|
|
65
93
|
signal: AbortSignal.timeout(SIGNALLING_TIMEOUT_MS),
|
|
66
94
|
});
|
|
67
95
|
let body = {};
|
|
@@ -77,7 +105,10 @@ export class TrayFollowerSignaling {
|
|
|
77
105
|
return {
|
|
78
106
|
status: res.status,
|
|
79
107
|
body,
|
|
80
|
-
|
|
108
|
+
// The link is preferred over `Location`: it is the canonical join URL,
|
|
109
|
+
// while `Location` carries the hub's `json=true` probe parameter (#1957).
|
|
110
|
+
supersededByJoinUrl: successorVersionFromLinkHeader(res.headers.get('Link')) ??
|
|
111
|
+
redirectLocation(res.status, res.headers.get('Location')),
|
|
81
112
|
};
|
|
82
113
|
}
|
|
83
114
|
poll(controllerId, bootstrapId, cursor) {
|
|
@@ -134,10 +165,11 @@ export class ElectronTrayFollower {
|
|
|
134
165
|
/**
|
|
135
166
|
* Attach to the tray, resolving the non-terminal attach outcomes the worker
|
|
136
167
|
* returns before a bootstrap is available:
|
|
137
|
-
* - superseded (HTTP
|
|
138
|
-
* header
|
|
139
|
-
*
|
|
140
|
-
*
|
|
168
|
+
* - superseded (HTTP 308 + `Location`, plus a `successor-version` `Link`
|
|
169
|
+
* header and a `joinUrl` in the body; 409 on hubs that predate #1957): the
|
|
170
|
+
* leader reconnected onto a fresh tray — follow the redirect (bounded
|
|
171
|
+
* hops). Any one of the three is enough, so a body shape this client does
|
|
172
|
+
* not recognize is not a dead end (#1957).
|
|
141
173
|
* - `wait` (leader not yet elected/connected, carries `retryAfterMs`): sleep
|
|
142
174
|
* then re-attach (bounded), as the shared Swift/Go followers do — otherwise
|
|
143
175
|
* a follower that raced leader election resolves "started" but is never
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch configured hostfs mount roots and broadcast `hostfs_invalidate`
|
|
3
|
+
* over `/licks-ws` so the webapp can drop RemoteMountCache keys when the
|
|
4
|
+
* OS changes a file outside SLICC (Finder, another editor, git on the host).
|
|
5
|
+
*
|
|
6
|
+
* Uses `fs.watch({ recursive: true })` (Node ≥ 19.1 on Linux; long-supported
|
|
7
|
+
* on macOS/Windows). Events are debounced per mount and coalesced into one
|
|
8
|
+
* broadcast; a storm larger than {@link MAX_PATHS_PER_EVENT} clears the whole
|
|
9
|
+
* mount cache instead of shipping a huge path list.
|
|
10
|
+
*/
|
|
11
|
+
import { watch } from 'fs';
|
|
12
|
+
import type { HostMountRoot } from './hostfs.js';
|
|
13
|
+
/** Coalesce bursty FSEvents into one WS message. */
|
|
14
|
+
export declare const HOSTFS_WATCH_DEBOUNCE_MS = 75;
|
|
15
|
+
/**
|
|
16
|
+
* Above this many distinct relative paths in one debounce window, broadcast
|
|
17
|
+
* an empty `paths` list (= clear the whole mount cache).
|
|
18
|
+
*/
|
|
19
|
+
export declare const MAX_PATHS_PER_EVENT = 64;
|
|
20
|
+
export interface HostfsInvalidateBroadcast {
|
|
21
|
+
type: 'hostfs_invalidate';
|
|
22
|
+
mount: string;
|
|
23
|
+
paths: string[];
|
|
24
|
+
timestamp: string;
|
|
25
|
+
}
|
|
26
|
+
export interface HostFsWatchHandle {
|
|
27
|
+
/** Stop every watcher. Idempotent. */
|
|
28
|
+
stop(): void;
|
|
29
|
+
}
|
|
30
|
+
export interface StartHostFsWatchersOptions {
|
|
31
|
+
debounceMs?: number;
|
|
32
|
+
maxPathsPerEvent?: number;
|
|
33
|
+
/** Injectable for tests. */
|
|
34
|
+
watchFn?: typeof watch;
|
|
35
|
+
setTimeoutFn?: typeof setTimeout;
|
|
36
|
+
clearTimeoutFn?: typeof clearTimeout;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Map an `fs.watch` filename (relative to the watched root, or absolute on
|
|
40
|
+
* some platforms) onto a mount-relative POSIX path. Empty string asks the
|
|
41
|
+
* client to clear the mount when the event cannot be attributed safely.
|
|
42
|
+
*/
|
|
43
|
+
export declare function toMountRelativePath(root: string, filename: string | null | undefined): string | null;
|
|
44
|
+
export declare function buildHostfsInvalidateEvent(mount: string, paths: Iterable<string>, maxPaths?: number): HostfsInvalidateBroadcast;
|
|
45
|
+
/**
|
|
46
|
+
* Start one recursive watcher per mount root. Failures to open a watcher
|
|
47
|
+
* are logged and skipped — a missing watch must not take the /api surface down.
|
|
48
|
+
*/
|
|
49
|
+
export declare function startHostFsWatchers(roots: readonly HostMountRoot[], broadcast: (event: HostfsInvalidateBroadcast) => void, opts?: StartHostFsWatchersOptions): HostFsWatchHandle;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch configured hostfs mount roots and broadcast `hostfs_invalidate`
|
|
3
|
+
* over `/licks-ws` so the webapp can drop RemoteMountCache keys when the
|
|
4
|
+
* OS changes a file outside SLICC (Finder, another editor, git on the host).
|
|
5
|
+
*
|
|
6
|
+
* Uses `fs.watch({ recursive: true })` (Node ≥ 19.1 on Linux; long-supported
|
|
7
|
+
* on macOS/Windows). Events are debounced per mount and coalesced into one
|
|
8
|
+
* broadcast; a storm larger than {@link MAX_PATHS_PER_EVENT} clears the whole
|
|
9
|
+
* mount cache instead of shipping a huge path list.
|
|
10
|
+
*/
|
|
11
|
+
import { watch } from 'fs';
|
|
12
|
+
import { relative, sep } from 'path';
|
|
13
|
+
/** Coalesce bursty FSEvents into one WS message. */
|
|
14
|
+
export const HOSTFS_WATCH_DEBOUNCE_MS = 75;
|
|
15
|
+
/**
|
|
16
|
+
* Above this many distinct relative paths in one debounce window, broadcast
|
|
17
|
+
* an empty `paths` list (= clear the whole mount cache).
|
|
18
|
+
*/
|
|
19
|
+
export const MAX_PATHS_PER_EVENT = 64;
|
|
20
|
+
/**
|
|
21
|
+
* Map an `fs.watch` filename (relative to the watched root, or absolute on
|
|
22
|
+
* some platforms) onto a mount-relative POSIX path. Empty string asks the
|
|
23
|
+
* client to clear the mount when the event cannot be attributed safely.
|
|
24
|
+
*/
|
|
25
|
+
export function toMountRelativePath(root, filename) {
|
|
26
|
+
if (filename == null || filename.length === 0)
|
|
27
|
+
return '';
|
|
28
|
+
const abs = filename.startsWith(root) ? filename : `${root}${sep}${filename}`;
|
|
29
|
+
let rel = relative(root, abs);
|
|
30
|
+
if (rel === '')
|
|
31
|
+
return '';
|
|
32
|
+
// `..data` is a valid child name; only a whole `..` segment escapes.
|
|
33
|
+
// Clear on a true escape rather than dropping the invalidation.
|
|
34
|
+
if (rel === '..' || rel.startsWith(`..${sep}`))
|
|
35
|
+
return '';
|
|
36
|
+
// Watchers may report Windows separators; the VFS / cache keys are POSIX.
|
|
37
|
+
rel = rel.split(sep).join('/');
|
|
38
|
+
return rel;
|
|
39
|
+
}
|
|
40
|
+
export function buildHostfsInvalidateEvent(mount, paths, maxPaths = MAX_PATHS_PER_EVENT) {
|
|
41
|
+
const unique = [...new Set(paths)];
|
|
42
|
+
// Empty string in the set means "unknown / whole root" — clear the mount.
|
|
43
|
+
if (unique.includes('') || unique.length > maxPaths) {
|
|
44
|
+
return {
|
|
45
|
+
type: 'hostfs_invalidate',
|
|
46
|
+
mount,
|
|
47
|
+
paths: [],
|
|
48
|
+
timestamp: new Date().toISOString(),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
type: 'hostfs_invalidate',
|
|
53
|
+
mount,
|
|
54
|
+
paths: unique,
|
|
55
|
+
timestamp: new Date().toISOString(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Start one recursive watcher per mount root. Failures to open a watcher
|
|
60
|
+
* are logged and skipped — a missing watch must not take the /api surface down.
|
|
61
|
+
*/
|
|
62
|
+
export function startHostFsWatchers(roots, broadcast, opts = {}) {
|
|
63
|
+
const debounceMs = opts.debounceMs ?? HOSTFS_WATCH_DEBOUNCE_MS;
|
|
64
|
+
const maxPaths = opts.maxPathsPerEvent ?? MAX_PATHS_PER_EVENT;
|
|
65
|
+
const watchFn = opts.watchFn ?? watch;
|
|
66
|
+
const setTimer = opts.setTimeoutFn ?? setTimeout;
|
|
67
|
+
const clearTimer = opts.clearTimeoutFn ?? clearTimeout;
|
|
68
|
+
const watchers = [];
|
|
69
|
+
const pending = new Map();
|
|
70
|
+
const timers = new Map();
|
|
71
|
+
const flush = (mount) => {
|
|
72
|
+
timers.delete(mount);
|
|
73
|
+
const paths = pending.get(mount);
|
|
74
|
+
pending.delete(mount);
|
|
75
|
+
if (!paths || paths.size === 0)
|
|
76
|
+
return;
|
|
77
|
+
broadcast(buildHostfsInvalidateEvent(mount, paths, maxPaths));
|
|
78
|
+
};
|
|
79
|
+
const note = (mount, rel) => {
|
|
80
|
+
if (rel === null)
|
|
81
|
+
return;
|
|
82
|
+
let set = pending.get(mount);
|
|
83
|
+
if (!set) {
|
|
84
|
+
set = new Set();
|
|
85
|
+
pending.set(mount, set);
|
|
86
|
+
}
|
|
87
|
+
set.add(rel);
|
|
88
|
+
const existing = timers.get(mount);
|
|
89
|
+
if (existing)
|
|
90
|
+
clearTimer(existing);
|
|
91
|
+
timers.set(mount, setTimer(() => flush(mount), debounceMs));
|
|
92
|
+
};
|
|
93
|
+
for (const { path: mount, root } of roots) {
|
|
94
|
+
try {
|
|
95
|
+
const watcher = watchFn(root, { recursive: true }, (_event, filename) => {
|
|
96
|
+
note(mount, toMountRelativePath(root, filename));
|
|
97
|
+
});
|
|
98
|
+
watcher.on('error', (err) => {
|
|
99
|
+
console.warn(`[hostfs-watch] watcher error for ${mount}:`, err);
|
|
100
|
+
});
|
|
101
|
+
watchers.push(watcher);
|
|
102
|
+
console.log(`[hostfs-watch] watching ${root} → ${mount}`);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.warn(`[hostfs-watch] failed to watch ${root} (${mount}):`, err instanceof Error ? err.message : err);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
stop() {
|
|
110
|
+
for (const t of timers.values())
|
|
111
|
+
clearTimer(t);
|
|
112
|
+
timers.clear();
|
|
113
|
+
pending.clear();
|
|
114
|
+
for (const w of watchers) {
|
|
115
|
+
try {
|
|
116
|
+
w.close();
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* already closed */
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
watchers.length = 0;
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -76,7 +76,7 @@ export declare const HOSTFS_MAX_BODY_BYTES: number;
|
|
|
76
76
|
* to not-yet-existing paths are still validated.
|
|
77
77
|
*/
|
|
78
78
|
export declare function resolveWithinRoot(root: string, relPath: string): Promise<string>;
|
|
79
|
-
interface HostMountRoot {
|
|
79
|
+
export interface HostMountRoot {
|
|
80
80
|
/** SLICC target path, e.g. /mnt/project. */
|
|
81
81
|
path: string;
|
|
82
82
|
/** realpath()'d OS root. */
|
|
@@ -167,4 +167,3 @@ export declare function isHostFsStableBodyRequest(req: {
|
|
|
167
167
|
* per-op routes — so every error this route emits MUST carry a `code`.
|
|
168
168
|
*/
|
|
169
169
|
export declare function registerHostFsRoutes(app: Express, roots: readonly HostMountRoot[]): void;
|
|
170
|
-
export {};
|
|
@@ -31,6 +31,7 @@ import { shouldParseGlobalJson } from './fetch-proxy-headers.js';
|
|
|
31
31
|
import { FileLogger } from './file-logger.js';
|
|
32
32
|
import { registerHostedBootstrapEndpoint } from './hosted-bootstrap.js';
|
|
33
33
|
import { registerHostFsRoutes, resolveHostMountRoots } from './hostfs.js';
|
|
34
|
+
import { startHostFsWatchers } from './hostfs-watch.js';
|
|
34
35
|
import { createBridgeServer } from './http-keepalive.js';
|
|
35
36
|
import { runInstallCli } from './install-cli.js';
|
|
36
37
|
import { resolveCliBrowserLaunchUrl } from './launch-url.js';
|
|
@@ -1149,6 +1150,9 @@ async function main() {
|
|
|
1149
1150
|
// Roots are resolved once at startup; a folder created later needs a restart.
|
|
1150
1151
|
state.hostMountRoots = await resolveHostMountRoots(RUNTIME_FLAGS.mounts);
|
|
1151
1152
|
registerHostFsRoutes(app, state.hostMountRoots);
|
|
1153
|
+
const hostFsWatch = startHostFsWatchers(state.hostMountRoots, (event) => {
|
|
1154
|
+
broadcastLickEvent(event);
|
|
1155
|
+
});
|
|
1152
1156
|
// Sudo approval endpoint — raises a native OS dialog / TTY prompt from this
|
|
1153
1157
|
// trusted process so the in-browser agent can request, but never fabricate,
|
|
1154
1158
|
// an approval. Loopback-only; selects a backend by environment at call time.
|
|
@@ -1176,11 +1180,15 @@ async function main() {
|
|
|
1176
1180
|
wss,
|
|
1177
1181
|
server,
|
|
1178
1182
|
});
|
|
1183
|
+
const shutdown = async () => {
|
|
1184
|
+
hostFsWatch.stop();
|
|
1185
|
+
await gracefulShutdown();
|
|
1186
|
+
};
|
|
1179
1187
|
process.on('SIGINT', () => {
|
|
1180
|
-
void
|
|
1188
|
+
void shutdown();
|
|
1181
1189
|
});
|
|
1182
1190
|
process.on('SIGTERM', () => {
|
|
1183
|
-
void
|
|
1191
|
+
void shutdown();
|
|
1184
1192
|
});
|
|
1185
1193
|
process.on('exit', () => {
|
|
1186
1194
|
// Synchronous last-resort cleanup — kill the launched browser if still running.
|