@symerian/symi 2.7.2 → 2.7.4

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 (45) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/control-ui/css/style.css +81 -0
  4. package/dist/control-ui/js/history.js +65 -0
  5. package/extensions/bluebubbles/package.json +1 -1
  6. package/extensions/copilot-proxy/package.json +1 -1
  7. package/extensions/diagnostics-otel/package.json +1 -1
  8. package/extensions/discord/package.json +1 -1
  9. package/extensions/feishu/package.json +1 -1
  10. package/extensions/google-antigravity-auth/package.json +1 -1
  11. package/extensions/google-gemini-cli-auth/package.json +1 -1
  12. package/extensions/googlechat/package.json +1 -1
  13. package/extensions/imessage/package.json +1 -1
  14. package/extensions/irc/package.json +1 -1
  15. package/extensions/learning-loop/package.json +1 -1
  16. package/extensions/line/package.json +1 -1
  17. package/extensions/llm-task/package.json +1 -1
  18. package/extensions/matrix/CHANGELOG.md +12 -0
  19. package/extensions/matrix/package.json +1 -1
  20. package/extensions/mattermost/package.json +1 -1
  21. package/extensions/memory-core/package.json +1 -1
  22. package/extensions/memory-lancedb/package.json +1 -1
  23. package/extensions/minimax-portal-auth/package.json +1 -1
  24. package/extensions/msteams/CHANGELOG.md +12 -0
  25. package/extensions/msteams/package.json +1 -1
  26. package/extensions/nextcloud-talk/package.json +1 -1
  27. package/extensions/nostr/CHANGELOG.md +12 -0
  28. package/extensions/nostr/package.json +1 -1
  29. package/extensions/open-prose/package.json +1 -1
  30. package/extensions/outlook/package.json +1 -1
  31. package/extensions/pipeline/package.json +1 -1
  32. package/extensions/signal/package.json +1 -1
  33. package/extensions/slack/package.json +1 -1
  34. package/extensions/telegram/package.json +1 -1
  35. package/extensions/tlon/package.json +1 -1
  36. package/extensions/twitch/CHANGELOG.md +12 -0
  37. package/extensions/twitch/package.json +1 -1
  38. package/extensions/voice-call/CHANGELOG.md +12 -0
  39. package/extensions/voice-call/package.json +1 -1
  40. package/extensions/whatsapp/package.json +1 -1
  41. package/extensions/zalo/CHANGELOG.md +12 -0
  42. package/extensions/zalo/package.json +1 -1
  43. package/extensions/zalouser/CHANGELOG.md +12 -0
  44. package/extensions/zalouser/package.json +1 -1
  45. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.7.2",
3
- "commit": "4a66b5526b1c17cc7594da4dc98741ae91c94f47",
4
- "builtAt": "2026-04-20T21:23:54.538Z"
2
+ "version": "2.7.4",
3
+ "commit": "408fc8177db75263a26939696ffe3bab1a40d7cf",
4
+ "builtAt": "2026-04-20T22:38:49.195Z"
5
5
  }
@@ -1 +1 @@
1
- 9361cf30c46f9a94f774e1706734932870ae7163ef08147d055c391eef5a7753
1
+ 604d5112c9f9ea49419b534ffe46c8804f304439ecca9ab926de41437a3f234d
@@ -5502,3 +5502,84 @@ body {
5502
5502
  border-radius: 4px;
5503
5503
  text-align: center;
5504
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,8 +75,17 @@
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.
82
+ const returnCandidate = findReturnCandidate(sessions);
83
+
78
84
  drawerBody.innerHTML = "";
79
85
 
86
+ if (returnCandidate) {
87
+ drawerBody.appendChild(renderReturnBanner(returnCandidate));
88
+ }
80
89
  if (current.length > 0) {
81
90
  drawerBody.appendChild(renderSection("CURRENT", current));
82
91
  }
@@ -88,6 +97,62 @@
88
97
  }
89
98
  }
90
99
 
100
+ function findReturnCandidate(sessions) {
101
+ const now = Date.now();
102
+ const windowMs = 24 * 60 * 60 * 1000; // 24 hours
103
+ const candidates = sessions.filter((s) => {
104
+ if (s.kind !== "archived") {
105
+ return false;
106
+ }
107
+ if (s.archivedReason !== "reset") {
108
+ return false;
109
+ }
110
+ if (!s.msgCount || s.msgCount <= 0) {
111
+ return false;
112
+ }
113
+ if (!s.archivedAt) {
114
+ return false;
115
+ }
116
+ const archivedMs = new Date(s.archivedAt).getTime();
117
+ if (Number.isNaN(archivedMs)) {
118
+ return false;
119
+ }
120
+ return now - archivedMs < windowMs;
121
+ });
122
+ if (!candidates.length) {
123
+ return null;
124
+ }
125
+ // Newest first
126
+ candidates.sort((a, b) => (b.archivedAt ?? "").localeCompare(a.archivedAt ?? ""));
127
+ return candidates[0];
128
+ }
129
+
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
+
91
156
  function renderSection(title, rows) {
92
157
  const section = document.createElement("section");
93
158
  section.className = "history-section";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/bluebubbles",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "private": true,
5
5
  "description": "Symi JSON-only LLM task plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/matrix",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "private": true,
5
5
  "description": "Symi MiniMax Portal OAuth provider plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/msteams",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "description": "Symi Nextcloud Talk channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nostr",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "private": true,
5
5
  "description": "Symi Tlon/Urbit channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/twitch",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
4
4
  "private": true,
5
5
  "description": "Symi Twitch channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/voice-call",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "private": true,
5
5
  "description": "Symi WhatsApp channel plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/zalo",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
4
4
  "description": "Symi Zalo channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.7.4
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.7.3
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.7.2
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/zalouser",
3
- "version": "2.7.2",
3
+ "version": "2.7.4",
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.2",
3
+ "version": "2.7.4",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",