@songsid/agend 2.0.11-beta.31 โ 2.0.11-beta.32
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/ui/settings.html +43 -6
- package/package.json +1 -1
package/dist/ui/settings.html
CHANGED
|
@@ -108,6 +108,11 @@
|
|
|
108
108
|
<div class="card" id="agents"></div>
|
|
109
109
|
</section>
|
|
110
110
|
|
|
111
|
+
<section id="classicSection">
|
|
112
|
+
<div class="sec-head"><h2 data-i18n="classicChannels">๐ฎ ClassicBot Channels</h2></div>
|
|
113
|
+
<div class="card" id="classicList"></div>
|
|
114
|
+
</section>
|
|
115
|
+
|
|
111
116
|
<section>
|
|
112
117
|
<div class="sec-head"><h2 data-i18n="bots">๐ Bots</h2><div class="grow"></div><button class="sm" id="newBotBtn" data-i18n="add">+ Add</button></div>
|
|
113
118
|
<div id="newBot"></div>
|
|
@@ -146,7 +151,7 @@
|
|
|
146
151
|
// โโ i18n โโ
|
|
147
152
|
const I18N = {
|
|
148
153
|
en: {
|
|
149
|
-
title: "โ๏ธ AgEnD Settings", reloadFleet: "โป Reload Fleet", myAgents: "๐ค My Agents", bots: "๐ Bots",
|
|
154
|
+
title: "โ๏ธ AgEnD Settings", reloadFleet: "โป Reload Fleet", myAgents: "๐ค My Agents", bots: "๐ Bots", classicChannels: "๐ฎ ClassicBot Channels", noClassic: "No ClassicBot channels โ start one with /start in a chat.",
|
|
150
155
|
general: "โ๏ธ General Settings", autoUpdate: "๐ Auto Update", whatsNew: "๐ What's New", advanced: "๐ Advanced",
|
|
151
156
|
expand: "โถ Expand", collapse: "โผ Collapse", new: "+ New", add: "+ Add", searchPh: "๐ Searchโฆ",
|
|
152
157
|
edit: "Edit", close: "Close", save: "Save", cancel: "Cancel", create: "Create", start: "Start", stop: "Stop",
|
|
@@ -163,7 +168,7 @@
|
|
|
163
168
|
wnIntro: "Recent highlights:",
|
|
164
169
|
},
|
|
165
170
|
"zh-TW": {
|
|
166
|
-
title: "โ๏ธ AgEnD ่จญๅฎ", reloadFleet: "โป ้ๆฐ่ผๅ
ฅ", myAgents: "๐ค ๆ็ Agent", bots: "๐ ๆฉๅจไบบ",
|
|
171
|
+
title: "โ๏ธ AgEnD ่จญๅฎ", reloadFleet: "โป ้ๆฐ่ผๅ
ฅ", myAgents: "๐ค ๆ็ Agent", bots: "๐ ๆฉๅจไบบ", classicChannels: "๐ฎ ClassicBot ้ ป้", noClassic: "ๆฒๆ ClassicBot ้ ป้ โ ๅจ่ๅคฉไธญ็จ /start ๅปบ็ซใ",
|
|
167
172
|
general: "โ๏ธ ไธ่ฌ่จญๅฎ", autoUpdate: "๐ ่ชๅๆดๆฐ", whatsNew: "๐ ๆดๆฐ้้ป", advanced: "๐ ้ฒ้",
|
|
168
173
|
expand: "โถ ๅฑ้", collapse: "โผ ๆถๅ", new: "+ ๆฐๅข", add: "+ ๅ ๅ
ฅ", searchPh: "๐ ๆๅฐโฆ",
|
|
169
174
|
edit: "็ทจ่ผฏ", close: "้้", save: "ๅฒๅญ", cancel: "ๅๆถ", create: "ๅปบ็ซ", start: "ๅๅ", stop: "ๅๆญข",
|
|
@@ -257,7 +262,7 @@
|
|
|
257
262
|
}
|
|
258
263
|
|
|
259
264
|
// โโ State โโ
|
|
260
|
-
const state = { fleet: {}, classic: {}, live: {}, fleetUp: false, advFmt: "yaml", advEdit: false, collapsedGroups: new Set(), updateSchedule: null, version: "", newAgentOpen: false, newBotOpen: false };
|
|
265
|
+
const state = { fleet: {}, classic: {}, classicStatus: {}, live: {}, fleetUp: false, advFmt: "yaml", advEdit: false, collapsedGroups: new Set(), updateSchedule: null, version: "", newAgentOpen: false, newBotOpen: false };
|
|
261
266
|
const channels = () => state.fleet.channels || (state.fleet.channel ? [state.fleet.channel] : []);
|
|
262
267
|
const channelIds = () => channels().map(c => c.id || c.type).filter(Boolean);
|
|
263
268
|
const chLabel = (i) => i === 0 ? "primary" : "persona";
|
|
@@ -421,6 +426,34 @@
|
|
|
421
426
|
host.append(item);
|
|
422
427
|
});
|
|
423
428
|
}
|
|
429
|
+
|
|
430
|
+
// โโ ClassicBot Channels (read-only; created dynamically via /start /stop) โโ
|
|
431
|
+
function renderClassic() {
|
|
432
|
+
const host = $("classicList"); if (!host) return; host.innerHTML = "";
|
|
433
|
+
const chans = Object.values(state.classic?.channels || {});
|
|
434
|
+
if (!chans.length) { host.className = "card empty"; host.textContent = t("noClassic"); return; }
|
|
435
|
+
const filter = ($("agentSearch")?.value || "").trim().toLowerCase();
|
|
436
|
+
let list = chans;
|
|
437
|
+
if (filter) list = list.filter(c => String(c.name || "").toLowerCase().includes(filter) || String(c.instanceName || "").toLowerCase().includes(filter));
|
|
438
|
+
if (!list.length) { host.className = "card empty"; host.textContent = "โ"; return; }
|
|
439
|
+
host.className = "card";
|
|
440
|
+
list.sort((a, b) => {
|
|
441
|
+
const sa = STATUS_ORDER[state.classicStatus[a.instanceName] || "stopped"], sb = STATUS_ORDER[state.classicStatus[b.instanceName] || "stopped"];
|
|
442
|
+
return sa !== sb ? sa - sb : String(a.name || "").localeCompare(String(b.name || ""));
|
|
443
|
+
});
|
|
444
|
+
for (const c of list) {
|
|
445
|
+
const st = state.classicStatus[c.instanceName] || "stopped";
|
|
446
|
+
const adapter = c.adapterId || "discord";
|
|
447
|
+
host.append(el("div", { class: "item" }, el("div", { class: "item-row" },
|
|
448
|
+
el("span", { class: "dot " + st, title: STATUS_TEXT[st] || st }),
|
|
449
|
+
el("span", { class: "name", title: c.instanceName || "" }, c.name || c.instanceName || "?"),
|
|
450
|
+
el("span", { class: "sub", style: "margin:0" }, c.backend || state.classic?.defaults?.backend || "claude-code"),
|
|
451
|
+
el("span", { class: "tag" + (adapter !== "discord" ? " persona" : "") }, adapter),
|
|
452
|
+
c.collab ? el("span", { class: "tag", style: "background:#ecfdf5;color:#065f46" }, "collab") : null,
|
|
453
|
+
)));
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
424
457
|
async function saveChannels(msgEl) {
|
|
425
458
|
const res = await api("/api/settings/fleet/channels", { method: "PUT", body: JSON.stringify(channels()) });
|
|
426
459
|
if (msgEl) resultMsg(msgEl, res);
|
|
@@ -575,12 +608,16 @@
|
|
|
575
608
|
}
|
|
576
609
|
|
|
577
610
|
// โโ Load / render โโ
|
|
578
|
-
function renderAll() { renderAgents(); renderBots(); renderGeneral(); renderAutoUpdate(); renderWhatsNew(); renderAdvanced(); applyStaticI18n(); }
|
|
611
|
+
function renderAll() { renderAgents(); renderClassic(); renderBots(); renderGeneral(); renderAutoUpdate(); renderWhatsNew(); renderAdvanced(); applyStaticI18n(); }
|
|
579
612
|
async function reloadLive() {
|
|
580
613
|
const f = await api("/api/fleet");
|
|
581
614
|
state.fleetUp = f.ok;
|
|
582
615
|
state.live = {}; if (f.ok && f.body?.instances) for (const i of f.body.instances) state.live[i.name] = { status: i.status };
|
|
583
|
-
|
|
616
|
+
// /api/fleet is fleet-config only; classic instance statuses come from the
|
|
617
|
+
// merged roster (/api/profiles, open GET).
|
|
618
|
+
const pr = await api("/api/profiles");
|
|
619
|
+
state.classicStatus = {}; if (pr.ok && Array.isArray(pr.body)) for (const r of pr.body) state.classicStatus[r.instance_name] = r.status;
|
|
620
|
+
renderAgents(); renderBots(); renderClassic();
|
|
584
621
|
}
|
|
585
622
|
async function reload() {
|
|
586
623
|
const f = await api("/api/settings/fleet");
|
|
@@ -598,7 +635,7 @@
|
|
|
598
635
|
$("helpBackdrop").onclick = () => setHelp(false);
|
|
599
636
|
$("langBtn").onclick = () => { lang = lang === "en" ? "zh-TW" : "en"; localStorage.setItem("agend_lang", lang); renderAll(); };
|
|
600
637
|
$("verBadge").onclick = () => { const b = $("wnBody"); b.classList.add("open"); $("wnToggle").textContent = t("collapse"); b.scrollIntoView({ behavior: "smooth" }); };
|
|
601
|
-
$("agentSearch").oninput = () => renderAgents();
|
|
638
|
+
$("agentSearch").oninput = () => { renderAgents(); renderClassic(); };
|
|
602
639
|
$("newAgentBtn").onclick = () => { state.newAgentOpen = !state.newAgentOpen; $("newAgentBtn").textContent = state.newAgentOpen ? t("cancel") : t("new"); renderNewAgent(state.newAgentOpen); };
|
|
603
640
|
$("newBotBtn").onclick = () => { state.newBotOpen = !state.newBotOpen; $("newBotBtn").textContent = state.newBotOpen ? t("cancel") : t("add"); renderNewBot(state.newBotOpen); };
|
|
604
641
|
$("advToggle").onclick = () => { const b = $("advBody"); const open = !b.classList.contains("open"); b.classList.toggle("open", open); $("advToggle").textContent = open ? t("collapse") : t("expand"); };
|