pi-crew 0.11.9 → 0.11.10
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 +19 -0
- package/dist/index.mjs +410 -410
- package/package.json +1 -1
- package/src/extension/registration/commands/shared.ts +4 -14
- package/src/extension/registration/viewers.ts +25 -1
package/package.json
CHANGED
|
@@ -620,26 +620,16 @@ export async function openTeamDashboard(ctx: ExtensionContext): Promise<void> {
|
|
|
620
620
|
continue;
|
|
621
621
|
}
|
|
622
622
|
if (selection.action === "agent-transcript" && (await openTranscriptViewer(cmdCtx, selection.runId))) continue;
|
|
623
|
+
// F1 (2026-10-08): openLiveConversation now owns ALL not-found messaging
|
|
624
|
+
// with a runtime-aware notice (child-process/scaffold runs point at the
|
|
625
|
+
// transcript viewer; live-session runs keep "No live agent found"). Its
|
|
626
|
+
// old fall-through block here fired even on picker-cancel — removed.
|
|
623
627
|
if (selection.action === "agent-live" && (await openLiveConversation(cmdCtx, selection.runId))) continue;
|
|
624
628
|
// feat/agents-browser: `b` from the dashboard opens the unified Agents
|
|
625
629
|
// & Jobs overlay WITHOUT closing the loop — continue reopens the
|
|
626
630
|
// dashboard underneath, mirroring the transcript/live-conversation
|
|
627
631
|
// viewers. runId may be "" (no run selected — jobs-only view).
|
|
628
632
|
if (selection.action === "browser-open" && (await openAgentsJobsBrowser(cmdCtx))) continue;
|
|
629
|
-
if (selection.action === "agent-live") {
|
|
630
|
-
await notifyCommandResult(
|
|
631
|
-
cmdCtx,
|
|
632
|
-
commandText({
|
|
633
|
-
content: [
|
|
634
|
-
{
|
|
635
|
-
type: "text",
|
|
636
|
-
text: "No live agent found for this run.",
|
|
637
|
-
},
|
|
638
|
-
],
|
|
639
|
-
}),
|
|
640
|
-
);
|
|
641
|
-
continue;
|
|
642
|
-
}
|
|
643
633
|
const result =
|
|
644
634
|
selection.action === "api"
|
|
645
635
|
? await handleTeamTool(
|
|
@@ -10,6 +10,7 @@ import { requestRenderTarget } from "../../ui/pi-ui-compat.ts";
|
|
|
10
10
|
import { asCrewTheme } from "../../ui/theme-adapter.ts";
|
|
11
11
|
// Lazy-loaded: DurableTranscriptViewer is 658ms — only needed for /crew transcript command
|
|
12
12
|
import type { DurableTranscriptViewer as DurableTranscriptViewerType } from "../../ui/transcript-viewer.ts";
|
|
13
|
+
import { notifyCommandResult } from "./command-utils.ts";
|
|
13
14
|
|
|
14
15
|
async function getViewer(): Promise<typeof DurableTranscriptViewerType> {
|
|
15
16
|
// LAZY: DurableTranscriptViewer is 658ms — only needed for /crew transcript.
|
|
@@ -68,6 +69,22 @@ export async function openTranscriptViewer(
|
|
|
68
69
|
return true;
|
|
69
70
|
}
|
|
70
71
|
|
|
72
|
+
/**
|
|
73
|
+
* F1 (2026-10-08 full-tier battery): notice shown when `V` (live conversation)
|
|
74
|
+
* finds no live agent for a run. With the default child-process runtime the
|
|
75
|
+
* in-process live-agent registry is ALWAYS empty by design — agents run as
|
|
76
|
+
* child Pis and stream transcripts to disk, and only the (ADR-frozen)
|
|
77
|
+
* live-session runtime ever registers handles. The old generic "No live agent
|
|
78
|
+
* found" therefore read as a bug on every child-process run. Route the user
|
|
79
|
+
* to the surface that works instead of a dead end.
|
|
80
|
+
*/
|
|
81
|
+
export function liveConversationNotice(runtimeKind: string | undefined): string {
|
|
82
|
+
if (runtimeKind === "child-process" || runtimeKind === "scaffold") {
|
|
83
|
+
return `Live conversation requires the live-session runtime; this run executes via ${runtimeKind} and streams transcripts to disk. Press v (dashboard) or /team-transcript to follow along.`;
|
|
84
|
+
}
|
|
85
|
+
return "No live agent found for this run.";
|
|
86
|
+
}
|
|
87
|
+
|
|
71
88
|
/** R2: Open live conversation overlay for a running live-session agent. */
|
|
72
89
|
export async function openLiveConversation(
|
|
73
90
|
ctx: ExtensionCommandContext,
|
|
@@ -78,7 +95,14 @@ export async function openLiveConversation(
|
|
|
78
95
|
if (!selected || !ctx.hasUI) return false;
|
|
79
96
|
const liveAgents = listLiveAgents();
|
|
80
97
|
const handle = liveAgents.find((h) => h.runId === selected.runId && (selected.taskId ? h.taskId === selected.taskId : true));
|
|
81
|
-
if (!handle)
|
|
98
|
+
if (!handle) {
|
|
99
|
+
// F1: runtime-aware notice instead of a dead-end error. Contract change:
|
|
100
|
+
// `true` now also covers "answered with a notice" — `false` means the
|
|
101
|
+
// user cancelled the picker (or no UI), so callers stay silent on false.
|
|
102
|
+
const manifest = loadRunManifestById(ctx.cwd, selected.runId);
|
|
103
|
+
await notifyCommandResult(ctx, liveConversationNotice(manifest?.manifest.runtimeResolution?.kind));
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
82
106
|
const theme = asCrewTheme({});
|
|
83
107
|
await ctx.ui.custom<undefined>(
|
|
84
108
|
(tui, _theme, _keybindings, done) => {
|