@songsid/agend 2.2.0-beta.10 → 2.2.0-beta.12
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/agent-endpoint.js +3 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.js +4 -0
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +3 -1
- package/dist/auth-api.js +15 -1
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.d.ts +5 -0
- package/dist/backend/antigravity.js +27 -13
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/effort-metadata.d.ts +36 -0
- package/dist/backend/effort-metadata.js +83 -13
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/launch-effort.d.ts +29 -1
- package/dist/backend/launch-effort.js +53 -6
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/types.d.ts +14 -0
- package/dist/backend/types.js +10 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +12 -0
- package/dist/channel/adapters/discord.js +39 -2
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +18 -0
- package/dist/channel/adapters/telegram.js +24 -3
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +2 -0
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/tool-router.d.ts +2 -0
- package/dist/channel/tool-router.js +1 -1
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +16 -0
- package/dist/cli.js +34 -11
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +9 -0
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +8 -1
- package/dist/delivery-outbox.js +6 -2
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-manager.d.ts +59 -3
- package/dist/fleet-manager.js +157 -22
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +4 -1
- package/dist/instructions.js +2 -2
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +26 -0
- package/dist/locale.js.map +1 -1
- package/dist/outbound-handlers.js +21 -1
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +12 -0
- package/dist/outbound-schemas.js +12 -1
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +3 -0
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +86 -5
- package/dist/reply-buttons-controller.js +271 -7
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-buttons.d.ts +48 -3
- package/dist/reply-buttons.js +105 -10
- package/dist/reply-buttons.js.map +1 -1
- package/dist/reply-polls.d.ts +85 -0
- package/dist/reply-polls.js +154 -0
- package/dist/reply-polls.js.map +1 -0
- package/dist/tool-permissions.js +3 -3
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.js +9 -4
- package/dist/topic-commands.js.map +1 -1
- package/dist/ui/chat-render.js +19 -2
- package/dist/ui/chat-store.js +35 -1
- package/dist/ui/chat-strings.js +2 -0
- package/dist/ui/chat-thread.js +42 -0
- package/dist/ui/panel-chat.js +2 -0
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-settings.js +48 -1
- package/dist/ui/settings-strings.js +10 -0
- package/dist/ui/shared/app-i18n.js +1 -1
- package/dist/ui/shared/app-stream.js +4 -1
- package/dist/ui/shared/app.css +28 -5
- package/dist/ui/shared/header-tools.js +12 -4
- package/dist/ui/shared/instance-switch.js +5 -2
- package/dist/ui/shared/view-strings.js +2 -2
- package/dist/update-check.d.ts +31 -0
- package/dist/update-check.js +47 -0
- package/dist/update-check.js.map +1 -1
- package/dist/update-launch.d.ts +46 -1
- package/dist/update-launch.js +146 -3
- package/dist/update-launch.js.map +1 -1
- package/dist/web-api.d.ts +40 -2
- package/dist/web-api.js +130 -14
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +12 -1
- package/dist/web-chat-history.js +29 -7
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-login.d.ts +14 -0
- package/dist/web-login.js +4 -2
- package/dist/web-login.js.map +1 -1
- package/dist/web-prefs.d.ts +18 -0
- package/dist/web-prefs.js +36 -4
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-profile.d.ts +32 -0
- package/dist/web-profile.js +132 -0
- package/dist/web-profile.js.map +1 -0
- package/dist/web-session.d.ts +14 -0
- package/dist/web-session.js +10 -0
- package/dist/web-session.js.map +1 -1
- package/package.json +1 -1
package/dist/reply-buttons.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import Database from "better-sqlite3";
|
|
13
13
|
import { randomBytes } from "node:crypto";
|
|
14
|
+
import { nextBallot } from "./reply-polls.js";
|
|
14
15
|
export const REPLY_BUTTONS_MAX = 10;
|
|
15
16
|
/** Discord's limit per label (the strictest of the three); counted in UTF-16 units, as Discord counts. */
|
|
16
17
|
export const REPLY_BUTTON_LABEL_MAX = 80;
|
|
@@ -92,6 +93,7 @@ const fromRow = (r) => ({
|
|
|
92
93
|
id: r.id, instance: r.instance, adapterId: r.adapter_id, chatId: r.chat_id, threadId: r.thread_id, messageId: r.message_id,
|
|
93
94
|
buttons: JSON.parse(r.buttons), createdAt: r.created_at, expiresAt: r.expires_at, consumedAt: r.consumed_at,
|
|
94
95
|
chosenIndex: r.chosen_index, chosenBy: r.chosen_by, deliveredAt: r.delivered_at ?? null, settledAt: r.settled_at,
|
|
96
|
+
poll: r.poll ? JSON.parse(r.poll) : null, closedAt: r.closed_at ?? null, resultsAt: r.results_at ?? null,
|
|
95
97
|
});
|
|
96
98
|
/** The button sets, in `<dataDir>/reply-buttons.db`. Wall-clock instants: an expiry is a calendar time that must hold across restarts. */
|
|
97
99
|
export class ReplyButtonStore {
|
|
@@ -122,12 +124,31 @@ export class ReplyButtonStore {
|
|
|
122
124
|
const columns = this.db.prepare("PRAGMA table_info(reply_buttons)").all().map(c => c.name);
|
|
123
125
|
if (!columns.includes("delivered_at"))
|
|
124
126
|
this.db.exec("ALTER TABLE reply_buttons ADD COLUMN delivered_at INTEGER");
|
|
127
|
+
// #1823: polls. Older rows are ordinary buttons (poll NULL).
|
|
128
|
+
for (const c of ["poll TEXT", "closed_at INTEGER", "results_at INTEGER"]) {
|
|
129
|
+
if (!columns.includes(c.split(" ")[0]))
|
|
130
|
+
this.db.exec(`ALTER TABLE reply_buttons ADD COLUMN ${c}`);
|
|
131
|
+
}
|
|
132
|
+
this.db.exec(`
|
|
133
|
+
CREATE TABLE IF NOT EXISTS poll_ballots (
|
|
134
|
+
poll_id TEXT NOT NULL,
|
|
135
|
+
voter TEXT NOT NULL,
|
|
136
|
+
name TEXT NOT NULL,
|
|
137
|
+
options TEXT NOT NULL,
|
|
138
|
+
at INTEGER NOT NULL,
|
|
139
|
+
PRIMARY KEY (poll_id, voter)
|
|
140
|
+
);
|
|
141
|
+
`);
|
|
125
142
|
}
|
|
126
143
|
close() { this.db.close(); }
|
|
127
|
-
/**
|
|
144
|
+
/**
|
|
145
|
+
* Before the send: the set exists, unbound (a click cannot match it until the platform message is known). A poll
|
|
146
|
+
* opens now: its deadline is `seconds` from here, and its votes are timed from here.
|
|
147
|
+
*/
|
|
128
148
|
create(set, now) {
|
|
129
|
-
|
|
130
|
-
|
|
149
|
+
const expires = set.poll ? now + set.poll.seconds * 1000 : now + REPLY_BUTTON_TTL_MS;
|
|
150
|
+
this.db.prepare(`INSERT INTO reply_buttons (id, instance, adapter_id, chat_id, thread_id, buttons, created_at, expires_at, poll)
|
|
151
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(set.id, set.instance, set.adapterId, set.chatId, set.threadId ?? "", JSON.stringify(set.buttons), now, expires, set.poll ? JSON.stringify(set.poll) : null);
|
|
131
152
|
return this.get(set.id);
|
|
132
153
|
}
|
|
133
154
|
/** After the send: the message the buttons are on. Only an unbound set can be bound. */
|
|
@@ -135,7 +156,10 @@ export class ReplyButtonStore {
|
|
|
135
156
|
return this.db.prepare("UPDATE reply_buttons SET message_id = ? WHERE id = ? AND message_id IS NULL").run(messageId, id).changes === 1;
|
|
136
157
|
}
|
|
137
158
|
/** A send that failed: the set never existed for anyone. */
|
|
138
|
-
remove(id) {
|
|
159
|
+
remove(id) {
|
|
160
|
+
this.db.prepare("DELETE FROM reply_buttons WHERE id = ?").run(id);
|
|
161
|
+
this.db.prepare("DELETE FROM poll_ballots WHERE poll_id = ?").run(id);
|
|
162
|
+
}
|
|
139
163
|
get(id) {
|
|
140
164
|
const r = this.db.prepare("SELECT * FROM reply_buttons WHERE id = ?").get(id);
|
|
141
165
|
return r ? fromRow(r) : null;
|
|
@@ -157,8 +181,10 @@ export class ReplyButtonStore {
|
|
|
157
181
|
const button = set.buttons[index];
|
|
158
182
|
if (!button)
|
|
159
183
|
return { ok: false, reason: "missing", set };
|
|
184
|
+
if (set.poll)
|
|
185
|
+
return { ok: false, reason: "missing", set }; // a poll is voted on, never consumed
|
|
160
186
|
const won = this.db.prepare(`UPDATE reply_buttons SET consumed_at = ?, chosen_index = ?, chosen_by = ?
|
|
161
|
-
WHERE id = ? AND consumed_at IS NULL AND message_id IS NOT NULL AND expires_at >
|
|
187
|
+
WHERE id = ? AND consumed_at IS NULL AND message_id IS NOT NULL AND expires_at > ? AND poll IS NULL`).run(now, index, by, id, now).changes === 1;
|
|
162
188
|
const after = this.get(id);
|
|
163
189
|
return won ? { ok: true, set: after, button } : { ok: false, reason: after.consumedAt !== null ? "used" : "expired", set: after };
|
|
164
190
|
}
|
|
@@ -183,15 +209,80 @@ export class ReplyButtonStore {
|
|
|
183
209
|
* still being delivered is neither (#1500 review): it may yet be released.
|
|
184
210
|
*/
|
|
185
211
|
unsettled(now) {
|
|
186
|
-
return this.db.prepare(`SELECT * FROM reply_buttons WHERE settled_at IS NULL AND message_id IS NOT NULL
|
|
212
|
+
return this.db.prepare(`SELECT * FROM reply_buttons WHERE settled_at IS NULL AND message_id IS NOT NULL AND poll IS NULL
|
|
187
213
|
AND (delivered_at IS NOT NULL OR (consumed_at IS NULL AND expires_at <= ?))`).all(now).map(fromRow);
|
|
188
214
|
}
|
|
189
|
-
/** The next expiry still to come, for the one sweep timer. */
|
|
215
|
+
/** The next expiry or poll deadline still to come, for the one sweep timer. */
|
|
190
216
|
nextExpiry(now) {
|
|
191
|
-
const r = this.db.prepare(`SELECT MIN(expires_at) AS t FROM reply_buttons WHERE settled_at IS NULL AND
|
|
192
|
-
AND
|
|
217
|
+
const r = this.db.prepare(`SELECT MIN(expires_at) AS t FROM reply_buttons WHERE settled_at IS NULL AND message_id IS NOT NULL
|
|
218
|
+
AND expires_at > ? AND ((poll IS NULL AND consumed_at IS NULL) OR (poll IS NOT NULL AND closed_at IS NULL))`).get(now);
|
|
193
219
|
return r.t ?? null;
|
|
194
220
|
}
|
|
221
|
+
// ── #1823: polls ──────────────────────────────────────────────────────────────────────────────────────────────────
|
|
222
|
+
/**
|
|
223
|
+
* One voter's click on a poll, already placed on its message and permitted by the caller. In one transaction: the poll
|
|
224
|
+
* must be bound, not closed and before its deadline; the voter's ballot becomes `nextBallot` of it, timed `now` when
|
|
225
|
+
* it changed (an unchanged ballot keeps its time). An emptied ballot withdraws the voter.
|
|
226
|
+
*/
|
|
227
|
+
vote(id, voter, name, index, now) {
|
|
228
|
+
return this.db.transaction(() => {
|
|
229
|
+
const set = this.get(id);
|
|
230
|
+
if (!set || !set.poll)
|
|
231
|
+
return { ok: false, reason: "missing" };
|
|
232
|
+
if (set.messageId === null)
|
|
233
|
+
return { ok: false, reason: "pending", set };
|
|
234
|
+
if (set.closedAt !== null || now >= set.expiresAt)
|
|
235
|
+
return { ok: false, reason: "closed", set };
|
|
236
|
+
if (!Number.isInteger(index) || index < 0 || index >= set.buttons.length)
|
|
237
|
+
return { ok: false, reason: "missing", set };
|
|
238
|
+
const row = this.db.prepare("SELECT options FROM poll_ballots WHERE poll_id = ? AND voter = ?").get(id, voter);
|
|
239
|
+
const next = nextBallot(row ? JSON.parse(row.options) : null, index, set.poll.multi);
|
|
240
|
+
if (next.changed) {
|
|
241
|
+
if (next.options.length) {
|
|
242
|
+
this.db.prepare(`INSERT INTO poll_ballots (poll_id, voter, name, options, at) VALUES (?, ?, ?, ?, ?)
|
|
243
|
+
ON CONFLICT (poll_id, voter) DO UPDATE SET name = excluded.name, options = excluded.options, at = excluded.at`)
|
|
244
|
+
.run(id, voter, name, JSON.stringify(next.options), now);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this.db.prepare("DELETE FROM poll_ballots WHERE poll_id = ? AND voter = ?").run(id, voter);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return { ok: true, set, options: next.options, changed: next.changed };
|
|
251
|
+
})();
|
|
252
|
+
}
|
|
253
|
+
/** A poll's ballots, earliest change first. */
|
|
254
|
+
ballots(id) {
|
|
255
|
+
return this.db.prepare("SELECT voter, name, options, at FROM poll_ballots WHERE poll_id = ? ORDER BY at, voter").all(id)
|
|
256
|
+
.map(r => ({ voter: r.voter, name: r.name, options: JSON.parse(r.options), at: r.at }));
|
|
257
|
+
}
|
|
258
|
+
/** Stop taking votes, once: true for the one call that closed it. */
|
|
259
|
+
closePoll(id, now) {
|
|
260
|
+
return this.db.prepare("UPDATE reply_buttons SET closed_at = ? WHERE id = ? AND poll IS NOT NULL AND closed_at IS NULL AND message_id IS NOT NULL")
|
|
261
|
+
.run(now, id).changes === 1;
|
|
262
|
+
}
|
|
263
|
+
/** Bound polls still open whose deadline has come. */
|
|
264
|
+
pollsDue(now) {
|
|
265
|
+
return this.db.prepare(`SELECT * FROM reply_buttons WHERE poll IS NOT NULL AND closed_at IS NULL AND message_id IS NOT NULL
|
|
266
|
+
AND expires_at <= ? ORDER BY expires_at, id`).all(now).map(fromRow);
|
|
267
|
+
}
|
|
268
|
+
/** Bound polls still taking votes (their countdowns are redrawn after a restart). */
|
|
269
|
+
openPolls() {
|
|
270
|
+
return this.db.prepare("SELECT * FROM reply_buttons WHERE poll IS NOT NULL AND closed_at IS NULL AND message_id IS NOT NULL ORDER BY expires_at, id")
|
|
271
|
+
.all().map(fromRow);
|
|
272
|
+
}
|
|
273
|
+
/** Closed polls whose results the outbox has not taken yet (a crash, or an outbox that was not open). */
|
|
274
|
+
pollsAwaitingResults() {
|
|
275
|
+
return this.db.prepare("SELECT * FROM reply_buttons WHERE poll IS NOT NULL AND closed_at IS NOT NULL AND results_at IS NULL ORDER BY closed_at, id")
|
|
276
|
+
.all().map(fromRow);
|
|
277
|
+
}
|
|
278
|
+
markResults(id, now) {
|
|
279
|
+
this.db.prepare("UPDATE reply_buttons SET results_at = ? WHERE id = ? AND closed_at IS NOT NULL AND results_at IS NULL").run(now, id);
|
|
280
|
+
}
|
|
281
|
+
/** Closed polls whose platform message does not show it yet. */
|
|
282
|
+
pollsUnsettled() {
|
|
283
|
+
return this.db.prepare("SELECT * FROM reply_buttons WHERE poll IS NOT NULL AND closed_at IS NOT NULL AND settled_at IS NULL ORDER BY closed_at, id")
|
|
284
|
+
.all().map(fromRow);
|
|
285
|
+
}
|
|
195
286
|
/** Sets on these messages, for the web chat's view of a reply's buttons. */
|
|
196
287
|
forMessages(instance, messageIds) {
|
|
197
288
|
if (!messageIds.length)
|
|
@@ -202,7 +293,11 @@ export class ReplyButtonStore {
|
|
|
202
293
|
}
|
|
203
294
|
/** Settled sets older than `before` are history the store no longer needs. */
|
|
204
295
|
prune(before) {
|
|
205
|
-
|
|
296
|
+
// A poll's results not yet handed over are kept whatever its age: they are owed to the agent.
|
|
297
|
+
const n = this.db.prepare("DELETE FROM reply_buttons WHERE settled_at IS NOT NULL AND settled_at < ? AND (poll IS NULL OR results_at IS NOT NULL)").run(before).changes;
|
|
298
|
+
if (n)
|
|
299
|
+
this.db.prepare("DELETE FROM poll_ballots WHERE poll_id NOT IN (SELECT id FROM reply_buttons)").run();
|
|
300
|
+
return n;
|
|
206
301
|
}
|
|
207
302
|
}
|
|
208
303
|
//# sourceMappingURL=reply-buttons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply-buttons.js","sourceRoot":"","sources":["../src/reply-buttons.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reply-buttons.js","sourceRoot":"","sources":["../src/reply-buttons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ReplyButton } from "./reply-buttons.js";
|
|
2
|
+
export declare const POLL_SECONDS_MIN = 10;
|
|
3
|
+
export declare const POLL_SECONDS_MAX: number;
|
|
4
|
+
export declare const POLL_OPTIONS_MIN = 2;
|
|
5
|
+
/** How much of the reply's text the results quote as the question. */
|
|
6
|
+
export declare const POLL_QUESTION_MAX = 300;
|
|
7
|
+
/** Inert callbacks: the status button, and a closed poll's options. Never a set id (`rb:<32 hex>:<i>`). */
|
|
8
|
+
export declare const POLL_STATUS_CALLBACK = "rb:poll";
|
|
9
|
+
export declare const POLL_CLOSED_CALLBACK = "rb:pollclosed";
|
|
10
|
+
export type PollReveal = "close" | "live";
|
|
11
|
+
export interface PollConfig {
|
|
12
|
+
seconds: number;
|
|
13
|
+
/** Several options per voter (a click toggles one). */
|
|
14
|
+
multi: boolean;
|
|
15
|
+
/** "close" (default, Kahoot): only "N answered" while open. "live": the counts too. */
|
|
16
|
+
reveal: PollReveal;
|
|
17
|
+
/** At close, one follow-up message names who picked what. */
|
|
18
|
+
showVoters: boolean;
|
|
19
|
+
/** The reply's text, cut: what the results quote as the question. */
|
|
20
|
+
question: string;
|
|
21
|
+
}
|
|
22
|
+
/** One voter's ballot. `at` is when it last changed (wall clock); the results give it as ms since the poll opened. */
|
|
23
|
+
export interface PollBallot {
|
|
24
|
+
voter: string;
|
|
25
|
+
name: string;
|
|
26
|
+
options: number[];
|
|
27
|
+
at: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The reply's `poll`, checked against its buttons: null when there is none, `{ error }` when it cannot be sent as given.
|
|
31
|
+
* Like `buttons`, it is checked here because MCP does not validate a tool's arguments at run time.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parsePoll(raw: unknown, buttons: readonly ReplyButton[] | null, text: unknown): {
|
|
34
|
+
poll: PollConfig;
|
|
35
|
+
} | {
|
|
36
|
+
error: string;
|
|
37
|
+
} | null;
|
|
38
|
+
/**
|
|
39
|
+
* A voter's ballot after one click. One choice: the clicked option (clicking the one already chosen changes nothing).
|
|
40
|
+
* Several: the click toggles that option; an empty ballot withdraws the voter.
|
|
41
|
+
*/
|
|
42
|
+
export declare function nextBallot(current: readonly number[] | null, index: number, multi: boolean): {
|
|
43
|
+
options: number[];
|
|
44
|
+
changed: boolean;
|
|
45
|
+
};
|
|
46
|
+
/** How many ballots chose each option. */
|
|
47
|
+
export declare function pollCounts(optionCount: number, ballots: readonly PollBallot[]): number[];
|
|
48
|
+
/**
|
|
49
|
+
* What a platform shows, ready to lay out: the options (a count after the label when revealed), and one status line.
|
|
50
|
+
* `deadline` is a wall-clock instant; a platform that cannot count down by itself shows `pollRemaining` of it.
|
|
51
|
+
*/
|
|
52
|
+
export interface PollRender {
|
|
53
|
+
options: Array<{
|
|
54
|
+
id: string;
|
|
55
|
+
label: string;
|
|
56
|
+
}>;
|
|
57
|
+
status: string;
|
|
58
|
+
deadline: number;
|
|
59
|
+
closed: boolean;
|
|
60
|
+
}
|
|
61
|
+
export declare function pollRender(labels: readonly string[], callbacks: readonly string[], poll: PollConfig, ballots: readonly PollBallot[], deadline: number, closed: boolean): PollRender;
|
|
62
|
+
/**
|
|
63
|
+
* The time left as a platform that cannot count down by itself shows it, rounded up to the step it is redrawn at (a
|
|
64
|
+
* label is never ahead of the clock): seconds in the last two minutes, minutes up to an hour, then hours and minutes.
|
|
65
|
+
*/
|
|
66
|
+
export declare function pollRemaining(ms: number): string;
|
|
67
|
+
/** How often a countdown that is redrawn (Telegram) is redrawn, for the time left: inside the platforms' edit limits. */
|
|
68
|
+
export declare function pollTickMs(remainingMs: number): number;
|
|
69
|
+
/** Telegram's limit on a click's toast (answerCallbackQuery text); Discord's ephemeral reply allows more. */
|
|
70
|
+
export declare const POLL_NOTICE_MAX = 200;
|
|
71
|
+
/** What a voter is told, privately, after a click — cut to fit a Telegram toast (several long options can exceed it). */
|
|
72
|
+
export declare function pollVoteNotice(labels: readonly string[], options: readonly number[]): string;
|
|
73
|
+
/**
|
|
74
|
+
* The results, as the one inbound message the agent gets. Per option: its count and voters, each with a stable id and
|
|
75
|
+
* the ms from the poll opening to their ballot's last change. `closedAt` later than the deadline (AgEnD was not running
|
|
76
|
+
* then) is said, so the agent does not read the lateness as slow voters.
|
|
77
|
+
*/
|
|
78
|
+
export declare function pollResultsText(set: {
|
|
79
|
+
id: string;
|
|
80
|
+
buttons: readonly ReplyButton[];
|
|
81
|
+
createdAt: number;
|
|
82
|
+
expiresAt: number;
|
|
83
|
+
}, poll: PollConfig, ballots: readonly PollBallot[], closedAt: number): string;
|
|
84
|
+
/** With `show_voters`: who picked what, as the follow-up message under a closed poll. */
|
|
85
|
+
export declare function pollVotersText(labels: readonly string[], ballots: readonly PollBallot[]): string;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1823: poll mode for a reply's buttons — a Kahoot-style timed vote. Everyone who may talk to the instance there may
|
|
3
|
+
* vote, once each, and may change their vote; at the deadline the agent gets the results as one message. AgEnD only
|
|
4
|
+
* counts votes: right answers, scores and leaderboards are the agent's, from the results. Design: issue #1823.
|
|
5
|
+
*
|
|
6
|
+
* This file is the pure part: the `poll` argument, a voter's ballot, the tally, what the platforms show, and the results
|
|
7
|
+
* text. The store (reply-buttons.ts) and the controller (reply-buttons-controller.ts) do the rest.
|
|
8
|
+
*/
|
|
9
|
+
import { t } from "./locale.js";
|
|
10
|
+
export const POLL_SECONDS_MIN = 10;
|
|
11
|
+
export const POLL_SECONDS_MAX = 24 * 60 * 60;
|
|
12
|
+
export const POLL_OPTIONS_MIN = 2;
|
|
13
|
+
/** How much of the reply's text the results quote as the question. */
|
|
14
|
+
export const POLL_QUESTION_MAX = 300;
|
|
15
|
+
/** Inert callbacks: the status button, and a closed poll's options. Never a set id (`rb:<32 hex>:<i>`). */
|
|
16
|
+
export const POLL_STATUS_CALLBACK = "rb:poll";
|
|
17
|
+
export const POLL_CLOSED_CALLBACK = "rb:pollclosed";
|
|
18
|
+
/**
|
|
19
|
+
* The reply's `poll`, checked against its buttons: null when there is none, `{ error }` when it cannot be sent as given.
|
|
20
|
+
* Like `buttons`, it is checked here because MCP does not validate a tool's arguments at run time.
|
|
21
|
+
*/
|
|
22
|
+
export function parsePoll(raw, buttons, text) {
|
|
23
|
+
if (raw === undefined || raw === null)
|
|
24
|
+
return null;
|
|
25
|
+
if (typeof raw !== "object" || Array.isArray(raw))
|
|
26
|
+
return { error: "poll must be { seconds, multi?, reveal?, show_voters? }" };
|
|
27
|
+
if (!buttons || buttons.length < POLL_OPTIONS_MIN)
|
|
28
|
+
return { error: `a poll needs at least ${POLL_OPTIONS_MIN} buttons: its options` };
|
|
29
|
+
const p = raw;
|
|
30
|
+
const known = new Set(["seconds", "multi", "reveal", "show_voters"]);
|
|
31
|
+
const unknown = Object.keys(p).find(k => !known.has(k));
|
|
32
|
+
if (unknown)
|
|
33
|
+
return { error: `poll.${unknown} is not a poll option (seconds, multi, reveal, show_voters)` };
|
|
34
|
+
const { seconds, multi, reveal, show_voters: showVoters } = p;
|
|
35
|
+
if (typeof seconds !== "number" || !Number.isInteger(seconds) || seconds < POLL_SECONDS_MIN || seconds > POLL_SECONDS_MAX) {
|
|
36
|
+
return { error: `poll.seconds must be a whole number from ${POLL_SECONDS_MIN} to ${POLL_SECONDS_MAX} (24 h)` };
|
|
37
|
+
}
|
|
38
|
+
if (multi !== undefined && typeof multi !== "boolean")
|
|
39
|
+
return { error: "poll.multi must be true or false" };
|
|
40
|
+
if (reveal !== undefined && reveal !== "close" && reveal !== "live")
|
|
41
|
+
return { error: "poll.reveal must be \"close\" or \"live\"" };
|
|
42
|
+
if (showVoters !== undefined && typeof showVoters !== "boolean")
|
|
43
|
+
return { error: "poll.show_voters must be true or false" };
|
|
44
|
+
const question = typeof text === "string" ? text.trim().replace(/\s+/g, " ") : "";
|
|
45
|
+
return {
|
|
46
|
+
poll: {
|
|
47
|
+
seconds, multi: multi === true, reveal: reveal === "live" ? "live" : "close", showVoters: showVoters === true,
|
|
48
|
+
question: question.length > POLL_QUESTION_MAX ? `${question.slice(0, POLL_QUESTION_MAX - 1)}…` : question,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A voter's ballot after one click. One choice: the clicked option (clicking the one already chosen changes nothing).
|
|
54
|
+
* Several: the click toggles that option; an empty ballot withdraws the voter.
|
|
55
|
+
*/
|
|
56
|
+
export function nextBallot(current, index, multi) {
|
|
57
|
+
const before = current ?? [];
|
|
58
|
+
if (!multi) {
|
|
59
|
+
const same = before.length === 1 && before[0] === index;
|
|
60
|
+
return { options: [index], changed: !same };
|
|
61
|
+
}
|
|
62
|
+
const options = before.includes(index) ? before.filter(i => i !== index) : [...before, index].sort((a, b) => a - b);
|
|
63
|
+
return { options, changed: true };
|
|
64
|
+
}
|
|
65
|
+
/** How many ballots chose each option. */
|
|
66
|
+
export function pollCounts(optionCount, ballots) {
|
|
67
|
+
const counts = new Array(optionCount).fill(0);
|
|
68
|
+
for (const b of ballots)
|
|
69
|
+
for (const i of b.options)
|
|
70
|
+
if (i >= 0 && i < optionCount)
|
|
71
|
+
counts[i]++;
|
|
72
|
+
return counts;
|
|
73
|
+
}
|
|
74
|
+
export function pollRender(labels, callbacks, poll, ballots, deadline, closed) {
|
|
75
|
+
const counts = pollCounts(labels.length, ballots);
|
|
76
|
+
const reveal = closed || poll.reveal === "live";
|
|
77
|
+
const total = ballots.length;
|
|
78
|
+
const options = labels.map((label, i) => ({
|
|
79
|
+
id: closed ? `${POLL_CLOSED_CALLBACK}:${i}` : callbacks[i],
|
|
80
|
+
label: reveal ? `${label} · ${counts[i]}${closed && total ? ` (${Math.round((counts[i] / total) * 100)}%)` : ""}` : label,
|
|
81
|
+
}));
|
|
82
|
+
return { options, status: closed ? t("poll.status_closed", total) : t("poll.status_open", total), deadline, closed };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The time left as a platform that cannot count down by itself shows it, rounded up to the step it is redrawn at (a
|
|
86
|
+
* label is never ahead of the clock): seconds in the last two minutes, minutes up to an hour, then hours and minutes.
|
|
87
|
+
*/
|
|
88
|
+
export function pollRemaining(ms) {
|
|
89
|
+
const s = Math.max(0, Math.ceil(ms / 1000));
|
|
90
|
+
if (s <= 120) {
|
|
91
|
+
const r = Math.ceil(s / 5) * 5;
|
|
92
|
+
return `${Math.floor(r / 60)}:${String(r % 60).padStart(2, "0")}`;
|
|
93
|
+
}
|
|
94
|
+
const m = Math.ceil(s / 60);
|
|
95
|
+
if (m < 60)
|
|
96
|
+
return `${m} min`;
|
|
97
|
+
return `${Math.floor(m / 60)} h ${String(m % 60).padStart(2, "0")} min`;
|
|
98
|
+
}
|
|
99
|
+
/** How often a countdown that is redrawn (Telegram) is redrawn, for the time left: inside the platforms' edit limits. */
|
|
100
|
+
export function pollTickMs(remainingMs) {
|
|
101
|
+
if (remainingMs <= 2 * 60_000)
|
|
102
|
+
return 5_000;
|
|
103
|
+
if (remainingMs <= 10 * 60_000)
|
|
104
|
+
return 30_000;
|
|
105
|
+
return 5 * 60_000;
|
|
106
|
+
}
|
|
107
|
+
/** Telegram's limit on a click's toast (answerCallbackQuery text); Discord's ephemeral reply allows more. */
|
|
108
|
+
export const POLL_NOTICE_MAX = 200;
|
|
109
|
+
/** What a voter is told, privately, after a click — cut to fit a Telegram toast (several long options can exceed it). */
|
|
110
|
+
export function pollVoteNotice(labels, options) {
|
|
111
|
+
const notice = options.length ? t("poll.voted", options.map(i => labels[i] ?? "?").join(", ")) : t("poll.withdrawn");
|
|
112
|
+
if (notice.length <= POLL_NOTICE_MAX)
|
|
113
|
+
return notice;
|
|
114
|
+
// Cut on whole characters: half of a surrogate pair (an emoji) would be replaced or refused (#1824 review).
|
|
115
|
+
let out = "";
|
|
116
|
+
for (const ch of notice) {
|
|
117
|
+
if (out.length + ch.length > POLL_NOTICE_MAX - 1)
|
|
118
|
+
break;
|
|
119
|
+
out += ch;
|
|
120
|
+
}
|
|
121
|
+
return `${out}…`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The results, as the one inbound message the agent gets. Per option: its count and voters, each with a stable id and
|
|
125
|
+
* the ms from the poll opening to their ballot's last change. `closedAt` later than the deadline (AgEnD was not running
|
|
126
|
+
* then) is said, so the agent does not read the lateness as slow voters.
|
|
127
|
+
*/
|
|
128
|
+
export function pollResultsText(set, poll, ballots, closedAt) {
|
|
129
|
+
const counts = pollCounts(set.buttons.length, ballots);
|
|
130
|
+
const late = closedAt - set.expiresAt > 5_000 ? ` · closed ${Math.round((closedAt - set.expiresAt) / 1000)} s late (AgEnD was not running at the deadline)`
|
|
131
|
+
: set.expiresAt - closedAt > 1_000 ? ` · closed early by close_poll after ${Math.round((closedAt - set.createdAt) / 1000)} s` : " · closed on time";
|
|
132
|
+
const head = `[poll results] poll ${set.id.slice(0, 8)} · ${poll.multi ? "multiple choice" : "single choice"} · ${poll.seconds} s · ${ballots.length} voted${late}`;
|
|
133
|
+
const lines = [head];
|
|
134
|
+
if (poll.question)
|
|
135
|
+
lines.push(`Q: ${poll.question}`);
|
|
136
|
+
const byTime = [...ballots].sort((a, b) => a.at - b.at || a.voter.localeCompare(b.voter));
|
|
137
|
+
set.buttons.forEach((b, i) => {
|
|
138
|
+
const label = b.value === b.label ? b.label : `${b.label} (value: ${b.value})`;
|
|
139
|
+
const voters = byTime.filter(v => v.options.includes(i)).map(v => `${v.name} [${v.voter}] ${Math.max(0, v.at - set.createdAt)} ms`);
|
|
140
|
+
lines.push(`${i + 1}) ${label} — ${counts[i]}${voters.length ? `: ${voters.join("; ")}` : ""}`);
|
|
141
|
+
});
|
|
142
|
+
lines.push("ms = time from the poll opening to the voter's last change. AgEnD only counts votes: post the answer and any scores yourself.");
|
|
143
|
+
return lines.join("\n");
|
|
144
|
+
}
|
|
145
|
+
/** With `show_voters`: who picked what, as the follow-up message under a closed poll. */
|
|
146
|
+
export function pollVotersText(labels, ballots) {
|
|
147
|
+
const byTime = [...ballots].sort((a, b) => a.at - b.at || a.voter.localeCompare(b.voter));
|
|
148
|
+
const lines = labels.map((label, i) => {
|
|
149
|
+
const names = byTime.filter(v => v.options.includes(i)).map(v => v.name);
|
|
150
|
+
return `${label} (${names.length}): ${names.length ? names.join(", ") : "—"}`;
|
|
151
|
+
});
|
|
152
|
+
return `${t("poll.voters_title")}\n${lines.join("\n")}`;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=reply-polls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply-polls.js","sourceRoot":"","sources":["../src/reply-polls.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-permissions.js
CHANGED
|
@@ -29,7 +29,7 @@ import { TOOLS } from "./channel/mcp-tools.js";
|
|
|
29
29
|
/** Everything an agent that is doing the work needs, and nothing that runs the fleet. */
|
|
30
30
|
const WORKER = [
|
|
31
31
|
// Talking to people.
|
|
32
|
-
"reply", "react", "edit_message", "download_attachment",
|
|
32
|
+
"reply", "react", "edit_message", "download_attachment", "close_poll",
|
|
33
33
|
// Talking to peers. `report_result` is why `standard` was never usable as a
|
|
34
34
|
// worker profile: without it the delegate → work → report protocol has no
|
|
35
35
|
// last step. `delegate_task` is here because it creates nothing and needs a
|
|
@@ -78,7 +78,7 @@ export const TOOL_PROFILES = {
|
|
|
78
78
|
worker: WORKER,
|
|
79
79
|
coordinator: [...WORKER, ...ORCHESTRATION],
|
|
80
80
|
general: [
|
|
81
|
-
"reply", "react", "edit_message", "download_attachment",
|
|
81
|
+
"reply", "react", "edit_message", "download_attachment", "close_poll",
|
|
82
82
|
"list_teams", "list_instances", "describe_instance", "get_fleet_status", "get_usage", "get_effort", "list_models",
|
|
83
83
|
// Read-only: what each kiro instance runs on, for explaining a kiro incompatibility.
|
|
84
84
|
"kiro_engine_status",
|
|
@@ -92,7 +92,7 @@ export const TOOL_PROFILES = {
|
|
|
92
92
|
"list_stickers", "preview_stickers",
|
|
93
93
|
],
|
|
94
94
|
standard: [
|
|
95
|
-
"reply", "react", "edit_message",
|
|
95
|
+
"reply", "react", "edit_message", "close_poll",
|
|
96
96
|
"send_to_instance", "broadcast", "list_instances", "describe_instance", "delivery_status",
|
|
97
97
|
"list_decisions", "post_decision", "task", "set_display_name", "set_description", "list_emojis", "set_persona_emoji", "preview_emojis",
|
|
98
98
|
"list_stickers", "preview_stickers",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-permissions.js","sourceRoot":"","sources":["../src/tool-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAI/C,yFAAyF;AACzF,MAAM,MAAM,GAAsB;IAChC,qBAAqB;IACrB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"tool-permissions.js","sourceRoot":"","sources":["../src/tool-permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/topic-commands.js
CHANGED
|
@@ -3,7 +3,7 @@ import { LOGIN_BACKEND_ALIASES } from "./login-flows.js";
|
|
|
3
3
|
import { measureSyncWork } from "./sync-work-attribution.js";
|
|
4
4
|
import { LOOPBACK_HOST_NAMES } from "./web-host-guard.js";
|
|
5
5
|
import { WEB_REMOTE_DOCS_URL } from "./upgrade-notices.js";
|
|
6
|
-
import { readFileSync, existsSync } from "node:fs";
|
|
6
|
+
import { closeSync, readFileSync, existsSync } from "node:fs";
|
|
7
7
|
import { exec, execFileSync } from "node:child_process";
|
|
8
8
|
import { promisify } from "node:util";
|
|
9
9
|
import { join, basename } from "node:path";
|
|
@@ -24,7 +24,7 @@ import { instanceSupportsSteer } from "./steer-capability.js";
|
|
|
24
24
|
import { SYSINFO_BACKEND_IDS } from "./backend/types.js";
|
|
25
25
|
import { recordInternalRequest, withOrigin } from "./fleet-control-audit.js";
|
|
26
26
|
import { resolveInstalledAgend } from "./update-dispatch.js";
|
|
27
|
-
import { resolveUpdateLaunch, watchUpdateLaunch } from "./update-launch.js";
|
|
27
|
+
import { resolveUpdateLaunch, openUpdateLog, updateLogPath, watchUpdateLaunch } from "./update-launch.js";
|
|
28
28
|
import { selfCommand } from "./cli-entry.js";
|
|
29
29
|
export { parseContextPercent, parseTokenContextRatio } from "./context-percent.js";
|
|
30
30
|
/** Longest one setMyCommands call may take. */
|
|
@@ -1592,10 +1592,15 @@ export class TopicCommands {
|
|
|
1592
1592
|
this.ctx.failUpdateProgress?.(t("not_authorized"));
|
|
1593
1593
|
return;
|
|
1594
1594
|
}
|
|
1595
|
+
const logPath = updateLogPath(this.ctx.dataDir);
|
|
1596
|
+
const ts = new Date().toISOString();
|
|
1597
|
+
const logFd = openUpdateLog(logPath, `--- /update ${ts} ---`);
|
|
1595
1598
|
const child = spawn(launch.command, launch.args, {
|
|
1596
|
-
detached: true, stdio: "ignore", env: withOrigin(origin),
|
|
1599
|
+
detached: true, stdio: ["ignore", logFd ? logFd.fd : "ignore", logFd ? logFd.fd : "ignore"], env: withOrigin(origin),
|
|
1597
1600
|
});
|
|
1598
|
-
|
|
1601
|
+
if (logFd)
|
|
1602
|
+
closeSync(logFd.fd);
|
|
1603
|
+
watchUpdateLaunch(child, message => this.ctx.failUpdateProgress?.(message), logFd ? logPath : undefined, logFd?.offset, installed.agend);
|
|
1599
1604
|
child.unref();
|
|
1600
1605
|
}
|
|
1601
1606
|
/** #1302: `/visibility [full|summary|hidden]` in the General topic. */
|