@symerian/symi 3.5.13 → 3.5.15
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/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chrome-DNssqQJs.js → chrome-3jl2ulOE.js} +7 -7
- package/dist/control-ui/css/style.css +153 -0
- package/dist/control-ui/index.html +15 -5
- package/dist/control-ui/js/symframe.js +275 -0
- package/dist/{deliver-q23ar_Pm.js → deliver-f3cIWxXT.js} +4 -4
- package/dist/extensionAPI.js +4 -4
- package/dist/{manager-BWWH1lYn.js → manager-Ct4kRT7n.js} +1 -1
- package/dist/{pi-embedded-DP8324Ib.js → pi-embedded-BxKs-STI.js} +10 -10
- package/dist/{pw-ai-v__CyAlM.js → pw-ai-DOAsQ5NX.js} +1 -1
- package/dist/{synthesis-qt5bxUcn.js → synthesis-CxR-cX-4.js} +4 -4
- package/package.json +1 -1
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
542830bc5960faae2edcb1d271ead8ae8b0e4a4a5f2cfbcaadd26c9aa81b7c22
|
|
@@ -9,7 +9,7 @@ import fs$1 from "node:fs/promises";
|
|
|
9
9
|
import { execFileSync, spawn } from "node:child_process";
|
|
10
10
|
import net from "node:net";
|
|
11
11
|
import { createServer } from "node:http";
|
|
12
|
-
import WebSocket
|
|
12
|
+
import WebSocket, { WebSocketServer } from "ws";
|
|
13
13
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
14
14
|
|
|
15
15
|
//#region src/browser/constants.ts
|
|
@@ -177,7 +177,7 @@ async function ensureChromeExtensionRelayServer(opts) {
|
|
|
177
177
|
let nextExtensionId = 1;
|
|
178
178
|
const sendToExtension = async (payload) => {
|
|
179
179
|
const ws = extensionWs;
|
|
180
|
-
if (!ws || ws.readyState !== WebSocket
|
|
180
|
+
if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
|
|
181
181
|
ws.send(JSON.stringify(payload));
|
|
182
182
|
return await new Promise((resolve, reject) => {
|
|
183
183
|
const timer = setTimeout(() => {
|
|
@@ -194,12 +194,12 @@ async function ensureChromeExtensionRelayServer(opts) {
|
|
|
194
194
|
const broadcastToCdpClients = (evt) => {
|
|
195
195
|
const msg = JSON.stringify(evt);
|
|
196
196
|
for (const ws of cdpClients) {
|
|
197
|
-
if (ws.readyState !== WebSocket
|
|
197
|
+
if (ws.readyState !== WebSocket.OPEN) continue;
|
|
198
198
|
ws.send(msg);
|
|
199
199
|
}
|
|
200
200
|
};
|
|
201
201
|
const sendResponseToCdp = (ws, res) => {
|
|
202
|
-
if (ws.readyState !== WebSocket
|
|
202
|
+
if (ws.readyState !== WebSocket.OPEN) return;
|
|
203
203
|
ws.send(JSON.stringify(res));
|
|
204
204
|
};
|
|
205
205
|
const ensureTargetEventsForClient = (ws, mode) => {
|
|
@@ -424,7 +424,7 @@ async function ensureChromeExtensionRelayServer(opts) {
|
|
|
424
424
|
wssExtension.on("connection", (ws) => {
|
|
425
425
|
extensionWs = ws;
|
|
426
426
|
const ping = setInterval(() => {
|
|
427
|
-
if (ws.readyState !== WebSocket
|
|
427
|
+
if (ws.readyState !== WebSocket.OPEN) return;
|
|
428
428
|
ws.send(JSON.stringify({ method: "ping" }));
|
|
429
429
|
}, 5e3);
|
|
430
430
|
ws.on("message", (data) => {
|
|
@@ -742,7 +742,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
|
|
|
742
742
|
}
|
|
743
743
|
async function withCdpSocket(wsUrl, fn, opts) {
|
|
744
744
|
const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
|
|
745
|
-
const ws = new WebSocket
|
|
745
|
+
const ws = new WebSocket(wsUrl, {
|
|
746
746
|
handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
|
|
747
747
|
...Object.keys(headers).length ? { headers } : {}
|
|
748
748
|
});
|
|
@@ -1636,7 +1636,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
|
|
|
1636
1636
|
async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
|
|
1637
1637
|
return await new Promise((resolve) => {
|
|
1638
1638
|
const headers = getHeadersWithAuth(wsUrl);
|
|
1639
|
-
const ws = new WebSocket
|
|
1639
|
+
const ws = new WebSocket(wsUrl, {
|
|
1640
1640
|
handshakeTimeout: timeoutMs,
|
|
1641
1641
|
...Object.keys(headers).length ? { headers } : {}
|
|
1642
1642
|
});
|
|
@@ -834,6 +834,159 @@ body {
|
|
|
834
834
|
right: calc(50% - 370px - 16px - 360px);
|
|
835
835
|
}
|
|
836
836
|
|
|
837
|
+
/* ── Symframe (right-column dynamic display) ──────────────────────── */
|
|
838
|
+
/* Phase 1: shell + the 3 existing panels reframed as cards. The aside
|
|
839
|
+
itself stays positioned by .metrics-right; symframe just adds a
|
|
840
|
+
header band on top and unified card chrome around each child panel.
|
|
841
|
+
No JS plumbing yet — Phase 2 introduces the registry + dynamic
|
|
842
|
+
add/update/remove semantics. */
|
|
843
|
+
.symframe {
|
|
844
|
+
display: flex;
|
|
845
|
+
flex-direction: column;
|
|
846
|
+
gap: 8px;
|
|
847
|
+
}
|
|
848
|
+
.symframe-header {
|
|
849
|
+
padding: 8px 10px 10px;
|
|
850
|
+
border-bottom: 1px solid rgba(0, 212, 255, 0.12);
|
|
851
|
+
margin-bottom: 4px;
|
|
852
|
+
}
|
|
853
|
+
.symframe-header-row {
|
|
854
|
+
display: flex;
|
|
855
|
+
align-items: baseline;
|
|
856
|
+
justify-content: space-between;
|
|
857
|
+
gap: 10px;
|
|
858
|
+
}
|
|
859
|
+
.symframe-title {
|
|
860
|
+
font-family: var(--font-mono);
|
|
861
|
+
font-size: 12px;
|
|
862
|
+
font-weight: 600;
|
|
863
|
+
letter-spacing: 0.14em;
|
|
864
|
+
color: var(--accent-cyan);
|
|
865
|
+
}
|
|
866
|
+
.symframe-count {
|
|
867
|
+
font-family: var(--font-mono);
|
|
868
|
+
font-size: 9px;
|
|
869
|
+
letter-spacing: 0.06em;
|
|
870
|
+
color: var(--text-dim);
|
|
871
|
+
opacity: 0.7;
|
|
872
|
+
text-transform: uppercase;
|
|
873
|
+
}
|
|
874
|
+
.symframe-sub {
|
|
875
|
+
font-family: var(--font-mono);
|
|
876
|
+
font-size: 9px;
|
|
877
|
+
letter-spacing: 0.04em;
|
|
878
|
+
color: var(--text-dim);
|
|
879
|
+
opacity: 0.55;
|
|
880
|
+
margin-top: 4px;
|
|
881
|
+
line-height: 1.4;
|
|
882
|
+
}
|
|
883
|
+
.symframe-cards {
|
|
884
|
+
display: flex;
|
|
885
|
+
flex-direction: column;
|
|
886
|
+
gap: 10px;
|
|
887
|
+
}
|
|
888
|
+
/* Card chrome — overrides the per-panel transparent treatment from the
|
|
889
|
+
floating-panels arc (3.4.10/11/12/13) for the panels that now live
|
|
890
|
+
inside the symframe. Higher specificity (`.symframe .symframe-card`)
|
|
891
|
+
wins over the panel-specific class selectors. */
|
|
892
|
+
.symframe .symframe-card {
|
|
893
|
+
position: relative;
|
|
894
|
+
background: rgba(255, 255, 255, 0.02);
|
|
895
|
+
border: 1px solid rgba(0, 212, 255, 0.1);
|
|
896
|
+
border-radius: 10px;
|
|
897
|
+
padding: 10px 12px;
|
|
898
|
+
box-shadow:
|
|
899
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.03),
|
|
900
|
+
0 2px 8px rgba(0, 0, 0, 0.15);
|
|
901
|
+
}
|
|
902
|
+
.symframe .symframe-card::before,
|
|
903
|
+
.symframe .symframe-card::after {
|
|
904
|
+
display: none;
|
|
905
|
+
}
|
|
906
|
+
.symframe .symframe-card:hover {
|
|
907
|
+
border-color: rgba(0, 212, 255, 0.18);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/* Phase 2: dynamic-card sub-elements (only present on cards added via
|
|
911
|
+
symframe.add(); the 3 sticky panels render their own internals). */
|
|
912
|
+
.symframe-card-header {
|
|
913
|
+
display: flex;
|
|
914
|
+
align-items: center;
|
|
915
|
+
justify-content: space-between;
|
|
916
|
+
gap: 8px;
|
|
917
|
+
}
|
|
918
|
+
.symframe-card-dismiss {
|
|
919
|
+
background: transparent;
|
|
920
|
+
border: none;
|
|
921
|
+
color: var(--text-dim);
|
|
922
|
+
font-size: 16px;
|
|
923
|
+
line-height: 1;
|
|
924
|
+
width: 18px;
|
|
925
|
+
height: 18px;
|
|
926
|
+
border-radius: 4px;
|
|
927
|
+
cursor: pointer;
|
|
928
|
+
opacity: 0.6;
|
|
929
|
+
transition:
|
|
930
|
+
opacity 0.15s ease,
|
|
931
|
+
color 0.15s ease,
|
|
932
|
+
background 0.15s ease;
|
|
933
|
+
padding: 0;
|
|
934
|
+
display: flex;
|
|
935
|
+
align-items: center;
|
|
936
|
+
justify-content: center;
|
|
937
|
+
}
|
|
938
|
+
.symframe-card-dismiss:hover {
|
|
939
|
+
opacity: 1;
|
|
940
|
+
color: var(--accent-cyan);
|
|
941
|
+
background: rgba(0, 212, 255, 0.08);
|
|
942
|
+
}
|
|
943
|
+
.symframe-card-body {
|
|
944
|
+
font-family: var(--font-mono);
|
|
945
|
+
font-size: 11px;
|
|
946
|
+
line-height: 1.5;
|
|
947
|
+
color: var(--text);
|
|
948
|
+
margin-top: 8px;
|
|
949
|
+
white-space: pre-wrap;
|
|
950
|
+
word-break: break-word;
|
|
951
|
+
max-height: 320px;
|
|
952
|
+
overflow-y: auto;
|
|
953
|
+
}
|
|
954
|
+
.symframe-card-actions {
|
|
955
|
+
display: flex;
|
|
956
|
+
gap: 6px;
|
|
957
|
+
margin-top: 10px;
|
|
958
|
+
padding-top: 8px;
|
|
959
|
+
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
|
960
|
+
flex-wrap: wrap;
|
|
961
|
+
}
|
|
962
|
+
.symframe-card-action {
|
|
963
|
+
flex: 1 1 auto;
|
|
964
|
+
min-width: 60px;
|
|
965
|
+
padding: 6px 10px;
|
|
966
|
+
border: 1px solid var(--glass-border);
|
|
967
|
+
border-radius: 5px;
|
|
968
|
+
background: rgba(255, 255, 255, 0.03);
|
|
969
|
+
color: var(--text-dim);
|
|
970
|
+
font-family: var(--font-mono);
|
|
971
|
+
font-size: 10px;
|
|
972
|
+
letter-spacing: 0.04em;
|
|
973
|
+
cursor: pointer;
|
|
974
|
+
transition: all 0.15s ease;
|
|
975
|
+
}
|
|
976
|
+
.symframe-card-action:hover {
|
|
977
|
+
border-color: var(--accent-cyan);
|
|
978
|
+
color: var(--text);
|
|
979
|
+
}
|
|
980
|
+
.symframe-card-action-primary {
|
|
981
|
+
background: rgba(0, 212, 255, 0.08);
|
|
982
|
+
border-color: var(--accent-cyan);
|
|
983
|
+
color: var(--accent-cyan);
|
|
984
|
+
}
|
|
985
|
+
.symframe-card-action-primary:hover {
|
|
986
|
+
background: rgba(0, 212, 255, 0.14);
|
|
987
|
+
box-shadow: 0 0 8px rgba(0, 212, 255, 0.18);
|
|
988
|
+
}
|
|
989
|
+
|
|
837
990
|
/* ── Response Area ────────────────────────────────────────────────── */
|
|
838
991
|
.response-area {
|
|
839
992
|
position: fixed;
|
|
@@ -191,10 +191,18 @@
|
|
|
191
191
|
</div>
|
|
192
192
|
</aside>
|
|
193
193
|
|
|
194
|
-
<!--
|
|
195
|
-
<aside class="metrics-col metrics-right">
|
|
194
|
+
<!-- Symframe — dynamic display panel ("window into the agent's mind") -->
|
|
195
|
+
<aside class="metrics-col metrics-right symframe" id="symframe">
|
|
196
|
+
<div class="symframe-header">
|
|
197
|
+
<div class="symframe-header-row">
|
|
198
|
+
<span class="symframe-title">SYMFRAME</span>
|
|
199
|
+
<span class="symframe-count" id="symframe-count">3 cards</span>
|
|
200
|
+
</div>
|
|
201
|
+
<div class="symframe-sub">window into the agent's mind</div>
|
|
202
|
+
</div>
|
|
203
|
+
<div class="symframe-cards" id="symframe-cards">
|
|
196
204
|
<!-- Subagents Panel -->
|
|
197
|
-
<div class="glass-panel subagents-panel" id="subagents-panel">
|
|
205
|
+
<div class="glass-panel symframe-card subagents-panel" id="subagents-panel">
|
|
198
206
|
<div class="panel-label">
|
|
199
207
|
SUBAGENTS
|
|
200
208
|
<span class="subagents-count" id="subagents-count"></span>
|
|
@@ -276,7 +284,7 @@
|
|
|
276
284
|
</div>
|
|
277
285
|
|
|
278
286
|
<!-- Reasoning Panel -->
|
|
279
|
-
<div class="glass-panel reasoning-panel" id="reasoning-panel">
|
|
287
|
+
<div class="glass-panel symframe-card reasoning-panel" id="reasoning-panel">
|
|
280
288
|
<div class="panel-label">
|
|
281
289
|
REASONING
|
|
282
290
|
<span class="reasoning-live-dot" id="reasoning-live-dot"></span>
|
|
@@ -297,7 +305,7 @@
|
|
|
297
305
|
</div>
|
|
298
306
|
|
|
299
307
|
<!-- Scheduling Panel -->
|
|
300
|
-
<div class="glass-panel scheduling-panel" id="scheduling-panel">
|
|
308
|
+
<div class="glass-panel symframe-card scheduling-panel" id="scheduling-panel">
|
|
301
309
|
<div class="panel-label">
|
|
302
310
|
SCHEDULING
|
|
303
311
|
<span class="schedule-count" id="schedule-count"></span>
|
|
@@ -321,6 +329,7 @@
|
|
|
321
329
|
<span>Add Schedule</span>
|
|
322
330
|
</button>
|
|
323
331
|
</div>
|
|
332
|
+
</div>
|
|
324
333
|
|
|
325
334
|
</aside>
|
|
326
335
|
|
|
@@ -1050,5 +1059,6 @@
|
|
|
1050
1059
|
<script src="js/scheduling.js"></script>
|
|
1051
1060
|
<script src="js/models.js"></script>
|
|
1052
1061
|
<script src="js/slash-autocomplete.js"></script>
|
|
1062
|
+
<script src="js/symframe.js"></script>
|
|
1053
1063
|
</body>
|
|
1054
1064
|
</html>
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// ── Symframe registry ─────────────────────────────────────────────────
|
|
2
|
+
// Phase 2 of the symframe arc. Provides `window.symframe.add/update/remove/list`
|
|
3
|
+
// for dynamic cards in the right column. The 3 existing panels (SUBAGENTS,
|
|
4
|
+
// REASONING, SCHEDULING) auto-register at boot as sticky cards — they keep
|
|
5
|
+
// their own DOM and JS hookups, the registry just tracks metadata.
|
|
6
|
+
//
|
|
7
|
+
// Card stack order: ephemeral (non-sticky) cards stack at the TOP of the
|
|
8
|
+
// container, newest at the very top; sticky cards anchor below them in
|
|
9
|
+
// fixed insertion order so the always-visible system panels never drift.
|
|
10
|
+
//
|
|
11
|
+
// Phase 3+ will add type-specific renderers + a server-side push RPC. For
|
|
12
|
+
// now the registry is JS-only and exercisable from the browser console:
|
|
13
|
+
// symframe.add({ title: "Test", body: "hello", dismissable: true });
|
|
14
|
+
// symframe.update("<id>", { body: "updated" });
|
|
15
|
+
// symframe.remove("<id>");
|
|
16
|
+
|
|
17
|
+
(function () {
|
|
18
|
+
const container = document.getElementById("symframe-cards");
|
|
19
|
+
const countEl = document.getElementById("symframe-count");
|
|
20
|
+
if (!container) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** @type {Map<string, Card>} */
|
|
25
|
+
const cards = new Map();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {Object} Card
|
|
29
|
+
* @property {string} id
|
|
30
|
+
* @property {string} [type] generic descriptor; renderers in Phase 3+ key off this
|
|
31
|
+
* @property {string} title header text (rendered uppercase via existing .panel-label)
|
|
32
|
+
* @property {string} [body] plain-text body (escaped)
|
|
33
|
+
* @property {string} [bodyHtml] trusted-HTML body (no escape) — only set internally
|
|
34
|
+
* @property {Array<Action>} [actions] footer buttons
|
|
35
|
+
* @property {boolean} [sticky] true → anchored at bottom of stack, no dismiss control
|
|
36
|
+
* @property {boolean} [dismissable] true → header gains a × button that calls remove(id)
|
|
37
|
+
* @property {Element} [element] DOM element for register()-tracked cards (existing panels)
|
|
38
|
+
* @property {number} createdAt set by the registry
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @typedef {Object} Action
|
|
43
|
+
* @property {string} label
|
|
44
|
+
* @property {"primary"|"secondary"} [kind]
|
|
45
|
+
* @property {() => void} onClick
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
function genId() {
|
|
49
|
+
return `sf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function updateCount() {
|
|
53
|
+
if (!countEl) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const total = cards.size;
|
|
57
|
+
countEl.textContent = total === 1 ? "1 card" : `${total} cards`;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function renderCardElement(card) {
|
|
61
|
+
const el = document.createElement("div");
|
|
62
|
+
el.className = "glass-panel symframe-card symframe-card-dynamic";
|
|
63
|
+
if (card.sticky) {
|
|
64
|
+
el.classList.add("symframe-card-sticky");
|
|
65
|
+
}
|
|
66
|
+
el.dataset.cardId = card.id;
|
|
67
|
+
if (card.type) {
|
|
68
|
+
el.dataset.cardType = card.type;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Header
|
|
72
|
+
const header = document.createElement("div");
|
|
73
|
+
header.className = "panel-label symframe-card-header";
|
|
74
|
+
const titleSpan = document.createElement("span");
|
|
75
|
+
titleSpan.textContent = card.title || "";
|
|
76
|
+
header.appendChild(titleSpan);
|
|
77
|
+
if (card.dismissable && !card.sticky) {
|
|
78
|
+
const dismiss = document.createElement("button");
|
|
79
|
+
dismiss.className = "symframe-card-dismiss";
|
|
80
|
+
dismiss.type = "button";
|
|
81
|
+
dismiss.setAttribute("aria-label", "Dismiss");
|
|
82
|
+
dismiss.textContent = "×";
|
|
83
|
+
dismiss.addEventListener("click", (e) => {
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
e.stopPropagation();
|
|
86
|
+
remove(card.id);
|
|
87
|
+
});
|
|
88
|
+
header.appendChild(dismiss);
|
|
89
|
+
}
|
|
90
|
+
el.appendChild(header);
|
|
91
|
+
|
|
92
|
+
// Body
|
|
93
|
+
if (card.bodyHtml || card.body) {
|
|
94
|
+
const body = document.createElement("div");
|
|
95
|
+
body.className = "symframe-card-body";
|
|
96
|
+
if (card.bodyHtml) {
|
|
97
|
+
body.innerHTML = card.bodyHtml;
|
|
98
|
+
} else {
|
|
99
|
+
body.textContent = card.body;
|
|
100
|
+
}
|
|
101
|
+
el.appendChild(body);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Actions
|
|
105
|
+
if (Array.isArray(card.actions) && card.actions.length > 0) {
|
|
106
|
+
const actionsRow = document.createElement("div");
|
|
107
|
+
actionsRow.className = "symframe-card-actions";
|
|
108
|
+
for (const action of card.actions) {
|
|
109
|
+
const btn = document.createElement("button");
|
|
110
|
+
btn.className = "symframe-card-action";
|
|
111
|
+
if (action.kind === "primary") {
|
|
112
|
+
btn.classList.add("symframe-card-action-primary");
|
|
113
|
+
}
|
|
114
|
+
btn.type = "button";
|
|
115
|
+
btn.textContent = action.label || "";
|
|
116
|
+
if (typeof action.onClick === "function") {
|
|
117
|
+
btn.addEventListener("click", (e) => {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
try {
|
|
120
|
+
action.onClick();
|
|
121
|
+
} catch (err) {
|
|
122
|
+
console.warn("[symframe] action threw:", err);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
actionsRow.appendChild(btn);
|
|
127
|
+
}
|
|
128
|
+
el.appendChild(actionsRow);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return el;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function insertElement(card, el) {
|
|
135
|
+
if (card.sticky) {
|
|
136
|
+
// Sticky cards anchor below all ephemeral cards. Append to end of
|
|
137
|
+
// the sticky group (which is the end of the container, since
|
|
138
|
+
// ephemeral cards live above).
|
|
139
|
+
container.appendChild(el);
|
|
140
|
+
} else {
|
|
141
|
+
// Ephemeral cards stack at the top, newest first → prepend.
|
|
142
|
+
container.prepend(el);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Track an existing DOM-managed card (e.g. SUBAGENTS panel). The
|
|
148
|
+
* element is already in the container and renders/updates itself; the
|
|
149
|
+
* registry just records metadata so list/count/sort logic can see it.
|
|
150
|
+
*/
|
|
151
|
+
function register(card) {
|
|
152
|
+
if (!card || !card.id || !card.element) {
|
|
153
|
+
console.warn("[symframe] register: missing id or element");
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const entry = {
|
|
157
|
+
...card,
|
|
158
|
+
sticky: card.sticky !== false,
|
|
159
|
+
dismissable: false,
|
|
160
|
+
createdAt: Date.now(),
|
|
161
|
+
};
|
|
162
|
+
cards.set(entry.id, entry);
|
|
163
|
+
entry.element.classList.add("symframe-card");
|
|
164
|
+
if (entry.sticky) {
|
|
165
|
+
entry.element.classList.add("symframe-card-sticky");
|
|
166
|
+
}
|
|
167
|
+
updateCount();
|
|
168
|
+
return entry;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Add a new dynamic card. Renders into the container, prepended for
|
|
173
|
+
* ephemeral cards or appended for sticky cards.
|
|
174
|
+
*/
|
|
175
|
+
function add(card) {
|
|
176
|
+
const id = card?.id || genId();
|
|
177
|
+
if (cards.has(id)) {
|
|
178
|
+
// Treat as update if id collides.
|
|
179
|
+
return update(id, card);
|
|
180
|
+
}
|
|
181
|
+
const entry = {
|
|
182
|
+
...card,
|
|
183
|
+
id,
|
|
184
|
+
sticky: card?.sticky === true,
|
|
185
|
+
dismissable: card?.dismissable !== false,
|
|
186
|
+
createdAt: Date.now(),
|
|
187
|
+
};
|
|
188
|
+
const el = renderCardElement(entry);
|
|
189
|
+
entry.element = el;
|
|
190
|
+
cards.set(id, entry);
|
|
191
|
+
insertElement(entry, el);
|
|
192
|
+
updateCount();
|
|
193
|
+
return entry;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Patch an existing card. Re-renders the card's DOM element from the
|
|
198
|
+
* merged data; preserves stack position.
|
|
199
|
+
*/
|
|
200
|
+
function update(id, patch) {
|
|
201
|
+
const existing = cards.get(id);
|
|
202
|
+
if (!existing) {
|
|
203
|
+
console.warn(`[symframe] update: unknown id ${id}`);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (!existing.element) {
|
|
207
|
+
console.warn(`[symframe] update: card ${id} has no element (registered, not added)`);
|
|
208
|
+
// Allow metadata patch without re-render
|
|
209
|
+
const merged = { ...existing, ...patch, id };
|
|
210
|
+
cards.set(id, merged);
|
|
211
|
+
return merged;
|
|
212
|
+
}
|
|
213
|
+
const merged = { ...existing, ...patch, id };
|
|
214
|
+
const newEl = renderCardElement(merged);
|
|
215
|
+
merged.element = newEl;
|
|
216
|
+
existing.element.replaceWith(newEl);
|
|
217
|
+
cards.set(id, merged);
|
|
218
|
+
return merged;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Remove a card from the registry + DOM. Sticky cards refuse removal
|
|
223
|
+
* unless force=true is passed (defensive — the system panels really
|
|
224
|
+
* shouldn't disappear via stray API calls).
|
|
225
|
+
*/
|
|
226
|
+
function remove(id, force = false) {
|
|
227
|
+
const entry = cards.get(id);
|
|
228
|
+
if (!entry) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
if (entry.sticky && !force) {
|
|
232
|
+
console.warn(`[symframe] remove: refusing to drop sticky card '${id}' without force=true`);
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
if (entry.element && entry.element.parentElement === container) {
|
|
236
|
+
entry.element.remove();
|
|
237
|
+
}
|
|
238
|
+
cards.delete(id);
|
|
239
|
+
updateCount();
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/** Snapshot of all registered cards. */
|
|
244
|
+
function list() {
|
|
245
|
+
return Array.from(cards.values());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Auto-register the 3 sticky panels that already live in the DOM. The
|
|
249
|
+
// existing JS for each panel (subagents.js, scheduling.js, reasoning
|
|
250
|
+
// render code) keeps targeting them by id and is unaffected.
|
|
251
|
+
const KNOWN_STICKY = [
|
|
252
|
+
{ id: "subagents", elementId: "subagents-panel", title: "SUBAGENTS", type: "panel-subagents" },
|
|
253
|
+
{ id: "reasoning", elementId: "reasoning-panel", title: "REASONING", type: "panel-reasoning" },
|
|
254
|
+
{
|
|
255
|
+
id: "scheduling",
|
|
256
|
+
elementId: "scheduling-panel",
|
|
257
|
+
title: "SCHEDULING",
|
|
258
|
+
type: "panel-scheduling",
|
|
259
|
+
},
|
|
260
|
+
];
|
|
261
|
+
for (const known of KNOWN_STICKY) {
|
|
262
|
+
const el = document.getElementById(known.elementId);
|
|
263
|
+
if (el) {
|
|
264
|
+
register({
|
|
265
|
+
id: known.id,
|
|
266
|
+
type: known.type,
|
|
267
|
+
title: known.title,
|
|
268
|
+
sticky: true,
|
|
269
|
+
element: el,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
window.symframe = { add, update, remove, list, register };
|
|
275
|
+
})();
|
|
@@ -9,7 +9,7 @@ import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CZ_mYw
|
|
|
9
9
|
import { _ as listDeliverableMessageChannels, c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph, v as normalizeMessageChannel } from "./chunk-CAZujdOi.js";
|
|
10
10
|
import { c as loadConfig, d as writeConfigFile, m as parseByteSize, p as parseDurationMs, s as createConfigIO, t as SsrFBlockedError } from "./ssrf-BCSnhba8.js";
|
|
11
11
|
import { t as parseBooleanValue } from "./boolean-BW6OTjPi.js";
|
|
12
|
-
import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-
|
|
12
|
+
import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-3jl2ulOE.js";
|
|
13
13
|
import { t as formatCliCommand } from "./command-format-DPd9RN2g.js";
|
|
14
14
|
import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-DO7WNsVJ.js";
|
|
15
15
|
import { n as formatErrorMessage, t as extractErrorCode } from "./errors-BEU7IHU6.js";
|
|
@@ -1331,7 +1331,7 @@ function isModuleNotFoundError(err) {
|
|
|
1331
1331
|
}
|
|
1332
1332
|
async function loadPwAiModule(mode) {
|
|
1333
1333
|
try {
|
|
1334
|
-
return await import("./pw-ai-
|
|
1334
|
+
return await import("./pw-ai-DOAsQ5NX.js");
|
|
1335
1335
|
} catch (err) {
|
|
1336
1336
|
if (mode === "soft") return null;
|
|
1337
1337
|
if (isModuleNotFoundError(err)) return null;
|
|
@@ -3928,11 +3928,11 @@ function createProfileContext(opts, profile) {
|
|
|
3928
3928
|
const userDataDir = resolveSymiUserDataDir(profile.name);
|
|
3929
3929
|
const profileState = getProfileState();
|
|
3930
3930
|
if (await isHttpReachable(300) && !profileState.running) try {
|
|
3931
|
-
await (await import("./pw-ai-
|
|
3931
|
+
await (await import("./pw-ai-DOAsQ5NX.js")).closePlaywrightBrowserConnection();
|
|
3932
3932
|
} catch {}
|
|
3933
3933
|
if (profileState.running) await stopRunningBrowser();
|
|
3934
3934
|
try {
|
|
3935
|
-
await (await import("./pw-ai-
|
|
3935
|
+
await (await import("./pw-ai-DOAsQ5NX.js")).closePlaywrightBrowserConnection();
|
|
3936
3936
|
} catch {}
|
|
3937
3937
|
if (!fs.existsSync(userDataDir)) return {
|
|
3938
3938
|
moved: false,
|
package/dist/extensionAPI.js
CHANGED
|
@@ -6,8 +6,8 @@ import { _ as DEFAULT_PROVIDER, g as DEFAULT_MODEL, p as resolveThinkingDefault
|
|
|
6
6
|
import { a as resolveAgentIdentity } from "./reply-prefix-i-FPYcoQ.js";
|
|
7
7
|
import "./plugins-CZ_mYwXq.js";
|
|
8
8
|
import "./replies-0nzkXt6o.js";
|
|
9
|
-
import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-
|
|
10
|
-
import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-
|
|
9
|
+
import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-BxKs-STI.js";
|
|
10
|
+
import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-f3cIWxXT.js";
|
|
11
11
|
import "./diagnostic-BdRnGknC.js";
|
|
12
12
|
import "./diagnostic-session-state-DpxCUzoM.js";
|
|
13
13
|
import "./chunk-CAZujdOi.js";
|
|
@@ -16,14 +16,14 @@ import "./ssrf-BCSnhba8.js";
|
|
|
16
16
|
import "./boolean-BW6OTjPi.js";
|
|
17
17
|
import "./shell-env-DgjeObDZ.js";
|
|
18
18
|
import "./manifest-registry-CAWGTwb5.js";
|
|
19
|
-
import "./chrome-
|
|
19
|
+
import "./chrome-3jl2ulOE.js";
|
|
20
20
|
import "./skills-DO7WNsVJ.js";
|
|
21
21
|
import "./redact-DSOAcWMe.js";
|
|
22
22
|
import "./errors-BEU7IHU6.js";
|
|
23
23
|
import "./tokens-yWO1wD7Z.js";
|
|
24
24
|
import "./thinking-DgjGxdSP.js";
|
|
25
25
|
import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-BsT3BvfH.js";
|
|
26
|
-
import "./manager-
|
|
26
|
+
import "./manager-Ct4kRT7n.js";
|
|
27
27
|
import "./github-copilot-token-dYUr1mDQ.js";
|
|
28
28
|
import "./sqlite-D8iYC_CU.js";
|
|
29
29
|
import "./markdown-tables-jQzXAsf3.js";
|
|
@@ -4449,7 +4449,7 @@ var MemoryIndexManager = class MemoryIndexManager extends MemoryManagerEmbedding
|
|
|
4449
4449
|
* to bypass the min-interval guard (CLI use).
|
|
4450
4450
|
*/
|
|
4451
4451
|
async runL3CycleIfDue(params) {
|
|
4452
|
-
const [{ runL3Cycle, runL3CycleIfDue }, { createSynthesizer }] = await Promise.all([import("./consolidate-CwJCvaOH.js"), import("./synthesis-
|
|
4452
|
+
const [{ runL3Cycle, runL3CycleIfDue }, { createSynthesizer }] = await Promise.all([import("./consolidate-CwJCvaOH.js"), import("./synthesis-CxR-cX-4.js")]);
|
|
4453
4453
|
const synthesize = createSynthesizer({
|
|
4454
4454
|
cfg: this.cfg,
|
|
4455
4455
|
agentId: this.agentId,
|
|
@@ -9,7 +9,7 @@ import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as reso
|
|
|
9
9
|
import { t as normalizeChatType } from "./chat-type-Acj2OK2p.js";
|
|
10
10
|
import { i as resolveSlackAccount, n as listChannelPlugins, o as resolveSlackAppToken, r as normalizeChannelId$1, s as resolveSlackBotToken, t as getChannelPlugin } from "./plugins-CZ_mYwXq.js";
|
|
11
11
|
import { S as resolveSlackChannelId, _ as resolveSlackWebClientOptions, a as sendMessageSlack, b as buildSlackBlocksFallbackText, c as getDefaultLocalRoots, d as fetchRemoteMedia, f as readResponseWithLimit, g as createSlackWebClient, h as fetchWithTimeout, i as resolveSlackThreadTs, l as loadWebMedia, m as bindAbortRelay, n as deliverReplies, o as renderMarkdownWithMarkers, p as fetchWithSsrFGuard, s as markdownToIRWithMeta, t as createSlackReplyDeliveryPlan, u as MediaFetchError, v as parseSlackBlocksInput, x as parseSlackTarget, y as validateSlackBlocksArray } from "./replies-0nzkXt6o.js";
|
|
12
|
-
import { $ as loadSessionStore, $t as resolveToolProfilePolicy, A as formatRawAssistantErrorForUi, At as resolveMainSessionKey, B as isRateLimitAssistantError, Bt as saveMediaBuffer, C as downgradeOpenAIReasoningBlocks, Ct as resolveChannelResetConfig, D as classifyFailoverReason, Dt as DEFAULT_RESET_TRIGGERS, E as BILLING_ERROR_USER_MESSAGE, Et as resolveThreadFlag, F as isCompactionFailureError, Ft as createBrowserRouteContext, G as parseImageSizeError, Gt as resolveBrowserControlAuth, H as isTimeoutErrorMessage, Ht as resolveExistingPathsWithinRoot, I as isContextOverflowError, It as registerBrowserRoutes, J as resolveSandboxContext, Jt as collectExplicitAllowlist, K as sanitizeUserFacingText, Kt as applyOwnerOnlyToolPolicy, L as isFailoverAssistantError, Lt as resolveBrowserConfig, M as isAuthAssistantError, Mt as resolveGroupSessionKey, N as isBillingAssistantError, Nt as acquireSessionWriteLock, O as formatAssistantErrorText, Ot as resolveFreshSessionTotalTokens, P as isCloudCodeAssistFormatError, Pt as resolveSessionLockMaxHoldFromTimeout, Q as resolveAndPersistSessionFile, Qt as normalizeToolName$1, R as isFailoverErrorMessage, Rt as resolveProfile, S as extractToolResultId, St as evaluateSessionFreshness, T as isGoogleModelApi, Tt as resolveSessionResetType, U as isTransientHttpError, Ut as getBridgeAuthForPort, V as isRawApiErrorPayload, Vt as DEFAULT_UPLOAD_DIR, W as parseImageDimensionError, Wt as ensureBrowserControlAuth, X as extractDeliveryInfo, Xt as expandToolGroups, Y as resolveSandboxRuntimeStatus, Yt as expandPolicyWithPluginGroups, Z as appendAssistantMessageToSessionTranscript, Zt as mergeAlsoAllowPolicy, _ as sanitizeSessionMessagesImages, _t as INPUT_PROVENANCE_KIND_VALUES, a as normalizeChannelTargetInput, an as resolveBootstrapMaxChars, at as updateSessionStoreEntry, b as resolveImageSanitizationLimits, bt as normalizeInputProvenance, c as parseReplyDirectives, cn as getGlobalHookRunner, ct as deliveryContextFromSession, d as parseInlineDirectives$1, dt as normalizeDeliveryContext, en as stripPluginOnlyAllowlist, et as readSessionUpdatedAt, f as validateAnthropicTurns, ft as normalizeSessionDeliveryFields, g as normalizeTextForComparison, gt as extractToolCallNames, h as isMessagingToolDuplicateNormalized, ht as countToolResults, i as buildTargetResolverSignature, in as ensureSessionHeader, it as updateSessionStore, j as getApiErrorPayloadFingerprint, jt as deriveSessionMetaPatch, k as formatBillingErrorMessage, kt as canonicalizeMainSessionAlias, l as MEDIA_TOKEN_RE, ln as initializeGlobalHookRunner, lt as deliveryContextKey, m as pickFallbackThinkingLevel, mt as capArrayByJsonBytes, nn as matchesAnyGlobPattern, o as normalizeTargetForProvider, on as resolveBootstrapTotalMaxChars, ot as isCacheEnabled, p as validateGeminiTurns, pt as archiveSessionTranscripts, q as ensureSandboxWorkspaceForSession, qt as buildPluginToolGroups, r as normalizeReplyPayloadsForDelivery, rn as buildBootstrapContextFiles, rt as updateLastRoute, s as throwIfAborted, sn as sanitizeGoogleTurnOrdering, st as resolveCacheTtlMs$1, t as deliverOutboundPayloads, tn as compileGlobPatterns, tt as recordSessionMetaFromInbound, u as splitMediaFromOutput, ut as mergeDeliveryContext, v as sanitizeImageBlocks, vt as applyInputProvenanceToUserMessage, w as isAntigravityClaude, wt as resolveSessionResetPolicy, x as extractToolCallsFromAssistant, xt as resolveSessionKey, y as sanitizeToolResultImages, yt as hasInterSessionUserProvenance, z as isLikelyContextOverflowError, zt as getMediaDir } from "./deliver-
|
|
12
|
+
import { $ as loadSessionStore, $t as resolveToolProfilePolicy, A as formatRawAssistantErrorForUi, At as resolveMainSessionKey, B as isRateLimitAssistantError, Bt as saveMediaBuffer, C as downgradeOpenAIReasoningBlocks, Ct as resolveChannelResetConfig, D as classifyFailoverReason, Dt as DEFAULT_RESET_TRIGGERS, E as BILLING_ERROR_USER_MESSAGE, Et as resolveThreadFlag, F as isCompactionFailureError, Ft as createBrowserRouteContext, G as parseImageSizeError, Gt as resolveBrowserControlAuth, H as isTimeoutErrorMessage, Ht as resolveExistingPathsWithinRoot, I as isContextOverflowError, It as registerBrowserRoutes, J as resolveSandboxContext, Jt as collectExplicitAllowlist, K as sanitizeUserFacingText, Kt as applyOwnerOnlyToolPolicy, L as isFailoverAssistantError, Lt as resolveBrowserConfig, M as isAuthAssistantError, Mt as resolveGroupSessionKey, N as isBillingAssistantError, Nt as acquireSessionWriteLock, O as formatAssistantErrorText, Ot as resolveFreshSessionTotalTokens, P as isCloudCodeAssistFormatError, Pt as resolveSessionLockMaxHoldFromTimeout, Q as resolveAndPersistSessionFile, Qt as normalizeToolName$1, R as isFailoverErrorMessage, Rt as resolveProfile, S as extractToolResultId, St as evaluateSessionFreshness, T as isGoogleModelApi, Tt as resolveSessionResetType, U as isTransientHttpError, Ut as getBridgeAuthForPort, V as isRawApiErrorPayload, Vt as DEFAULT_UPLOAD_DIR, W as parseImageDimensionError, Wt as ensureBrowserControlAuth, X as extractDeliveryInfo, Xt as expandToolGroups, Y as resolveSandboxRuntimeStatus, Yt as expandPolicyWithPluginGroups, Z as appendAssistantMessageToSessionTranscript, Zt as mergeAlsoAllowPolicy, _ as sanitizeSessionMessagesImages, _t as INPUT_PROVENANCE_KIND_VALUES, a as normalizeChannelTargetInput, an as resolveBootstrapMaxChars, at as updateSessionStoreEntry, b as resolveImageSanitizationLimits, bt as normalizeInputProvenance, c as parseReplyDirectives, cn as getGlobalHookRunner, ct as deliveryContextFromSession, d as parseInlineDirectives$1, dt as normalizeDeliveryContext, en as stripPluginOnlyAllowlist, et as readSessionUpdatedAt, f as validateAnthropicTurns, ft as normalizeSessionDeliveryFields, g as normalizeTextForComparison, gt as extractToolCallNames, h as isMessagingToolDuplicateNormalized, ht as countToolResults, i as buildTargetResolverSignature, in as ensureSessionHeader, it as updateSessionStore, j as getApiErrorPayloadFingerprint, jt as deriveSessionMetaPatch, k as formatBillingErrorMessage, kt as canonicalizeMainSessionAlias, l as MEDIA_TOKEN_RE, ln as initializeGlobalHookRunner, lt as deliveryContextKey, m as pickFallbackThinkingLevel, mt as capArrayByJsonBytes, nn as matchesAnyGlobPattern, o as normalizeTargetForProvider, on as resolveBootstrapTotalMaxChars, ot as isCacheEnabled, p as validateGeminiTurns, pt as archiveSessionTranscripts, q as ensureSandboxWorkspaceForSession, qt as buildPluginToolGroups, r as normalizeReplyPayloadsForDelivery, rn as buildBootstrapContextFiles, rt as updateLastRoute, s as throwIfAborted, sn as sanitizeGoogleTurnOrdering, st as resolveCacheTtlMs$1, t as deliverOutboundPayloads, tn as compileGlobPatterns, tt as recordSessionMetaFromInbound, u as splitMediaFromOutput, ut as mergeDeliveryContext, v as sanitizeImageBlocks, vt as applyInputProvenanceToUserMessage, w as isAntigravityClaude, wt as resolveSessionResetPolicy, x as extractToolCallsFromAssistant, xt as resolveSessionKey, y as sanitizeToolResultImages, yt as hasInterSessionUserProvenance, z as isLikelyContextOverflowError, zt as getMediaDir } from "./deliver-f3cIWxXT.js";
|
|
13
13
|
import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r as logLaneDequeue, s as logSessionStateChange, t as diag } from "./diagnostic-BdRnGknC.js";
|
|
14
14
|
import { n as getDiagnosticSessionState } from "./diagnostic-session-state-DpxCUzoM.js";
|
|
15
15
|
import { S as GATEWAY_CLIENT_NAMES, _ as listDeliverableMessageChannels, a as chunkText, b as GATEWAY_CLIENT_IDS, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, g as isMarkdownCapableMessageChannel, h as isInternalMessageChannel, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, m as isDeliverableMessageChannel, o as chunkTextWithMode, p as INTERNAL_MESSAGE_CHANNEL, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt, v as normalizeMessageChannel, x as GATEWAY_CLIENT_MODES, y as resolveGatewayMessageChannel } from "./chunk-CAZujdOi.js";
|
|
@@ -18,7 +18,7 @@ import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, T as VERSION, _
|
|
|
18
18
|
import { t as parseBooleanValue } from "./boolean-BW6OTjPi.js";
|
|
19
19
|
import { i as resolveShellEnvFallbackTimeoutMs, n as getShellPathFromLoginShell, s as isTruthyEnvValue } from "./shell-env-DgjeObDZ.js";
|
|
20
20
|
import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverSymiPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-CAWGTwb5.js";
|
|
21
|
-
import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-
|
|
21
|
+
import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-3jl2ulOE.js";
|
|
22
22
|
import { n as resolveCliName, t as formatCliCommand } from "./command-format-DPd9RN2g.js";
|
|
23
23
|
import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, h as parseFrontmatterBlock, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DO7WNsVJ.js";
|
|
24
24
|
import { n as redactToolDetail } from "./redact-DSOAcWMe.js";
|
|
@@ -29,7 +29,7 @@ import { n as resolveConversationLabel } from "./conversation-label-DTTqF8gH.js"
|
|
|
29
29
|
import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-BsT3BvfH.js";
|
|
30
30
|
import { t as emitSessionTranscriptUpdate } from "./transcript-events-ChU6IQwp.js";
|
|
31
31
|
import { n as saveJsonFile, t as loadJsonFile } from "./json-file-B7D44OOV.js";
|
|
32
|
-
import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-
|
|
32
|
+
import { a as parseGeminiAuth, c as resolveMemorySearchConfig, d as requireApiKey, f as resolveApiKeyForProvider, h as resolveModelAuthMode, i as resolveOllamaBaseUrl, l as getApiKeyForModel, m as resolveEnvApiKey, n as retryAsync, o as collectProviderApiKeysForExecution, p as resolveAwsSdkEnvVarName, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation, u as getCustomProviderApiKey } from "./manager-Ct4kRT7n.js";
|
|
33
33
|
import { r as resolveCopilotApiToken, t as DEFAULT_COPILOT_API_BASE_URL } from "./github-copilot-token-dYUr1mDQ.js";
|
|
34
34
|
import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-Ce-sg7EN.js";
|
|
35
35
|
import { n as resolveMarkdownTableMode } from "./markdown-tables-jQzXAsf3.js";
|
|
@@ -53,7 +53,7 @@ import { fileURLToPath } from "node:url";
|
|
|
53
53
|
import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
|
|
54
54
|
import crypto, { X509Certificate, createHash, createHmac, randomBytes, randomUUID } from "node:crypto";
|
|
55
55
|
import AjvPkg from "ajv";
|
|
56
|
-
import { WebSocket } from "ws";
|
|
56
|
+
import { WebSocket as WebSocket$1 } from "ws";
|
|
57
57
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
58
58
|
import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
|
|
59
59
|
import { BedrockClient, ListFoundationModelsCommand } from "@aws-sdk/client-bedrock";
|
|
@@ -3390,7 +3390,7 @@ async function getMemorySearchManager(params) {
|
|
|
3390
3390
|
const wrapper = new FallbackMemoryManager({
|
|
3391
3391
|
primary,
|
|
3392
3392
|
fallbackFactory: async () => {
|
|
3393
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
3393
|
+
const { MemoryIndexManager } = await import("./manager-Ct4kRT7n.js").then((n) => n.t);
|
|
3394
3394
|
return await MemoryIndexManager.get(params);
|
|
3395
3395
|
}
|
|
3396
3396
|
}, () => QMD_MANAGER_CACHE.delete(cacheKey));
|
|
@@ -3403,7 +3403,7 @@ async function getMemorySearchManager(params) {
|
|
|
3403
3403
|
}
|
|
3404
3404
|
}
|
|
3405
3405
|
try {
|
|
3406
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
3406
|
+
const { MemoryIndexManager } = await import("./manager-Ct4kRT7n.js").then((n) => n.t);
|
|
3407
3407
|
return { manager: await MemoryIndexManager.get(params) };
|
|
3408
3408
|
} catch (err) {
|
|
3409
3409
|
return {
|
|
@@ -5922,7 +5922,7 @@ var GatewayClient = class {
|
|
|
5922
5922
|
if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
|
|
5923
5923
|
});
|
|
5924
5924
|
}
|
|
5925
|
-
this.ws = new WebSocket(url, wsOptions);
|
|
5925
|
+
this.ws = new WebSocket$1(url, wsOptions);
|
|
5926
5926
|
this.ws.on("open", () => {
|
|
5927
5927
|
if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
|
|
5928
5928
|
const tlsError = this.validateTlsFingerprint();
|
|
@@ -6141,7 +6141,7 @@ var GatewayClient = class {
|
|
|
6141
6141
|
return null;
|
|
6142
6142
|
}
|
|
6143
6143
|
async request(method, params, opts) {
|
|
6144
|
-
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
|
|
6144
|
+
if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
|
|
6145
6145
|
const id = randomUUID();
|
|
6146
6146
|
const frame = {
|
|
6147
6147
|
type: "req",
|
|
@@ -7090,7 +7090,7 @@ async function routeReply(params) {
|
|
|
7090
7090
|
const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
|
|
7091
7091
|
const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
|
|
7092
7092
|
try {
|
|
7093
|
-
const { deliverOutboundPayloads } = await import("./deliver-
|
|
7093
|
+
const { deliverOutboundPayloads } = await import("./deliver-f3cIWxXT.js").then((n) => n.n);
|
|
7094
7094
|
return {
|
|
7095
7095
|
ok: true,
|
|
7096
7096
|
messageId: (await deliverOutboundPayloads({
|
|
@@ -42079,7 +42079,7 @@ async function deliverSessionMaintenanceWarning(params) {
|
|
|
42079
42079
|
return;
|
|
42080
42080
|
}
|
|
42081
42081
|
try {
|
|
42082
|
-
const { deliverOutboundPayloads } = await import("./deliver-
|
|
42082
|
+
const { deliverOutboundPayloads } = await import("./deliver-f3cIWxXT.js").then((n) => n.n);
|
|
42083
42083
|
await deliverOutboundPayloads({
|
|
42084
42084
|
cfg: params.cfg,
|
|
42085
42085
|
channel,
|
|
@@ -7,7 +7,7 @@ import "./ssrf-BCSnhba8.js";
|
|
|
7
7
|
import "./boolean-BW6OTjPi.js";
|
|
8
8
|
import "./shell-env-DgjeObDZ.js";
|
|
9
9
|
import "./manifest-registry-CAWGTwb5.js";
|
|
10
|
-
import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-
|
|
10
|
+
import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-3jl2ulOE.js";
|
|
11
11
|
import { t as formatCliCommand } from "./command-format-DPd9RN2g.js";
|
|
12
12
|
import "./redact-DSOAcWMe.js";
|
|
13
13
|
import { n as formatErrorMessage } from "./errors-BEU7IHU6.js";
|
|
@@ -6,8 +6,8 @@ import "./model-selection-BisYvTBb.js";
|
|
|
6
6
|
import "./reply-prefix-i-FPYcoQ.js";
|
|
7
7
|
import "./plugins-CZ_mYwXq.js";
|
|
8
8
|
import "./replies-0nzkXt6o.js";
|
|
9
|
-
import { n as runAgentTurn } from "./pi-embedded-
|
|
10
|
-
import "./deliver-
|
|
9
|
+
import { n as runAgentTurn } from "./pi-embedded-BxKs-STI.js";
|
|
10
|
+
import "./deliver-f3cIWxXT.js";
|
|
11
11
|
import "./diagnostic-BdRnGknC.js";
|
|
12
12
|
import "./diagnostic-session-state-DpxCUzoM.js";
|
|
13
13
|
import "./chunk-CAZujdOi.js";
|
|
@@ -16,14 +16,14 @@ import "./ssrf-BCSnhba8.js";
|
|
|
16
16
|
import "./boolean-BW6OTjPi.js";
|
|
17
17
|
import "./shell-env-DgjeObDZ.js";
|
|
18
18
|
import "./manifest-registry-CAWGTwb5.js";
|
|
19
|
-
import "./chrome-
|
|
19
|
+
import "./chrome-3jl2ulOE.js";
|
|
20
20
|
import "./skills-DO7WNsVJ.js";
|
|
21
21
|
import "./redact-DSOAcWMe.js";
|
|
22
22
|
import "./errors-BEU7IHU6.js";
|
|
23
23
|
import "./tokens-yWO1wD7Z.js";
|
|
24
24
|
import "./thinking-DgjGxdSP.js";
|
|
25
25
|
import "./paths-BsT3BvfH.js";
|
|
26
|
-
import "./manager-
|
|
26
|
+
import "./manager-Ct4kRT7n.js";
|
|
27
27
|
import "./github-copilot-token-dYUr1mDQ.js";
|
|
28
28
|
import "./sqlite-D8iYC_CU.js";
|
|
29
29
|
import "./markdown-tables-jQzXAsf3.js";
|