@songsid/agend 2.3.0-beta.19 → 2.3.0-beta.20
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-cli-instructions.md +4 -0
- package/dist/agent-cli.js +25 -0
- package/dist/agent-cli.js.map +1 -1
- package/dist/channel/mcp-tools.js +2 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/config-validator.js +19 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-notice.d.ts +7 -0
- package/dist/cross-instance-notice.js +10 -0
- package/dist/cross-instance-notice.js.map +1 -1
- package/dist/daemon.js +4 -0
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.js +5 -0
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/fleet-manager.d.ts +26 -0
- package/dist/fleet-manager.js +115 -14
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/scheduling/SKILL.md +4 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +25 -1
- package/dist/instance-config-impact.js +4 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/log-steps.d.ts +1 -0
- package/dist/log-steps.js +15 -0
- package/dist/log-steps.js.map +1 -1
- package/dist/outbound-handlers.d.ts +3 -0
- package/dist/outbound-handlers.js +20 -4
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +33 -0
- package/dist/outbound-schemas.js +25 -8
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +5 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/scheduler/db.d.ts +40 -13
- package/dist/scheduler/db.js +123 -89
- package/dist/scheduler/db.js.map +1 -1
- package/dist/scheduler/task-board-text.d.ts +26 -0
- package/dist/scheduler/task-board-text.js +135 -0
- package/dist/scheduler/task-board-text.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +650 -0
- package/dist/scheduler/task-board.js +1938 -0
- package/dist/scheduler/task-board.js.map +1 -0
- package/dist/scheduler/types.d.ts +6 -1
- package/dist/search/search-docs.d.ts +58 -0
- package/dist/search/search-docs.js +63 -0
- package/dist/search/search-docs.js.map +1 -0
- package/dist/search/search-index.d.ts +141 -0
- package/dist/search/search-index.js +440 -0
- package/dist/search/search-index.js.map +1 -0
- package/dist/search/search-store.d.ts +122 -0
- package/dist/search/search-store.js +236 -0
- package/dist/search/search-store.js.map +1 -0
- package/dist/search/search-worker.d.ts +1 -0
- package/dist/search/search-worker.js +163 -0
- package/dist/search/search-worker.js.map +1 -0
- package/dist/task-board-tool.d.ts +25 -0
- package/dist/task-board-tool.js +154 -0
- package/dist/task-board-tool.js.map +1 -0
- package/dist/task-board-waker.d.ts +44 -0
- package/dist/task-board-waker.js +128 -0
- package/dist/task-board-waker.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/ui/fleet-task-card.js +436 -0
- package/dist/ui/fleet-task-common.js +448 -0
- package/dist/ui/fleet-tasks.js +535 -0
- package/dist/ui/panel-chat.js +8 -0
- package/dist/ui/panel-fleet.js +21 -65
- package/dist/ui/search-dialog.js +349 -0
- package/dist/ui/shared/app-i18n.js +3 -0
- package/dist/ui/shared/app-shell.js +43 -1
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +270 -2
- package/dist/ui/shared/app.js +3 -1
- package/dist/ui/shared/ui-toast.js +16 -3
- package/dist/web-api.d.ts +14 -4
- package/dist/web-api.js +408 -10
- package/dist/web-api.js.map +1 -1
- package/dist/web-chat-history.d.ts +2 -0
- package/dist/web-chat-history.js +2 -0
- package/dist/web-chat-history.js.map +1 -1
- package/dist/workflow-templates/default.md +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waking an instance when someone else changes a card it owns or handed out (step 2, docs/design/task-board.md). The
|
|
3
|
+
* board decides who hears what (TaskBoard's settleWakes); this gathers an instance's news for `gatherMs` (10 s) into
|
|
4
|
+
* one message — dragging five cards, or opening a whole plan, is one wake — checks again that each piece still stands
|
|
5
|
+
* when it goes out (wakeHolds), and hands it to the fleet as a notice from AgEnD: the delivery outbox holds it until
|
|
6
|
+
* the instance can take it, across a restart too. What is gathered but not yet handed over is lost on a stop; the card
|
|
7
|
+
* keeps the news (`task mine`, the comments new to its assignee).
|
|
8
|
+
*/
|
|
9
|
+
import type { Wake } from "./scheduler/task-board.js";
|
|
10
|
+
import { type Card } from "./scheduler/task-board.js";
|
|
11
|
+
export interface TaskBoardWakerDeps {
|
|
12
|
+
/** Hand `message` to the instance for good (the fleet's durable delivery); false when it could not be taken. */
|
|
13
|
+
deliver(instance: string, message: string, key: string): boolean;
|
|
14
|
+
/** Whether the board may wake this name: a fleet instance (an assignee can be any name). */
|
|
15
|
+
isInstance(name: string): boolean;
|
|
16
|
+
/** What of a wake still stands now (TaskBoard.wakeHolds), and the card, to say what it lacks. */
|
|
17
|
+
holds(wake: Wake): Wake | null;
|
|
18
|
+
card(uuid: string): Card | undefined;
|
|
19
|
+
log(level: "info" | "warn", message: string, extra?: Record<string, unknown>): void;
|
|
20
|
+
gatherMs?: number;
|
|
21
|
+
timers?: {
|
|
22
|
+
set(fn: () => void, ms: number): unknown;
|
|
23
|
+
clear(handle: unknown): void;
|
|
24
|
+
};
|
|
25
|
+
now?: () => number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* One message for an instance's gathered news: a line per card (a main task assigned with its sub tasks is one line),
|
|
29
|
+
* or — a whole plan assigned at once — a count, so it does not read as everything to do right now.
|
|
30
|
+
*/
|
|
31
|
+
export declare function wakeMessage(wakes: Wake[], card?: (uuid: string) => Card | undefined): string;
|
|
32
|
+
export declare class TaskBoardWaker {
|
|
33
|
+
private readonly deps;
|
|
34
|
+
private readonly gathering;
|
|
35
|
+
private stopped;
|
|
36
|
+
private seq;
|
|
37
|
+
private readonly timers;
|
|
38
|
+
constructor(deps: TaskBoardWakerDeps);
|
|
39
|
+
/** A committed write's wakes: gathered per instance, a card's news merged (each reason keeps its own words). */
|
|
40
|
+
note(wakes: readonly Wake[]): void;
|
|
41
|
+
/** Nothing more is sent (the fleet is stopping); news still gathering is dropped — the cards keep it. */
|
|
42
|
+
stop(): void;
|
|
43
|
+
private flush;
|
|
44
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { gapText, oneLine } from "./scheduler/task-board-text.js";
|
|
2
|
+
import { wrapUpGap } from "./scheduler/task-board.js";
|
|
3
|
+
/** More assignments than this in one message are told as a count, not a line each. */
|
|
4
|
+
const MANY_ASSIGNED = 3;
|
|
5
|
+
/** The order a card's news is told in. */
|
|
6
|
+
const ORDER = ["cancelled", "sent_back", "decide", "answered", "approved", "wrap_up", "assigned", "start", "ready", "comment"];
|
|
7
|
+
const quote = (text) => (text ? `: "${oneLine(text, 160)}"` : "");
|
|
8
|
+
/** One reason, as a line about the card says it. */
|
|
9
|
+
function say(w, r, card) {
|
|
10
|
+
const by = w.by[r] ?? "someone";
|
|
11
|
+
switch (r) {
|
|
12
|
+
case "assigned": return `assigned to you by ${by}`;
|
|
13
|
+
case "start": return `${by} asks you to start it`;
|
|
14
|
+
case "sent_back": return `sent back by ${by}${quote(w.texts.sent_back)}`;
|
|
15
|
+
case "answered": return `${by} answered your blocked question${quote(w.texts.answered)} — it is in progress again`;
|
|
16
|
+
case "comment": return `new comment from ${by}${quote(w.texts.comment)}`;
|
|
17
|
+
case "ready": return "everything it waited for is done — you can start it";
|
|
18
|
+
case "decide": return `you handed it out and it is blocked${card?.assignee ? ` (@${card.assignee})` : ""}${quote(w.texts.decide)} — ask the person, then answer it: move it back to claimed with the decision as the comment`;
|
|
19
|
+
case "approved": return card?.assignee === w.instance ? `the person confirmed it${quote(w.texts.approved)}` : `you handed it out; the person confirmed it${quote(w.texts.approved)}`;
|
|
20
|
+
case "cancelled": return `cancelled by ${by}${w.texts.cancelled?.startsWith("with its main task") ? ` ${oneLine(w.texts.cancelled, 160)}` : quote(w.texts.cancelled)} — stop working on it`;
|
|
21
|
+
case "wrap_up": {
|
|
22
|
+
const gap = card ? wrapUpGap(card) : null;
|
|
23
|
+
return `it went to the person for confirmation by itself${gap ? `, but ${gapText(gap, true)}` : ""} — fill it in with update`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** "M-11–M-16" for a run of numbers, else the first few. */
|
|
28
|
+
function idList(codes) {
|
|
29
|
+
const n = (c) => Number(c.slice(2));
|
|
30
|
+
const sorted = [...codes].sort((a, b) => n(a) - n(b));
|
|
31
|
+
const run = sorted.length > 2 && sorted.every((c, i) => i === 0 || n(c) === n(sorted[i - 1]) + 1);
|
|
32
|
+
if (run)
|
|
33
|
+
return `${sorted[0]}–${sorted[sorted.length - 1]}`;
|
|
34
|
+
return sorted.length > 5 ? `${sorted.slice(0, 5).join(", ")} …` : sorted.join(", ");
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* One message for an instance's gathered news: a line per card (a main task assigned with its sub tasks is one line),
|
|
38
|
+
* or — a whole plan assigned at once — a count, so it does not read as everything to do right now.
|
|
39
|
+
*/
|
|
40
|
+
export function wakeMessage(wakes, card = () => undefined) {
|
|
41
|
+
const assignedMains = new Set(wakes.filter((w) => w.reasons.includes("assigned") && !w.parent).map((w) => w.code));
|
|
42
|
+
const folded = new Map();
|
|
43
|
+
const items = wakes.filter((w) => {
|
|
44
|
+
const into = w.parent && w.reasons.length === 1 && w.reasons[0] === "assigned" && assignedMains.has(w.parent) ? w.parent : null;
|
|
45
|
+
if (into)
|
|
46
|
+
folded.set(into, (folded.get(into) ?? 0) + 1);
|
|
47
|
+
return !into;
|
|
48
|
+
});
|
|
49
|
+
const line = (w) => {
|
|
50
|
+
const subs = folded.get(w.code);
|
|
51
|
+
const news = ORDER.filter((r) => w.reasons.includes(r)).map((r) => say(w, r, card(w.uuid))).join("; ");
|
|
52
|
+
return `${w.code} "${oneLine(w.title, 60)}"${subs ? ` (with ${subs} sub task${subs === 1 ? "" : "s"})` : ""}: ${news}.`;
|
|
53
|
+
};
|
|
54
|
+
const assigned = items.filter((w) => w.reasons.length === 1 && w.reasons[0] === "assigned");
|
|
55
|
+
if (items.length > 1 && assigned.length > MANY_ASSIGNED) {
|
|
56
|
+
const mains = assigned.filter((w) => !w.parent).map((w) => w.code);
|
|
57
|
+
const subs = assigned.length - mains.length + [...folded.values()].reduce((a, b) => a + b, 0);
|
|
58
|
+
const what = [mains.length ? `${mains.length} main task${mains.length === 1 ? "" : "s"} (${idList(mains)})` : "", subs ? `${subs} sub task${subs === 1 ? "" : "s"}` : ""].filter(Boolean).join(" and ");
|
|
59
|
+
const summary = `You were assigned ${what}.`;
|
|
60
|
+
const rest = items.filter((w) => !assigned.includes(w));
|
|
61
|
+
const tail = "Read task mine for the order and work through them one at a time, by priority.";
|
|
62
|
+
return rest.length ? `[Task board] ${summary}\n${rest.map((w) => `- ${line(w)}`).join("\n")}\n${tail}` : `[Task board] ${summary} ${tail}`;
|
|
63
|
+
}
|
|
64
|
+
if (items.length === 1)
|
|
65
|
+
return `[Task board] ${line(items[0])} Read it with: task get ${items[0].code}`;
|
|
66
|
+
return `[Task board] ${items.length} things on your cards:\n${items.map((w) => `- ${line(w)}`).join("\n")}\nYour work: task mine`;
|
|
67
|
+
}
|
|
68
|
+
export class TaskBoardWaker {
|
|
69
|
+
deps;
|
|
70
|
+
gathering = new Map();
|
|
71
|
+
stopped = false;
|
|
72
|
+
seq = 0;
|
|
73
|
+
timers;
|
|
74
|
+
constructor(deps) {
|
|
75
|
+
this.deps = deps;
|
|
76
|
+
this.timers = deps.timers ?? { set: (fn, ms) => { const h = setTimeout(fn, ms); h.unref?.(); return h; }, clear: (h) => clearTimeout(h) };
|
|
77
|
+
}
|
|
78
|
+
/** A committed write's wakes: gathered per instance, a card's news merged (each reason keeps its own words). */
|
|
79
|
+
note(wakes) {
|
|
80
|
+
if (this.stopped)
|
|
81
|
+
return;
|
|
82
|
+
for (const w of wakes) {
|
|
83
|
+
if (!this.deps.isInstance(w.instance))
|
|
84
|
+
continue;
|
|
85
|
+
let batch = this.gathering.get(w.instance);
|
|
86
|
+
if (!batch) {
|
|
87
|
+
batch = { wakes: new Map(), timer: this.timers.set(() => this.flush(w.instance), this.deps.gatherMs ?? 10_000) };
|
|
88
|
+
this.gathering.set(w.instance, batch);
|
|
89
|
+
}
|
|
90
|
+
const had = batch.wakes.get(w.uuid);
|
|
91
|
+
batch.wakes.set(w.uuid, had
|
|
92
|
+
? { ...had, title: w.title, reasons: [...new Set([...had.reasons, ...w.reasons])], by: { ...had.by, ...w.by }, texts: { ...had.texts, ...w.texts } }
|
|
93
|
+
: { ...w, reasons: [...w.reasons], by: { ...w.by }, texts: { ...w.texts } });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Nothing more is sent (the fleet is stopping); news still gathering is dropped — the cards keep it. */
|
|
97
|
+
stop() {
|
|
98
|
+
this.stopped = true;
|
|
99
|
+
for (const b of this.gathering.values())
|
|
100
|
+
this.timers.clear(b.timer);
|
|
101
|
+
this.gathering.clear();
|
|
102
|
+
}
|
|
103
|
+
flush(instance) {
|
|
104
|
+
const batch = this.gathering.get(instance);
|
|
105
|
+
this.gathering.delete(instance);
|
|
106
|
+
if (!batch || this.stopped)
|
|
107
|
+
return;
|
|
108
|
+
// Only what still holds as it goes out: not finished meanwhile, still theirs, still waiting on them.
|
|
109
|
+
const wakes = [...batch.wakes.values()].map((w) => this.deps.holds(w)).filter((w) => w !== null);
|
|
110
|
+
if (!wakes.length)
|
|
111
|
+
return;
|
|
112
|
+
const codes = wakes.map((w) => w.code);
|
|
113
|
+
const key = `task-board:${instance}:${(this.deps.now ?? Date.now)()}:${++this.seq}`;
|
|
114
|
+
let taken = false;
|
|
115
|
+
try {
|
|
116
|
+
taken = this.deps.deliver(instance, wakeMessage(wakes, (uuid) => this.deps.card(uuid)), key);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
this.deps.log("warn", "Task board wake failed", { instance, codes, err: err.message });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (taken)
|
|
123
|
+
this.deps.log("info", "Task board wake handed to delivery", { instance, codes });
|
|
124
|
+
else
|
|
125
|
+
this.deps.log("warn", "Task board wake not taken; the cards keep the news", { instance, codes });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=task-board-waker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-board-waker.js","sourceRoot":"","sources":["../src/task-board-waker.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -172,6 +172,12 @@ export interface InstanceConfig {
|
|
|
172
172
|
* Mirror Topic are unaffected. Unset inherits `defaults.cross_instance_visibility`, else "full".
|
|
173
173
|
*/
|
|
174
174
|
cross_instance_visibility?: "full" | "summary" | "hidden";
|
|
175
|
+
/**
|
|
176
|
+
* #2303: how many task board cards handed to this instance it may have in progress at once (claiming another at the
|
|
177
|
+
* limit is refused). A whole number of at least 1; unset is 1. Cards it opened for itself never count. The fleet
|
|
178
|
+
* reads it at each claim; the daemon only keeps it current.
|
|
179
|
+
*/
|
|
180
|
+
board_cards_at_once?: number;
|
|
175
181
|
/**
|
|
176
182
|
* Detect a human-channel turn that ended without a delivered reply and ask
|
|
177
183
|
* the agent to send one bounded recovery reply. Only capable backends use
|
|
@@ -365,6 +371,15 @@ export interface WebConfig {
|
|
|
365
371
|
* admin's change, confirmed like any access change (Settings → Web).
|
|
366
372
|
*/
|
|
367
373
|
log_tab?: boolean;
|
|
374
|
+
/**
|
|
375
|
+
* #2293: the dashboard's global search (Ctrl+K) over chat messages, cross-instance messages and Task Board tasks — an
|
|
376
|
+
* index of its own (search.db, kept `retention_days`, default 90; search/search-index.ts). `enabled: false`: no index
|
|
377
|
+
* from the next fleet start (the file is left as it is), and searches are refused at once.
|
|
378
|
+
*/
|
|
379
|
+
search?: {
|
|
380
|
+
enabled?: boolean;
|
|
381
|
+
retention_days?: number;
|
|
382
|
+
};
|
|
368
383
|
/** Expose provider API-key verify/apply endpoints (default false until dark-shipped). */
|
|
369
384
|
provider_secrets?: boolean;
|
|
370
385
|
/**
|