@symerian/symi 2.7.4 → 2.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/{audio-preflight-HILy3i0m.js → audio-preflight-DD18zIZd.js} +4 -4
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/{chrome-CiOKaTN-.js → chrome-BxwUEWrH.js} +7 -7
  5. package/dist/control-ui/css/style.css +0 -94
  6. package/dist/control-ui/js/history.js +33 -48
  7. package/dist/{deliver-D6IcPfbt.js → deliver-DtuY4Wgl.js} +1 -1
  8. package/dist/extensionAPI.js +6 -6
  9. package/dist/{image-D7Fl08gG.js → image-lp19FlzF.js} +1 -1
  10. package/dist/{pi-embedded-BzS693I1.js → pi-embedded-Ckr9dJ_g.js} +16 -16
  11. package/dist/{pi-embedded-helpers-DXAoe1Bx.js → pi-embedded-helpers-Dij3O6ox.js} +4 -4
  12. package/dist/{pw-ai-CANiWpMA.js → pw-ai-BO5cSmwD.js} +1 -1
  13. package/dist/{runner-BS9gGL5i.js → runner-Ct0suQrd.js} +1 -1
  14. package/dist/{web-Db_-ahjX.js → web-C_jJEyUH.js} +6 -6
  15. package/extensions/bluebubbles/package.json +1 -1
  16. package/extensions/copilot-proxy/package.json +1 -1
  17. package/extensions/diagnostics-otel/package.json +1 -1
  18. package/extensions/discord/package.json +1 -1
  19. package/extensions/feishu/package.json +1 -1
  20. package/extensions/google-antigravity-auth/package.json +1 -1
  21. package/extensions/google-gemini-cli-auth/package.json +1 -1
  22. package/extensions/googlechat/package.json +1 -1
  23. package/extensions/imessage/package.json +1 -1
  24. package/extensions/irc/package.json +1 -1
  25. package/extensions/learning-loop/package.json +1 -1
  26. package/extensions/line/package.json +1 -1
  27. package/extensions/llm-task/package.json +1 -1
  28. package/extensions/matrix/CHANGELOG.md +6 -0
  29. package/extensions/matrix/package.json +1 -1
  30. package/extensions/mattermost/package.json +1 -1
  31. package/extensions/memory-core/package.json +1 -1
  32. package/extensions/memory-lancedb/package.json +1 -1
  33. package/extensions/minimax-portal-auth/package.json +1 -1
  34. package/extensions/msteams/CHANGELOG.md +6 -0
  35. package/extensions/msteams/package.json +1 -1
  36. package/extensions/nextcloud-talk/package.json +1 -1
  37. package/extensions/nostr/CHANGELOG.md +6 -0
  38. package/extensions/nostr/package.json +1 -1
  39. package/extensions/open-prose/package.json +1 -1
  40. package/extensions/outlook/package.json +1 -1
  41. package/extensions/pipeline/package.json +1 -1
  42. package/extensions/signal/package.json +1 -1
  43. package/extensions/slack/package.json +1 -1
  44. package/extensions/telegram/package.json +1 -1
  45. package/extensions/tlon/package.json +1 -1
  46. package/extensions/twitch/CHANGELOG.md +6 -0
  47. package/extensions/twitch/package.json +1 -1
  48. package/extensions/voice-call/CHANGELOG.md +6 -0
  49. package/extensions/voice-call/package.json +1 -1
  50. package/extensions/whatsapp/package.json +1 -1
  51. package/extensions/zalo/CHANGELOG.md +6 -0
  52. package/extensions/zalo/package.json +1 -1
  53. package/extensions/zalouser/CHANGELOG.md +6 -0
  54. package/extensions/zalouser/package.json +1 -1
  55. package/package.json +1 -1
@@ -12,10 +12,10 @@ import "./accounts-8zZqL37v.js";
12
12
  import "./image-ops-ByaQt43P.js";
13
13
  import "./pi-model-discovery-j5tVLINv.js";
14
14
  import "./message-channel-BQINJQIT.js";
15
- import "./pi-embedded-helpers-DXAoe1Bx.js";
15
+ import "./pi-embedded-helpers-Dij3O6ox.js";
16
16
  import "./config-BUTI-mUZ.js";
17
17
  import "./manifest-registry-D-mTF1cj.js";
18
- import "./chrome-CiOKaTN-.js";
18
+ import "./chrome-BxwUEWrH.js";
19
19
  import "./skills-BNpGMnp-.js";
20
20
  import "./redact-1NGYV_8p.js";
21
21
  import "./errors-CPfngF0S.js";
