@melihmucuk/pi-crew 1.0.13 → 1.0.14
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/docs/architecture.md +0 -1
- package/extension/agent-discovery.ts +791 -0
- package/extension/bootstrap-session.ts +131 -0
- package/extension/index.ts +65 -0
- package/extension/integration/register-command.ts +59 -0
- package/extension/integration/register-renderers.ts +77 -0
- package/extension/integration/register-tools.ts +39 -0
- package/extension/integration/tool-presentation.ts +50 -0
- package/extension/integration/tools/crew-abort.ts +121 -0
- package/extension/integration/tools/crew-done.ts +42 -0
- package/extension/integration/tools/crew-list.ts +91 -0
- package/extension/integration/tools/crew-respond.ts +57 -0
- package/extension/integration/tools/crew-spawn.ts +88 -0
- package/extension/integration/tools/tool-deps.ts +16 -0
- package/extension/integration.ts +15 -0
- package/extension/runtime/crew-runtime.ts +426 -0
- package/extension/runtime/delivery-coordinator.ts +131 -0
- package/extension/runtime/overflow-recovery.ts +211 -0
- package/extension/runtime/subagent-registry.ts +85 -0
- package/extension/runtime/subagent-state.ts +73 -0
- package/extension/status-widget.ts +107 -0
- package/extension/subagent-messages.ts +124 -0
- package/extension/tool-registry.ts +19 -0
- package/package.json +8 -11
- package/dist/agent-discovery.d.ts +0 -29
- package/dist/agent-discovery.js +0 -527
- package/dist/bootstrap-session.d.ts +0 -21
- package/dist/bootstrap-session.js +0 -74
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -46
- package/dist/integration/register-command.d.ts +0 -3
- package/dist/integration/register-command.js +0 -51
- package/dist/integration/register-renderers.d.ts +0 -2
- package/dist/integration/register-renderers.js +0 -59
- package/dist/integration/register-tools.d.ts +0 -3
- package/dist/integration/register-tools.js +0 -25
- package/dist/integration/tool-presentation.d.ts +0 -27
- package/dist/integration/tool-presentation.js +0 -29
- package/dist/integration/tools/crew-abort.d.ts +0 -2
- package/dist/integration/tools/crew-abort.js +0 -79
- package/dist/integration/tools/crew-done.d.ts +0 -2
- package/dist/integration/tools/crew-done.js +0 -28
- package/dist/integration/tools/crew-list.d.ts +0 -2
- package/dist/integration/tools/crew-list.js +0 -74
- package/dist/integration/tools/crew-respond.d.ts +0 -2
- package/dist/integration/tools/crew-respond.js +0 -32
- package/dist/integration/tools/crew-spawn.d.ts +0 -2
- package/dist/integration/tools/crew-spawn.js +0 -48
- package/dist/integration/tools/tool-deps.d.ts +0 -9
- package/dist/integration/tools/tool-deps.js +0 -1
- package/dist/integration.d.ts +0 -3
- package/dist/integration.js +0 -8
- package/dist/runtime/crew-runtime.d.ts +0 -62
- package/dist/runtime/crew-runtime.js +0 -285
- package/dist/runtime/delivery-coordinator.d.ts +0 -26
- package/dist/runtime/delivery-coordinator.js +0 -86
- package/dist/runtime/overflow-recovery.d.ts +0 -3
- package/dist/runtime/overflow-recovery.js +0 -155
- package/dist/runtime/subagent-registry.d.ts +0 -14
- package/dist/runtime/subagent-registry.js +0 -58
- package/dist/runtime/subagent-state.d.ts +0 -35
- package/dist/runtime/subagent-state.js +0 -32
- package/dist/status-widget.d.ts +0 -3
- package/dist/status-widget.js +0 -84
- package/dist/subagent-messages.d.ts +0 -37
- package/dist/subagent-messages.js +0 -68
- package/dist/tool-registry.d.ts +0 -5
- package/dist/tool-registry.js +0 -13
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
|
+
|
|
3
|
+
export type SubagentStatus = "running" | "waiting" | "done" | "error" | "aborted";
|
|
4
|
+
|
|
5
|
+
export type SendMessageFn = ExtensionAPI["sendMessage"];
|
|
6
|
+
|
|
7
|
+
export const STATUS_ICON: Record<SubagentStatus, string> = {
|
|
8
|
+
running: "⏳",
|
|
9
|
+
waiting: "⏳",
|
|
10
|
+
done: "✅",
|
|
11
|
+
error: "❌",
|
|
12
|
+
aborted: "⏹️",
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const STATUS_LABEL: Record<SubagentStatus, string> = {
|
|
16
|
+
running: "running",
|
|
17
|
+
waiting: "waiting for response",
|
|
18
|
+
done: "done",
|
|
19
|
+
error: "failed",
|
|
20
|
+
aborted: "aborted",
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export interface SteeringPayload {
|
|
24
|
+
id: string;
|
|
25
|
+
agentName: string;
|
|
26
|
+
sessionFile?: string;
|
|
27
|
+
status: SubagentStatus;
|
|
28
|
+
result?: string;
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface CrewResultMessageDetails {
|
|
33
|
+
agentId: string;
|
|
34
|
+
agentName: string;
|
|
35
|
+
sessionFile?: string;
|
|
36
|
+
status: SubagentStatus;
|
|
37
|
+
body?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function getCrewResultTitle(details: {
|
|
41
|
+
agentId: string;
|
|
42
|
+
agentName: string;
|
|
43
|
+
status: SubagentStatus;
|
|
44
|
+
}): string {
|
|
45
|
+
return `Subagent '${details.agentName}' (${details.agentId}) ${STATUS_LABEL[details.status]}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getSteeringBody(payload: SteeringPayload): string | undefined {
|
|
49
|
+
return (payload.status === "error" || payload.status === "aborted")
|
|
50
|
+
? (payload.error ?? payload.result)
|
|
51
|
+
: (payload.result ?? payload.error);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function sendSteeringMessage(
|
|
55
|
+
payload: SteeringPayload,
|
|
56
|
+
sendMessage: SendMessageFn,
|
|
57
|
+
opts: { isIdle: boolean; triggerTurn: boolean },
|
|
58
|
+
): void {
|
|
59
|
+
const body = getSteeringBody(payload);
|
|
60
|
+
const title = getCrewResultTitle({
|
|
61
|
+
agentId: payload.id,
|
|
62
|
+
agentName: payload.agentName,
|
|
63
|
+
status: payload.status,
|
|
64
|
+
});
|
|
65
|
+
const content = body
|
|
66
|
+
? `**${STATUS_ICON[payload.status]} ${title}**\n\n${body}`
|
|
67
|
+
: `**${STATUS_ICON[payload.status]} ${title}**`;
|
|
68
|
+
|
|
69
|
+
const message = {
|
|
70
|
+
customType: "crew-result",
|
|
71
|
+
content,
|
|
72
|
+
display: true,
|
|
73
|
+
details: {
|
|
74
|
+
agentId: payload.id,
|
|
75
|
+
agentName: payload.agentName,
|
|
76
|
+
sessionFile: payload.sessionFile,
|
|
77
|
+
status: payload.status,
|
|
78
|
+
body,
|
|
79
|
+
} satisfies CrewResultMessageDetails,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
sendMessage(
|
|
83
|
+
message,
|
|
84
|
+
opts.isIdle
|
|
85
|
+
? { triggerTurn: opts.triggerTurn }
|
|
86
|
+
: { deliverAs: "steer", triggerTurn: opts.triggerTurn },
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function sendRemainingNote(
|
|
91
|
+
remainingCount: number,
|
|
92
|
+
sendMessage: SendMessageFn,
|
|
93
|
+
opts: { isIdle: boolean; triggerTurn: boolean },
|
|
94
|
+
): void {
|
|
95
|
+
if (remainingCount <= 0) return;
|
|
96
|
+
|
|
97
|
+
sendMessage(
|
|
98
|
+
{
|
|
99
|
+
customType: "crew-remaining",
|
|
100
|
+
content: `⏳ ${remainingCount} subagent(s) still running`,
|
|
101
|
+
display: true,
|
|
102
|
+
},
|
|
103
|
+
opts.isIdle
|
|
104
|
+
? { triggerTurn: opts.triggerTurn }
|
|
105
|
+
: { deliverAs: "steer", triggerTurn: opts.triggerTurn },
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function sendCrewListActiveWarning(
|
|
110
|
+
sendMessage: SendMessageFn,
|
|
111
|
+
opts: { isIdle: boolean; triggerTurn: boolean },
|
|
112
|
+
): void {
|
|
113
|
+
sendMessage(
|
|
114
|
+
{
|
|
115
|
+
customType: "crew-list-warning",
|
|
116
|
+
content:
|
|
117
|
+
"⚠ Active subagents detected. Do not poll crew_list for completion — results arrive as steering messages. Continue with unrelated work or end your turn and wait for the steering messages.",
|
|
118
|
+
display: true,
|
|
119
|
+
},
|
|
120
|
+
opts.isIdle
|
|
121
|
+
? { triggerTurn: opts.triggerTurn }
|
|
122
|
+
: { deliverAs: "steer", triggerTurn: opts.triggerTurn },
|
|
123
|
+
);
|
|
124
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const SUPPORTED_TOOL_NAMES_LITERAL = [
|
|
2
|
+
"read",
|
|
3
|
+
"bash",
|
|
4
|
+
"edit",
|
|
5
|
+
"write",
|
|
6
|
+
"grep",
|
|
7
|
+
"find",
|
|
8
|
+
"ls",
|
|
9
|
+
] as const;
|
|
10
|
+
|
|
11
|
+
export type SupportedToolName = (typeof SUPPORTED_TOOL_NAMES_LITERAL)[number];
|
|
12
|
+
|
|
13
|
+
export const SUPPORTED_TOOL_NAMES = Object.freeze(
|
|
14
|
+
[...SUPPORTED_TOOL_NAMES_LITERAL] as SupportedToolName[],
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export function isSupportedToolName(name: string): name is SupportedToolName {
|
|
18
|
+
return SUPPORTED_TOOL_NAMES.includes(name as SupportedToolName);
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melihmucuk/pi-crew",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Non-blocking subagent orchestration for pi coding agent",
|
|
6
6
|
"files": [
|
|
7
|
-
"
|
|
7
|
+
"extension/",
|
|
8
8
|
"agents/",
|
|
9
9
|
"prompts/",
|
|
10
10
|
"docs/architecture.md"
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"pi": {
|
|
23
23
|
"extensions": [
|
|
24
|
-
"./
|
|
24
|
+
"./extension/index.ts"
|
|
25
25
|
],
|
|
26
26
|
"prompts": [
|
|
27
27
|
"./prompts"
|
|
@@ -29,10 +29,7 @@
|
|
|
29
29
|
"video": "https://monkeys-team.ams3.cdn.digitaloceanspaces.com/pi-crew-demo.mp4"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
|
-
"
|
|
33
|
-
"build": "npm run clean && tsc",
|
|
34
|
-
"typecheck": "tsc --noEmit",
|
|
35
|
-
"prepare": "npm run build"
|
|
32
|
+
"typecheck": "tsc --noEmit"
|
|
36
33
|
},
|
|
37
34
|
"peerDependencies": {
|
|
38
35
|
"@mariozechner/pi-agent-core": "*",
|
|
@@ -42,10 +39,10 @@
|
|
|
42
39
|
"typebox": "*"
|
|
43
40
|
},
|
|
44
41
|
"devDependencies": {
|
|
45
|
-
"@mariozechner/pi-agent-core": "^0.70.
|
|
46
|
-
"@mariozechner/pi-ai": "^0.70.
|
|
47
|
-
"@mariozechner/pi-coding-agent": "^0.70.
|
|
48
|
-
"@mariozechner/pi-tui": "^0.70.
|
|
42
|
+
"@mariozechner/pi-agent-core": "^0.70.2",
|
|
43
|
+
"@mariozechner/pi-ai": "^0.70.2",
|
|
44
|
+
"@mariozechner/pi-coding-agent": "^0.70.2",
|
|
45
|
+
"@mariozechner/pi-tui": "^0.70.2",
|
|
49
46
|
"@types/node": "^22.19.17",
|
|
50
47
|
"typebox": "^1.1.33",
|
|
51
48
|
"typescript": "^5.9.3"
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ThinkingLevel } from "@mariozechner/pi-agent-core";
|
|
2
|
-
import { type SupportedToolName } from "./tool-registry.js";
|
|
3
|
-
interface ParsedModel {
|
|
4
|
-
provider: string;
|
|
5
|
-
modelId: string;
|
|
6
|
-
}
|
|
7
|
-
export interface AgentConfig {
|
|
8
|
-
name: string;
|
|
9
|
-
description: string;
|
|
10
|
-
model?: string;
|
|
11
|
-
parsedModel?: ParsedModel;
|
|
12
|
-
thinking?: ThinkingLevel;
|
|
13
|
-
tools?: SupportedToolName[];
|
|
14
|
-
skills?: string[];
|
|
15
|
-
compaction?: boolean;
|
|
16
|
-
interactive?: boolean;
|
|
17
|
-
systemPrompt: string;
|
|
18
|
-
filePath: string;
|
|
19
|
-
}
|
|
20
|
-
export interface AgentDiscoveryWarning {
|
|
21
|
-
filePath: string;
|
|
22
|
-
message: string;
|
|
23
|
-
}
|
|
24
|
-
interface AgentDiscoveryResult {
|
|
25
|
-
agents: AgentConfig[];
|
|
26
|
-
warnings: AgentDiscoveryWarning[];
|
|
27
|
-
}
|
|
28
|
-
export declare function discoverAgents(cwd?: string): AgentDiscoveryResult;
|
|
29
|
-
export {};
|