sliccy 6.101.1 → 6.103.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 +24 -0
- package/dist/node-server/_shared/tray-signaling.d.ts.map +1 -1
- package/dist/node-server/_shared/tray-signaling.js +96 -0
- package/dist/node-server/_shared/tray-signaling.js.map +1 -1
- package/dist/node-server/cdp-proxy/session-url-tracker.js +20 -13
- package/dist/node-server/electron-tray-follower.d.ts +33 -7
- package/dist/node-server/electron-tray-follower.js +31 -15
- package/dist/ui/.vite/manifest.json +115 -115
- package/dist/ui/assets/SKILL-DP0GgPyN.js +1 -0
- package/dist/ui/assets/{account-store-CntfYzBF.js → account-store-2HXGXOYw.js} +1 -1
- package/dist/ui/assets/{account-store-C97vJEN0.js → account-store-CYDvIaVu.js} +1 -1
- package/dist/ui/assets/{adobe-Dkp9L7pv.js → adobe-CHrMcyJR.js} +1 -1
- package/dist/ui/assets/{adobe-CeAg2HEh.js → adobe-Cxnjdp-b.js} +1 -1
- package/dist/ui/assets/{agent-panels-Dr4KjWQ-.js → agent-panels-CQMn613l.js} +1 -1
- package/dist/ui/assets/{apply-layout-BOsWGxeK.js → apply-layout-CKPvqJ72.js} +1 -1
- package/dist/ui/assets/{apps-U49ebmgF.js → apps-D2Okb4k7.js} +1 -1
- package/dist/ui/assets/{azure-openai-B7nS5Ti7.js → azure-openai-1aocb0H-.js} +1 -1
- package/dist/ui/assets/{azure-openai-Dr5sidwv.js → azure-openai-BuMIS7Bh.js} +1 -1
- package/dist/ui/assets/{cerebras-Bx63U-9b.js → cerebras-BuoMzGgu.js} +1 -1
- package/dist/ui/assets/{cerebras-B0b0IVne.js → cerebras-DXr-x7LQ.js} +1 -1
- package/dist/ui/assets/{connect-surface-vj0GWMbl.js → connect-surface-GtTP-1_-.js} +1 -1
- package/dist/ui/assets/{cost-command-CwOkolbd.js → cost-command-DNKXuXCE.js} +651 -655
- package/dist/ui/assets/{fs-BXQQMgjV.js → fs-C3c6w9-a.js} +1 -1
- package/dist/ui/assets/{fs-EF7s5cZ3.js → fs-DXCuzgSg.js} +2 -2
- package/dist/ui/assets/{github-CTANRyWo.js → github-BLj7VHTt.js} +1 -1
- package/dist/ui/assets/{github-SPr6bgB9.js → github-BnuhP2-n.js} +2 -2
- package/dist/ui/assets/{github-copilot-BrLNm9qK.js → github-copilot-BXoJbpP6.js} +1 -1
- package/dist/ui/assets/{github-copilot-CLi2610v.js → github-copilot-CYUxLKSB.js} +1 -1
- package/dist/ui/assets/{github-install-0LVgxS2P.js → github-install-BD6dt_G9.js} +1 -1
- package/dist/ui/assets/{github-zip-C68AkhMo.js → github-zip-B02OE0Yl.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-CczBlwxr.js → js-realm-worker-PKhqt2dx.js} +1 -1
- package/dist/ui/assets/{kernel-worker-Dbbc4Nw3.js → kernel-worker-D63pfX5V.js} +649 -676
- package/dist/ui/assets/{local-llm-BqTU1xEx.js → local-llm-ChjdFyYM.js} +1 -1
- package/dist/ui/assets/{local-llm-D1uZ2z05.js → local-llm-diVugIpU.js} +1 -1
- package/dist/ui/assets/{main-DbJP-p3V.js → main-C5AdMvBs.js} +3 -3
- package/dist/ui/assets/{mount-W9hByO4X.js → mount-CpogDGkb.js} +2 -2
- package/dist/ui/assets/{mount-B-isX-s6.js → mount-DpIXrEDK.js} +1 -1
- package/dist/ui/assets/{mount-recovery-BtHx_SJH.js → mount-recovery-kHgQPTiP.js} +1 -1
- package/dist/ui/assets/{new-session-B25zqIOm.js → new-session-CLDTP1Ha.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-CscH2C9J.js → oauth-bootstrap-Q4wu8L1N.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-C6cJJCUu.js → onboarding-orchestrator-BDPENm4z.js} +1 -1
- package/dist/ui/assets/{openai-codex-DHlj3M4_.js → openai-codex-D6b0qLLD.js} +1 -1
- package/dist/ui/assets/{openai-codex-MzpM98H3.js → openai-codex-DzZQfBk5.js} +1 -1
- package/dist/ui/assets/{openrouter-4nGpjjzM.js → openrouter-C1YZRCjk.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CXpxDjDX.js → openrouter-oauth-1wD51O1n.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-0TM2wbBd.js → openrouter-oauth-DDfoy5tV.js} +1 -1
- package/dist/ui/assets/{openrouter-B2Ir6B4g.js → openrouter-r_4mAy03.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Ct0ZZJmW.js → panel-rpc-handlers-CvI3UzqY.js} +2 -2
- package/dist/ui/assets/{panelize-shell-CMqgwhF6.js → panelize-shell-ooopfPDo.js} +1 -1
- package/dist/ui/assets/pdf-raster-BWk6ezTX.js +1 -0
- package/dist/ui/assets/pdf-text-BUC5zyMg.js +3 -0
- package/dist/ui/assets/{provider-BmR-2STy.js → provider-B6wQUVzw.js} +2 -2
- package/dist/ui/assets/{provider-B3gnKD3U.js → provider-Bjs--JSB.js} +1 -1
- package/dist/ui/assets/{provider-settings-3v1SLrx_.js → provider-settings-BJNC5iLZ.js} +1 -1
- package/dist/ui/assets/provider-store-access-DVAREFJY.js +1 -0
- package/dist/ui/assets/provider-store-access-Dz6h3snO.js +1 -0
- package/dist/ui/assets/{providers-UIfjUiZc.js → providers-Cu3X40mC.js} +1 -1
- package/dist/ui/assets/{providers-HEyCI32d.js → providers-JIVwDwZk.js} +2 -2
- package/dist/ui/assets/{quick-llm-DXF8xtap.js → quick-llm-CArBV9V1.js} +1 -1
- package/dist/ui/assets/{recovery-screen-Ctl2y8qI.js → recovery-screen-DfmBaRa7.js} +1 -1
- package/dist/ui/assets/{redirect-uri-BRFRGI32.js → redirect-uri-BPQVK-PM.js} +1 -1
- package/dist/ui/assets/run-BVzzZSqz.js +27 -0
- package/dist/ui/assets/run-ChkY2Agc.js +43 -0
- package/dist/ui/assets/{run-DOmQDMJw.js → run-ox9f-UA4.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-pAaE2Snh.js → setup-feature-flags-remote-DKlJoNwI.js} +1 -1
- package/dist/ui/assets/sidecar-repair-BnFmspwN.js +1 -0
- package/dist/ui/assets/{skills-CGgjANFO.js → skills-5Rwu9u2J.js} +1 -1
- package/dist/ui/assets/slicc-version-CYVS1TNs.js +1 -0
- package/dist/ui/assets/{state-bxLAn9os.js → state-iYgYrNhF.js} +1 -1
- package/dist/ui/assets/{store-C5SaXP5j.js → store-Bk60qy3q.js} +1 -1
- package/dist/ui/assets/store-CcotY5td.js +1 -0
- package/dist/ui/assets/subcommand-help-CgO7wRS5.js +5 -0
- package/dist/ui/assets/{sudo-BuRow2bG.js → sudo-C2uQCGwW.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CZv9sumB.js → sync-dialog-bS8BMYIL.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CfLdi-Jb.js → upgrade-detection-BKMvHwKf.js} +1 -1
- package/dist/ui/assets/{voice-reply-CX9GmBBw.js → voice-reply-C8UI0Ce8.js} +1 -1
- package/dist/ui/assets/{wc-attach-D9NjnHvA.js → wc-attach-DWUyd7Z7.js} +2 -2
- package/dist/ui/assets/{wc-extension-DIidsU9P.js → wc-extension-C_tUrkba.js} +2 -2
- package/dist/ui/assets/{wc-float-label-CJTX6rxt.js → wc-float-label-BoQtQSKG.js} +1 -1
- package/dist/ui/assets/{wc-floatbar-online-BJcbSY5l.js → wc-floatbar-online-hDMwVEXN.js} +1 -1
- package/dist/ui/assets/wc-follower-C8xn5naI.js +17 -0
- package/dist/ui/assets/wc-follower-oauth-DnEDcXHB.js +5 -0
- package/dist/ui/assets/{wc-live-ViP7v-LE.js → wc-live-8-VP4Bs8.js} +6 -6
- package/dist/ui/assets/{wc-nav-CPtE0ImS.js → wc-nav-CdVB38ne.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DH00ItOu.js → wc-onboarding-Cjhf5ixM.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-VRBvIiWx.js → wc-placeholder-IZUYwkqB.js} +3 -3
- package/dist/ui/assets/{wc-settings-2EZjTQeV.js → wc-settings-BqCG_1e-.js} +3 -3
- package/dist/ui/assets/{wc-shell-DlahLM2h.js → wc-shell-DvC3EILT.js} +2 -2
- package/dist/ui/assets/{wc-shortcut-config-DdWSJaVW.js → wc-shortcut-config-CqO0bcS1.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-BFlRYOq5.js → wc-sprinkles-CK7mLngw.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-CY-1G_xq.js → wc-transcript-export-DwjzNi7q.js} +2 -2
- package/dist/ui/assets/wc-tray-l9Pd1LLv.js +2 -0
- package/dist/ui/assets/welcome-detection-CGlwAABD.js +1 -0
- package/dist/ui/assets/{xai-grok-Ck_v6DtB.js → xai-grok-DTdMI5a9.js} +1 -1
- package/dist/ui/assets/{xai-grok-Dz5RkqOJ.js → xai-grok-ZlLBti1J.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-Bd5ykLEh.js +0 -1
- package/dist/ui/assets/provider-store-access-Bh1CKPAA.js +0 -1
- package/dist/ui/assets/provider-store-access-CDLm18nl.js +0 -1
- package/dist/ui/assets/sidecar-repair-yDUlrT7H.js +0 -1
- package/dist/ui/assets/slicc-version-BD6EPYH2.js +0 -1
- package/dist/ui/assets/store-DwbI72ZD.js +0 -1
- package/dist/ui/assets/wc-follower-6gQWiuwL.js +0 -17
- package/dist/ui/assets/wc-follower-oauth-m-7p53zR.js +0 -5
- package/dist/ui/assets/wc-tray-BJaQoWtZ.js +0 -2
- package/dist/ui/assets/welcome-detection-DlLRyaPY.js +0 -1
|
@@ -314,4 +314,28 @@ export interface FollowerBootstrapResponse {
|
|
|
314
314
|
events: TrayBootstrapEvent[];
|
|
315
315
|
iceServers?: TurnIceServer[];
|
|
316
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* RFC 5829 relation the tray hub stamps on a superseded tray's response,
|
|
319
|
+
* pointing at the replacement tray's join URL. See the worker's
|
|
320
|
+
* `supersededLinkHeaders` (`packages/cloudflare-worker/src/links.ts`) and
|
|
321
|
+
* `https://www.sliccy.ai/rel/successor-version`.
|
|
322
|
+
*/
|
|
323
|
+
export declare const SUCCESSOR_VERSION_REL = "successor-version";
|
|
324
|
+
/**
|
|
325
|
+
* Pull the `successor-version` target out of an RFC 8288 `Link` header.
|
|
326
|
+
*
|
|
327
|
+
* Deliberately narrow: the tray hub emits one well-formed link plus its
|
|
328
|
+
* standard rel set, so this handles the shapes that actually arrive —
|
|
329
|
+
* comma-separated link-values (commas inside quoted strings preserved),
|
|
330
|
+
* `rel=token` and `rel="quoted token-list"`, and multiple header instances
|
|
331
|
+
* joined by `,` or `\n` — rather than reimplementing the full grammar. The
|
|
332
|
+
* webapp's `src/net/link-header.ts` is the complete parser; it can't live here
|
|
333
|
+
* because shared-ts must not depend on webapp, and this contract's home is
|
|
334
|
+
* next to the response type it annotates.
|
|
335
|
+
*
|
|
336
|
+
* Returns the first matching absolute URL, or null. Relative references are
|
|
337
|
+
* rejected: a replacement tray is always absolute, and resolving one against
|
|
338
|
+
* the wrong base would dial an unusable address.
|
|
339
|
+
*/
|
|
340
|
+
export declare function successorVersionFromLinkHeader(header: string | string[] | null | undefined): string | null;
|
|
317
341
|
//# sourceMappingURL=tray-signaling.d.ts.map
|
|
@@ -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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"}
|
|
@@ -19,4 +19,100 @@
|
|
|
19
19
|
export const TRAY_BOOTSTRAP_TIMEOUT_MS = 20_000;
|
|
20
20
|
export const TRAY_BOOTSTRAP_MAX_RETRIES = 3;
|
|
21
21
|
export const TRAY_BOOTSTRAP_RETRY_AFTER_MS = 1_000;
|
|
22
|
+
/**
|
|
23
|
+
* RFC 5829 relation the tray hub stamps on a superseded tray's response,
|
|
24
|
+
* pointing at the replacement tray's join URL. See the worker's
|
|
25
|
+
* `supersededLinkHeaders` (`packages/cloudflare-worker/src/links.ts`) and
|
|
26
|
+
* `https://www.sliccy.ai/rel/successor-version`.
|
|
27
|
+
*/
|
|
28
|
+
export const SUCCESSOR_VERSION_REL = 'successor-version';
|
|
29
|
+
/**
|
|
30
|
+
* Pull the `successor-version` target out of an RFC 8288 `Link` header.
|
|
31
|
+
*
|
|
32
|
+
* Deliberately narrow: the tray hub emits one well-formed link plus its
|
|
33
|
+
* standard rel set, so this handles the shapes that actually arrive —
|
|
34
|
+
* comma-separated link-values (commas inside quoted strings preserved),
|
|
35
|
+
* `rel=token` and `rel="quoted token-list"`, and multiple header instances
|
|
36
|
+
* joined by `,` or `\n` — rather than reimplementing the full grammar. The
|
|
37
|
+
* webapp's `src/net/link-header.ts` is the complete parser; it can't live here
|
|
38
|
+
* because shared-ts must not depend on webapp, and this contract's home is
|
|
39
|
+
* next to the response type it annotates.
|
|
40
|
+
*
|
|
41
|
+
* Returns the first matching absolute URL, or null. Relative references are
|
|
42
|
+
* rejected: a replacement tray is always absolute, and resolving one against
|
|
43
|
+
* the wrong base would dial an unusable address.
|
|
44
|
+
*/
|
|
45
|
+
export function successorVersionFromLinkHeader(header) {
|
|
46
|
+
if (header == null)
|
|
47
|
+
return null;
|
|
48
|
+
const raw = (Array.isArray(header) ? header.join(', ') : header).replace(/\n/g, ', ');
|
|
49
|
+
for (const value of splitOutsideQuotes(raw, ',')) {
|
|
50
|
+
const uriEnd = value.indexOf('>');
|
|
51
|
+
if (!value.startsWith('<') || uriEnd === -1)
|
|
52
|
+
continue;
|
|
53
|
+
const target = value.slice(1, uriEnd).trim();
|
|
54
|
+
if (!hasSuccessorVersionRel(value.slice(uriEnd + 1)))
|
|
55
|
+
continue;
|
|
56
|
+
try {
|
|
57
|
+
// Absolute-only: `new URL` throws on a bare relative reference.
|
|
58
|
+
return new URL(target).toString();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Split on `sep` at the top level — commas/semicolons inside a quoted-string
|
|
68
|
+
* or an angle-bracketed URI-reference belong to the value, not the grammar.
|
|
69
|
+
* (A `Link` target may legitimately contain both: `<https://a/b;c?d,e>`.)
|
|
70
|
+
*/
|
|
71
|
+
function splitOutsideQuotes(input, sep) {
|
|
72
|
+
const out = [];
|
|
73
|
+
let start = 0;
|
|
74
|
+
let inQuotes = false;
|
|
75
|
+
let inAngle = false;
|
|
76
|
+
for (let i = 0; i < input.length; i++) {
|
|
77
|
+
const ch = input[i];
|
|
78
|
+
if (inQuotes) {
|
|
79
|
+
if (ch === '\\')
|
|
80
|
+
i++;
|
|
81
|
+
else if (ch === '"')
|
|
82
|
+
inQuotes = false;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (ch === '"')
|
|
86
|
+
inQuotes = true;
|
|
87
|
+
else if (ch === '<')
|
|
88
|
+
inAngle = true;
|
|
89
|
+
else if (ch === '>')
|
|
90
|
+
inAngle = false;
|
|
91
|
+
else if (ch === sep && !inAngle) {
|
|
92
|
+
out.push(input.slice(start, i).trim());
|
|
93
|
+
start = i + 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
out.push(input.slice(start).trim());
|
|
97
|
+
return out.filter(Boolean);
|
|
98
|
+
}
|
|
99
|
+
/** True when a link-value's parameter list declares `rel=successor-version`. */
|
|
100
|
+
function hasSuccessorVersionRel(params) {
|
|
101
|
+
for (const param of splitOutsideQuotes(params, ';')) {
|
|
102
|
+
const eq = param.indexOf('=');
|
|
103
|
+
if (eq === -1)
|
|
104
|
+
continue;
|
|
105
|
+
if (param.slice(0, eq).trim().toLowerCase() !== 'rel')
|
|
106
|
+
continue;
|
|
107
|
+
const value = param
|
|
108
|
+
.slice(eq + 1)
|
|
109
|
+
.trim()
|
|
110
|
+
.replace(/^"(.*)"$/s, '$1');
|
|
111
|
+
// `rel` is a space-separated list of relation types, matched case-insensitively.
|
|
112
|
+
if (value.split(/\s+/).some((tok) => tok.toLowerCase() === SUCCESSOR_VERSION_REL)) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
22
118
|
//# sourceMappingURL=tray-signaling.js.map
|
|
@@ -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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"}
|
|
@@ -17,8 +17,15 @@
|
|
|
17
17
|
* Hostname resolution is done lazily via `getHostname(sessionId)`. Empty,
|
|
18
18
|
* un-parseable, or `about:blank`-style URLs fail closed (return null).
|
|
19
19
|
*/
|
|
20
|
-
function
|
|
21
|
-
|
|
20
|
+
function asTargetInfo(v) {
|
|
21
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
22
|
+
return null;
|
|
23
|
+
return v;
|
|
24
|
+
}
|
|
25
|
+
function asFrameInfo(v) {
|
|
26
|
+
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
27
|
+
return null;
|
|
28
|
+
return v;
|
|
22
29
|
}
|
|
23
30
|
function parseHostname(url) {
|
|
24
31
|
if (!url || typeof url !== 'string')
|
|
@@ -52,14 +59,14 @@ export function createCdpSessionUrlTracker() {
|
|
|
52
59
|
const params = frame.params;
|
|
53
60
|
if (!params)
|
|
54
61
|
return;
|
|
55
|
-
const sessionId = params
|
|
62
|
+
const sessionId = params.sessionId;
|
|
56
63
|
if (typeof sessionId !== 'string')
|
|
57
64
|
return;
|
|
58
|
-
const info =
|
|
65
|
+
const info = asTargetInfo(params.targetInfo);
|
|
59
66
|
if (!info)
|
|
60
67
|
return;
|
|
61
|
-
const targetId = info
|
|
62
|
-
const url = info
|
|
68
|
+
const targetId = info.targetId;
|
|
69
|
+
const url = info.url;
|
|
63
70
|
if (typeof targetId === 'string') {
|
|
64
71
|
sessionToTarget.set(sessionId, targetId);
|
|
65
72
|
if (typeof url === 'string')
|
|
@@ -69,18 +76,18 @@ export function createCdpSessionUrlTracker() {
|
|
|
69
76
|
sessionToUrl.set(sessionId, url);
|
|
70
77
|
}
|
|
71
78
|
function handleDetached(frame) {
|
|
72
|
-
const sessionId = frame.params?.
|
|
79
|
+
const sessionId = frame.params?.sessionId;
|
|
73
80
|
if (typeof sessionId !== 'string')
|
|
74
81
|
return;
|
|
75
82
|
sessionToUrl.delete(sessionId);
|
|
76
83
|
sessionToTarget.delete(sessionId);
|
|
77
84
|
}
|
|
78
85
|
function handleTargetInfoChanged(frame) {
|
|
79
|
-
const info =
|
|
86
|
+
const info = asTargetInfo(frame.params?.targetInfo);
|
|
80
87
|
if (!info)
|
|
81
88
|
return;
|
|
82
|
-
const targetId = info
|
|
83
|
-
const url = info
|
|
89
|
+
const targetId = info.targetId;
|
|
90
|
+
const url = info.url;
|
|
84
91
|
if (typeof targetId !== 'string' || typeof url !== 'string')
|
|
85
92
|
return;
|
|
86
93
|
targetToUrl.set(targetId, url);
|
|
@@ -94,13 +101,13 @@ export function createCdpSessionUrlTracker() {
|
|
|
94
101
|
const sessionId = frame.sessionId;
|
|
95
102
|
if (typeof sessionId !== 'string')
|
|
96
103
|
return;
|
|
97
|
-
const inner =
|
|
104
|
+
const inner = asFrameInfo(frame.params?.frame);
|
|
98
105
|
if (!inner)
|
|
99
106
|
return;
|
|
100
107
|
// Only the root frame (no parentId) drives the per-tab URL.
|
|
101
|
-
if (typeof inner
|
|
108
|
+
if (typeof inner.parentId === 'string')
|
|
102
109
|
return;
|
|
103
|
-
const url = inner
|
|
110
|
+
const url = inner.url;
|
|
104
111
|
if (typeof url === 'string')
|
|
105
112
|
setSessionUrl(sessionId, url);
|
|
106
113
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type LeaderToFollowerMessage, type TrayChunkFrame } from './_shared/index.js';
|
|
1
|
+
import { type LeaderToFollowerMessage, type TrayChunkFrame, type TrayIceCandidate } from './_shared/index.js';
|
|
2
2
|
import { type FederatedCdpInspectableTarget } from './electron-federated-cdp.js';
|
|
3
3
|
/** The data-channel the leader opens; mirrors `tray-webrtc.ts`. */
|
|
4
4
|
export declare const TRAY_CONTROL_CHANNEL_LABEL = "tray-control";
|
|
@@ -9,6 +9,29 @@ interface IceServerConfig {
|
|
|
9
9
|
username?: string;
|
|
10
10
|
credential?: string;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* What the worker answers a signalling POST with, as far as this follower
|
|
14
|
+
* reads it. The full shapes are `FollowerAttachResponse` /
|
|
15
|
+
* `FollowerBootstrapResponse` in `@slicc/shared-ts`; this follower only
|
|
16
|
+
* narrows the handful of fields below, and must tolerate the rest (including
|
|
17
|
+
* an error body that carries none of them), so they stay `unknown` until a
|
|
18
|
+
* check proves otherwise.
|
|
19
|
+
*/
|
|
20
|
+
interface TraySignalingReply {
|
|
21
|
+
result?: TrayAttachResultReply;
|
|
22
|
+
iceServers?: unknown;
|
|
23
|
+
events?: unknown;
|
|
24
|
+
}
|
|
25
|
+
/** The attach outcome, before any field has been verified. */
|
|
26
|
+
interface TrayAttachResultReply {
|
|
27
|
+
action?: unknown;
|
|
28
|
+
code?: unknown;
|
|
29
|
+
retryAfterMs?: unknown;
|
|
30
|
+
joinUrl?: unknown;
|
|
31
|
+
bootstrap?: {
|
|
32
|
+
bootstrapId?: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
12
35
|
/** Minimal tray follower-bootstrap signalling client (mirrors slicc-cli's
|
|
13
36
|
* `internal/signaling`): POSTs join/poll/answer/ice to the join URL. */
|
|
14
37
|
export declare class TrayFollowerSignaling {
|
|
@@ -26,11 +49,12 @@ export declare class TrayFollowerSignaling {
|
|
|
26
49
|
*/
|
|
27
50
|
attach(controllerId: string, runtime: string): Promise<{
|
|
28
51
|
status: number;
|
|
29
|
-
body:
|
|
52
|
+
body: TraySignalingReply;
|
|
53
|
+
supersededByJoinUrl: string | null;
|
|
30
54
|
}>;
|
|
31
|
-
poll(controllerId: string, bootstrapId: string, cursor: number): Promise<
|
|
32
|
-
sendAnswer(controllerId: string, bootstrapId: string, sdp: string): Promise<
|
|
33
|
-
sendIceCandidate(controllerId: string, bootstrapId: string, candidate:
|
|
55
|
+
poll(controllerId: string, bootstrapId: string, cursor: number): Promise<TraySignalingReply>;
|
|
56
|
+
sendAnswer(controllerId: string, bootstrapId: string, sdp: string): Promise<TraySignalingReply>;
|
|
57
|
+
sendIceCandidate(controllerId: string, bootstrapId: string, candidate: TrayIceCandidate): Promise<TraySignalingReply>;
|
|
34
58
|
}
|
|
35
59
|
export interface ElectronTrayFollowerOptions {
|
|
36
60
|
/** Tray join URL (the slicc-server's `--join` value). */
|
|
@@ -78,8 +102,10 @@ export declare class ElectronTrayFollower {
|
|
|
78
102
|
/**
|
|
79
103
|
* Attach to the tray, resolving the non-terminal attach outcomes the worker
|
|
80
104
|
* returns before a bootstrap is available:
|
|
81
|
-
* -
|
|
82
|
-
* fresh tray — follow the redirect
|
|
105
|
+
* - superseded (HTTP 409 + `joinUrl`, and/or a `successor-version` `Link`
|
|
106
|
+
* header): the leader reconnected onto a fresh tray — follow the redirect
|
|
107
|
+
* (bounded hops). The link alone is enough, so a body shape this client
|
|
108
|
+
* does not recognize is not a dead end (#1957).
|
|
83
109
|
* - `wait` (leader not yet elected/connected, carries `retryAfterMs`): sleep
|
|
84
110
|
* then re-attach (bounded), as the shared Swift/Go followers do — otherwise
|
|
85
111
|
* a follower that raced leader election resolves "started" but is never
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// `slicc-cli`'s Go follower (same signalling + `hello` handshake + data-channel
|
|
11
11
|
// label), reusing the shared wire types.
|
|
12
12
|
import { randomUUID } from 'node:crypto';
|
|
13
|
-
import { isTrayChunkFrame, TRAY_MAX_PENDING_REASSEMBLIES, TRAY_SYNC_PROTOCOL_VERSION, } from './_shared/index.js';
|
|
13
|
+
import { isTrayChunkFrame, successorVersionFromLinkHeader, TRAY_MAX_PENDING_REASSEMBLIES, TRAY_SYNC_PROTOCOL_VERSION, } from './_shared/index.js';
|
|
14
14
|
// werift is a pure-TS WebRTC stack (no native build) that interops with the
|
|
15
15
|
// browser leader's RTCPeerConnection.
|
|
16
16
|
import { RTCPeerConnection, } from 'werift';
|
|
@@ -71,8 +71,14 @@ export class TrayFollowerSignaling {
|
|
|
71
71
|
catch {
|
|
72
72
|
// Non-JSON error body (e.g. a bare 5xx) — leave it empty; a bootstrap-less,
|
|
73
73
|
// code-less result is treated as a terminal attach failure by the caller.
|
|
74
|
+
// A `successor-version` link still redeems this case: the hub can say
|
|
75
|
+
// where the tray went in a header the body never has to carry (#1957).
|
|
74
76
|
}
|
|
75
|
-
return {
|
|
77
|
+
return {
|
|
78
|
+
status: res.status,
|
|
79
|
+
body,
|
|
80
|
+
supersededByJoinUrl: successorVersionFromLinkHeader(res.headers.get('Link')),
|
|
81
|
+
};
|
|
76
82
|
}
|
|
77
83
|
poll(controllerId, bootstrapId, cursor) {
|
|
78
84
|
return this.post({ action: 'poll', controllerId, bootstrapId, cursor });
|
|
@@ -128,8 +134,10 @@ export class ElectronTrayFollower {
|
|
|
128
134
|
/**
|
|
129
135
|
* Attach to the tray, resolving the non-terminal attach outcomes the worker
|
|
130
136
|
* returns before a bootstrap is available:
|
|
131
|
-
* -
|
|
132
|
-
* fresh tray — follow the redirect
|
|
137
|
+
* - superseded (HTTP 409 + `joinUrl`, and/or a `successor-version` `Link`
|
|
138
|
+
* header): the leader reconnected onto a fresh tray — follow the redirect
|
|
139
|
+
* (bounded hops). The link alone is enough, so a body shape this client
|
|
140
|
+
* does not recognize is not a dead end (#1957).
|
|
133
141
|
* - `wait` (leader not yet elected/connected, carries `retryAfterMs`): sleep
|
|
134
142
|
* then re-attach (bounded), as the shared Swift/Go followers do — otherwise
|
|
135
143
|
* a follower that raced leader election resolves "started" but is never
|
|
@@ -143,15 +151,20 @@ export class ElectronTrayFollower {
|
|
|
143
151
|
let hops = 0;
|
|
144
152
|
let waits = 0;
|
|
145
153
|
while (!this.stopped) {
|
|
146
|
-
const { body } = await this.signaling.attach(this.controllerId, FOLLOWER_RUNTIME_TAG);
|
|
154
|
+
const { body, supersededByJoinUrl } = await this.signaling.attach(this.controllerId, FOLLOWER_RUNTIME_TAG);
|
|
147
155
|
const result = body['result'];
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
156
|
+
// A named replacement is resolved before anything else in the body,
|
|
157
|
+
// including a bootstrap: a tray that has moved cannot also be the one to
|
|
158
|
+
// bootstrap against, and the other four followers all give the
|
|
159
|
+
// replacement precedence over every action. The `successor-version` link
|
|
160
|
+
// takes precedence over the body's `joinUrl`, and stands on its own when
|
|
161
|
+
// the body carries neither the code nor the URL (#1957).
|
|
162
|
+
const bodyJoinUrl = result?.['joinUrl'];
|
|
163
|
+
const supersededUrl = supersededByJoinUrl ??
|
|
164
|
+
(result?.['code'] === 'TRAY_SUPERSEDED' && typeof bodyJoinUrl === 'string'
|
|
165
|
+
? bodyJoinUrl
|
|
166
|
+
: undefined);
|
|
167
|
+
if (typeof supersededUrl === 'string') {
|
|
155
168
|
if (++hops > maxHops) {
|
|
156
169
|
this.log('[electron-follower] too many supersede hops — giving up');
|
|
157
170
|
return null;
|
|
@@ -160,6 +173,11 @@ export class ElectronTrayFollower {
|
|
|
160
173
|
this.signaling = new TrayFollowerSignaling(supersededUrl, this.fetchImpl);
|
|
161
174
|
continue;
|
|
162
175
|
}
|
|
176
|
+
const bootstrap = result?.['bootstrap'];
|
|
177
|
+
if (bootstrap?.bootstrapId) {
|
|
178
|
+
this.bootstrapId = bootstrap.bootstrapId;
|
|
179
|
+
return normalizeIceServers(body['iceServers']);
|
|
180
|
+
}
|
|
163
181
|
if (result?.['action'] === 'wait') {
|
|
164
182
|
if (++waits > maxWaits) {
|
|
165
183
|
this.log('[electron-follower] leader never became ready — giving up');
|
|
@@ -359,9 +377,7 @@ export class ElectronTrayFollower {
|
|
|
359
377
|
}
|
|
360
378
|
try {
|
|
361
379
|
const res = await this.signaling.poll(this.controllerId, this.bootstrapId, this.cursor);
|
|
362
|
-
const events = Array.isArray(res['events'])
|
|
363
|
-
? res['events']
|
|
364
|
-
: [];
|
|
380
|
+
const events = Array.isArray(res['events']) ? res['events'] : [];
|
|
365
381
|
for (const event of events)
|
|
366
382
|
await this.handleBootstrapEvent(event);
|
|
367
383
|
this.cursor += events.length;
|