shadok-ai 0.2.34 → 0.2.36
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/README.md +10 -1
- package/dist/channels.d.ts +7 -0
- package/dist/channels.js +1 -1
- package/dist/channels.js.map +1 -1
- package/dist/extract.js +5 -3
- package/dist/extract.js.map +1 -1
- package/dist/kinship.d.ts +68 -0
- package/dist/kinship.js +124 -0
- package/dist/kinship.js.map +1 -0
- package/dist/profiles.d.ts +6 -0
- package/dist/profiles.js +3 -0
- package/dist/profiles.js.map +1 -1
- package/dist/server.js +125 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/index.html +106 -16
package/README.md
CHANGED
|
@@ -53,6 +53,13 @@ Enter to skip; you can add it later from the web UI).
|
|
|
53
53
|
run costs **zero tokens**; prints something → that output is prepended to the
|
|
54
54
|
prompt and the agent runs. A watcher that is quiet most of the day costs
|
|
55
55
|
nothing most of the day.
|
|
56
|
+
- **Agents that report back** — an agent that launches other agents is told when
|
|
57
|
+
each one finishes, blocks on a question, or dies. It hears about **its own**
|
|
58
|
+
children and nothing else, so a busy channel never wakes it. What arrives is
|
|
59
|
+
the child's own summary plus pointers (branch, diff link) — never the diff
|
|
60
|
+
itself, which on a large session costs far more than it is worth. The link is
|
|
61
|
+
set automatically at spawn; you can also attach or detach an agent by hand
|
|
62
|
+
from its ⋯ menu.
|
|
56
63
|
- **Quota gauges + pace guard** — 5h and 7d subscription usage, with an
|
|
57
64
|
optional block when you're burning faster than the window elapses (any
|
|
58
65
|
message can force through).
|
|
@@ -322,7 +329,7 @@ client, or immediately on an explicit `stop` (which ends it for everyone).
|
|
|
322
329
|
|
|
323
330
|
| Message | Purpose |
|
|
324
331
|
|---|---|
|
|
325
|
-
| `{type:"start", cwd?, resume?, continue?, worktree?, branch?, repo?, profile?, origin?}` | starts or attaches to the session (once per connection). `origin` (`"web"`, `"cron"`, `"telegram"`, `"cli"`…) travels with `prompt-echo` so other clients can say who spoke |
|
|
332
|
+
| `{type:"start", cwd?, resume?, continue?, worktree?, branch?, repo?, profile?, parent?, origin?}` | starts or attaches to the session (once per connection). `origin` (`"web"`, `"cron"`, `"telegram"`, `"cli"`…) travels with `prompt-echo` so other clients can say who spoke. `parent` records who launched this agent — a refused link is dropped and logged, never fatal to the spawn |
|
|
326
333
|
| `{type:"prompt", text, force?}` | sends a prompt (`force` bypasses the pace guard) |
|
|
327
334
|
| `{type:"choose", n}` | single-select dialog: picks and validates option n |
|
|
328
335
|
| `{type:"toggle", n}` / `{type:"confirm"}` | multi-select: toggles option n / submits |
|
|
@@ -330,6 +337,7 @@ client, or immediately on an explicit `stop` (which ends it for everyone).
|
|
|
330
337
|
| `{type:"key", key}` | raw keystroke (`enter`, `escape`, `up`, `down`, `tab`, `ctrl-c`, or a single character) |
|
|
331
338
|
| `{type:"settle"}` | after a manual intervention: waits for the turn to finish |
|
|
332
339
|
| `{type:"restart"}` | respawns the agent in place (picks up new secrets/profile) |
|
|
340
|
+
| `{type:"set-parent", parent}` | attach this channel under another (`null` detaches). Refused **explicitly** on a self-link, a cycle, an unknown parent, or a chain/fan-out past its cap |
|
|
333
341
|
| `{type:"term-attach"}` · `{type:"term-detach"}` | **experimental, tmux only** — open/close the pane's raw byte pipe |
|
|
334
342
|
| `{type:"term-input", data}` · `{type:"term-resize", cols, rows}` | raw input (base64) / match the pane to the viewport |
|
|
335
343
|
| `{type:"stop", sessionId?}` | ends the session for all clients; `sessionId` targets another channel (zombie cleanup) |
|
|
@@ -343,6 +351,7 @@ client, or immediately on an explicit `stop` (which ends it for everyone).
|
|
|
343
351
|
| `{type:"stream-text", text, at?}` | a complete assistant text block, from the transcript. `at` is when it was **written**, not when we read it |
|
|
344
352
|
| `{type:"stream-tool", id, name, summary}` / `{type:"stream-result", …}` | tool call / tool result |
|
|
345
353
|
| `{type:"tokens", tokens}` / `{type:"context", pct}` | token usage / context fill |
|
|
354
|
+
| `{type:"parent", parent}` | the channel's parent changed (broadcast, so every tab follows) |
|
|
346
355
|
| `{type:"prompt-echo", text}` | prompt sent by another client of the session |
|
|
347
356
|
| `{type:"dialog", question, options:[{n,label,hint,checked?}], multi}` | choice pending |
|
|
348
357
|
| `{type:"history", turns:[…]}` | transcript replayed when resuming/attaching |
|
package/dist/channels.d.ts
CHANGED
|
@@ -24,6 +24,13 @@ export interface Channel {
|
|
|
24
24
|
/** Agent profile applied at spawn (role/guardrails/secrets) — re-applied on
|
|
25
25
|
* resume/restart so the guardrails aren't lost. */
|
|
26
26
|
profile?: string | null;
|
|
27
|
+
/** The channel that spawned this one, or one attached to it by hand. Only
|
|
28
|
+
* this parent is told when the agent finishes, blocks on a question or dies
|
|
29
|
+
* — without that scoping a chatty channel would wake a boss on every turn,
|
|
30
|
+
* and a wake in a large session is not free. The CHILD stores its parent and
|
|
31
|
+
* never the reverse, so there is one writer per fact and the two directions
|
|
32
|
+
* cannot disagree. */
|
|
33
|
+
parent?: string | null;
|
|
27
34
|
/** Muted channel: it raises no global signal (favicon pip, title badge,
|
|
28
35
|
* blink, chime). Client-owned like `name`/`group`, stored here so the mute
|
|
29
36
|
* survives a reload and follows the user's other devices. */
|
package/dist/channels.js
CHANGED
|
@@ -14,7 +14,7 @@ export function isMirrored(c) {
|
|
|
14
14
|
return c.mirror ?? !!c.telegram;
|
|
15
15
|
}
|
|
16
16
|
/** Fields the server owns; a browser PUT must never overwrite or drop them. */
|
|
17
|
-
const SERVER_OWNED = ["cwd", "branch", "repo", "telegram", "profile"];
|
|
17
|
+
const SERVER_OWNED = ["cwd", "branch", "repo", "telegram", "profile", "parent"];
|
|
18
18
|
/**
|
|
19
19
|
* The registry is stored server-side, keyed by the directory the server was
|
|
20
20
|
* launched from — so the set of sessions survives a wiped browser, another
|
package/dist/channels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
package/dist/extract.js
CHANGED
|
@@ -3,6 +3,7 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { newestTranscriptById, isNothingToShow, parseTimestamp } from "./tail.js";
|
|
5
5
|
import { isCronPrompt } from "./crons.js";
|
|
6
|
+
import { isAgentPrompt } from "./kinship.js";
|
|
6
7
|
/**
|
|
7
8
|
* Extracts the response: everything after the "❯ <prompt>" echo in the
|
|
8
9
|
* transcript, minus the final input box and status lines.
|
|
@@ -194,9 +195,10 @@ export function loadHistory(cwd, sessionId) {
|
|
|
194
195
|
const text = userPromptText(e);
|
|
195
196
|
if (text === null)
|
|
196
197
|
continue; // résultat d'outil, rappel système, interruption
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
|
|
198
|
+
// Machine-written user messages: a scheduled prompt and a notification
|
|
199
|
+
// about a child agent. Neither is shown live, so neither may come back on
|
|
200
|
+
// a reload or a topic backfill.
|
|
201
|
+
if (isCronPrompt(text) || isAgentPrompt(text))
|
|
200
202
|
continue;
|
|
201
203
|
turns.push({ role: "user", text, ...when });
|
|
202
204
|
}
|
package/dist/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Channel } from "./channels.js";
|
|
2
|
+
/**
|
|
3
|
+
* Kinship between channels: which agent launched which, and what a parent is
|
|
4
|
+
* told about its children. Pure and dependency-free so it can be unit-tested
|
|
5
|
+
* without a server — the same split `crons.ts` uses, and deliberate: the hub is
|
|
6
|
+
* already large enough.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* How deep a parent chain may go. A notification can trigger a spawn which
|
|
10
|
+
* triggers another notification, so without a ceiling this is a cascade that
|
|
11
|
+
* empties the subscription overnight. The pace guard cannot save us here: it
|
|
12
|
+
* blocks one prompt at a time, never a chain.
|
|
13
|
+
*/
|
|
14
|
+
export declare const MAX_LINK_DEPTH = 4;
|
|
15
|
+
/** How many children one parent may hold, for the same reason. */
|
|
16
|
+
export declare const MAX_FANOUT = 12;
|
|
17
|
+
export type LinkRefusal = "self" | "cycle" | "unknown-parent" | "too-deep" | "too-many-children";
|
|
18
|
+
/**
|
|
19
|
+
* How many ancestors `sessionId` has (0 for a root, or for an unknown id).
|
|
20
|
+
* `seen` is not paranoia: a hand-edited store can contain a loop, and this must
|
|
21
|
+
* terminate on it rather than spin.
|
|
22
|
+
*/
|
|
23
|
+
export declare function chainDepth(channels: readonly Channel[], sessionId: string): number;
|
|
24
|
+
/** The channels whose parent is `sessionId` (direct children only). */
|
|
25
|
+
export declare function childrenOf(channels: readonly Channel[], sessionId: string): Channel[];
|
|
26
|
+
/**
|
|
27
|
+
* Why linking `child` under `parent` must be refused, or null if it is allowed.
|
|
28
|
+
* `parent === null` detaches, which is always allowed.
|
|
29
|
+
*
|
|
30
|
+
* Every refusal is EXPLICIT. An unknown parent is refused, not a field we
|
|
31
|
+
* quietly drop — that is the lesson `resolveCronId` already carries (invariant
|
|
32
|
+
* 17), where a delete answered `{ok:true}` while deleting nothing. Here the
|
|
33
|
+
* silent version is worse: a parent would believe it will be notified and wait
|
|
34
|
+
* for a child it was never linked to.
|
|
35
|
+
*/
|
|
36
|
+
export declare function linkRefusal(channels: readonly Channel[], child: string, parent: string | null): LinkRefusal | null;
|
|
37
|
+
/**
|
|
38
|
+
* Prefix carried by a notification prompt. It reaches the transcript as an
|
|
39
|
+
* ordinary user message, so without a marker it reads as something the human
|
|
40
|
+
* typed — and comes back on every web reload and Telegram backfill, which is
|
|
41
|
+
* exactly the bug `CRON_PROMPT_MARK` exists to prevent. Twin of that one.
|
|
42
|
+
*/
|
|
43
|
+
export declare const AGENT_PROMPT_MARK = "\uD83E\uDD16 [agent]";
|
|
44
|
+
export declare function markAgentPrompt(text: string): string;
|
|
45
|
+
export declare function isAgentPrompt(text: string): boolean;
|
|
46
|
+
/** What happened to a child, as its parent will be told it. */
|
|
47
|
+
export interface ChildReport {
|
|
48
|
+
/** The child channel's display name, or its short id when unnamed. */
|
|
49
|
+
name: string;
|
|
50
|
+
sessionId: string;
|
|
51
|
+
kind: "done" | "dialog" | "exited" | "timeout";
|
|
52
|
+
/** The child's own last assistant text block — what it wrote to be read. */
|
|
53
|
+
summary?: string;
|
|
54
|
+
/** kind === "dialog": the pending question and its options. */
|
|
55
|
+
question?: string;
|
|
56
|
+
options?: string[];
|
|
57
|
+
branch?: string | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The prompt a parent receives about one child.
|
|
61
|
+
*
|
|
62
|
+
* Deliberately small. The parent is almost always the LARGEST session in the
|
|
63
|
+
* tree, which makes it the worst place to pour volume into: measured on this
|
|
64
|
+
* repo's transcripts, a call re-reads ~359k tokens of prefix, i.e. ~36k
|
|
65
|
+
* effective per wake. So this carries the child's own summary plus POINTERS,
|
|
66
|
+
* never the diff — the parent fetches that if it decides it needs one.
|
|
67
|
+
*/
|
|
68
|
+
export declare function notificationText(r: ChildReport, port: number): string;
|
package/dist/kinship.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kinship between channels: which agent launched which, and what a parent is
|
|
3
|
+
* told about its children. Pure and dependency-free so it can be unit-tested
|
|
4
|
+
* without a server — the same split `crons.ts` uses, and deliberate: the hub is
|
|
5
|
+
* already large enough.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* How deep a parent chain may go. A notification can trigger a spawn which
|
|
9
|
+
* triggers another notification, so without a ceiling this is a cascade that
|
|
10
|
+
* empties the subscription overnight. The pace guard cannot save us here: it
|
|
11
|
+
* blocks one prompt at a time, never a chain.
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_LINK_DEPTH = 4;
|
|
14
|
+
/** How many children one parent may hold, for the same reason. */
|
|
15
|
+
export const MAX_FANOUT = 12;
|
|
16
|
+
/**
|
|
17
|
+
* How many ancestors `sessionId` has (0 for a root, or for an unknown id).
|
|
18
|
+
* `seen` is not paranoia: a hand-edited store can contain a loop, and this must
|
|
19
|
+
* terminate on it rather than spin.
|
|
20
|
+
*/
|
|
21
|
+
export function chainDepth(channels, sessionId) {
|
|
22
|
+
const byId = new Map(channels.map((c) => [c.sessionId, c]));
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
let depth = 0;
|
|
25
|
+
let cur = sessionId;
|
|
26
|
+
while (cur && !seen.has(cur)) {
|
|
27
|
+
seen.add(cur);
|
|
28
|
+
cur = byId.get(cur)?.parent ?? null;
|
|
29
|
+
if (cur)
|
|
30
|
+
depth++;
|
|
31
|
+
}
|
|
32
|
+
return depth;
|
|
33
|
+
}
|
|
34
|
+
/** The channels whose parent is `sessionId` (direct children only). */
|
|
35
|
+
export function childrenOf(channels, sessionId) {
|
|
36
|
+
return channels.filter((c) => c.parent === sessionId);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Why linking `child` under `parent` must be refused, or null if it is allowed.
|
|
40
|
+
* `parent === null` detaches, which is always allowed.
|
|
41
|
+
*
|
|
42
|
+
* Every refusal is EXPLICIT. An unknown parent is refused, not a field we
|
|
43
|
+
* quietly drop — that is the lesson `resolveCronId` already carries (invariant
|
|
44
|
+
* 17), where a delete answered `{ok:true}` while deleting nothing. Here the
|
|
45
|
+
* silent version is worse: a parent would believe it will be notified and wait
|
|
46
|
+
* for a child it was never linked to.
|
|
47
|
+
*/
|
|
48
|
+
export function linkRefusal(channels, child, parent) {
|
|
49
|
+
if (parent === null)
|
|
50
|
+
return null;
|
|
51
|
+
if (parent === child)
|
|
52
|
+
return "self";
|
|
53
|
+
const byId = new Map(channels.map((c) => [c.sessionId, c]));
|
|
54
|
+
if (!byId.has(parent))
|
|
55
|
+
return "unknown-parent";
|
|
56
|
+
// Walk up from the proposed parent: reaching the child closes a loop, and a
|
|
57
|
+
// loop means the two notify each other forever.
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
let cur = parent;
|
|
60
|
+
while (cur && !seen.has(cur)) {
|
|
61
|
+
if (cur === child)
|
|
62
|
+
return "cycle";
|
|
63
|
+
seen.add(cur);
|
|
64
|
+
cur = byId.get(cur)?.parent ?? null;
|
|
65
|
+
}
|
|
66
|
+
// Stopped because we re-entered an ALREADY looped chain: refuse too, rather
|
|
67
|
+
// than attach something new to a structure that is broken.
|
|
68
|
+
if (cur)
|
|
69
|
+
return "cycle";
|
|
70
|
+
if (chainDepth(channels, parent) + 1 >= MAX_LINK_DEPTH)
|
|
71
|
+
return "too-deep";
|
|
72
|
+
// Re-asserting an existing child must not count it twice and refuse a no-op.
|
|
73
|
+
const siblings = childrenOf(channels, parent).filter((c) => c.sessionId !== child);
|
|
74
|
+
if (siblings.length >= MAX_FANOUT)
|
|
75
|
+
return "too-many-children";
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Prefix carried by a notification prompt. It reaches the transcript as an
|
|
80
|
+
* ordinary user message, so without a marker it reads as something the human
|
|
81
|
+
* typed — and comes back on every web reload and Telegram backfill, which is
|
|
82
|
+
* exactly the bug `CRON_PROMPT_MARK` exists to prevent. Twin of that one.
|
|
83
|
+
*/
|
|
84
|
+
export const AGENT_PROMPT_MARK = "🤖 [agent]";
|
|
85
|
+
export function markAgentPrompt(text) {
|
|
86
|
+
return isAgentPrompt(text) ? text : `${AGENT_PROMPT_MARK} ${text}`;
|
|
87
|
+
}
|
|
88
|
+
export function isAgentPrompt(text) {
|
|
89
|
+
return typeof text === "string" && text.trimStart().startsWith(AGENT_PROMPT_MARK);
|
|
90
|
+
}
|
|
91
|
+
const HEADLINE = {
|
|
92
|
+
done: (n) => `Agent "${n}" finished its turn.`,
|
|
93
|
+
dialog: (n) => `Agent "${n}" is waiting on a question.`,
|
|
94
|
+
exited: (n) => `Agent "${n}" stopped before finishing.`,
|
|
95
|
+
timeout: (n) => `Agent "${n}" hit the delivery timeout.`,
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The prompt a parent receives about one child.
|
|
99
|
+
*
|
|
100
|
+
* Deliberately small. The parent is almost always the LARGEST session in the
|
|
101
|
+
* tree, which makes it the worst place to pour volume into: measured on this
|
|
102
|
+
* repo's transcripts, a call re-reads ~359k tokens of prefix, i.e. ~36k
|
|
103
|
+
* effective per wake. So this carries the child's own summary plus POINTERS,
|
|
104
|
+
* never the diff — the parent fetches that if it decides it needs one.
|
|
105
|
+
*/
|
|
106
|
+
export function notificationText(r, port) {
|
|
107
|
+
const lines = [HEADLINE[r.kind](r.name)];
|
|
108
|
+
if (r.kind === "dialog" && r.question) {
|
|
109
|
+
lines.push("", `Question: ${r.question}`);
|
|
110
|
+
if (r.options?.length)
|
|
111
|
+
lines.push(...r.options.map((o, i) => ` ${i + 1}. ${o}`));
|
|
112
|
+
lines.push("", `Answer with \`pilotctl choose ${r.sessionId} <n>\`, or leave it for the human.`);
|
|
113
|
+
}
|
|
114
|
+
else if (r.summary?.trim()) {
|
|
115
|
+
lines.push("", r.summary.trim());
|
|
116
|
+
}
|
|
117
|
+
const pointers = [`session \`${r.sessionId}\``];
|
|
118
|
+
if (r.branch)
|
|
119
|
+
pointers.push(`branch \`${r.branch}\``);
|
|
120
|
+
pointers.push(`diff: http://127.0.0.1:${port}/diff?session=${r.sessionId}`);
|
|
121
|
+
lines.push("", pointers.join(" · "));
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=kinship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinship.js","sourceRoot":"","sources":["../src/kinship.ts"],"names":[],"mappings":"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"}
|
package/dist/profiles.d.ts
CHANGED
|
@@ -17,6 +17,12 @@ export interface Profile {
|
|
|
17
17
|
/** Names of vault secrets to inject as env (references, not values). */
|
|
18
18
|
secrets?: string[];
|
|
19
19
|
model?: string;
|
|
20
|
+
/** May this agent answer a dialog pending on one of ITS OWN children?
|
|
21
|
+
* Opt-in on purpose: answering a child's permission prompt lets a
|
|
22
|
+
* READONLY_DENY agent authorise a child to do what it cannot do itself, so
|
|
23
|
+
* as an ambient right it would make the guardrail that forces delegation
|
|
24
|
+
* bypassable BY delegating. */
|
|
25
|
+
canAnswerChildren?: boolean;
|
|
20
26
|
}
|
|
21
27
|
/** Deny patterns that keep an agent from writing to git — the read-only preset. */
|
|
22
28
|
export declare const READONLY_DENY: string[];
|
package/dist/profiles.js
CHANGED
|
@@ -30,6 +30,9 @@ export const DEFAULT_PROFILES = [
|
|
|
30
30
|
"Say what you are about to spawn and why BEFORE you spawn it — each agent burns the same quota as a normal session, so delegate on purpose, not by reflex. Never land anything yourself: merging is a human-reviewed step. Never stop a session you did not create — it may be the user's own.",
|
|
31
31
|
deny: READONLY_DENY,
|
|
32
32
|
secrets: [],
|
|
33
|
+
// The boss is the one role that exists to run other agents, so it is the
|
|
34
|
+
// one that may unblock them. Everything else keeps the default (absent).
|
|
35
|
+
canAnswerChildren: true,
|
|
33
36
|
},
|
|
34
37
|
{
|
|
35
38
|
name: "Shadok-dev",
|
package/dist/profiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -17,13 +17,14 @@ import { screenShowsWork } from "./detect.js";
|
|
|
17
17
|
import { PtyPilot } from "./session.js";
|
|
18
18
|
import { ensureSshIdentity } from "./ssh.js";
|
|
19
19
|
import { TmuxPilot, tmuxAvailable, tmuxHasSession, tmuxKillSession, tmuxPaneCwd } from "./tmux.js";
|
|
20
|
-
import { scanUsage, sessionFilePath, tailSession, clearTailPos } from "./tail.js";
|
|
20
|
+
import { scanUsage, sessionFilePath, tailSession, clearTailPos, isNothingToShow } from "./tail.js";
|
|
21
21
|
import { computePace, paceBlock, WINDOW_SEC } from "./pace.js";
|
|
22
22
|
import { getUsage } from "./usage.js";
|
|
23
23
|
import { loadChannels, loadGroups, saveGroups, upsertChannel, removeChannel, mergeClientChannels, loadTgGroup, saveTgGroup, } from "./channels.js";
|
|
24
24
|
import { startTelegram, renameTelegramTopic, closeTelegramTopic, probeToken, isStalePreface, } from "./telegram.js";
|
|
25
25
|
import { migrateTgBindings } from "./channels.js";
|
|
26
26
|
import { loadCrons, saveCrons, upsertCron, removeCron, resolveCronId, resolveCronTarget, nextRunFor, nextRunAfterFailure, isTransient, CRON_MAX_RETRIES, markCronPrompt, normalizeSchedule, scheduleLabel, cronTimeZone, defaultTimeZone, systemTimeZone, isValidTimeZone, } from "./crons.js";
|
|
27
|
+
import { linkRefusal, markAgentPrompt, notificationText, } from "./kinship.js";
|
|
27
28
|
import { loadConfig, saveConfig, telegramConfig, applyTelegramPatch, } from "./config.js";
|
|
28
29
|
import { secretsFor, secretNames, setSecret, deleteSecret } from "./secrets.js";
|
|
29
30
|
import { getProfile, profileArgs, permissionModeArgs, isPermissionMode, envVarsNote, seedDefaultProfiles, seedTweakProfile, loadProfiles, upsertProfile, removeProfile, } from "./profiles.js";
|
|
@@ -251,6 +252,72 @@ function driveChannel(sessionId, text, target) {
|
|
|
251
252
|
ws.on("close", () => finish({ ok: false, reason: "ws-error", detail: "closed before the turn ended" }));
|
|
252
253
|
});
|
|
253
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Notifications waiting for a parent that is mid-turn, keyed by the PARENT's
|
|
257
|
+
* session id. A prompt sent during a turn is refused (`code:"busy"`), so
|
|
258
|
+
* without this a child finishing while its parent thinks would simply be lost.
|
|
259
|
+
*
|
|
260
|
+
* It is also where batching comes from, for free: a parent is busy precisely
|
|
261
|
+
* when it is working, so several children coalesce on their own — no timer, no
|
|
262
|
+
* window, and the expensive case partly corrects itself.
|
|
263
|
+
*/
|
|
264
|
+
const parentInbox = new Map();
|
|
265
|
+
/** A child's display name for its parent, falling back to a short id. */
|
|
266
|
+
function childLabel(channels, childId) {
|
|
267
|
+
const ch = channels.find((c) => c.sessionId === childId);
|
|
268
|
+
return ch?.name?.trim() || childId.slice(0, 8);
|
|
269
|
+
}
|
|
270
|
+
/** Send one message (or a coalesced batch) to a parent, over the cron path. */
|
|
271
|
+
function deliverToParent(parentId, text) {
|
|
272
|
+
const target = resolveCronTarget(loadChannels(), parentId, process.cwd());
|
|
273
|
+
const tag = `agent: → ${parentId.slice(0, 8)}`;
|
|
274
|
+
// Fire and forget: awaiting would hold the CHILD's finishTurn open for as
|
|
275
|
+
// long as the parent takes to think.
|
|
276
|
+
void driveChannel(parentId, text, target).then((res) => {
|
|
277
|
+
console.log(res.ok ? `${tag} delivered` : `${tag} failed (${res.reason})`);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Tell a child's parent what just happened to it. A channel with no parent
|
|
282
|
+
* notifies nobody — that scoping is the whole point: a parent hears about the
|
|
283
|
+
* agents IT launched and nothing else.
|
|
284
|
+
*/
|
|
285
|
+
function notifyParent(child, report) {
|
|
286
|
+
const channels = loadChannels();
|
|
287
|
+
const me = channels.find((c) => c.sessionId === child.id);
|
|
288
|
+
const parentId = me?.parent ?? null;
|
|
289
|
+
if (!parentId)
|
|
290
|
+
return;
|
|
291
|
+
if (!channels.some((c) => c.sessionId === parentId))
|
|
292
|
+
return; // parent is gone
|
|
293
|
+
// A child whose whole answer is the silence placeholder wakes nobody — the
|
|
294
|
+
// same right to stay quiet a cron has.
|
|
295
|
+
if (report.kind === "done" && report.summary && isNothingToShow(report.summary))
|
|
296
|
+
return;
|
|
297
|
+
const text = markAgentPrompt(notificationText({
|
|
298
|
+
...report,
|
|
299
|
+
name: childLabel(channels, child.id),
|
|
300
|
+
sessionId: child.id,
|
|
301
|
+
branch: child.worktree?.branch ?? me?.branch ?? null,
|
|
302
|
+
}, boundPort));
|
|
303
|
+
const parent = sessions.get(parentId);
|
|
304
|
+
if (parent?.busy) {
|
|
305
|
+
parentInbox.set(parentId, [...(parentInbox.get(parentId) ?? []), text]);
|
|
306
|
+
console.log(`agent: ${child.id.slice(0, 8)} → ${parentId.slice(0, 8)} queued (parent busy)`);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
deliverToParent(parentId, text);
|
|
310
|
+
}
|
|
311
|
+
/** Flush whatever piled up for a parent that has just gone idle. */
|
|
312
|
+
function flushParentInbox(parentId) {
|
|
313
|
+
const queued = parentInbox.get(parentId);
|
|
314
|
+
if (!queued?.length)
|
|
315
|
+
return;
|
|
316
|
+
parentInbox.delete(parentId);
|
|
317
|
+
// One wake for the whole batch: N separate wakes would re-pay the parent's
|
|
318
|
+
// entire prefix N times over for the same information.
|
|
319
|
+
deliverToParent(parentId, queued.join("\n\n---\n\n"));
|
|
320
|
+
}
|
|
254
321
|
/**
|
|
255
322
|
* Record how a fire ended, and replay it soon if the delivery was lost for a
|
|
256
323
|
* transient reason (paced, busy, WS cut by a server reload…). Without this a
|
|
@@ -1163,6 +1230,10 @@ async function attachPilot(s) {
|
|
|
1163
1230
|
if (s.restarting)
|
|
1164
1231
|
return; // a restart is swapping the pilot; don't tear down
|
|
1165
1232
|
broadcast(s, { type: "exited", code });
|
|
1233
|
+
// A failure must notify too. A lost run that says nothing is
|
|
1234
|
+
// indistinguishable from a run with nothing to say (invariant 15), and the
|
|
1235
|
+
// parent would otherwise wait forever for a child that is already gone.
|
|
1236
|
+
notifyParent(s, { kind: "exited" });
|
|
1166
1237
|
destroySession(s);
|
|
1167
1238
|
});
|
|
1168
1239
|
pilot.start();
|
|
@@ -1297,6 +1368,9 @@ async function finishTurn(s) {
|
|
|
1297
1368
|
s.lastDialogKey = null;
|
|
1298
1369
|
broadcast(s, { type: "turn-done", sessionId: s.id });
|
|
1299
1370
|
maybeScheduleRetry(s);
|
|
1371
|
+
// As a CHILD: tell whoever launched this agent that it is done, with its
|
|
1372
|
+
// own last block as the summary — what it wrote to be read.
|
|
1373
|
+
notifyParent(s, { kind: "done", summary: s.recentTexts[s.recentTexts.length - 1] });
|
|
1300
1374
|
}
|
|
1301
1375
|
}
|
|
1302
1376
|
finally {
|
|
@@ -1306,6 +1380,10 @@ async function finishTurn(s) {
|
|
|
1306
1380
|
if (s.turnStartedAt)
|
|
1307
1381
|
s.lastTurnMs = Date.now() - s.turnStartedAt;
|
|
1308
1382
|
s.turnStartedAt = null;
|
|
1383
|
+
// As a PARENT: anything that piled up while this session was working goes
|
|
1384
|
+
// out now. It has to be here, after `busy` is cleared — a prompt sent
|
|
1385
|
+
// during a turn is exactly what the queue exists to avoid.
|
|
1386
|
+
flushParentInbox(s.id);
|
|
1309
1387
|
}
|
|
1310
1388
|
}
|
|
1311
1389
|
/** The option number the ❯ cursor is currently on, or null. */
|
|
@@ -1411,6 +1489,16 @@ function publishDialog(s, d) {
|
|
|
1411
1489
|
return;
|
|
1412
1490
|
s.lastDialogKey = key;
|
|
1413
1491
|
broadcast(s, dialogMessage(s, d));
|
|
1492
|
+
// A child blocked on a question is the deadlock this whole thing exists to
|
|
1493
|
+
// break: its turn is suspended, and its parent believes it is still working.
|
|
1494
|
+
// Hooking HERE covers every path — including raw `key` input — because this
|
|
1495
|
+
// is the single funnel for dialogs (invariant 23). The dedup above is what
|
|
1496
|
+
// keeps that affordable: the screen watcher runs several times a second.
|
|
1497
|
+
notifyParent(s, {
|
|
1498
|
+
kind: "dialog",
|
|
1499
|
+
question: d.question,
|
|
1500
|
+
options: d.options.map((o) => o.label),
|
|
1501
|
+
});
|
|
1414
1502
|
}
|
|
1415
1503
|
/** Cancels a pending auto-retry (user took over, or session ends). */
|
|
1416
1504
|
function clearRetry(s, notify = false) {
|
|
@@ -1682,6 +1770,19 @@ wss.on("connection", (ws) => {
|
|
|
1682
1770
|
if (stored != null)
|
|
1683
1771
|
profile = stored; // the channel's own profile wins on resume
|
|
1684
1772
|
}
|
|
1773
|
+
// Who launched this agent. Validated exactly like `set-parent` — a
|
|
1774
|
+
// cycle costs the same either way — but a refusal here only DROPS the
|
|
1775
|
+
// link instead of failing the start: the agent itself is fine, and
|
|
1776
|
+
// killing a spawn over a bad link would be a worse outcome than one
|
|
1777
|
+
// that reports to nobody. Logged so it isn't a silent loss.
|
|
1778
|
+
let parentAtStart;
|
|
1779
|
+
if (msg.parent !== undefined) {
|
|
1780
|
+
const refusal = linkRefusal(loadChannels(), id, msg.parent ?? null);
|
|
1781
|
+
if (refusal)
|
|
1782
|
+
console.log(`agent: ${id.slice(0, 8)} parent link refused (${refusal})`);
|
|
1783
|
+
else
|
|
1784
|
+
parentAtStart = msg.parent ?? null;
|
|
1785
|
+
}
|
|
1685
1786
|
session = await createSession(id, effectiveCwd, args, worktree, profile);
|
|
1686
1787
|
session.clients.add(ws);
|
|
1687
1788
|
if (resumed) {
|
|
@@ -1719,6 +1820,12 @@ wss.on("connection", (ws) => {
|
|
|
1719
1820
|
// the field) → decide nothing, and `isMirrored` falls back to the
|
|
1720
1821
|
// binding.
|
|
1721
1822
|
...(typeof msg.mirror === "boolean" ? { mirror: msg.mirror } : {}),
|
|
1823
|
+
// Who launched this agent, sent by pilotctl from its own
|
|
1824
|
+
// SHADOK_SESSION_ID. ASSERT-only, like `branch` and `repo`: a
|
|
1825
|
+
// client that omits the key must not erase a link that already
|
|
1826
|
+
// exists. Validated for the same reasons `set-parent` validates —
|
|
1827
|
+
// a cycle here would be just as expensive.
|
|
1828
|
+
...(parentAtStart !== undefined ? { parent: parentAtStart } : {}),
|
|
1722
1829
|
});
|
|
1723
1830
|
send({ type: "tokens", tokens: tokenTotals(session) });
|
|
1724
1831
|
send({ type: "profile", profile: session.profile ?? null, applied: session.appliedProfile ?? null });
|
|
@@ -1950,6 +2057,23 @@ wss.on("connection", (ws) => {
|
|
|
1950
2057
|
await restartSession(s);
|
|
1951
2058
|
break;
|
|
1952
2059
|
}
|
|
2060
|
+
case "set-parent": {
|
|
2061
|
+
// Attach this agent under another, or detach with null. `parent` is
|
|
2062
|
+
// SERVER_OWNED on the channel, so a browser PUT can't touch it —
|
|
2063
|
+
// this is the only legitimate path, exactly like `set-profile`.
|
|
2064
|
+
if (!session)
|
|
2065
|
+
return fail("no session started");
|
|
2066
|
+
const s = session;
|
|
2067
|
+
const wanted = msg.parent ?? null;
|
|
2068
|
+
const refusal = linkRefusal(loadChannels(), s.id, wanted);
|
|
2069
|
+
// Refuse out loud. Dropping the link silently would leave the parent
|
|
2070
|
+
// believing it will be notified, waiting for a child it isn't linked to.
|
|
2071
|
+
if (refusal)
|
|
2072
|
+
return fail(`cannot attach: ${refusal}`, "link-refused");
|
|
2073
|
+
upsertChannel({ sessionId: s.id, parent: wanted });
|
|
2074
|
+
broadcast(s, { type: "parent", parent: wanted });
|
|
2075
|
+
break;
|
|
2076
|
+
}
|
|
1953
2077
|
case "stop": {
|
|
1954
2078
|
// Kill a channel from any interface. `sessionId` lets the UI remove a
|
|
1955
2079
|
// DEAD/zombie channel (no live session) — the previous handler bailed
|