@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.
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/control-ui/css/style.css +81 -0
- package/dist/control-ui/js/history.js +65 -0
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/learning-loop/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/pipeline/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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";
|