@esso0428/pi-subagents 0.17.14 → 0.17.16
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/CHANGELOG.md +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -116
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +2 -2
- package/dist/settings.d.ts +1 -8
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +0 -5
- package/dist/settings.js.map +1 -1
- package/dist/ui/agent-mention.d.ts +2 -2
- package/dist/ui/agent-widget.d.ts.map +1 -1
- package/dist/ui/agent-widget.js +1 -1
- package/dist/ui/agent-widget.js.map +1 -1
- package/dist/ui/workflow-menu.d.ts +3 -22
- package/dist/ui/workflow-menu.d.ts.map +1 -1
- package/dist/ui/workflow-menu.js +4 -25
- package/dist/ui/workflow-menu.js.map +1 -1
- package/package.json +2 -3
- package/src/index.ts +14 -124
- package/src/prompts.ts +2 -2
- package/src/settings.ts +1 -12
- package/src/ui/agent-mention.ts +2 -2
- package/src/ui/agent-widget.ts +1 -1
- package/src/ui/workflow-menu.ts +4 -31
- package/dist/ui/fleet-list.d.ts +0 -198
- package/dist/ui/fleet-list.d.ts.map +0 -1
- package/dist/ui/fleet-list.js +0 -487
- package/dist/ui/fleet-list.js.map +0 -1
- package/src/ui/fleet-list.ts +0 -558
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.17.
|
|
10
|
+
## [0.17.16] - 2026-09-30
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **Made local verification resource-safe by default** by removing the E2E script, excluding E2E directories and E2E-named tests from Vitest, and removing Vitest and the build from prepublish checks. Vitest, E2E, and build now require explicit user authorization on this device.
|
|
14
|
+
|
|
15
|
+
## [0.17.15] - 2026-09-30
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Removed the deprecated FleetView UI and its settings/runtime wiring**, leaving the Agents widget and workflow menu as the supported status surfaces.
|
|
19
|
+
- **Capped Vitest at four workers** so local, CI, E2E, and prepublish test runs avoid CPU saturation on common development hosts.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- **Reduced Agents widget redraw latency** by making UI refresh requests use normal unforced renders by default.
|
|
23
|
+
|
|
24
|
+
## [0.17.14] - 2026-09-30
|
|
11
25
|
|
|
12
26
|
### Fixed
|
|
13
27
|
- **Restored focus-gated selector routing** so agent history selectors receive navigation input without suspending the background Agents widget.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAc,KAAK,YAAY,EAA8G,MAAM,iCAAiC,CAAC;AAC5L,OAAO,EAAE,SAAS,EAA2F,MAAM,wBAAwB,CAAC;AAyB5I,OAAO,EAAE,KAAK,WAAW,EAAuK,MAAM,YAAY,CAAC;AAEnN,OAAO,EAeL,KAAK,KAAK,EAEX,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAc,KAAK,YAAY,EAA8G,MAAM,iCAAiC,CAAC;AAC5L,OAAO,EAAE,SAAS,EAA2F,MAAM,wBAAwB,CAAC;AAyB5I,OAAO,EAAE,KAAK,WAAW,EAAuK,MAAM,YAAY,CAAC;AAEnN,OAAO,EAeL,KAAK,KAAK,EAEX,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAA2B,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAmBrG,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GACvB,SAAS,CAKX;AAgKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAatE;AAED,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;;;;GAIG;AACH,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAEvG,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAonHxC"}
|
package/dist/index.js
CHANGED
|
@@ -39,10 +39,9 @@ import { applyAndEmitLoaded, loadSettings, saveAndEmitChanged } from "./settings
|
|
|
39
39
|
import { getForegroundOutcomeNote, getStatusNote, partialOutputSuffix } from "./status-note.js";
|
|
40
40
|
import { createMentionProvider, mentionRoster } from "./ui/agent-mention.js";
|
|
41
41
|
import { AgentWidget, buildInvocationTags, describeActivity, fgPreservingNestedStyles, formatCost, formatDuration, formatMs, formatTokens, formatTurns, getDisplayName, getPromptModeLabel, SPINNER, } from "./ui/agent-widget.js";
|
|
42
|
-
import { FleetList } from "./ui/fleet-list.js";
|
|
43
42
|
import { showSchedulesMenu } from "./ui/schedule-menu.js";
|
|
44
43
|
import { renderWorkflowCard, renderWorkflowEntryCard } from "./ui/workflow-card.js";
|
|
45
|
-
import {
|
|
44
|
+
import { showWorkflowsMenu } from "./ui/workflow-menu.js";
|
|
46
45
|
import { getLifetimeCost, getLifetimeTotal, getSessionContextPercent, PendingUsagePool, toReportedUsage } from "./usage.js";
|
|
47
46
|
import { decideWorkflowCollision, FOREIGN_WORKFLOW_TOOL_NAMES } from "./workflow/collisions.js";
|
|
48
47
|
import { WORKFLOW_ENTRY_TYPE, workflowEntryData } from "./workflow/entry.js";
|
|
@@ -371,7 +370,7 @@ export default function (pi) {
|
|
|
371
370
|
/** Show `~$X` next to token counts in the subagent surfaces. */
|
|
372
371
|
let showCost = false;
|
|
373
372
|
function isShowCostEnabled() { return showCost; }
|
|
374
|
-
function setShowCost(b) { showCost = b; widget.update();
|
|
373
|
+
function setShowCost(b) { showCost = b; widget.update(); }
|
|
375
374
|
/** Name the model and thinking level on the widget's running rows. */
|
|
376
375
|
let showModel = false;
|
|
377
376
|
function isShowModelEnabled() { return showModel; }
|
|
@@ -384,16 +383,6 @@ export default function (pi) {
|
|
|
384
383
|
let viewerMarkdown = "assistant";
|
|
385
384
|
function getViewerMarkdown() { return viewerMarkdown; }
|
|
386
385
|
function setViewerMarkdown(mode) { viewerMarkdown = mode; }
|
|
387
|
-
/**
|
|
388
|
-
* The viewer's `m` key, from either entry point: set the mode and persist it,
|
|
389
|
-
* so the key and `/agents → Settings` stay one setting rather than one per
|
|
390
|
-
* entry point. `ctx` carries only the warning a failed write notifies with,
|
|
391
|
-
* and the fleet list may be acting without one.
|
|
392
|
-
*/
|
|
393
|
-
function chooseViewerMarkdown(mode, ctx) {
|
|
394
|
-
setViewerMarkdown(mode);
|
|
395
|
-
persistSettings(ctx, `Viewer markdown set to ${mode}`);
|
|
396
|
-
}
|
|
397
386
|
const pendingUsage = new PendingUsagePool();
|
|
398
387
|
// ---- Cancellable pending notifications ----
|
|
399
388
|
// Holds notifications briefly so get_subagent_result can cancel them
|
|
@@ -436,7 +425,6 @@ export default function (pi) {
|
|
|
436
425
|
function sendIndividualNudge(record) {
|
|
437
426
|
agentActivity.delete(record.id);
|
|
438
427
|
widget.markFinished(record.id);
|
|
439
|
-
fleet.onAgentFinished(record.id);
|
|
440
428
|
scheduleNudge(record.id, () => emitIndividualNudge(record));
|
|
441
429
|
widget.update();
|
|
442
430
|
}
|
|
@@ -445,7 +433,6 @@ export default function (pi) {
|
|
|
445
433
|
for (const r of records) {
|
|
446
434
|
agentActivity.delete(r.id);
|
|
447
435
|
widget.markFinished(r.id);
|
|
448
|
-
fleet.onAgentFinished(r.id);
|
|
449
436
|
}
|
|
450
437
|
const groupKey = `group:${records.map(r => r.id).join(",")}`;
|
|
451
438
|
scheduleNudge(groupKey, () => {
|
|
@@ -542,7 +529,6 @@ export default function (pi) {
|
|
|
542
529
|
if (record.resultConsumed) {
|
|
543
530
|
agentActivity.delete(record.id);
|
|
544
531
|
widget.markFinished(record.id);
|
|
545
|
-
fleet.onAgentFinished(record.id);
|
|
546
532
|
widget.update();
|
|
547
533
|
return;
|
|
548
534
|
}
|
|
@@ -624,7 +610,7 @@ export default function (pi) {
|
|
|
624
610
|
// Every programmatic spawn lands here — cross-extension RPC, both `@handle`
|
|
625
611
|
// mention paths, and the `Symbol.for("pi-subagents:manager")` registry — and
|
|
626
612
|
// none came through the Agent tool, which is where the UI activity tracker is
|
|
627
|
-
// otherwise created. Without one the widget
|
|
613
|
+
// otherwise created. Without one the widget has no tool name
|
|
628
614
|
// and no turn count, so the row reads `thinking…` for the agent's whole life
|
|
629
615
|
// while the header's tool-use count climbs beside it (#181). Double-tracking
|
|
630
616
|
// is not possible: the Agent tool calls `manager.spawn` directly. The tracker
|
|
@@ -638,7 +624,7 @@ export default function (pi) {
|
|
|
638
624
|
// leaves the displayed ceiling stale.
|
|
639
625
|
const { state, callbacks } = createActivityTracker(resolveEffectiveMaxTurns(dispatch.type, options?.maxTurns));
|
|
640
626
|
// Repaints are left to the manager's `onStart` callback, which already starts
|
|
641
|
-
// the widget
|
|
627
|
+
// the widget timer for agents that enter this way.
|
|
642
628
|
const id = manager.spawn(piRef, ctxRef, dispatch.type, prompt, { ...options, ...callbacks });
|
|
643
629
|
agentActivity.set(id, state);
|
|
644
630
|
return id;
|
|
@@ -746,8 +732,6 @@ export default function (pi) {
|
|
|
746
732
|
if (ctx.hasUI && (ctx.mode === undefined || ctx.mode === "tui")) {
|
|
747
733
|
widget.setUICtx(ctx.ui);
|
|
748
734
|
widget.update();
|
|
749
|
-
fleet.setUICtx(ctx.ui, false);
|
|
750
|
-
fleet.setCwd(ctx.cwd);
|
|
751
735
|
}
|
|
752
736
|
manager.clearCompleted(true);
|
|
753
737
|
// Guard mirrors the `!scheduler.isActive()` pattern below: session_start
|
|
@@ -794,8 +778,8 @@ export default function (pi) {
|
|
|
794
778
|
if (ctx.mode === "tui" && !mentionProviderRegistered && typeof ctx.ui.addAutocompleteProvider === "function") {
|
|
795
779
|
mentionProviderRegistered = true;
|
|
796
780
|
ctx.ui.addAutocompleteProvider(current => createMentionProvider(current,
|
|
797
|
-
// Plain text, not renderAgentName: the same label
|
|
798
|
-
//
|
|
781
|
+
// Plain text, not renderAgentName: the same label the widget shows,
|
|
782
|
+
// but the autocomplete description cannot carry ANSI.
|
|
799
783
|
() => mentionRoster(manager, mentionTypes(), type => getConfig(type).displayName), isAgentMentionsEnabled));
|
|
800
784
|
}
|
|
801
785
|
// Last, and only here: CLI flag values are applied by the host AFTER every
|
|
@@ -892,7 +876,7 @@ export default function (pi) {
|
|
|
892
876
|
}
|
|
893
877
|
// Evicted, but its conversation is still on disk: reopen it. This is an
|
|
894
878
|
// ordinary spawn carrying a session file, so the new record picks up the
|
|
895
|
-
// widget
|
|
879
|
+
// widget row, transcript and completion notification unchanged —
|
|
896
880
|
// and `reclaim` hands it back the names the tombstone was holding.
|
|
897
881
|
if (resolved?.kind === "tombstone") {
|
|
898
882
|
const entry = resolved.entry;
|
|
@@ -1006,8 +990,8 @@ export default function (pi) {
|
|
|
1006
990
|
try {
|
|
1007
991
|
// Nothing else to pass: runAgent resolves model, thinking and max turns
|
|
1008
992
|
// from the agent's own config when the spawn omits them, and the
|
|
1009
|
-
// manager's onStart/onComplete callbacks own the widget
|
|
1010
|
-
//
|
|
993
|
+
// manager's onStart/onComplete callbacks own the widget and completion
|
|
994
|
+
// notification — the same contract the scheduler and
|
|
1011
995
|
// cross-extension RPC spawns run under.
|
|
1012
996
|
const id = spawnTopLevel(pi, ctx, type, mention.message, {
|
|
1013
997
|
description: describeMention(mention.message),
|
|
@@ -1053,7 +1037,6 @@ export default function (pi) {
|
|
|
1053
1037
|
clearTimeout(timer);
|
|
1054
1038
|
pendingNudges.clear();
|
|
1055
1039
|
widget.dispose();
|
|
1056
|
-
fleet.dispose();
|
|
1057
1040
|
// Awaited: it emits `session_shutdown` into every retained child session so
|
|
1058
1041
|
// extensions bound there can release what they armed in `session_start` (#242).
|
|
1059
1042
|
// pi awaits this handler, and the process exits right after — unawaited, those
|
|
@@ -1076,13 +1059,6 @@ export default function (pi) {
|
|
|
1076
1059
|
showCost: isShowCostEnabled,
|
|
1077
1060
|
}, isShowModelEnabled);
|
|
1078
1061
|
function setWidgetMode(m) { widgetMode = m; widget.update(); }
|
|
1079
|
-
// Claude Code-style FleetView: navigable list of main + subagents below the editor.
|
|
1080
|
-
// The last two arguments keep a conversation overlay opened here identical to
|
|
1081
|
-
// one opened from `/agents`: same setting on the way in, same persist out.
|
|
1082
|
-
const fleet = new FleetList(manager, agentActivity, isShowCostEnabled, getViewerMarkdown, (mode) => chooseViewerMarkdown(mode, currentCtx), process.cwd());
|
|
1083
|
-
let fleetViewEnabled = true;
|
|
1084
|
-
function isFleetViewEnabled() { return fleetViewEnabled; }
|
|
1085
|
-
function setFleetViewEnabled(b) { fleetViewEnabled = b; fleet.setEnabled(b); }
|
|
1086
1062
|
// Claude Code-style `@handle message` prompt mentions. Read live by both the
|
|
1087
1063
|
// `input` hook and the stacked autocomplete provider, so the toggle applies
|
|
1088
1064
|
// immediately — the provider itself can never be unregistered (pi's wrapper
|
|
@@ -1199,7 +1175,7 @@ export default function (pi) {
|
|
|
1199
1175
|
/**
|
|
1200
1176
|
* Launch a detached resume of an existing agent and wire everything a
|
|
1201
1177
|
* re-running agent needs: transcript anchoring, activity tracking, join-mode
|
|
1202
|
-
* batching, the widget
|
|
1178
|
+
* batching, the widget refresh, and the `subagents:created` event.
|
|
1203
1179
|
*
|
|
1204
1180
|
* Shared by the Agent tool's `resume` + `run_in_background` branch and the
|
|
1205
1181
|
* `@handle message` prompt mention — they differ only in how they report the
|
|
@@ -1267,8 +1243,6 @@ export default function (pi) {
|
|
|
1267
1243
|
widget.markRunning(id);
|
|
1268
1244
|
widget.ensureTimer();
|
|
1269
1245
|
widget.update();
|
|
1270
|
-
fleet.ensureTimer();
|
|
1271
|
-
fleet.update();
|
|
1272
1246
|
// Resume ignores subagent_type (the record keeps the type it was
|
|
1273
1247
|
// spawned with), so report the record's own identity — a "created"
|
|
1274
1248
|
// event carrying the caller's type would re-register the agent under
|
|
@@ -1285,8 +1259,6 @@ export default function (pi) {
|
|
|
1285
1259
|
pi.on("tool_execution_start", async (_event, ctx) => {
|
|
1286
1260
|
if (ctx.hasUI && (ctx.mode === undefined || ctx.mode === "tui"))
|
|
1287
1261
|
widget.setUICtx(ctx.ui);
|
|
1288
|
-
if (ctx.hasUI && ctx.mode === undefined)
|
|
1289
|
-
fleet.setUICtx(ctx.ui, true);
|
|
1290
1262
|
widget.onTurnStart();
|
|
1291
1263
|
});
|
|
1292
1264
|
/** Build the full type list text dynamically from available agents only. */
|
|
@@ -1331,7 +1303,6 @@ export default function (pi) {
|
|
|
1331
1303
|
setStrictAgentFiles: (b) => { strictAgentFiles = b; },
|
|
1332
1304
|
setDisableDefaultAgents: setDisableDefaultAgents,
|
|
1333
1305
|
setToolDescriptionMode: setToolDescriptionMode,
|
|
1334
|
-
setFleetView: setFleetViewEnabled,
|
|
1335
1306
|
setAgentMentions: setAgentMentionMode,
|
|
1336
1307
|
setRememberAgents,
|
|
1337
1308
|
setWidgetMode: setWidgetMode,
|
|
@@ -1958,8 +1929,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
1958
1929
|
agentActivity.set(id, bgState);
|
|
1959
1930
|
widget.ensureTimer();
|
|
1960
1931
|
widget.update();
|
|
1961
|
-
fleet.ensureTimer();
|
|
1962
|
-
fleet.update();
|
|
1963
1932
|
// Emit created event
|
|
1964
1933
|
pi.events.emit("subagents:created", {
|
|
1965
1934
|
id,
|
|
@@ -2034,8 +2003,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2034
2003
|
fgId = a.id;
|
|
2035
2004
|
agentActivity.set(a.id, fgState);
|
|
2036
2005
|
widget.ensureTimer();
|
|
2037
|
-
fleet.ensureTimer();
|
|
2038
|
-
fleet.update();
|
|
2039
2006
|
break;
|
|
2040
2007
|
}
|
|
2041
2008
|
}
|
|
@@ -2089,7 +2056,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2089
2056
|
if (fgId) {
|
|
2090
2057
|
agentActivity.delete(fgId);
|
|
2091
2058
|
widget.markFinished(fgId);
|
|
2092
|
-
fleet.onAgentFinished(fgId);
|
|
2093
2059
|
}
|
|
2094
2060
|
}
|
|
2095
2061
|
// Get final token count — from the record, like the cost below it, so the
|
|
@@ -2154,29 +2120,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2154
2120
|
* background run.
|
|
2155
2121
|
*/
|
|
2156
2122
|
const workflowTasks = new Map();
|
|
2157
|
-
/**
|
|
2158
|
-
* Workflow runs as the fleet list wants them.
|
|
2159
|
-
*
|
|
2160
|
-
* Mapped here rather than handing `WorkflowTask` over the seam: the list is
|
|
2161
|
-
* deliberately ignorant of the workflow engine, and a run's counters live in
|
|
2162
|
-
* the progress log rather than on the record, so they are derived per call
|
|
2163
|
-
* the same way the card derives them.
|
|
2164
|
-
*/
|
|
2165
|
-
function fleetWorkflows() {
|
|
2166
|
-
// Cached counters only, no derivation: the fleet list calls this on a
|
|
2167
|
-
// 200ms tick and reads the roster several times per update, so walking a
|
|
2168
|
-
// run's progress log here would put O(log) work in the render loop.
|
|
2169
|
-
return [...workflowTasks.values()].map(task => ({
|
|
2170
|
-
id: task.id,
|
|
2171
|
-
name: task.meta?.name ?? task.workflowName ?? task.id,
|
|
2172
|
-
status: task.status,
|
|
2173
|
-
doneCount: task.doneCount,
|
|
2174
|
-
totalCount: task.agentCount,
|
|
2175
|
-
startedAt: task.startTime,
|
|
2176
|
-
...(task.endTime !== undefined ? { completedAt: task.endTime } : {}),
|
|
2177
|
-
tokens: task.totalTokens,
|
|
2178
|
-
}));
|
|
2179
|
-
}
|
|
2180
2123
|
/**
|
|
2181
2124
|
* Run a task to completion against the real manager, settling the record
|
|
2182
2125
|
* either way. Never rejects: a run that cannot start (bad `meta`, oversized
|
|
@@ -2221,7 +2164,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2221
2164
|
*/
|
|
2222
2165
|
function notifyWorkflowFinished(task) {
|
|
2223
2166
|
widget.update();
|
|
2224
|
-
fleet.update();
|
|
2225
2167
|
const result = workflowResultText(task);
|
|
2226
2168
|
scheduleNudge(task.id, () => {
|
|
2227
2169
|
pi.sendMessage({
|
|
@@ -2364,7 +2306,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2364
2306
|
// surfaces — nothing else would register the widget for a run whose
|
|
2365
2307
|
// first agent has not started yet.
|
|
2366
2308
|
widget.update();
|
|
2367
|
-
fleet.update();
|
|
2368
2309
|
// Background, like Claude Code: the id comes back now and the run keeps
|
|
2369
2310
|
// going without the tool call.
|
|
2370
2311
|
void runWorkflowTask(ctx, task).then(() => notifyWorkflowFinished(task));
|
|
@@ -2440,7 +2381,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2440
2381
|
}
|
|
2441
2382
|
workflowsEnabled = false; // not setWorkflowsEnabled: this is not the user pinning it
|
|
2442
2383
|
widget.update();
|
|
2443
|
-
fleet.update();
|
|
2444
2384
|
warn(verdict.message);
|
|
2445
2385
|
if (!verdict.withdraw)
|
|
2446
2386
|
return;
|
|
@@ -2512,7 +2452,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2512
2452
|
const task = createWorkflowTask({ id: workflowRunId(), script, scriptPath: path, meta });
|
|
2513
2453
|
workflowTasks.set(task.id, task);
|
|
2514
2454
|
widget.update();
|
|
2515
|
-
fleet.update();
|
|
2516
2455
|
report(`Running workflow ${meta.name}…`, "info");
|
|
2517
2456
|
// Detached: session_start is awaited by the host, and a workflow can run for
|
|
2518
2457
|
// minutes — blocking here would hold the whole session's startup.
|
|
@@ -2527,7 +2466,6 @@ Terse command-style prompts produce shallow, generic work.
|
|
|
2527
2466
|
display: false,
|
|
2528
2467
|
}, { deliverAs: "nextTurn" });
|
|
2529
2468
|
widget.update();
|
|
2530
|
-
fleet.update();
|
|
2531
2469
|
});
|
|
2532
2470
|
}
|
|
2533
2471
|
// ---- get_subagent_result tool ----
|
|
@@ -3295,7 +3233,6 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3295
3233
|
strictAgentFiles,
|
|
3296
3234
|
disableDefaultAgents: isDefaultsDisabled(),
|
|
3297
3235
|
toolDescriptionMode: getToolDescriptionMode(),
|
|
3298
|
-
fleetView: isFleetViewEnabled(),
|
|
3299
3236
|
agentMentions: getAgentMentionMode(),
|
|
3300
3237
|
rememberAgents: getRememberAgents(),
|
|
3301
3238
|
widgetMode: getWidgetMode(),
|
|
@@ -3457,7 +3394,7 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3457
3394
|
{
|
|
3458
3395
|
id: "showCost",
|
|
3459
3396
|
label: "Show cost",
|
|
3460
|
-
description: "Show an estimated `~$0.0042` beside subagent token counts in the widget,
|
|
3397
|
+
description: "Show an estimated `~$0.0042` beside subagent token counts in the widget, results and notifications. Priced by pi from the model's rates — omitted entirely for a model it has no rates for.",
|
|
3461
3398
|
currentValue: isShowCostEnabled() ? "on" : "off",
|
|
3462
3399
|
values: ["on", "off"],
|
|
3463
3400
|
},
|
|
@@ -3475,13 +3412,6 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3475
3412
|
currentValue: getViewerMarkdown(),
|
|
3476
3413
|
values: ["off", "assistant", "all"],
|
|
3477
3414
|
},
|
|
3478
|
-
{
|
|
3479
|
-
id: "fleetView",
|
|
3480
|
-
label: "Fleet view",
|
|
3481
|
-
description: "Claude Code-style main+subagents list below the editor (↓/← to navigate, Enter to view)",
|
|
3482
|
-
currentValue: isFleetViewEnabled() ? "on" : "off",
|
|
3483
|
-
values: ["on", "off"],
|
|
3484
|
-
},
|
|
3485
3415
|
{
|
|
3486
3416
|
id: "agentMentions",
|
|
3487
3417
|
label: "Agent mentions",
|
|
@@ -3651,11 +3581,6 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3651
3581
|
setViewerMarkdown(value);
|
|
3652
3582
|
notifyApplied(ctx, `Viewer markdown set to ${value}`);
|
|
3653
3583
|
}
|
|
3654
|
-
else if (id === "fleetView") {
|
|
3655
|
-
const enabled = value === "on";
|
|
3656
|
-
setFleetViewEnabled(enabled);
|
|
3657
|
-
notifyApplied(ctx, `Fleet view ${enabled ? "enabled" : "disabled"}`);
|
|
3658
|
-
}
|
|
3659
3584
|
else if (id === "agentMentions") {
|
|
3660
3585
|
const mode = value;
|
|
3661
3586
|
setAgentMentionMode(mode);
|
|
@@ -3744,27 +3669,6 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3744
3669
|
}
|
|
3745
3670
|
}
|
|
3746
3671
|
}
|
|
3747
|
-
// Persist the current snapshot, emit `subagents:settings_changed`, and surface
|
|
3748
|
-
// the right toast. Successful saves show info; persistence failures downgrade
|
|
3749
|
-
// to warning so users aren't silently reverted on restart. Event fires regardless
|
|
3750
|
-
// of outcome so listeners see the in-memory change.
|
|
3751
|
-
/**
|
|
3752
|
-
* Persist + broadcast the settings, silent on success — for a change whose
|
|
3753
|
-
* feedback is the UI it just changed: the viewer's `m` key, where a
|
|
3754
|
-
* notification per press would talk over the overlay it is describing.
|
|
3755
|
-
*
|
|
3756
|
-
* A *failed* write still speaks. Every other settings path warns when the
|
|
3757
|
-
* value is session-only, and swallowing it here would leave a preference
|
|
3758
|
-
* looking persisted when the next session will not have it.
|
|
3759
|
-
*/
|
|
3760
|
-
function persistSettings(ctx, changeMsg) {
|
|
3761
|
-
const { message, level } = saveAndEmitChanged(snapshotSettings(), changeMsg, (event, payload) => pi.events.emit(event, payload));
|
|
3762
|
-
// `ctx` is absent only on the fleet path between sessions, where
|
|
3763
|
-
// `currentCtx` has been cleared and there is no UI to carry the warning to.
|
|
3764
|
-
// The write still happens.
|
|
3765
|
-
if (level === "warning")
|
|
3766
|
-
ctx?.ui.notify(message, level);
|
|
3767
|
-
}
|
|
3768
3672
|
function notifyApplied(ctx, successMsg) {
|
|
3769
3673
|
const { message, level } = saveAndEmitChanged(snapshotSettings(), successMsg, (event, payload) => pi.events.emit(event, payload));
|
|
3770
3674
|
ctx.ui.notify(message, level);
|
|
@@ -3773,19 +3677,11 @@ Write the file using the write tool. Only write the file, nothing else.`;
|
|
|
3773
3677
|
description: "Manage agents",
|
|
3774
3678
|
handler: async (_args, ctx) => { await showAgentsMenu(ctx); },
|
|
3775
3679
|
});
|
|
3776
|
-
/**
|
|
3777
|
-
* What `/agents → Workflows` and the fleet list's `workflow` rows need from
|
|
3778
|
-
* here. One object, built once: both entry points open the same inspector,
|
|
3779
|
-
* and handing them different views of the session would let the two drift.
|
|
3780
|
-
*/
|
|
3680
|
+
/** Dependencies shared by `/agents → Workflows` and its inspector. */
|
|
3781
3681
|
const workflowMenuDeps = {
|
|
3782
3682
|
tasks: workflowTasks,
|
|
3783
3683
|
getRecord: id => manager.getRecord(id),
|
|
3784
3684
|
viewAgentConversation,
|
|
3785
|
-
// Read lazily: `currentCtx` is rebound on every session_start, and the
|
|
3786
|
-
// fleet list may act between sessions, when there is none.
|
|
3787
|
-
getCtx: () => currentCtx,
|
|
3788
3685
|
};
|
|
3789
|
-
fleet.setWorkflowSource(fleetWorkflows, id => openWorkflowFromFleet(id, workflowMenuDeps));
|
|
3790
3686
|
}
|
|
3791
3687
|
//# sourceMappingURL=index.js.map
|