@aiwayds/dsh-tui-pi 2.11.4 → 2.12.0
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/lib/agents.d.ts +5 -1
- package/lib/agents.js +28 -3
- package/lib/agents.js.map +1 -1
- package/lib/index.js +11 -2
- package/lib/index.js.map +1 -1
- package/lib/subagent-policy.d.ts +41 -9
- package/lib/subagent-policy.js +133 -20
- package/lib/subagent-policy.js.map +1 -1
- package/lib/subagent-status-tool.d.ts +50 -0
- package/lib/subagent-status-tool.js +125 -0
- package/lib/subagent-status-tool.js.map +1 -0
- package/lib/theme-settings.d.ts +12 -1
- package/lib/theme-settings.js +12 -0
- package/lib/theme-settings.js.map +1 -1
- package/package.json +1 -1
- package/skills/dsh-tui-pi-config/SKILL.md +3 -2
package/lib/subagent-policy.d.ts
CHANGED
|
@@ -5,20 +5,33 @@
|
|
|
5
5
|
* decision point — no watcher needed (the /settings browser hot-applies, so
|
|
6
6
|
* the next guard execution / turn count reads the new value):
|
|
7
7
|
* - `maxAgents` caps concurrent live children. A `tools.guard` registered on
|
|
8
|
-
* the plugin root ctx denies model-facing spawn tools once the
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
8
|
+
* the plugin root ctx denies model-facing spawn tools once the EFFECTIVE
|
|
9
|
+
* child count meets the cap. The count is synchronous at the spawn
|
|
10
|
+
* decision: discovered live children plus an admission ledger of
|
|
11
|
+
* allowed-but-not-yet-discovered spawns, so a burst of parallel spawn
|
|
12
|
+
* calls inside one assistant message cannot overshoot while the bridge's
|
|
13
|
+
* firehose discovery catches up (each allowance enters the ledger the
|
|
14
|
+
* moment it is granted; each newly discovered child consumes one entry).
|
|
15
|
+
* The count covers every child in the process, but the DENIAL scope is
|
|
16
|
+
* "belongs to this TUI": a caller carrying the surface marker, or any
|
|
17
|
+
* live descendant of a marked root (the ancestor walk closes the
|
|
18
|
+
* host-created-children hole). Foreign roots fail open. A denial tells
|
|
19
|
+
* the model to record the task in its todo list and run it once a slot
|
|
20
|
+
* frees, instead of retrying the spawn. The workflow/ralph fan-out
|
|
21
|
+
* bypasses the tool pipeline (its worker thread spawns through the
|
|
22
|
+
* subagent provider directly), so a `subagent/start` listener prunes any
|
|
23
|
+
* newcomer that slips past the guard — same ownership scope, decided by
|
|
24
|
+
* the child's parent ancestry.
|
|
17
25
|
* - `disableSubagent` disables the plain native `subagent` tool: its calls
|
|
18
26
|
* are denied for every TUI-scoped caller (and it is hidden from the main
|
|
19
27
|
* agent's catalog), so delegation goes through registered agent
|
|
20
28
|
* definitions (`~/.dsh/agents/*.md` via the registry's `use_agent`).
|
|
21
29
|
* `subagent_fork`, `workflow` and `ralph` stay available.
|
|
30
|
+
* - `registeredOnly` is the wider fence: EVERY spawn tool except
|
|
31
|
+
* `use_agent` is denied for TUI-scoped callers, so no child can exist
|
|
32
|
+
* without a registered agent definition behind it (no ad-hoc
|
|
33
|
+
* "implement <task>" children). Default off; the fence is read live like
|
|
34
|
+
* every other knob.
|
|
22
35
|
* - `maxRounds` caps a child's assistant messages (each LLM round-trip is
|
|
23
36
|
* one "round") through a TWO-STAGE ladder. Stage 1: at the cap — the
|
|
24
37
|
* per-agent tier when the child's label resolves to an agent .md
|
|
@@ -136,6 +149,23 @@ export interface HardStopRecord {
|
|
|
136
149
|
/** The grace window that was exhausted. */
|
|
137
150
|
readonly grace: number;
|
|
138
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Cumulative subagent-runtime counters since the policy was installed (this
|
|
154
|
+
* TUI process), served to the model through the `subagent_status` tool and
|
|
155
|
+
* to the operator through the /agents limits panel.
|
|
156
|
+
*/
|
|
157
|
+
export interface SubagentPolicyStats {
|
|
158
|
+
/** Children currently on the bridge's live board (settled excluded). */
|
|
159
|
+
live: number;
|
|
160
|
+
/** Spawn-tool calls the guard admitted. */
|
|
161
|
+
allowed: number;
|
|
162
|
+
/** Spawn-tool calls denied at the `maxAgents` cap. */
|
|
163
|
+
denied: number;
|
|
164
|
+
/** Fan-out children pruned by the `subagent/start` backstop. */
|
|
165
|
+
pruned: number;
|
|
166
|
+
/** Allowed-but-undiscovered spawns currently holding an admission slot. */
|
|
167
|
+
inFlight: number;
|
|
168
|
+
}
|
|
139
169
|
/** The running policy: the bridge's `onRoundCount` sink plus the teardown. */
|
|
140
170
|
export interface SubagentPolicy {
|
|
141
171
|
/** Called by the bridge whenever one child produced another assistant message. */
|
|
@@ -145,6 +175,8 @@ export interface SubagentPolicy {
|
|
|
145
175
|
* force-stopped child shows its `⏻` marker everywhere the view renders.
|
|
146
176
|
*/
|
|
147
177
|
onHardStop?(record: HardStopRecord): void;
|
|
178
|
+
/** Snapshot of the runtime counters (live / allowed / denied / pruned / inFlight). */
|
|
179
|
+
getStats(): SubagentPolicyStats;
|
|
148
180
|
/** Unwind the guard and event listeners. */
|
|
149
181
|
dispose(): void;
|
|
150
182
|
}
|
package/lib/subagent-policy.js
CHANGED
|
@@ -5,20 +5,33 @@
|
|
|
5
5
|
* decision point — no watcher needed (the /settings browser hot-applies, so
|
|
6
6
|
* the next guard execution / turn count reads the new value):
|
|
7
7
|
* - `maxAgents` caps concurrent live children. A `tools.guard` registered on
|
|
8
|
-
* the plugin root ctx denies model-facing spawn tools once the
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
8
|
+
* the plugin root ctx denies model-facing spawn tools once the EFFECTIVE
|
|
9
|
+
* child count meets the cap. The count is synchronous at the spawn
|
|
10
|
+
* decision: discovered live children plus an admission ledger of
|
|
11
|
+
* allowed-but-not-yet-discovered spawns, so a burst of parallel spawn
|
|
12
|
+
* calls inside one assistant message cannot overshoot while the bridge's
|
|
13
|
+
* firehose discovery catches up (each allowance enters the ledger the
|
|
14
|
+
* moment it is granted; each newly discovered child consumes one entry).
|
|
15
|
+
* The count covers every child in the process, but the DENIAL scope is
|
|
16
|
+
* "belongs to this TUI": a caller carrying the surface marker, or any
|
|
17
|
+
* live descendant of a marked root (the ancestor walk closes the
|
|
18
|
+
* host-created-children hole). Foreign roots fail open. A denial tells
|
|
19
|
+
* the model to record the task in its todo list and run it once a slot
|
|
20
|
+
* frees, instead of retrying the spawn. The workflow/ralph fan-out
|
|
21
|
+
* bypasses the tool pipeline (its worker thread spawns through the
|
|
22
|
+
* subagent provider directly), so a `subagent/start` listener prunes any
|
|
23
|
+
* newcomer that slips past the guard — same ownership scope, decided by
|
|
24
|
+
* the child's parent ancestry.
|
|
17
25
|
* - `disableSubagent` disables the plain native `subagent` tool: its calls
|
|
18
26
|
* are denied for every TUI-scoped caller (and it is hidden from the main
|
|
19
27
|
* agent's catalog), so delegation goes through registered agent
|
|
20
28
|
* definitions (`~/.dsh/agents/*.md` via the registry's `use_agent`).
|
|
21
29
|
* `subagent_fork`, `workflow` and `ralph` stay available.
|
|
30
|
+
* - `registeredOnly` is the wider fence: EVERY spawn tool except
|
|
31
|
+
* `use_agent` is denied for TUI-scoped callers, so no child can exist
|
|
32
|
+
* without a registered agent definition behind it (no ad-hoc
|
|
33
|
+
* "implement <task>" children). Default off; the fence is read live like
|
|
34
|
+
* every other knob.
|
|
22
35
|
* - `maxRounds` caps a child's assistant messages (each LLM round-trip is
|
|
23
36
|
* one "round") through a TWO-STAGE ladder. Stage 1: at the cap — the
|
|
24
37
|
* per-agent tier when the child's label resolves to an agent .md
|
|
@@ -208,6 +221,15 @@ function callerBelongsToTui(ctx, agent) {
|
|
|
208
221
|
}
|
|
209
222
|
/** Walk depth cap: dsh's native depth default is 3; 4 hops cover it with room. */
|
|
210
223
|
const ANCESTOR_WALK_MAX_DEPTH = 4;
|
|
224
|
+
/**
|
|
225
|
+
* How long an allowed-but-never-discovered admission may hold its slot.
|
|
226
|
+
* Discovery normally lands within one bridge reconcile tick (600ms); the
|
|
227
|
+
* TTL only releases the slot of a spawn that errored after the guard
|
|
228
|
+
* allowed it, so one failed spawn cannot shrink the budget forever.
|
|
229
|
+
*/
|
|
230
|
+
const INFLIGHT_TTL_MS = 30_000;
|
|
231
|
+
/** Credited-id slack over the live board before stale ids are pruned. */
|
|
232
|
+
const CREDITED_SLACK = 64;
|
|
211
233
|
/**
|
|
212
234
|
* The wrap-up message injected into a child that reached `maxRounds`.
|
|
213
235
|
* English and directive on purpose: it is a policy instruction to the child
|
|
@@ -245,14 +267,68 @@ export function applySubagentPolicy(ctx, state, resolveAgentCap) {
|
|
|
245
267
|
const injected = new Set();
|
|
246
268
|
/** Set by dispose: a pending deferred injection must not fire afterwards. */
|
|
247
269
|
let disposed = false;
|
|
248
|
-
//
|
|
249
|
-
//
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
//
|
|
253
|
-
//
|
|
254
|
-
//
|
|
255
|
-
//
|
|
270
|
+
// ---- synchronous admission ledger -------------------------------------
|
|
271
|
+
//
|
|
272
|
+
// The maxAgents admission decision must not depend on discovery timing.
|
|
273
|
+
// Every allowance is recorded here the moment it is granted; every child
|
|
274
|
+
// the bridge later discovers consumes exactly one record (it is then
|
|
275
|
+
// counted in `live` directly). The next guard execution therefore always
|
|
276
|
+
// reads `live.length + inFlight.length`, so a burst of parallel spawn
|
|
277
|
+
// calls inside ONE assistant message sees itself: with cap 2 the calls
|
|
278
|
+
// read 0+0, 0+1, then deny at 0+2 — never six "Started" results.
|
|
279
|
+
const stats = { live: 0, allowed: 0, denied: 0, pruned: 0, inFlight: 0 };
|
|
280
|
+
/** Live child ids already folded into the ledger (each consumed one in-flight). */
|
|
281
|
+
const creditedIds = new Set();
|
|
282
|
+
/** Admission timestamps of allowed spawns not yet discovered in `getLive()`. */
|
|
283
|
+
const inFlightAt = [];
|
|
284
|
+
/**
|
|
285
|
+
* Fold the bridge's current live board into the admission ledger and
|
|
286
|
+
* return the effective child count the `maxAgents` cap compares against:
|
|
287
|
+
* discovered children plus allowed-but-undiscovered admissions.
|
|
288
|
+
*
|
|
289
|
+
* Each live child absent from `creditedIds` is a fresh discovery and
|
|
290
|
+
* consumes exactly one in-flight entry. A child the guard never admitted
|
|
291
|
+
* (workflow/ralph provider spawns, foreign surfaces) consumes a phantom
|
|
292
|
+
* entry at worst — shifting an empty list is a no-op — which can only
|
|
293
|
+
* make the estimate MORE conservative, never higher. Entries older than
|
|
294
|
+
* {@link INFLIGHT_TTL_MS} expire so a spawn that failed after the guard
|
|
295
|
+
* allowed it releases its slot instead of holding it forever.
|
|
296
|
+
*/
|
|
297
|
+
function reconcileAdmission(live) {
|
|
298
|
+
let discovered = 0;
|
|
299
|
+
for (const view of live) {
|
|
300
|
+
const id = view.childId;
|
|
301
|
+
if (typeof id !== 'string' || id === '')
|
|
302
|
+
continue;
|
|
303
|
+
if (!creditedIds.has(id)) {
|
|
304
|
+
creditedIds.add(id);
|
|
305
|
+
discovered += 1;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
for (let i = 0; i < discovered; i += 1)
|
|
309
|
+
inFlightAt.shift();
|
|
310
|
+
const now = Date.now();
|
|
311
|
+
while (inFlightAt.length > 0 && now - inFlightAt[0] > INFLIGHT_TTL_MS)
|
|
312
|
+
inFlightAt.shift();
|
|
313
|
+
if (creditedIds.size > live.length + CREDITED_SLACK) {
|
|
314
|
+
const liveIds = new Set(live.map(view => view.childId));
|
|
315
|
+
for (const id of creditedIds) {
|
|
316
|
+
if (!liveIds.has(id))
|
|
317
|
+
creditedIds.delete(id);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
stats.inFlight = inFlightAt.length;
|
|
321
|
+
stats.live = live.length;
|
|
322
|
+
return live.length + inFlightAt.length;
|
|
323
|
+
}
|
|
324
|
+
// maxAgents guard: the effective child count is global (the bridge counts
|
|
325
|
+
// every child it discovers; the admission ledger adds the
|
|
326
|
+
// allowed-but-undiscovered spawns so a same-step burst cannot overshoot),
|
|
327
|
+
// but the DENIAL — like the disableSubagent fence — only fires for agents
|
|
328
|
+
// this bridge created or resumed (the surface marker; unmarked callers
|
|
329
|
+
// fail open). Zero disables the guard. The subagent/start backstop below
|
|
330
|
+
// still covers the workflow/ralph provider path, which never reaches this
|
|
331
|
+
// guard at all.
|
|
256
332
|
//
|
|
257
333
|
// disableSubagent fence: the plain native `subagent` tool is denied —
|
|
258
334
|
// but ONLY for agents this bridge created or resumed (the surface marker
|
|
@@ -280,6 +356,21 @@ export function applySubagentPolicy(ctx, state, resolveAgentCap) {
|
|
|
280
356
|
// roots still fail open.
|
|
281
357
|
if (!callerBelongsToTui(ctx, exec.agent))
|
|
282
358
|
return undefined;
|
|
359
|
+
// registeredOnly fence: EVERY spawn tool except the registry's
|
|
360
|
+
// use_agent is denied — a child may only ever be backed by a
|
|
361
|
+
// registered agent definition (~/.dsh/agents/*.md). Stricter than the
|
|
362
|
+
// disableSubagent fence: subagent_fork/workflow/ralph are fenced too,
|
|
363
|
+
// so the model cannot sidestep the roster with ad-hoc or forked
|
|
364
|
+
// spawns (the "实现 <task description>" label shape is exactly the
|
|
365
|
+
// leak this closes).
|
|
366
|
+
if (readSubagentLimits(ctx).registeredOnly && exec.name !== 'use_agent') {
|
|
367
|
+
return `Ad-hoc subagents are disabled here — the "${exec.name}" tool is not available. `
|
|
368
|
+
+ 'Delegation goes through the use_agent tool with one of the REGISTERED agent names '
|
|
369
|
+
+ '(~/.dsh/agents/*.md) only — it covers the same ground: background:true for a durable '
|
|
370
|
+
+ 'background child, resume/fresh for continuation, parallel use_agent calls for fan-out. '
|
|
371
|
+
+ 'If no registered agent fits this task, do it yourself or record it with todo_write and '
|
|
372
|
+
+ 'surface it to the operator.';
|
|
373
|
+
}
|
|
283
374
|
if (readSubagentLimits(ctx).disableSubagent && NATIVE_SPAWN_TOOLS.includes(exec.name)) {
|
|
284
375
|
return `Tool "subagent" is disabled here - delegation goes through registered agents. `
|
|
285
376
|
+ 'Dispatch the work through the use_agent tool with one of the registered agent names instead.';
|
|
@@ -288,10 +379,21 @@ export function applySubagentPolicy(ctx, state, resolveAgentCap) {
|
|
|
288
379
|
if (maxAgents <= 0)
|
|
289
380
|
return undefined;
|
|
290
381
|
const live = state.getLive();
|
|
291
|
-
|
|
382
|
+
// SYNCHRONOUS admission: the effective count folds in the ledger of
|
|
383
|
+
// spawns this guard already allowed but the bridge has not discovered
|
|
384
|
+
// yet — the burst window that let six parallel use_agent calls through
|
|
385
|
+
// a cap of two (2026-09-10 session 9c777e88).
|
|
386
|
+
const effective = reconcileAdmission(live);
|
|
387
|
+
if (effective < maxAgents) {
|
|
388
|
+
inFlightAt.push(Date.now());
|
|
389
|
+
stats.allowed += 1;
|
|
292
390
|
return undefined;
|
|
391
|
+
}
|
|
392
|
+
stats.denied += 1;
|
|
293
393
|
const running = live.map((agent) => agent.label).join(', ');
|
|
294
|
-
return `Agent limit reached (${
|
|
394
|
+
return `Agent limit reached (${effective}/${maxAgents}): ${running} still running — do NOT retry the spawn now. `
|
|
395
|
+
+ 'Call subagent_status for the live board, record this task in the todo list (todo_write, status pending), '
|
|
396
|
+
+ 'and execute it after a running agent finishes and frees a slot.';
|
|
295
397
|
}));
|
|
296
398
|
}
|
|
297
399
|
// Workflow/ralph backstop: the worker thread fans children out through the
|
|
@@ -329,7 +431,11 @@ export function applySubagentPolicy(ctx, state, resolveAgentCap) {
|
|
|
329
431
|
: ctx.agents.get(SessionId(parentSession));
|
|
330
432
|
if (parent === undefined || !callerBelongsToTui(ctx, parent))
|
|
331
433
|
return;
|
|
332
|
-
ctx.agents.get(info.id)
|
|
434
|
+
const newcomerAgent = ctx.agents.get(info.id);
|
|
435
|
+
if (newcomerAgent === undefined)
|
|
436
|
+
return;
|
|
437
|
+
stats.pruned += 1;
|
|
438
|
+
newcomerAgent.cancel({
|
|
333
439
|
kind: 'hook',
|
|
334
440
|
reason: 'over the dsh-tui maxAgents policy cap — prune a fan-out child',
|
|
335
441
|
});
|
|
@@ -496,6 +602,13 @@ export function applySubagentPolicy(ctx, state, resolveAgentCap) {
|
|
|
496
602
|
set onHardStop(sink) {
|
|
497
603
|
onHardStopSink = sink;
|
|
498
604
|
},
|
|
605
|
+
getStats() {
|
|
606
|
+
return {
|
|
607
|
+
...stats,
|
|
608
|
+
live: state.getLive().length,
|
|
609
|
+
inFlight: inFlightAt.length,
|
|
610
|
+
};
|
|
611
|
+
},
|
|
499
612
|
dispose() {
|
|
500
613
|
disposed = true;
|
|
501
614
|
for (const dispose of disposers.splice(0)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-policy.js","sourceRoot":"","sources":["../src/subagent-policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subagent-policy.js","sourceRoot":"","sources":["../src/subagent-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `subagent_status` model-facing tool: a read-only live board of this
|
|
3
|
+
* TUI's subagent runtime, served straight from the bridge's real-time views
|
|
4
|
+
* and the policy's admission counters.
|
|
5
|
+
*
|
|
6
|
+
* Why a tool: the runtime state already exists in-process (the bridge folds
|
|
7
|
+
* every child's firehose events and reconciles against the host's
|
|
8
|
+
* authoritative descendant listing every 600ms), but before this tool the
|
|
9
|
+
* model had no cheap way to READ it — it had to probe the spawn tool and
|
|
10
|
+
* read denial strings, or re-derive state from transcripts. One call here
|
|
11
|
+
* returns the whole board: cap headroom, per-child progress (rounds,
|
|
12
|
+
* tokens, context, last tool), the recent settles, and the admission
|
|
13
|
+
* counters (admitted / denied / pruned / in-flight). The maxAgents denial
|
|
14
|
+
* message points here, so the reject → check → todo_write → retry-later
|
|
15
|
+
* loop needs no other discovery.
|
|
16
|
+
*
|
|
17
|
+
* Read-only by design: steering and stopping stay on the human surfaces
|
|
18
|
+
* (Ctrl+G viewer, stop-everything dialog) — the model observing the board
|
|
19
|
+
* can plan around it but cannot reach through it.
|
|
20
|
+
*/
|
|
21
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
22
|
+
import type { AgentView } from './dsh-events.ts';
|
|
23
|
+
import type { SubagentPolicyStats } from './subagent-policy.ts';
|
|
24
|
+
/** The global tool name — deliberately NOT in SPAWN_TOOLS: this spawns nothing. */
|
|
25
|
+
export declare const SUBAGENT_STATUS_TOOL_NAME = "subagent_status";
|
|
26
|
+
/**
|
|
27
|
+
* Where the board reads from: the bridge's real-time views and the policy's
|
|
28
|
+
* admission counters. Both are plain synchronous reads — the runtime state
|
|
29
|
+
* is maintained continuously, never computed on demand.
|
|
30
|
+
*/
|
|
31
|
+
export interface SubagentRuntimeSource {
|
|
32
|
+
/** The bridge's child views (live and recently settled). */
|
|
33
|
+
views(): readonly AgentView[];
|
|
34
|
+
/** The policy's admission counters. */
|
|
35
|
+
stats(): SubagentPolicyStats;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build the tool definition. `parameters` is empty — the board takes no
|
|
39
|
+
* arguments; every call is a full snapshot.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildSubagentStatusTool(ctx: Context, runtime: SubagentRuntimeSource): import("@deepseek-ai/dsh-tools").ToolDefinition;
|
|
42
|
+
/**
|
|
43
|
+
* Register the board tool on the plugin root ctx. Best-effort like the
|
|
44
|
+
* policy's guard wiring: a tools-less deployment skips silently (the TUI's
|
|
45
|
+
* runtime management surfaces — viewer, limits panel — remain).
|
|
46
|
+
*
|
|
47
|
+
* @returns the registration disposer, or `undefined` when there is no tools
|
|
48
|
+
* service to register with.
|
|
49
|
+
*/
|
|
50
|
+
export declare function installSubagentStatusTool(ctx: Context, runtime: SubagentRuntimeSource): (() => void) | undefined;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `subagent_status` model-facing tool: a read-only live board of this
|
|
3
|
+
* TUI's subagent runtime, served straight from the bridge's real-time views
|
|
4
|
+
* and the policy's admission counters.
|
|
5
|
+
*
|
|
6
|
+
* Why a tool: the runtime state already exists in-process (the bridge folds
|
|
7
|
+
* every child's firehose events and reconciles against the host's
|
|
8
|
+
* authoritative descendant listing every 600ms), but before this tool the
|
|
9
|
+
* model had no cheap way to READ it — it had to probe the spawn tool and
|
|
10
|
+
* read denial strings, or re-derive state from transcripts. One call here
|
|
11
|
+
* returns the whole board: cap headroom, per-child progress (rounds,
|
|
12
|
+
* tokens, context, last tool), the recent settles, and the admission
|
|
13
|
+
* counters (admitted / denied / pruned / in-flight). The maxAgents denial
|
|
14
|
+
* message points here, so the reject → check → todo_write → retry-later
|
|
15
|
+
* loop needs no other discovery.
|
|
16
|
+
*
|
|
17
|
+
* Read-only by design: steering and stopping stay on the human surfaces
|
|
18
|
+
* (Ctrl+G viewer, stop-everything dialog) — the model observing the board
|
|
19
|
+
* can plan around it but cannot reach through it.
|
|
20
|
+
*/
|
|
21
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
22
|
+
import { readSubagentLimits } from "./theme-settings.js";
|
|
23
|
+
/** The global tool name — deliberately NOT in SPAWN_TOOLS: this spawns nothing. */
|
|
24
|
+
export const SUBAGENT_STATUS_TOOL_NAME = 'subagent_status';
|
|
25
|
+
/** How many settled rows the board shows after the live rows (most recent first). */
|
|
26
|
+
const SETTLED_ROWS = 8;
|
|
27
|
+
/** Format one ms duration as a compact `4m02s` / `1h12m` / `37s` stamp. */
|
|
28
|
+
function formatDuration(ms) {
|
|
29
|
+
const totalSeconds = Math.max(0, Math.floor(ms / 1000));
|
|
30
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
31
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
32
|
+
const seconds = totalSeconds % 60;
|
|
33
|
+
if (hours > 0)
|
|
34
|
+
return `${hours}h${String(minutes).padStart(2, '0')}m`;
|
|
35
|
+
if (minutes > 0)
|
|
36
|
+
return `${minutes}m${String(seconds).padStart(2, '0')}s`;
|
|
37
|
+
return `${seconds}s`;
|
|
38
|
+
}
|
|
39
|
+
/** One board row: status, short id, label, progress, activity. */
|
|
40
|
+
function renderRow(prefix, view, now) {
|
|
41
|
+
const id = `#${view.childId.slice(0, 8)}`;
|
|
42
|
+
const parts = [
|
|
43
|
+
`${prefix} ${id} ${view.label}`,
|
|
44
|
+
`rounds ${view.rounds}`,
|
|
45
|
+
`tok ${view.tokens}`,
|
|
46
|
+
];
|
|
47
|
+
if (view.contextWindow !== undefined && view.contextWindow > 0) {
|
|
48
|
+
parts.push(`ctx ${Math.round((view.contextTokens / view.contextWindow) * 100)}%`);
|
|
49
|
+
}
|
|
50
|
+
parts.push(formatDuration(now - view.startedAt));
|
|
51
|
+
if (view.lastTool !== undefined)
|
|
52
|
+
parts.push(`last=${view.lastTool}`);
|
|
53
|
+
if (view.retries > 0)
|
|
54
|
+
parts.push(`retry ${view.retries}`);
|
|
55
|
+
if (view.outcome !== undefined)
|
|
56
|
+
parts.push(`outcome=${view.outcome}`);
|
|
57
|
+
return parts.join(' ');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the tool definition. `parameters` is empty — the board takes no
|
|
61
|
+
* arguments; every call is a full snapshot.
|
|
62
|
+
*/
|
|
63
|
+
export function buildSubagentStatusTool(ctx, runtime) {
|
|
64
|
+
return defineTool({
|
|
65
|
+
name: SUBAGENT_STATUS_TOOL_NAME,
|
|
66
|
+
description: 'Live board of this session\'s subagents: who is running, how far each has got '
|
|
67
|
+
+ '(rounds, tokens, context, last tool), who settled, and the admission counters '
|
|
68
|
+
+ '(admitted / denied by the maxAgents cap). Read-only, zero cost, always current — '
|
|
69
|
+
+ 'call this INSTEAD of probing spawn tools or re-reading transcripts. '
|
|
70
|
+
+ 'After an "Agent limit reached" denial: check the board, record the pending task '
|
|
71
|
+
+ 'with todo_write, and dispatch it once a running agent finishes and frees a slot.',
|
|
72
|
+
parameters: {},
|
|
73
|
+
output: {
|
|
74
|
+
schema: {
|
|
75
|
+
type: 'object',
|
|
76
|
+
additionalProperties: false,
|
|
77
|
+
properties: {
|
|
78
|
+
kind: { type: 'string', required: true },
|
|
79
|
+
text: { type: 'string', required: true },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
render: (_args, value) => {
|
|
83
|
+
const text = value.text;
|
|
84
|
+
return [{ type: 'text', text: typeof text === 'string' ? text : 'subagent board unavailable' }];
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
isConcurrencySafe: () => true,
|
|
88
|
+
async execute() {
|
|
89
|
+
const views = runtime.views();
|
|
90
|
+
const stats = runtime.stats();
|
|
91
|
+
const cap = readSubagentLimits(ctx).maxAgents;
|
|
92
|
+
const now = Date.now();
|
|
93
|
+
const live = views.filter(view => view.outcome === undefined).sort((a, b) => a.startedAt - b.startedAt);
|
|
94
|
+
const settled = views.filter(view => view.outcome !== undefined)
|
|
95
|
+
.sort((a, b) => (b.endedAt ?? b.startedAt) - (a.endedAt ?? a.startedAt))
|
|
96
|
+
.slice(0, SETTLED_ROWS);
|
|
97
|
+
const head = `subagent board — live ${stats.live}/${cap} (dsh-tui.maxAgents, 0 = unlimited)`
|
|
98
|
+
+ ` · admitted ${stats.allowed} · denied ${stats.denied} · pruned ${stats.pruned} · in-flight ${stats.inFlight}`;
|
|
99
|
+
const rows = [
|
|
100
|
+
...live.map(view => renderRow('live', view, now)),
|
|
101
|
+
...(settled.length > 0 ? ['--- recent settles ---'] : []),
|
|
102
|
+
...settled.map(view => renderRow('done', view, now)),
|
|
103
|
+
];
|
|
104
|
+
const text = rows.length === 0
|
|
105
|
+
? `${head}\n(no children yet — the board is empty)`
|
|
106
|
+
: `${head}\n${rows.join('\n')}`;
|
|
107
|
+
return { kind: 'subagent_status', text };
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Register the board tool on the plugin root ctx. Best-effort like the
|
|
113
|
+
* policy's guard wiring: a tools-less deployment skips silently (the TUI's
|
|
114
|
+
* runtime management surfaces — viewer, limits panel — remain).
|
|
115
|
+
*
|
|
116
|
+
* @returns the registration disposer, or `undefined` when there is no tools
|
|
117
|
+
* service to register with.
|
|
118
|
+
*/
|
|
119
|
+
export function installSubagentStatusTool(ctx, runtime) {
|
|
120
|
+
const tools = ctx.get('tools');
|
|
121
|
+
if (tools?.register === undefined)
|
|
122
|
+
return undefined;
|
|
123
|
+
return tools.register(buildSubagentStatusTool(ctx, runtime));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=subagent-status-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-status-tool.js","sourceRoot":"","sources":["../src/subagent-status-tool.ts"],"names":[],"mappings":"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"}
|
package/lib/theme-settings.d.ts
CHANGED
|
@@ -68,6 +68,17 @@ export interface SubagentLimits {
|
|
|
68
68
|
* plain one-shot spawn the TUI's user wants fenced off).
|
|
69
69
|
*/
|
|
70
70
|
disableSubagent: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Fence EVERY spawn tool except the registry's `use_agent`: delegation may
|
|
73
|
+
* only create subagents backed by a registered agent definition
|
|
74
|
+
* (`~/.dsh/agents/*.md`), and the ad-hoc paths — native `subagent`,
|
|
75
|
+
* `subagent_fork`, `workflow`, `ralph` — are denied at the guard. This is
|
|
76
|
+
* the "no subagents we did not define" lever: any child whose label is a
|
|
77
|
+
* task description rather than a registered agent's display name is a
|
|
78
|
+
* fence miss this knob closes. Default off (the narrower
|
|
79
|
+
* `disableSubagent` fence stays the out-of-the-box stance).
|
|
80
|
+
*/
|
|
81
|
+
registeredOnly: boolean;
|
|
71
82
|
}
|
|
72
83
|
/**
|
|
73
84
|
* Default subagent limits, applied whenever the settings service, namespace,
|
|
@@ -239,7 +250,7 @@ export declare function readSubagentLimits(ctx: Context): SubagentLimits;
|
|
|
239
250
|
* failure message for the caller.
|
|
240
251
|
* @returns undefined on success, the failure message otherwise.
|
|
241
252
|
*/
|
|
242
|
-
export declare function writeSubagentLimit(ctx: Context, key: 'maxAgents' | 'maxRounds' | 'maxRoundsGrace' | 'disableSubagent', value: number | boolean): Promise<string | undefined>;
|
|
253
|
+
export declare function writeSubagentLimit(ctx: Context, key: 'maxAgents' | 'maxRounds' | 'maxRoundsGrace' | 'disableSubagent' | 'registeredOnly', value: number | boolean): Promise<string | undefined>;
|
|
243
254
|
/** Persisted favorite/hidden model keys (`provider/id` composites). */
|
|
244
255
|
export interface ModelPrefs {
|
|
245
256
|
/** Models pinned to the top of the /model picker, in join order. */
|
package/lib/theme-settings.js
CHANGED
|
@@ -57,6 +57,7 @@ export const DEFAULT_SUBAGENT_LIMITS = Object.freeze({
|
|
|
57
57
|
maxRounds: 75,
|
|
58
58
|
maxRoundsGrace: 7,
|
|
59
59
|
disableSubagent: true,
|
|
60
|
+
registeredOnly: false,
|
|
60
61
|
});
|
|
61
62
|
/** Schema of the `dsh-tui` settings section. */
|
|
62
63
|
const THEME_SETTINGS_SCHEMA = z.object({
|
|
@@ -92,6 +93,13 @@ const THEME_SETTINGS_SCHEMA = z.object({
|
|
|
92
93
|
.description('Disable the native subagent tool (delegation goes through registered '
|
|
93
94
|
+ 'agents, ~/.dsh/agents/*.md via use_agent); subagent_fork/workflow/'
|
|
94
95
|
+ 'ralph stay available'),
|
|
96
|
+
registeredOnly: z
|
|
97
|
+
.boolean()
|
|
98
|
+
.default(DEFAULT_SUBAGENT_LIMITS.registeredOnly)
|
|
99
|
+
.description('Fence EVERY spawn tool except use_agent: delegation may only create '
|
|
100
|
+
+ 'subagents backed by a registered agent definition (~/.dsh/agents/'
|
|
101
|
+
+ '*.md); the ad-hoc paths (subagent, subagent_fork, workflow, ralph) '
|
|
102
|
+
+ 'are denied at the guard'),
|
|
95
103
|
footerHints: z
|
|
96
104
|
.object({
|
|
97
105
|
send: z.boolean().default(true).description('Show "Enter: send" in the footer hint bar'),
|
|
@@ -186,6 +194,7 @@ const THEME_SETTINGS_ENTRY = {
|
|
|
186
194
|
maxRounds: DEFAULT_SUBAGENT_LIMITS.maxRounds,
|
|
187
195
|
maxRoundsGrace: DEFAULT_SUBAGENT_LIMITS.maxRoundsGrace,
|
|
188
196
|
disableSubagent: DEFAULT_SUBAGENT_LIMITS.disableSubagent,
|
|
197
|
+
registeredOnly: DEFAULT_SUBAGENT_LIMITS.registeredOnly,
|
|
189
198
|
footerHints: { ...DEFAULT_FOOTER_HINTS },
|
|
190
199
|
cacheHitMode: DEFAULT_CACHE_HIT_MODE,
|
|
191
200
|
iconSet: 'auto',
|
|
@@ -558,6 +567,9 @@ export function readSubagentLimits(ctx) {
|
|
|
558
567
|
disableSubagent: typeof section?.disableSubagent === 'boolean'
|
|
559
568
|
? section.disableSubagent
|
|
560
569
|
: DEFAULT_SUBAGENT_LIMITS.disableSubagent,
|
|
570
|
+
registeredOnly: typeof section?.registeredOnly === 'boolean'
|
|
571
|
+
? section.registeredOnly
|
|
572
|
+
: DEFAULT_SUBAGENT_LIMITS.registeredOnly,
|
|
561
573
|
};
|
|
562
574
|
}
|
|
563
575
|
/**
|