@@ -25,10 +25,10 @@ import "./thinking-W85Rb32m.js";
25
25
  import "./accounts-DImOt9jX.js";
26
26
  import "./paths-DkMamAQ-.js";
27
27
  import "./tool-images-ChC2CXaN.js";
28
- import "./image-D7Fl08gG.js";
28
+ import "./image-lp19FlzF.js";
29
29
  import "./gemini-auth-ClVyOv9p.js";
30
30
  import "./local-roots-CC8jiKDk.js";
31
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-BS9gGL5i.js";
31
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-Ct0suQrd.js";
32
32
 
33
33
  //#region src/media-understanding/audio-preflight.ts
34
34
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.7.4",
3
- "commit": "408fc8177db75263a26939696ffe3bab1a40d7cf",
4
- "builtAt": "2026-04-20T22:38:49.195Z"
2
+ "version": "2.7.5",
3
+ "commit": "6dcb172940f9b976f2c3407c13e837389a4990f5",
4
+ "builtAt": "2026-04-20T22:46:58.415Z"
5
5
  }
@@ -1 +1 @@
1
- 604d5112c9f9ea49419b534ffe46c8804f304439ecca9ab926de41437a3f234d
1
+ 1c8cc415c6f6b398d23552856205e0dd0ac89ed82b3a7162ec68f8a360ee7d05
@@ -10,7 +10,7 @@ import fs$1 from "node:fs/promises";
10
10
  import { execFileSync, spawn } from "node:child_process";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket$1, { WebSocketServer } from "ws";
