@songsid/agend 2.2.0-beta.12 → 2.2.0-beta.14
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/cli.js +12 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +1 -0
- package/dist/daemon.js +31 -4
- package/dist/daemon.js.map +1 -1
- package/dist/fleet-manager.d.ts +14 -5
- package/dist/fleet-manager.js +54 -52
- package/dist/fleet-manager.js.map +1 -1
- package/dist/instance-avatar.d.ts +1 -1
- package/dist/instance-avatar.js +7 -4
- package/dist/instance-avatar.js.map +1 -1
- package/dist/locale.js +48 -22
- package/dist/locale.js.map +1 -1
- package/dist/restart-progress.d.ts +0 -2
- package/dist/restart-progress.js +0 -2
- package/dist/restart-progress.js.map +1 -1
- package/dist/topic-commands.d.ts +4 -0
- package/dist/topic-commands.js +9 -2
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.js +6 -1
- package/dist/transcript-sources.js.map +1 -1
- package/dist/ui/chat-strings.js +10 -10
- package/dist/ui/chat-tour.js +17 -14
- package/dist/ui/panel-chat.js +9 -9
- package/dist/ui/panel-fleet.js +15 -2
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-needs.js +10 -7
- package/dist/ui/panel-settings.js +9 -5
- package/dist/ui/settings-dialogs.js +2 -2
- package/dist/ui/settings-model.js +3 -1
- package/dist/ui/settings-strings.js +8 -8
- package/dist/ui/shared/app.css +3 -2
- package/dist/ui/shared/header-tools.js +22 -10
- package/dist/ui/shared/panel-view.js +7 -4
- package/dist/ui/shared/signin.js +15 -9
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/signin.html +8 -3
- package/dist/update-launch.js +12 -6
- package/dist/update-launch.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,6 +13,8 @@ import { UsageBody, UsageDialog } from "./usage-dialog.js";
|
|
|
13
13
|
|
|
14
14
|
export const TEXT_SIZE_KEY = "agend_text_size";
|
|
15
15
|
export const VIEW_FIT_KEY = "agend_view_fit";
|
|
16
|
+
/** #1869: set once this device's View Fit was put back (a size chosen on another page used to turn it off). */
|
|
17
|
+
export const VIEW_FIT_RESTORED_KEY = "agend_view_fit_1869";
|
|
16
18
|
const LEGACY_DENSITY_KEY = "agend_view_density";
|
|
17
19
|
export const TEXT_SIZES = ["s", "m", "l"];
|
|
18
20
|
/** View's terminal: its fitted size times this (S / M / L are View's old compact / – / comfortable). */
|
|
@@ -24,6 +26,7 @@ const write = (k, v) => { try { localStorage.setItem(k, v); } catch { /* this pa
|
|
|
24
26
|
/**
|
|
25
27
|
* This device's choice: `agend_text_size` (+ View's Fit), else — once — from View's `agend_view_density`:
|
|
26
28
|
* comfortable → L, compact → S (Fit off); fit, or nothing → M with View on Fit (View's default, as before).
|
|
29
|
+
* #1869: until then any page's S / M / L also turned View's Fit off, so a Fit off from before is put back once.
|
|
27
30
|
*/
|
|
28
31
|
export function loadTextSize() {
|
|
29
32
|
let size = read(TEXT_SIZE_KEY), fit = read(VIEW_FIT_KEY);
|
|
@@ -31,7 +34,11 @@ export function loadTextSize() {
|
|
|
31
34
|
const legacy = read(LEGACY_DENSITY_KEY);
|
|
32
35
|
size = legacy === "comfortable" ? "l" : legacy === "compact" ? "s" : "m";
|
|
33
36
|
fit = legacy === "comfortable" || legacy === "compact" ? "0" : "1";
|
|
34
|
-
write(TEXT_SIZE_KEY, size); write(VIEW_FIT_KEY, fit);
|
|
37
|
+
write(TEXT_SIZE_KEY, size); write(VIEW_FIT_KEY, fit); write(VIEW_FIT_RESTORED_KEY, "1");
|
|
38
|
+
}
|
|
39
|
+
if (read(VIEW_FIT_RESTORED_KEY) !== "1") {
|
|
40
|
+
if (fit === "0") { fit = "1"; write(VIEW_FIT_KEY, fit); }
|
|
41
|
+
write(VIEW_FIT_RESTORED_KEY, "1");
|
|
35
42
|
}
|
|
36
43
|
return { size, viewFit: fit !== "0" };
|
|
37
44
|
}
|
|
@@ -50,11 +57,15 @@ export function initTextSize() {
|
|
|
50
57
|
window.addEventListener("storage", (e) => { if (!e || e.key === TEXT_SIZE_KEY || e.key === VIEW_FIT_KEY || e.key === null) textSizeStore.set(loadTextSize()); });
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
60
|
+
/**
|
|
61
|
+
* A size chosen anywhere is the size everywhere. View's Fit is left only from View's own Aa (`view`): a size chosen on
|
|
62
|
+
* another page keeps View on Fit (#1869).
|
|
63
|
+
*/
|
|
64
|
+
export function setTextSize(size, { view = false } = {}) {
|
|
55
65
|
if (!TEXT_SIZES.includes(size)) return;
|
|
56
|
-
write(TEXT_SIZE_KEY, size);
|
|
57
|
-
|
|
66
|
+
write(TEXT_SIZE_KEY, size);
|
|
67
|
+
if (view) write(VIEW_FIT_KEY, "0");
|
|
68
|
+
textSizeStore.set((s) => ({ size, viewFit: view ? false : s.viewFit }));
|
|
58
69
|
}
|
|
59
70
|
export function setViewFit() { write(VIEW_FIT_KEY, "1"); textSizeStore.set((s) => ({ ...s, viewFit: true })); }
|
|
60
71
|
|
|
@@ -69,7 +80,7 @@ export function TextSizeButton({ view = false }) {
|
|
|
69
80
|
const next = order[(order.indexOf(cur) + 1) % order.length];
|
|
70
81
|
const name = t(`app.textSize_${cur}`);
|
|
71
82
|
const label = t("app.textSize", name);
|
|
72
|
-
return html`<button type="button" class="btn btn-ghost btn-sm hd-text" onClick=${() => (next === "fit" ? setViewFit() : setTextSize(next))}
|
|
83
|
+
return html`<button type="button" class="btn btn-ghost btn-sm hd-text" onClick=${() => (next === "fit" ? setViewFit() : setTextSize(next, { view }))}
|
|
73
84
|
title=${label} aria-label=${label}><${Icon} name="type" size=${16} /><span class="hide-narrow" aria-hidden="true"><span class="hd-text-names">${
|
|
74
85
|
["fit", ...TEXT_SIZES].map(k => html`<span key=${k} class=${k === cur ? "on" : undefined}>${t(`app.textSize_${k}`)}</span>`)}</span></span></button>`;
|
|
75
86
|
}
|
|
@@ -80,14 +91,15 @@ export function usageOffered() {
|
|
|
80
91
|
}
|
|
81
92
|
|
|
82
93
|
// #1673: the rail. Wide enough for it beside the sidebar and the page: RAIL_MEDIA (followed as it changes). Shown or
|
|
83
|
-
// hidden is this device's choice (agend_usage_rail; "
|
|
94
|
+
// hidden is this device's choice (agend_usage_rail; "1" = shown, "0" = hidden) — a layout choice, not synced (#1665).
|
|
95
|
+
// #1854 (rank 7): a device that never chose starts with it hidden — a quiet first page; ◔ shows it (and remembers).
|
|
84
96
|
export const RAIL_MEDIA = "(min-width: 1200px)";
|
|
85
97
|
export const RAIL_KEY = "agend_usage_rail";
|
|
86
98
|
/** The pages whose header has ◔ — the rail is theirs (Log's too: one frame on every tab of an instance). */
|
|
87
99
|
export const RAIL_PANELS = ["chat", "view", "log", "details", "fleet"];
|
|
88
|
-
export const usageRailStore = createStore({ open:
|
|
89
|
-
/** A page load: this device's choice. */
|
|
90
|
-
export function initUsageRail() { usageRailStore.set({ open: read(RAIL_KEY)
|
|
100
|
+
export const usageRailStore = createStore({ open: false });
|
|
101
|
+
/** A page load: this device's choice; none made yet = hidden. */
|
|
102
|
+
export function initUsageRail() { usageRailStore.set({ open: read(RAIL_KEY) === "1" }); }
|
|
91
103
|
export function setUsageRail(open) { write(RAIL_KEY, open ? "1" : "0"); usageRailStore.set({ open: !!open }); }
|
|
92
104
|
const railQuery = () => { try { return typeof matchMedia === "function" ? matchMedia(RAIL_MEDIA) : null; } catch { return null; } };
|
|
93
105
|
/** Whether the screen is wide enough for the rail, now and as it changes. */
|
|
@@ -114,7 +114,9 @@ export { viewStore };
|
|
|
114
114
|
// ── The panel ──
|
|
115
115
|
|
|
116
116
|
// readStream: one stream of reads under a lease (read-stream.js; View's pane and roster use it).
|
|
117
|
-
|
|
117
|
+
// S / M / L: the fitted size kept within 12–22 px, then scaled. Fit (#1869): never larger than what fits — only a 6 px
|
|
118
|
+
// floor for legibility (a grid too wide for the box even at 6 px, e.g. 200 columns on a phone, still scrolls).
|
|
119
|
+
const MIN_PX = 12, MAX_PX = 22, FIT_FLOOR_PX = 6;
|
|
118
120
|
|
|
119
121
|
export function ViewPanel({ route, navKey }) {
|
|
120
122
|
const lease = useLease(navKey);
|
|
@@ -219,10 +221,11 @@ function Terminal({ name, lease, density }) {
|
|
|
219
221
|
const lh = parseFloat(pcs.lineHeight) / parseFloat(pcs.fontSize);
|
|
220
222
|
const lineH = Number.isFinite(lh) && lh > 0 ? lh : 1.2;
|
|
221
223
|
let size = Math.min(innerW / (g.cols * glyphRatio(p)), innerH / (g.rows * lineH)) * 0.995;
|
|
222
|
-
size = Math.max(
|
|
223
|
-
size = Math.max(8, Math.min(size, 32));
|
|
224
|
+
if (density === "fit") size = Math.max(FIT_FLOOR_PX, Math.min(size, MAX_PX));
|
|
225
|
+
else size = Math.max(8, Math.min(Math.max(MIN_PX, Math.min(size, MAX_PX)) * (VIEW_SCALE[density] || 1), 32));
|
|
224
226
|
g.key = key;
|
|
225
|
-
|
|
227
|
+
// A small change is skipped only when growing (the size applied still fits); a smaller box always shrinks it.
|
|
228
|
+
if (size >= g.applied && size - g.applied < 0.75) return;
|
|
226
229
|
g.applied = size;
|
|
227
230
|
p.style.fontSize = `${size.toFixed(2)}px`; // CSSOM, never a style attribute (#1300)
|
|
228
231
|
};
|
package/dist/ui/shared/signin.js
CHANGED
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
const $ = (id) => document.getElementById(id);
|
|
12
12
|
const T = {
|
|
13
13
|
en: {
|
|
14
|
-
checking: "Checking your session…", title: "Sign in to AgEnD", lead: "Enter
|
|
14
|
+
checking: "Checking your session…", title: "Sign in to AgEnD", lead: "Enter your sign-in code.",
|
|
15
15
|
label: "One-time code", submit: "Sign in", working: "Signing in…",
|
|
16
|
-
hint: "Send /web
|
|
17
|
-
|
|
16
|
+
hint: "No code? Send /web in General, then press a sign-in button to get one.",
|
|
17
|
+
nobot: "No chat bot?", nobot_body: "Ask the operator to run agend web --code on the AgEnD computer.",
|
|
18
|
+
refused: "The code is invalid or no longer works. Send /web in General, then press a sign-in button for a new code.",
|
|
19
|
+
unconfirmed: "Sign-in could not be confirmed. Get a new code and try again; if it keeps failing, contact the operator.",
|
|
18
20
|
paused: "Too many wrong codes — sign-in is paused for a few minutes.",
|
|
19
21
|
network: "Could not reach AgEnD. Check the connection and try again.",
|
|
20
22
|
resend: "Send me a new code", resent: "A new code was sent to you privately in chat. Enter it above.",
|
|
@@ -22,10 +24,12 @@
|
|
|
22
24
|
resend_refused: "A new code could not be sent. Ask for one with /web.",
|
|
23
25
|
},
|
|
24
26
|
"zh-TW": {
|
|
25
|
-
checking: "正在確認登入狀態…", title: "登入 AgEnD", lead: "
|
|
27
|
+
checking: "正在確認登入狀態…", title: "登入 AgEnD", lead: "輸入登入碼。",
|
|
26
28
|
label: "一次性登入碼", submit: "登入", working: "登入中…",
|
|
27
|
-
hint: "
|
|
28
|
-
|
|
29
|
+
hint: "沒收到?在 General 傳 /web,再按登入按鈕取碼。",
|
|
30
|
+
nobot: "沒有聊天 bot?", nobot_body: "請管理員在 AgEnD 電腦執行 agend web --code。",
|
|
31
|
+
refused: "登入碼無效或已失效。請在 General 傳 /web,再按登入按鈕取新碼。",
|
|
32
|
+
unconfirmed: "登入暫時無法確認。請重新取碼再試;若仍失敗,請聯絡管理員。",
|
|
29
33
|
paused: "錯誤次數過多,登入暫停幾分鐘。",
|
|
30
34
|
network: "連不上 AgEnD,請檢查連線後再試。",
|
|
31
35
|
resend: "傳一組新的登入碼給我", resent: "新的登入碼已私訊給你,請在上方輸入。",
|
|
@@ -47,8 +51,8 @@
|
|
|
47
51
|
history.replaceState(null, "", here.pathname + here.search + here.hash);
|
|
48
52
|
}
|
|
49
53
|
} catch { /* nothing to clean */ }
|
|
50
|
-
// The command in the
|
|
51
|
-
// and a word, alpha.2 sweep); the text around it is text.
|
|
54
|
+
// The command in the "No chat bot?" help is a <code> that never breaks across lines (a break inside "--code" reads as
|
|
55
|
+
// two dashes and a word, alpha.2 sweep); the text around it is text.
|
|
52
56
|
const CMD = "agend web --code";
|
|
53
57
|
document.querySelectorAll("[data-i18n]").forEach((el) => {
|
|
54
58
|
const text = t(el.getAttribute("data-i18n"));
|
|
@@ -163,7 +167,9 @@
|
|
|
163
167
|
body: JSON.stringify({ code: $("code").value }),
|
|
164
168
|
});
|
|
165
169
|
if (r.ok) { clearBounce(); location.replace(nextTarget()); return; }
|
|
166
|
-
|
|
170
|
+
// #1854: a 5xx is the server failing to confirm the sign-in (503: a public link's notice did not go out), not a
|
|
171
|
+
// wrong code — say so. The code is spent either way: the way on is a new one.
|
|
172
|
+
msg.textContent = r.status === 429 ? t("paused") : r.status >= 500 ? t("unconfirmed") : t("refused");
|
|
167
173
|
} catch {
|
|
168
174
|
msg.textContent = t("network");
|
|
169
175
|
}
|
|
@@ -54,6 +54,7 @@ const P = {
|
|
|
54
54
|
panel: () => html`<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M14 4v16"/>`,
|
|
55
55
|
back: () => html`<path d="M19 12H5M12 19l-7-7 7-7"/>`,
|
|
56
56
|
forward: () => html`<path d="M5 12h14M12 5l7 7-7 7"/>`,
|
|
57
|
+
book: () => html`<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20V3H6.5A2.5 2.5 0 0 0 4 5.5z"/><path d="M4 19.5A2.5 2.5 0 0 0 6.5 22H20v-5"/>`,
|
|
57
58
|
external: () => html`<path d="M14 4h6v6M20 4l-9 9"/><path d="M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/>`,
|
|
58
59
|
};
|
|
59
60
|
|
package/dist/ui/signin.html
CHANGED
|
@@ -32,7 +32,11 @@
|
|
|
32
32
|
#msg { min-height: 1.5em; margin-top: 14px; font-size: var(--fs-sm); color: var(--danger); }
|
|
33
33
|
#msg.ok { color: var(--text-2); }
|
|
34
34
|
.hint { margin-top: 18px; font-size: var(--fs-xs); color: var(--text-3); }
|
|
35
|
-
.hint code { white-space: nowrap; font-family: var(--font-mono); }
|
|
35
|
+
.hint code, .help code { white-space: nowrap; font-family: var(--font-mono); }
|
|
36
|
+
/* #1854: the operator's way in (no chat bot) — closed until asked for. */
|
|
37
|
+
.help { margin-top: 8px; font-size: var(--fs-xs); color: var(--text-3); }
|
|
38
|
+
.help summary { cursor: pointer; width: fit-content; }
|
|
39
|
+
.help p { margin: 6px 0 0; color: var(--text-3); }
|
|
36
40
|
[hidden] { display: none !important; }
|
|
37
41
|
</style>
|
|
38
42
|
</head>
|
|
@@ -42,14 +46,15 @@
|
|
|
42
46
|
<div id="checking" data-i18n="checking">Checking your session…</div>
|
|
43
47
|
<form id="form" hidden autocomplete="off">
|
|
44
48
|
<h1 data-i18n="title">Sign in to AgEnD</h1>
|
|
45
|
-
<p data-i18n="lead">Enter
|
|
49
|
+
<p data-i18n="lead">Enter your sign-in code.</p>
|
|
46
50
|
<label for="code" data-i18n="label">One-time code</label>
|
|
47
51
|
<input id="code" name="code" inputmode="text" autocomplete="one-time-code" autocapitalize="characters"
|
|
48
52
|
autocorrect="off" spellcheck="false" maxlength="12" placeholder="XXXX-XXXX" required>
|
|
49
53
|
<button id="go" type="submit" data-i18n="submit">Sign in</button>
|
|
50
54
|
<button id="resend" type="button" class="secondary" hidden data-i18n="resend">Send me a new code</button>
|
|
51
55
|
<div id="msg" role="alert" aria-live="polite"></div>
|
|
52
|
-
<div class="hint" data-i18n="hint">Send /web
|
|
56
|
+
<div class="hint" data-i18n="hint">No code? Send /web in General, then press a sign-in button to get one.</div>
|
|
57
|
+
<details class="help"><summary data-i18n="nobot">No chat bot?</summary><p data-i18n="nobot_body">Ask the operator to run <code>agend web --code</code> on the AgEnD computer.</p></details>
|
|
53
58
|
</form>
|
|
54
59
|
<noscript>This page needs JavaScript to sign you in.</noscript>
|
|
55
60
|
</main>
|
package/dist/update-launch.js
CHANGED
|
@@ -7,6 +7,7 @@ import { basename, dirname, isAbsolute, join } from "node:path";
|
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
8
|
import { updateCommand } from "./update-dispatch.js";
|
|
9
9
|
import { maskSecrets } from "./log-steps.js";
|
|
10
|
+
import { t } from "./locale.js";
|
|
10
11
|
/** How many bytes to read from the tail of the log when extracting a cause after the updater exits. */
|
|
11
12
|
const CAUSE_TAIL_BYTES = 8 * 1024;
|
|
12
13
|
/** How many bytes to cap the update.log file at (across all runs). */
|
|
@@ -70,7 +71,7 @@ export function updateFixHint(output, opts = {}) {
|
|
|
70
71
|
const ours = named && isAbsolute(named) && !/['"\s\\`$]/.test(named)
|
|
71
72
|
&& basename(dirname(named)) === "@songsid" && /^\.agend[A-Za-z0-9._-]*$/.test(basename(named));
|
|
72
73
|
if (ours)
|
|
73
|
-
return
|
|
74
|
+
return t("update.failure.remove_staging", `\`rm -rf '${named}' && agend update\``);
|
|
74
75
|
return null;
|
|
75
76
|
}
|
|
76
77
|
if (/systemd does not know /.test(output))
|
|
@@ -234,15 +235,20 @@ agendPath) {
|
|
|
234
235
|
reported = true;
|
|
235
236
|
const tail = logPath != null && logOffset != null ? readRunTail(logPath, logOffset) : null;
|
|
236
237
|
const cause = tail === null ? null : extractUpdateCause(tail);
|
|
237
|
-
const logNote = logPath ? ` Full log: ${logPath}.` : "";
|
|
238
|
-
const detail = cause ? ` Cause: ${cause}.${logNote}` : logNote;
|
|
239
238
|
const fix = updateFixHint(tail ?? "", { agendGone: agendAtLaunch && !existsSync(agendPath) });
|
|
240
|
-
|
|
239
|
+
// The persisted marker caps this text at 300 chars: keep the action and log before raw diagnostics.
|
|
240
|
+
fail([
|
|
241
|
+
fix ? t("update.failure.fix", fix) : t("update.failure.shell"),
|
|
242
|
+
...(logPath ? [t("update.failure.log", logPath)] : []),
|
|
243
|
+
t("update.failure.summary", reason),
|
|
244
|
+
...(cause ? [t("update.failure.cause", cause)] : []),
|
|
245
|
+
].join(" "));
|
|
241
246
|
};
|
|
242
|
-
child.once("error", () => report("
|
|
247
|
+
child.once("error", () => report(t("update.failure.launch")));
|
|
243
248
|
child.once("exit", (code, signal) => {
|
|
244
249
|
if (signal || (code !== 0 && code !== 75)) {
|
|
245
|
-
report(signal ? "
|
|
250
|
+
report(signal ? t("update.failure.interrupted")
|
|
251
|
+
: code == null ? t("update.failure.no_status") : t("update.failure.exit", code));
|
|
246
252
|
}
|
|
247
253
|
});
|
|
248
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-launch.js","sourceRoot":"","sources":["../src/update-launch.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,OAAO,EAAE,QAAQ,EAAqB,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAa,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7H,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-launch.js","sourceRoot":"","sources":["../src/update-launch.ts"],"names":[],"mappings":"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"}
|