13
+ import WebSocket, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -178,7 +178,7 @@ async function ensureChromeExtensionRelayServer(opts) {
178
178
  let nextExtensionId = 1;
179
179
  const sendToExtension = async (payload) => {
180
180
  const ws = extensionWs;
181
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
181
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
182
182
  ws.send(JSON.stringify(payload));
183
183
  return await new Promise((resolve, reject) => {
184
184
  const timer = setTimeout(() => {
@@ -195,12 +195,12 @@ async function ensureChromeExtensionRelayServer(opts) {
195
195
  const broadcastToCdpClients = (evt) => {
196
196
  const msg = JSON.stringify(evt);
197
197
  for (const ws of cdpClients) {
198
- if (ws.readyState !== WebSocket$1.OPEN) continue;
198
+ if (ws.readyState !== WebSocket.OPEN) continue;
199
199
  ws.send(msg);
200
200
  }
201
201
  };
202
202
  const sendResponseToCdp = (ws, res) => {
203
- if (ws.readyState !== WebSocket$1.OPEN) return;
203
+ if (ws.readyState !== WebSocket.OPEN) return;
204
204
  ws.send(JSON.stringify(res));
205
205
  };
206
206
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -425,7 +425,7 @@ async function ensureChromeExtensionRelayServer(opts) {
425
425
  wssExtension.on("connection", (ws) => {
426
426
  extensionWs = ws;
427
427
  const ping = setInterval(() => {
428
- if (ws.readyState !== WebSocket$1.OPEN) return;
428
+ if (ws.readyState !== WebSocket.OPEN) return;
429
429
  ws.send(JSON.stringify({ method: "ping" }));
430
430
  }, 5e3);
431
431
  ws.on("message", (data) => {
@@ -743,7 +743,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
743
743
  }
744
744
  async function withCdpSocket(wsUrl, fn, opts) {
745
745
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
746
- const ws = new WebSocket$1(wsUrl, {
746
+ const ws = new WebSocket(wsUrl, {
747
747
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
748
748
  ...Object.keys(headers).length ? { headers } : {}
749
749
  });
@@ -1637,7 +1637,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1637
1637
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1638
1638
  return await new Promise((resolve) => {
1639
1639
  const headers = getHeadersWithAuth(wsUrl);
1640
- const ws = new WebSocket$1(wsUrl, {
1640
+ const ws = new WebSocket(wsUrl, {
1641
1641
  handshakeTimeout: timeoutMs,
1642
1642
  ...Object.keys(headers).length ? { headers } : {}
1643
1643
  });
@@ -5489,97 +5489,3 @@ body {
5489
5489
  }
5490
5490
  }
5491
5491
 
5492
- /* Informational footer for the CURRENT row (replaces action buttons). */
5493
- .history-session-current-note {
5494
- margin-top: 8px;
5495
- padding: 6px 10px;
5496
- font-family: var(--font-mono);
5497
- font-size: 10px;
5498
- letter-spacing: 0.05em;
5499
- color: rgba(16, 185, 129, 0.75);
5500
- background: rgba(16, 185, 129, 0.05);
5501
- border: 1px dashed rgba(16, 185, 129, 0.2);
5502
- border-radius: 4px;
5503
- text-align: center;
5504
- }
5505
-
5506
- /* "↺ Return to previous session" banner — top of drawer, one-click undo
5507
- of the last Load action when a recent .reset.* archive exists. */
5508
- .history-return-banner {
5509
- display: flex;
5510
- align-items: center;
5511
- justify-content: space-between;
5512
- gap: 12px;
5513
- margin: 10px 12px;
5514
- padding: 12px 14px;
5515
- background: linear-gradient(
5516
- 135deg,
5517
- rgba(0, 212, 255, 0.08) 0%,
5518
- rgba(139, 92, 246, 0.08) 100%
5519
- );
5520
- border: 1px solid rgba(0, 212, 255, 0.25);
5521
- border-radius: 8px;
5522
- }
5523
-
5524
- .history-return-label {
5525
- display: flex;
5526
- align-items: center;
5527
- gap: 10px;
5528
- flex: 1;
5529
- min-width: 0;
5530
- }
5531
-
5532
- .history-return-arrow {
5533
- font-size: 20px;
5534
- color: var(--accent-cyan);
5535
- line-height: 1;
5536
- }
5537
-
5538
- .history-return-text {
5539
- flex: 1;
5540
- min-width: 0;
5541
- }
5542
-
5543
- .history-return-title {
5544
- font-family: var(--font-mono);
5545
- font-size: 11px;
5546
- font-weight: 700;
5547
- letter-spacing: 0.08em;
5548
- color: rgba(255, 255, 255, 0.95);
5549
- text-transform: uppercase;
5550
- }
5551
-
5552
- .history-return-preview {
5553
- font-size: 11px;
5554
- color: rgba(255, 255, 255, 0.5);
5555
- margin-top: 2px;
5556
- white-space: nowrap;
5557
- overflow: hidden;
5558
- text-overflow: ellipsis;
5559
- }
5560
-
5561
- .history-return-btn {
5562
- padding: 6px 14px;
5563
- height: 30px;
5564
- background: rgba(0, 212, 255, 0.15);
5565
- border: 1px solid rgba(0, 212, 255, 0.35);
5566
- border-radius: 6px;
5567
- color: rgba(0, 212, 255, 1);
5568
- font-family: var(--font-mono);
5569
- font-size: 10px;
5570
- font-weight: 700;
5571
- letter-spacing: 0.08em;
5572
- cursor: pointer;
5573
- transition: all 0.15s;
5574
- flex-shrink: 0;
5575
- }
5576
-
5577
- .history-return-btn:hover {
5578
- background: rgba(0, 212, 255, 0.25);
5579
- border-color: rgba(0, 212, 255, 0.55);
5580
- }
5581
-
5582
- .history-return-btn:disabled {
5583
- opacity: 0.6;
5584
- cursor: wait;
5585
- }
@@ -75,25 +75,21 @@
75
75
  const favourites = sessions.filter((s) => s.kind !== "current" && s.favorited);
76
76
  const recent = sessions.filter((s) => s.kind !== "current" && !s.favorited);
77
77
 
78
- // "Return to previous session" candidate: the newest .reset.* archive
79
- // with real content, archived within the last 24h. Surfaces a
80
- // one-click undo for the most common "I just loaded a past session
81
- // and want to go back" flow.
78
+ // Newest `.reset.*` archive with content — this becomes the target of
79
+ // the Load Session button on the CURRENT row, giving the user a
80
+ // one-click path back to the session they just left.
82
81
  const returnCandidate = findReturnCandidate(sessions);
83
82
 
84
83
  drawerBody.innerHTML = "";
85
84
 
86
- if (returnCandidate) {
87
- drawerBody.appendChild(renderReturnBanner(returnCandidate));
88
- }
89
85
  if (current.length > 0) {
90
- drawerBody.appendChild(renderSection("CURRENT", current));
86
+ drawerBody.appendChild(renderSection("CURRENT", current, returnCandidate));
91
87
  }
92
88
  if (favourites.length > 0) {
93
- drawerBody.appendChild(renderSection("★ FAVOURITES", favourites));
89
+ drawerBody.appendChild(renderSection("★ FAVOURITES", favourites, null));
94
90
  }
95
91
  if (recent.length > 0) {
96
- drawerBody.appendChild(renderSection("RECENT", recent));
92
+ drawerBody.appendChild(renderSection("RECENT", recent, null));
97
93
  }
98
94
  }
99
95
 
@@ -127,33 +123,7 @@
127
123
  return candidates[0];
128
124
  }
129
125
 
130
- function renderReturnBanner(row) {
131
- const banner = document.createElement("div");
132
- banner.className = "history-return-banner";
133
- const when = formatTimestamp(row.archivedAt ?? row.lastActivity);
134
- const preview = row.preview
135
- ? escHtml(row.preview).slice(0, 60) + (row.preview.length > 60 ? "…" : "")
136
- : "(no messages)";
137
- banner.innerHTML = `
138
- <div class="history-return-label">
139
- <span class="history-return-arrow">↺</span>
140
- <div class="history-return-text">
141
- <div class="history-return-title">Return to previous session</div>
142
- <div class="history-return-preview">${preview} · ${escHtml(when)}</div>
143
- </div>
144
- </div>
145
- <button class="history-return-btn" type="button">Load</button>
146
- `;
147
- const btn = banner.querySelector(".history-return-btn");
148
- btn.addEventListener("click", async () => {
149
- btn.disabled = true;
150
- btn.textContent = "Loading…";
151
- await loadRow(row);
152
- });
153
- return banner;
154
- }
155
-
156
- function renderSection(title, rows) {
126
+ function renderSection(title, rows, returnCandidate) {
157
127
  const section = document.createElement("section");
158
128
  section.className = "history-section";
159
129
  const heading = document.createElement("div");
@@ -161,12 +131,15 @@
161
131
  heading.textContent = title;
162
132
  section.appendChild(heading);
163
133
  for (const row of rows) {
164
- section.appendChild(renderRow(row));
134
+ // Pass the return candidate through only for the CURRENT row — it
135
+ // drives the row's Load Session button (which returns the user to
136
+ // their previous session). Other rows use their own row data.
137
+ section.appendChild(renderRow(row, row.kind === "current" ? returnCandidate : null));
165
138
  }
166
139
  return section;
167
140
  }
168
141
 
169
- function renderRow(row) {
142
+ function renderRow(row, returnCandidate) {
170
143
  const item = document.createElement("div");
171
144
  item.className = "history-session-item history-session-" + row.kind;
172
145
 
@@ -176,14 +149,21 @@
176
149
  ? escHtml(row.preview) + (row.preview.length >= 80 ? "…" : "")
177
150
  : '<em style="opacity:0.5">No messages</em>';
178
151
 
179
- // Current-session footer is informational no buttons needed.
180
- const footerHtml =
181
- row.kind === "current"
182
- ? `<div class="history-session-current-note">◉ You're chatting in this session right now</div>`
183
- : `<footer class="history-session-actions">
184
- ${row.canLoad ? `<button class="history-load-btn">Load Session</button>` : ""}
185
- ${row.canDelete ? `<button class="history-delete-btn">Delete</button>` : ""}
186
- </footer>`;
152
+ // CURRENT row's Load Session button targets the most-recent .reset.*
153
+ // archive (returnCandidate). Non-current rows use their own file.
154
+ let footerHtml;
155
+ if (row.kind === "current") {
156
+ footerHtml = returnCandidate
157
+ ? `<footer class="history-session-actions">
158
+ <button class="history-load-btn" data-return="1">Load Session</button>
159
+ </footer>`
160
+ : "";
161
+ } else {
162
+ footerHtml = `<footer class="history-session-actions">
163
+ ${row.canLoad ? `<button class="history-load-btn">Load Session</button>` : ""}
164
+ ${row.canDelete ? `<button class="history-delete-btn">Delete</button>` : ""}
165
+ </footer>`;
166
+ }
187
167
 
188
168
  item.innerHTML = `
189
169
  <header class="history-session-header">
@@ -226,7 +206,12 @@
226
206
  const loadBtn = item.querySelector(".history-load-btn");
227
207
  loadBtn?.addEventListener("click", async (e) => {
228
208
  e.stopPropagation();
229
- await loadRow(row);
209
+ // On the CURRENT row, Load Session loads the most-recent archive
210
+ // (returnCandidate). On PAST/ARCHIVED rows, it loads that row.
211
+ const target = loadBtn.getAttribute("data-return") === "1" ? returnCandidate : row;
212
+ if (target) {
213
+ await loadRow(target);
214
+ }
230
215
  });
231
216
 
232
217
  const deleteBtn = item.querySelector(".history-delete-btn");
@@ -5,7 +5,7 @@ import { c as getActivePluginRegistry, v as createInternalHookEvent, y as trigge
5
5
  import { t as createSubsystemLogger } from "./subsystem-CZixfwU8.js";
6
6
  import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Cn6drXx2.js";
7
7
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-71oIavrF.js";
8
- import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-DXAoe1Bx.js";
8
+ import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-Dij3O6ox.js";
9
9
  import { d as getChannelDock } from "./thinking-W85Rb32m.js";
10
10
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-DTMTDXwE.js";
11
11
  import { n as resolveMarkdownTableMode } from "./markdown-tables-DawaaZEe.js";
@@ -7,13 +7,13 @@ import { a as resolveAgentIdentity } from "./reply-prefix-K_J_nfgx.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-Cn6drXx2.js";
10
- import { D as resolveAgentTimeoutMs, p as runEmbeddedPiAgent } from "./pi-embedded-BzS693I1.js";
10
+ import { D as resolveAgentTimeoutMs, p as runEmbeddedPiAgent } from "./pi-embedded-Ckr9dJ_g.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
14
14
  import "./send-BzKHnf3b.js";
15
15
  import "./send-RfIXG6-I.js";
16
- import "./deliver-D6IcPfbt.js";
16
+ import "./deliver-DtuY4Wgl.js";
17
17
  import "./diagnostic-D0xmLpej.js";
18
18
  import "./diagnostic-session-state-C1vRJs5w.js";
19
19
  import "./accounts-8zZqL37v.js";
@@ -21,10 +21,10 @@ import "./send-B986asZ7.js";
21
21
  import "./image-ops-ByaQt43P.js";
22
22
  import "./pi-model-discovery-j5tVLINv.js";
23
23
  import "./message-channel-BQINJQIT.js";
24
- import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-DXAoe1Bx.js";
24
+ import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-Dij3O6ox.js";
25
25
  import "./config-BUTI-mUZ.js";
26
26
  import "./manifest-registry-D-mTF1cj.js";
27
- import "./chrome-CiOKaTN-.js";
27
+ import "./chrome-BxwUEWrH.js";
28
28
  import "./skills-BNpGMnp-.js";
29
29
  import "./redact-1NGYV_8p.js";
30
30
  import "./errors-CPfngF0S.js";
@@ -34,7 +34,7 @@ import "./thinking-W85Rb32m.js";
34
34
  import "./accounts-DImOt9jX.js";
35
35
  import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-DkMamAQ-.js";
36
36
  import "./tool-images-ChC2CXaN.js";
37
- import "./image-D7Fl08gG.js";
37
+ import "./image-lp19FlzF.js";
38
38
  import "./manager-CgLdpXXM.js";
39
39
  import "./gemini-auth-ClVyOv9p.js";
40
40
  import "./sqlite-BNh23mUR.js";
@@ -47,7 +47,7 @@ import "./ir-F0moAwIl.js";
47
47
  import "./render-B1VqYyvo.js";
48
48
  import "./commands-registry-DYoNKo_h.js";
49
49
  import "./skill-commands-D8RiKDh0.js";
50
- import "./runner-BS9gGL5i.js";
50
+ import "./runner-Ct0suQrd.js";
51
51
  import "./fetch-DtLn7YU3.js";
52
52
  import "./channel-activity-D9q-fIPB.js";
53
53
  import "./tables-COnZ169v.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { D as isRecord, I as shortenHomeInString } from "./registry-BhoUuugi.js";
3
3
  import { G as resolveSymiAgentDir, S as getApiKeyForModel, X as normalizeSecretInput, _ as resolveImplicitBedrockProvider, g as normalizeProviders, v as resolveImplicitCopilotProvider, w as requireApiKey, y as resolveImplicitProviders } from "./model-selection-B8QKPmTL.js";
4
4
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
5
- import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-DXAoe1Bx.js";
5
+ import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-Dij3O6ox.js";
6
6
  import { n as loadConfig } from "./config-BUTI-mUZ.js";
7
7
  import { n as redactToolDetail } from "./redact-1NGYV_8p.js";
8
8
  import path from "node:path";
@@ -14,7 +14,7 @@ import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExis
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
15
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-BzKHnf3b.js";
16
16
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-RfIXG6-I.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-D6IcPfbt.js";
17
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-DtuY4Wgl.js";
18
18
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-D0xmLpej.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-8zZqL37v.js";
@@ -22,10 +22,10 @@ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normali
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-ByaQt43P.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BQINJQIT.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-DXAoe1Bx.js";
25
+ import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-Dij3O6ox.js";
26
26
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-BUTI-mUZ.js";
27
27
  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-D-mTF1cj.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CiOKaTN-.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-BxwUEWrH.js";
29
29
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-BNpGMnp-.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -36,7 +36,7 @@ import { t as resolveIMessageAccount } from "./accounts-DImOt9jX.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-DkMamAQ-.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
39
- import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-D7Fl08gG.js";
39
+ import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-lp19FlzF.js";
40
40
  import { i as resolveMemorySearchConfig, n as probeOllamaEmbeddingModels, r as resolveOllamaBaseUrl } from "./manager-CgLdpXXM.js";
41
41
  import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-BNh23mUR.js";
42
42
  import { n as retryAsync } from "./retry-QGp0jvVi.js";
@@ -49,7 +49,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-F0moAwIl.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-DYoNKo_h.js";
50
50
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-D8RiKDh0.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-BS9gGL5i.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-Ct0suQrd.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DtLn7YU3.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-DtXYsHEc.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-D9q-fIPB.js";
@@ -80,7 +80,7 @@ import { EdgeTTS } from "node-edge-tts";
80
80
  import AjvPkg from "ajv";
81
81
  import { createServer } from "node:http";
82
82
  import { ProxyAgent, fetch as fetch$1 } from "undici";
83
- import WebSocket$1, { WebSocket } from "ws";
83
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
84
84
  import { Buffer as Buffer$1 } from "node:buffer";
85
85
  import { createJiti } from "jiti";
86
86
  import { Type } from "@sinclair/typebox";
@@ -5732,7 +5732,7 @@ var GatewayClient = class {
5732
5732
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5733
5733
  });
5734
5734
  }
5735
- this.ws = new WebSocket(url, wsOptions);
5735
+ this.ws = new WebSocket$1(url, wsOptions);
5736
5736
  this.ws.on("open", () => {
5737
5737
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5738
5738
  const tlsError = this.validateTlsFingerprint();
@@ -5951,7 +5951,7 @@ var GatewayClient = class {
5951
5951
  return null;
5952
5952
  }
5953
5953
  async request(method, params, opts) {
5954
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
5954
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
5955
5955
  const id = randomUUID();
5956
5956
  const frame = {
5957
5957
  type: "req",
@@ -7217,7 +7217,7 @@ async function routeReply(params) {
7217
7217
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7218
7218
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7219
7219
  try {
7220
- const { deliverOutboundPayloads } = await import("./deliver-D6IcPfbt.js").then((n) => n.n);
7220
+ const { deliverOutboundPayloads } = await import("./deliver-DtuY4Wgl.js").then((n) => n.n);
7221
7221
  return {
7222
7222
  ok: true,
7223
7223
  messageId: (await deliverOutboundPayloads({
@@ -51109,7 +51109,7 @@ async function deliverSessionMaintenanceWarning(params) {
51109
51109
  return;
51110
51110
  }
51111
51111
  try {
51112
- const { deliverOutboundPayloads } = await import("./deliver-D6IcPfbt.js").then((n) => n.n);
51112
+ const { deliverOutboundPayloads } = await import("./deliver-DtuY4Wgl.js").then((n) => n.n);
51113
51113
  await deliverOutboundPayloads({
51114
51114
  cfg: params.cfg,
51115
51115
  channel,
@@ -54555,7 +54555,7 @@ async function describeStickerImage(params) {
54555
54555
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
54556
54556
  try {
54557
54557
  const buffer = await fs$1.readFile(imagePath);
54558
- const { describeImageWithModel } = await import("./image-D7Fl08gG.js").then((n) => n.n);
54558
+ const { describeImageWithModel } = await import("./image-lp19FlzF.js").then((n) => n.n);
54559
54559
  return (await describeImageWithModel({
54560
54560
  buffer,
54561
54561
  fileName: "sticker.webp",
@@ -57217,7 +57217,7 @@ async function preflightDiscordMessage(params) {
57217
57217
  let preflightTranscript;
57218
57218
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
57219
57219
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
57220
- const { transcribeFirstAudio } = await import("./audio-preflight-HILy3i0m.js");
57220
+ const { transcribeFirstAudio } = await import("./audio-preflight-DD18zIZd.js");
57221
57221
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
57222
57222
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
57223
57223
  ctx: {
@@ -61000,7 +61000,7 @@ function isVoiceChannelType(type) {
61000
61000
  function createDefaultDeps() {
61001
61001
  return {
61002
61002
  sendMessageWhatsApp: async (...args) => {
61003
- const { sendMessageWhatsApp } = await import("./web-Db_-ahjX.js");
61003
+ const { sendMessageWhatsApp } = await import("./web-C_jJEyUH.js");
61004
61004
  return await sendMessageWhatsApp(...args);
61005
61005
  },
61006
61006
  sendMessageTelegram: async (...args) => {
@@ -63905,7 +63905,7 @@ function createDiscordGatewayPlugin(params) {
63905
63905
  super(options);
63906
63906
  }
63907
63907
  createWebSocket(url) {
63908
- return new WebSocket$1(url, { agent });
63908
+ return new WebSocket(url, { agent });
63909
63909
  }
63910
63910
  }
63911
63911
  return new ProxyGatewayPlugin();
@@ -74123,7 +74123,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
74123
74123
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
74124
74124
  let preflightTranscript;
74125
74125
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
74126
- const { transcribeFirstAudio } = await import("./audio-preflight-HILy3i0m.js");
74126
+ const { transcribeFirstAudio } = await import("./audio-preflight-DD18zIZd.js");
74127
74127
  preflightTranscript = await transcribeFirstAudio({
74128
74128
  ctx: {
74129
74129
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -76280,7 +76280,7 @@ function loadWebLoginQr() {
76280
76280
  return webLoginQrPromise;
76281
76281
  }
76282
76282
  function loadWebChannel() {
76283
- webChannelPromise ??= import("./web-Db_-ahjX.js");
76283
+ webChannelPromise ??= import("./web-C_jJEyUH.js");
76284
76284
  return webChannelPromise;
76285
76285
  }
76286
76286
  function loadWhatsAppActions() {
@@ -10,7 +10,7 @@ import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
10
10
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-ByaQt43P.js";
11
11
  import { o as listDeliverableMessageChannels, s as normalizeMessageChannel } from "./message-channel-BQINJQIT.js";
12
12
  import { _ as parseDurationMs, a as writeConfigFile, n as loadConfig, s as parseByteSize, t as createConfigIO } from "./config-BUTI-mUZ.js";
13
- 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-CiOKaTN-.js";
13
+ 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-BxwUEWrH.js";
14
14
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-BNpGMnp-.js";
15
15
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-CPfngF0S.js";
16
16
  import { t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -931,7 +931,7 @@ function isModuleNotFoundError(err) {
931
931
  }
932
932
  async function loadPwAiModule(mode) {
933
933
  try {
934
- return await import("./pw-ai-CANiWpMA.js");
934
+ return await import("./pw-ai-BO5cSmwD.js");
935
935
  } catch (err) {
936
936
  if (mode === "soft") return null;
937
937
  if (isModuleNotFoundError(err)) return null;
@@ -3471,11 +3471,11 @@ function createProfileContext(opts, profile) {
3471
3471
  const userDataDir = resolveSymiUserDataDir(profile.name);
3472
3472
  const profileState = getProfileState();
3473
3473
  if (await isHttpReachable(300) && !profileState.running) try {
3474
- await (await import("./pw-ai-CANiWpMA.js")).closePlaywrightBrowserConnection();
3474
+ await (await import("./pw-ai-BO5cSmwD.js")).closePlaywrightBrowserConnection();
3475
3475
  } catch {}
3476
3476
  if (profileState.running) await stopRunningBrowser();
3477
3477
  try {
3478
- await (await import("./pw-ai-CANiWpMA.js")).closePlaywrightBrowserConnection();
3478
+ await (await import("./pw-ai-BO5cSmwD.js")).closePlaywrightBrowserConnection();
3479
3479
  } catch {}
3480
3480
  if (!fs.existsSync(userDataDir)) return {
3481
3481
  moved: false,
@@ -7,7 +7,7 @@ import "./github-copilot-token-BbsJ0Qbo.js";
7
7
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
8
8
  import "./config-BUTI-mUZ.js";
9
9
  import "./manifest-registry-D-mTF1cj.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-CiOKaTN-.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-BxwUEWrH.js";
11
11
  import "./redact-1NGYV_8p.js";
12
12
  import { n as formatErrorMessage } from "./errors-CPfngF0S.js";
13
13
  import "./ssrf-CxfFyMRZ.js";
@@ -4,7 +4,7 @@ import { G as resolveSymiAgentDir, T as resolveApiKeyForProvider, c as normalize
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-ByaQt43P.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-BUTI-mUZ.js";
7
- import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-D7Fl08gG.js";
7
+ import { S as ensureSymiModelsJson, t as describeImageWithModel } from "./image-lp19FlzF.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-ClVyOv9p.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-BheTNyes.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-CC8jiKDk.js";
@@ -8,13 +8,13 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-BbsJ0Qbo.js";
9
9
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
10
10
  import "./tokens-Cn6drXx2.js";
11
- import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-BzS693I1.js";
11
+ import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-Ckr9dJ_g.js";
12
12
  import "./plugins-71oIavrF.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import "./bindings-DYVakimr.js";
15
15
  import "./send-BzKHnf3b.js";
16
16
  import "./send-RfIXG6-I.js";
17
- import "./deliver-D6IcPfbt.js";
17
+ import "./deliver-DtuY4Wgl.js";
18
18
  import "./diagnostic-D0xmLpej.js";
19
19
  import "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import "./accounts-8zZqL37v.js";
@@ -22,10 +22,10 @@ import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocatio
22
22
  import "./image-ops-ByaQt43P.js";
23
23
  import "./pi-model-discovery-j5tVLINv.js";
24
24
  import "./message-channel-BQINJQIT.js";
25
- import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-DXAoe1Bx.js";
25
+ import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-Dij3O6ox.js";
26
26
  import { n as loadConfig } from "./config-BUTI-mUZ.js";
27
27
  import "./manifest-registry-D-mTF1cj.js";
28
- import "./chrome-CiOKaTN-.js";
28
+ import "./chrome-BxwUEWrH.js";
29
29
  import "./skills-BNpGMnp-.js";
30
30
  import "./redact-1NGYV_8p.js";
31
31
  import "./errors-CPfngF0S.js";
@@ -35,7 +35,7 @@ import { h as resolveChannelGroupRequireMention, m as resolveChannelGroupPolicy
35
35
  import "./accounts-DImOt9jX.js";
36
36
  import { s as resolveStorePath } from "./paths-DkMamAQ-.js";
37
37
  import "./tool-images-ChC2CXaN.js";
38
- import "./image-D7Fl08gG.js";
38
+ import "./image-lp19FlzF.js";
39
39
  import "./manager-CgLdpXXM.js";
40
40
  import "./gemini-auth-ClVyOv9p.js";
41
41
  import "./sqlite-BNh23mUR.js";
@@ -49,7 +49,7 @@ import "./render-B1VqYyvo.js";
49
49
  import "./commands-registry-DYoNKo_h.js";
50
50
  import "./skill-commands-D8RiKDh0.js";
51
51
  import { t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { p as registerUnhandledRejectionHandler } from "./runner-BS9gGL5i.js";
52
+ import { p as registerUnhandledRejectionHandler } from "./runner-Ct0suQrd.js";
53
53
  import "./fetch-DtLn7YU3.js";
54
54
  import { n as recordChannelActivity } from "./channel-activity-D9q-fIPB.js";
55
55
  import { t as convertMarkdownTables } from "./tables-COnZ169v.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/bluebubbles",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi BlueBubbles channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/copilot-proxy",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Copilot Proxy provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/diagnostics-otel",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi diagnostics OpenTelemetry exporter",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/discord",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Discord channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/feishu",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Feishu/Lark channel plugin (community maintained by @m1heng)",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-antigravity-auth",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Google Antigravity OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-gemini-cli-auth",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Gemini CLI OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/googlechat",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Google Chat channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/imessage",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi iMessage channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/irc",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi IRC channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/learning-loop",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Closed-loop learning extension with deterministic quality scoring and vector-indexed learning storage",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/line",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi LINE channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/llm-task",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi JSON-only LLM task plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/matrix",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Matrix channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/mattermost",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Mattermost channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-core",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi core memory search plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-lancedb",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi LanceDB-backed long-term memory plugin with auto-recall/capture",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/minimax-portal-auth",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi MiniMax Portal OAuth provider plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/msteams",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Microsoft Teams channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nextcloud-talk",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Nextcloud Talk channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nostr",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Nostr channel plugin for NIP-04 encrypted DMs",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/open-prose",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "OpenProse VM skill pack plugin (slash command + telemetry).",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/outlook",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Outlook 365 email integration via Microsoft Graph API",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/pipeline",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Pipeline workflow tool plugin (typed pipelines + resumable approvals)",
5
5
  "type": "module",
6
6
  "symi": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/signal",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Signal channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/slack",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Slack channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/telegram",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Telegram channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/tlon",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Tlon/Urbit channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/twitch",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi Twitch channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/voice-call",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi voice-call plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/whatsapp",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "private": true,
5
5
  "description": "Symi WhatsApp channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/zalo",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Zalo channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.5
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
3
9
  ## 2.7.4
4
10
 
5
11
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/zalouser",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Symi Zalo Personal Account plugin via zca-cli",
5
5
  "type": "module",
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "2.7.4",
3
+ "version": "2.7.5",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",