@pi-unipi/subagents 0.1.13 → 0.2.3
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/package.json +1 -1
- package/src/__tests__/badge-generation.test.ts +244 -0
- package/src/agent-manager.ts +12 -1
- package/src/agent-runner.ts +23 -8
- package/src/conversation-viewer.ts +299 -0
- package/src/index.ts +432 -49
- package/src/types.ts +49 -0
- package/src/widget.ts +332 -72
- package/dist/agent-manager.d.ts +0 -72
- package/dist/agent-manager.d.ts.map +0 -1
- package/dist/agent-manager.js +0 -258
- package/dist/agent-manager.js.map +0 -1
- package/dist/agent-runner.d.ts +0 -50
- package/dist/agent-runner.d.ts.map +0 -1
- package/dist/agent-runner.js +0 -238
- package/dist/agent-runner.js.map +0 -1
- package/dist/config.d.ts +0 -24
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -132
- package/dist/config.js.map +0 -1
- package/dist/custom-agents.d.ts +0 -14
- package/dist/custom-agents.d.ts.map +0 -1
- package/dist/custom-agents.js +0 -106
- package/dist/custom-agents.js.map +0 -1
- package/dist/file-lock.d.ts +0 -42
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-lock.js +0 -91
- package/dist/file-lock.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -301
- package/dist/index.js.map +0 -1
- package/dist/model-resolver.d.ts +0 -19
- package/dist/model-resolver.d.ts.map +0 -1
- package/dist/model-resolver.js +0 -61
- package/dist/model-resolver.js.map +0 -1
- package/dist/prompts.d.ts +0 -13
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js +0 -31
- package/dist/prompts.js.map +0 -1
- package/dist/types.d.ts +0 -79
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/widget.d.ts +0 -26
- package/dist/widget.d.ts.map +0 -1
- package/dist/widget.js +0 -162
- package/dist/widget.js.map +0 -1
package/dist/index.js
DELETED
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — Extension entry
|
|
3
|
-
*
|
|
4
|
-
* Tools: Agent, get_result
|
|
5
|
-
* ESC propagation: all children abort on parent ESC
|
|
6
|
-
*/
|
|
7
|
-
import { defineTool } from "@mariozechner/pi-coding-agent";
|
|
8
|
-
import { Type } from "@sinclair/typebox";
|
|
9
|
-
import { AgentManager } from "./agent-manager.js";
|
|
10
|
-
import { initConfig } from "./config.js";
|
|
11
|
-
import { BUILTIN_TYPES } from "./types.js";
|
|
12
|
-
import { AgentWidget } from "./widget.js";
|
|
13
|
-
/** Format tokens safely. */
|
|
14
|
-
function safeFormatTokens(session) {
|
|
15
|
-
if (!session)
|
|
16
|
-
return "";
|
|
17
|
-
try {
|
|
18
|
-
const stats = session.getSessionStats();
|
|
19
|
-
const total = stats.tokens?.total ?? 0;
|
|
20
|
-
if (total >= 1_000_000)
|
|
21
|
-
return `${(total / 1_000_000).toFixed(1)}M`;
|
|
22
|
-
if (total >= 1_000)
|
|
23
|
-
return `${(total / 1_000).toFixed(1)}k`;
|
|
24
|
-
return `${total}`;
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return "";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** Build result text. */
|
|
31
|
-
function textResult(msg, details) {
|
|
32
|
-
return { content: [{ type: "text", text: msg }], details };
|
|
33
|
-
}
|
|
34
|
-
export default function (pi) {
|
|
35
|
-
// Initialize config
|
|
36
|
-
const config = initConfig(process.cwd());
|
|
37
|
-
if (!config.enabled)
|
|
38
|
-
return;
|
|
39
|
-
// Activity tracking for widget
|
|
40
|
-
const agentActivity = new Map();
|
|
41
|
-
// Create manager with completion callback
|
|
42
|
-
const manager = new AgentManager((record) => {
|
|
43
|
-
// On complete: clean up activity, emit event
|
|
44
|
-
agentActivity.delete(record.id);
|
|
45
|
-
widget.markFinished(record.id);
|
|
46
|
-
widget.update();
|
|
47
|
-
pi.events.emit("subagents:completed", {
|
|
48
|
-
id: record.id,
|
|
49
|
-
type: record.type,
|
|
50
|
-
description: record.description,
|
|
51
|
-
status: record.status,
|
|
52
|
-
result: record.result,
|
|
53
|
-
error: record.error,
|
|
54
|
-
});
|
|
55
|
-
}, config.maxConcurrent, (record) => {
|
|
56
|
-
// On start: emit event
|
|
57
|
-
pi.events.emit("subagents:started", {
|
|
58
|
-
id: record.id,
|
|
59
|
-
type: record.type,
|
|
60
|
-
description: record.description,
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
// Create widget
|
|
64
|
-
const widget = new AgentWidget(manager, agentActivity);
|
|
65
|
-
// Session start: notify agent about config paths
|
|
66
|
-
pi.on("session_start", async (_event, ctx) => {
|
|
67
|
-
const homedir = require("os").homedir();
|
|
68
|
-
const globalConfig = `${homedir}/.unipi/config/subagents.json`;
|
|
69
|
-
const globalAgents = `${homedir}/.unipi/config/agents/`;
|
|
70
|
-
const workspaceConfig = `${ctx.cwd}/.unipi/config/subagents.json`;
|
|
71
|
-
const workspaceAgents = `${ctx.cwd}/.unipi/config/agents/`;
|
|
72
|
-
ctx.ui.notify(`UniPi Subagents config:\n` +
|
|
73
|
-
`• Global: ${globalConfig}\n` +
|
|
74
|
-
`• Global agents: ${globalAgents}\n` +
|
|
75
|
-
`• Workspace: ${workspaceConfig}\n` +
|
|
76
|
-
`• Workspace agents: ${workspaceAgents}`, "info");
|
|
77
|
-
});
|
|
78
|
-
// ESC propagation: abort all agents on session shutdown
|
|
79
|
-
pi.on("session_shutdown", async () => {
|
|
80
|
-
manager.abortAll();
|
|
81
|
-
manager.dispose();
|
|
82
|
-
});
|
|
83
|
-
// Wire UI context for widget
|
|
84
|
-
pi.on("tool_execution_start", async (_event, ctx) => {
|
|
85
|
-
widget.setUICtx(ctx.ui);
|
|
86
|
-
widget.update();
|
|
87
|
-
});
|
|
88
|
-
// Create activity tracker
|
|
89
|
-
function createActivityTracker(maxTurns) {
|
|
90
|
-
const state = {
|
|
91
|
-
activeTools: new Map(),
|
|
92
|
-
toolUses: 0,
|
|
93
|
-
turnCount: 1,
|
|
94
|
-
maxTurns,
|
|
95
|
-
tokens: "",
|
|
96
|
-
responseText: "",
|
|
97
|
-
};
|
|
98
|
-
const callbacks = {
|
|
99
|
-
onToolActivity: (activity) => {
|
|
100
|
-
if (activity.type === "start") {
|
|
101
|
-
state.activeTools.set(activity.toolName + "_" + Date.now(), activity.toolName);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
for (const [key, name] of state.activeTools) {
|
|
105
|
-
if (name === activity.toolName) {
|
|
106
|
-
state.activeTools.delete(key);
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
state.toolUses++;
|
|
111
|
-
}
|
|
112
|
-
widget.update();
|
|
113
|
-
},
|
|
114
|
-
onTextDelta: (_delta, fullText) => {
|
|
115
|
-
state.responseText = fullText;
|
|
116
|
-
widget.update();
|
|
117
|
-
},
|
|
118
|
-
onTurnEnd: (turnCount) => {
|
|
119
|
-
state.turnCount = turnCount;
|
|
120
|
-
widget.update();
|
|
121
|
-
},
|
|
122
|
-
onSessionCreated: (session) => {
|
|
123
|
-
state.session = session;
|
|
124
|
-
state.tokens = safeFormatTokens(session);
|
|
125
|
-
widget.update();
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
return { state, callbacks };
|
|
129
|
-
}
|
|
130
|
-
// ---- Agent tool ----
|
|
131
|
-
const builtinTypes = BUILTIN_TYPES.join(", ");
|
|
132
|
-
pi.registerTool(defineTool({
|
|
133
|
-
name: "Agent",
|
|
134
|
-
label: "Agent",
|
|
135
|
-
description: `Launch a sub-agent for parallel work.
|
|
136
|
-
|
|
137
|
-
Available agent types: ${builtinTypes}
|
|
138
|
-
Custom types can be defined in:
|
|
139
|
-
- ~/.unipi/config/agents/<name>.md (global)
|
|
140
|
-
- <workspace>/.unipi/config/agents/<name>.md (project)
|
|
141
|
-
|
|
142
|
-
Guidelines:
|
|
143
|
-
- Use "explore" for parallel file reads
|
|
144
|
-
- Use "work" for parallel file writes (transparent locking)
|
|
145
|
-
- Use run_in_background for work you don't need immediately
|
|
146
|
-
- ESC kills all running agents immediately
|
|
147
|
-
- Agents inherit the parent model by default`,
|
|
148
|
-
parameters: Type.Object({
|
|
149
|
-
type: Type.String({
|
|
150
|
-
description: `Agent type: ${builtinTypes}, or custom type from ~/.unipi/config/agents/*.md`,
|
|
151
|
-
}),
|
|
152
|
-
prompt: Type.String({
|
|
153
|
-
description: "The task for the agent to perform.",
|
|
154
|
-
}),
|
|
155
|
-
description: Type.String({
|
|
156
|
-
description: "A short (3-5 word) description of the task.",
|
|
157
|
-
}),
|
|
158
|
-
run_in_background: Type.Optional(Type.Boolean({
|
|
159
|
-
description: "Run in background. Returns agent ID immediately.",
|
|
160
|
-
})),
|
|
161
|
-
max_turns: Type.Optional(Type.Number({
|
|
162
|
-
description: "Max agentic turns before stopping.",
|
|
163
|
-
minimum: 1,
|
|
164
|
-
})),
|
|
165
|
-
model: Type.Optional(Type.String({
|
|
166
|
-
description: 'Model override. Accepts "provider/modelId" or fuzzy name (e.g. "haiku", "sonnet"). Omit to inherit parent model.',
|
|
167
|
-
})),
|
|
168
|
-
thinking: Type.Optional(Type.String({
|
|
169
|
-
description: "Thinking level: off, minimal, low, medium, high, xhigh. Omit to inherit parent.",
|
|
170
|
-
})),
|
|
171
|
-
}),
|
|
172
|
-
execute: async (toolCallId, params, signal, onUpdate, ctx) => {
|
|
173
|
-
widget.setUICtx(ctx.ui);
|
|
174
|
-
const type = params.type;
|
|
175
|
-
const prompt = params.prompt;
|
|
176
|
-
const description = params.description;
|
|
177
|
-
const runInBackground = params.run_in_background;
|
|
178
|
-
const maxTurns = params.max_turns;
|
|
179
|
-
const modelInput = params.model;
|
|
180
|
-
const thinkingLevel = params.thinking;
|
|
181
|
-
// Create activity tracker
|
|
182
|
-
const { state: bgState, callbacks: bgCallbacks } = createActivityTracker(maxTurns);
|
|
183
|
-
if (runInBackground) {
|
|
184
|
-
// Background execution
|
|
185
|
-
const id = manager.spawn(pi, ctx, type, prompt, {
|
|
186
|
-
description,
|
|
187
|
-
maxTurns,
|
|
188
|
-
modelInput,
|
|
189
|
-
modelRegistry: ctx.modelRegistry,
|
|
190
|
-
thinkingLevel,
|
|
191
|
-
isBackground: true,
|
|
192
|
-
...bgCallbacks,
|
|
193
|
-
});
|
|
194
|
-
agentActivity.set(id, bgState);
|
|
195
|
-
widget.ensureTimer();
|
|
196
|
-
widget.update();
|
|
197
|
-
const record = manager.getRecord(id);
|
|
198
|
-
const isQueued = record?.status === "queued";
|
|
199
|
-
return textResult(`Agent ${isQueued ? "queued" : "started"} in background.\n` +
|
|
200
|
-
`ID: ${id}\n` +
|
|
201
|
-
`Type: ${type}\n` +
|
|
202
|
-
`Description: ${description}\n` +
|
|
203
|
-
(isQueued ? `Position: queued (max ${manager.getMaxConcurrent()} concurrent)\n` : "") +
|
|
204
|
-
`\nYou will be notified when this agent completes.\n` +
|
|
205
|
-
`Use get_result to retrieve full results.`, { status: "background", agentId: id });
|
|
206
|
-
}
|
|
207
|
-
// Foreground execution
|
|
208
|
-
let spinnerFrame = 0;
|
|
209
|
-
const startedAt = Date.now();
|
|
210
|
-
let fgId;
|
|
211
|
-
const streamUpdate = () => {
|
|
212
|
-
onUpdate?.({
|
|
213
|
-
content: [{ type: "text", text: `${bgState.toolUses} tool uses...` }],
|
|
214
|
-
details: {
|
|
215
|
-
status: "running",
|
|
216
|
-
toolUses: bgState.toolUses,
|
|
217
|
-
tokens: bgState.tokens,
|
|
218
|
-
turnCount: bgState.turnCount,
|
|
219
|
-
maxTurns: bgState.maxTurns,
|
|
220
|
-
durationMs: Date.now() - startedAt,
|
|
221
|
-
activity: bgState.responseText
|
|
222
|
-
? bgState.responseText.split("\n").pop()?.trim().slice(0, 60)
|
|
223
|
-
: "thinking…",
|
|
224
|
-
spinnerFrame: spinnerFrame % 10,
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
widget.update();
|
|
228
|
-
};
|
|
229
|
-
const spinnerInterval = setInterval(() => {
|
|
230
|
-
spinnerFrame++;
|
|
231
|
-
streamUpdate();
|
|
232
|
-
}, 80);
|
|
233
|
-
widget.ensureTimer();
|
|
234
|
-
streamUpdate();
|
|
235
|
-
const record = await manager.spawnAndWait(pi, ctx, type, prompt, {
|
|
236
|
-
description,
|
|
237
|
-
maxTurns,
|
|
238
|
-
modelInput,
|
|
239
|
-
modelRegistry: ctx.modelRegistry,
|
|
240
|
-
thinkingLevel,
|
|
241
|
-
...bgCallbacks,
|
|
242
|
-
});
|
|
243
|
-
clearInterval(spinnerInterval);
|
|
244
|
-
if (fgId) {
|
|
245
|
-
agentActivity.delete(fgId);
|
|
246
|
-
widget.markFinished(fgId);
|
|
247
|
-
}
|
|
248
|
-
const tokenText = safeFormatTokens(bgState.session);
|
|
249
|
-
const durationMs = (record.completedAt ?? Date.now()) - record.startedAt;
|
|
250
|
-
if (record.status === "error") {
|
|
251
|
-
return textResult(`Agent failed: ${record.error}`);
|
|
252
|
-
}
|
|
253
|
-
return textResult(`Agent completed in ${(durationMs / 1000).toFixed(1)}s (${record.toolUses} tool uses${tokenText ? `, ${tokenText} tokens` : ""}).\n\n` +
|
|
254
|
-
(record.result?.trim() || "No output."));
|
|
255
|
-
},
|
|
256
|
-
}));
|
|
257
|
-
// ---- get_result tool ----
|
|
258
|
-
pi.registerTool(defineTool({
|
|
259
|
-
name: "get_result",
|
|
260
|
-
label: "Get Agent Result",
|
|
261
|
-
description: "Check status and retrieve results from a background agent.",
|
|
262
|
-
parameters: Type.Object({
|
|
263
|
-
agent_id: Type.String({
|
|
264
|
-
description: "The agent ID to check.",
|
|
265
|
-
}),
|
|
266
|
-
wait: Type.Optional(Type.Boolean({
|
|
267
|
-
description: "Wait for completion. Default: false.",
|
|
268
|
-
})),
|
|
269
|
-
}),
|
|
270
|
-
execute: async (_toolCallId, params) => {
|
|
271
|
-
const record = manager.getRecord(params.agent_id);
|
|
272
|
-
if (!record) {
|
|
273
|
-
return textResult(`Agent not found: "${params.agent_id}". It may have been cleaned up.`);
|
|
274
|
-
}
|
|
275
|
-
if (params.wait && record.status === "running" && record.promise) {
|
|
276
|
-
record.resultConsumed = true;
|
|
277
|
-
await record.promise;
|
|
278
|
-
}
|
|
279
|
-
const duration = record.completedAt
|
|
280
|
-
? `${((record.completedAt - record.startedAt) / 1000).toFixed(1)}s`
|
|
281
|
-
: "running";
|
|
282
|
-
let output = `Agent: ${record.id}\n` +
|
|
283
|
-
`Type: ${record.type} | Status: ${record.status} | Tool uses: ${record.toolUses} | Duration: ${duration}\n` +
|
|
284
|
-
`Description: ${record.description}\n\n`;
|
|
285
|
-
if (record.status === "running") {
|
|
286
|
-
output += "Agent is still running. Use wait: true or check back later.";
|
|
287
|
-
}
|
|
288
|
-
else if (record.status === "error") {
|
|
289
|
-
output += `Error: ${record.error}`;
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
output += record.result?.trim() || "No output.";
|
|
293
|
-
}
|
|
294
|
-
if (record.status !== "running" && record.status !== "queued") {
|
|
295
|
-
record.resultConsumed = true;
|
|
296
|
-
}
|
|
297
|
-
return textResult(output);
|
|
298
|
-
},
|
|
299
|
-
}));
|
|
300
|
-
}
|
|
301
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/model-resolver.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — Model resolver
|
|
3
|
-
*
|
|
4
|
-
* Resolves model strings like "haiku", "sonnet", "anthropic/claude-sonnet-4-6"
|
|
5
|
-
* to actual Model instances using the registry.
|
|
6
|
-
*/
|
|
7
|
-
import type { Model } from "@mariozechner/pi-ai";
|
|
8
|
-
export interface ModelRegistry {
|
|
9
|
-
find(provider: string, modelId: string): Model<any> | undefined;
|
|
10
|
-
getAll(): Model<any>[];
|
|
11
|
-
getAvailable?(): Model<any>[];
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Resolve a model string to a Model instance.
|
|
15
|
-
* Tries exact match first, then fuzzy match.
|
|
16
|
-
* Returns Model on success, error string on failure.
|
|
17
|
-
*/
|
|
18
|
-
export declare function resolveModel(input: string, registry: ModelRegistry): Model<any> | string;
|
|
19
|
-
//# sourceMappingURL=model-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAChE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB,YAAY,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,GACtB,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAuDrB"}
|
package/dist/model-resolver.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — Model resolver
|
|
3
|
-
*
|
|
4
|
-
* Resolves model strings like "haiku", "sonnet", "anthropic/claude-sonnet-4-6"
|
|
5
|
-
* to actual Model instances using the registry.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Resolve a model string to a Model instance.
|
|
9
|
-
* Tries exact match first, then fuzzy match.
|
|
10
|
-
* Returns Model on success, error string on failure.
|
|
11
|
-
*/
|
|
12
|
-
export function resolveModel(input, registry) {
|
|
13
|
-
const all = (registry.getAvailable?.() ?? registry.getAll());
|
|
14
|
-
const availableSet = new Set(all.map((m) => `${m.provider}/${m.id}`.toLowerCase()));
|
|
15
|
-
// 1. Exact match: "provider/modelId"
|
|
16
|
-
const slashIdx = input.indexOf("/");
|
|
17
|
-
if (slashIdx !== -1) {
|
|
18
|
-
const provider = input.slice(0, slashIdx);
|
|
19
|
-
const modelId = input.slice(slashIdx + 1);
|
|
20
|
-
if (availableSet.has(input.toLowerCase())) {
|
|
21
|
-
const found = registry.find(provider, modelId);
|
|
22
|
-
if (found)
|
|
23
|
-
return found;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// 2. Fuzzy match
|
|
27
|
-
const query = input.toLowerCase();
|
|
28
|
-
let bestMatch;
|
|
29
|
-
let bestScore = 0;
|
|
30
|
-
for (const m of all) {
|
|
31
|
-
const id = m.id.toLowerCase();
|
|
32
|
-
const name = (m.name ?? m.id).toLowerCase();
|
|
33
|
-
const full = `${m.provider}/${m.id}`.toLowerCase();
|
|
34
|
-
let score = 0;
|
|
35
|
-
if (id === query || full === query) {
|
|
36
|
-
score = 100;
|
|
37
|
-
}
|
|
38
|
-
else if (id.includes(query) || full.includes(query)) {
|
|
39
|
-
score = 60 + (query.length / id.length) * 30;
|
|
40
|
-
}
|
|
41
|
-
else if (name.includes(query)) {
|
|
42
|
-
score = 40 + (query.length / name.length) * 20;
|
|
43
|
-
}
|
|
44
|
-
if (score > bestScore) {
|
|
45
|
-
bestScore = score;
|
|
46
|
-
bestMatch = m;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (bestMatch && bestScore >= 20) {
|
|
50
|
-
const found = registry.find(bestMatch.provider, bestMatch.id);
|
|
51
|
-
if (found)
|
|
52
|
-
return found;
|
|
53
|
-
}
|
|
54
|
-
// 3. No match — return error with available models
|
|
55
|
-
const modelList = all
|
|
56
|
-
.map((m) => ` ${m.provider}/${m.id}`)
|
|
57
|
-
.sort()
|
|
58
|
-
.join("\n");
|
|
59
|
-
return `Model not found: "${input}".\n\nAvailable models:\n${modelList}`;
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — System prompt builder
|
|
3
|
-
*/
|
|
4
|
-
import type { AgentConfig } from "./types.js";
|
|
5
|
-
/**
|
|
6
|
-
* Build system prompt for an agent.
|
|
7
|
-
*/
|
|
8
|
-
export declare function buildAgentPrompt(config: AgentConfig, cwd: string, env: {
|
|
9
|
-
isGitRepo: boolean;
|
|
10
|
-
branch: string;
|
|
11
|
-
platform: string;
|
|
12
|
-
}, parentSystemPrompt: string): string;
|
|
13
|
-
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC7D,kBAAkB,EAAE,MAAM,GACzB,MAAM,CAwBR"}
|
package/dist/prompts.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — System prompt builder
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Build system prompt for an agent.
|
|
6
|
-
*/
|
|
7
|
-
export function buildAgentPrompt(config, cwd, env, parentSystemPrompt) {
|
|
8
|
-
if (config.promptMode === "append") {
|
|
9
|
-
// Append mode: parent prompt + agent additions
|
|
10
|
-
return [
|
|
11
|
-
parentSystemPrompt,
|
|
12
|
-
"",
|
|
13
|
-
"---",
|
|
14
|
-
"",
|
|
15
|
-
`## Agent Role: ${config.displayName ?? config.name}`,
|
|
16
|
-
config.systemPrompt,
|
|
17
|
-
].join("\n");
|
|
18
|
-
}
|
|
19
|
-
// Replace mode: standalone prompt
|
|
20
|
-
return [
|
|
21
|
-
`# ${config.displayName ?? config.name}`,
|
|
22
|
-
"",
|
|
23
|
-
config.systemPrompt,
|
|
24
|
-
"",
|
|
25
|
-
"---",
|
|
26
|
-
"",
|
|
27
|
-
`Working directory: ${cwd}`,
|
|
28
|
-
`Git: ${env.isGitRepo ? `${env.branch} on ${env.platform}` : "not a git repo"}`,
|
|
29
|
-
].join("\n");
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=prompts.js.map
|
package/dist/prompts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAmB,EACnB,GAAW,EACX,GAA6D,EAC7D,kBAA0B;IAE1B,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,+CAA+C;QAC/C,OAAO;YACL,kBAAkB;YAClB,EAAE;YACF,KAAK;YACL,EAAE;YACF,kBAAkB,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;YACrD,MAAM,CAAC,YAAY;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,kCAAkC;IAClC,OAAO;QACL,KAAK,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;QACxC,EAAE;QACF,MAAM,CAAC,YAAY;QACnB,EAAE;QACF,KAAK;QACL,EAAE;QACF,sBAAsB,GAAG,EAAE;QAC3B,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — Type definitions
|
|
3
|
-
*/
|
|
4
|
-
import type { ThinkingLevel } from "@mariozechner/pi-agent-core";
|
|
5
|
-
import type { AgentSession } from "@mariozechner/pi-coding-agent";
|
|
6
|
-
export type { ThinkingLevel };
|
|
7
|
-
/** Agent type name: built-in or user-defined. */
|
|
8
|
-
export type AgentType = string;
|
|
9
|
-
/** Built-in agent type names. */
|
|
10
|
-
export declare const BUILTIN_TYPES: readonly ["explore", "work"];
|
|
11
|
-
/** Memory scope for persistent agent memory. */
|
|
12
|
-
export type MemoryScope = "user" | "project" | "local";
|
|
13
|
-
/** Unified agent configuration. */
|
|
14
|
-
export interface AgentConfig {
|
|
15
|
-
name: string;
|
|
16
|
-
displayName?: string;
|
|
17
|
-
description: string;
|
|
18
|
-
builtinToolNames?: string[];
|
|
19
|
-
disallowedTools?: string[];
|
|
20
|
-
extensions: true | string[] | false;
|
|
21
|
-
skills: true | string[] | false;
|
|
22
|
-
model?: string;
|
|
23
|
-
thinking?: ThinkingLevel;
|
|
24
|
-
maxTurns?: number;
|
|
25
|
-
systemPrompt: string;
|
|
26
|
-
promptMode: "replace" | "append";
|
|
27
|
-
inheritContext?: boolean;
|
|
28
|
-
runInBackground?: boolean;
|
|
29
|
-
isolated?: boolean;
|
|
30
|
-
memory?: MemoryScope;
|
|
31
|
-
isDefault?: boolean;
|
|
32
|
-
enabled?: boolean;
|
|
33
|
-
source?: "builtin" | "project" | "global";
|
|
34
|
-
}
|
|
35
|
-
/** Agent record — tracks a running agent. */
|
|
36
|
-
export interface AgentRecord {
|
|
37
|
-
id: string;
|
|
38
|
-
type: AgentType;
|
|
39
|
-
description: string;
|
|
40
|
-
status: "queued" | "running" | "completed" | "aborted" | "stopped" | "error";
|
|
41
|
-
result?: string;
|
|
42
|
-
error?: string;
|
|
43
|
-
toolUses: number;
|
|
44
|
-
startedAt: number;
|
|
45
|
-
completedAt?: number;
|
|
46
|
-
session?: AgentSession;
|
|
47
|
-
abortController?: AbortController;
|
|
48
|
-
promise?: Promise<string>;
|
|
49
|
-
/** Set when result consumed via get_result — suppresses notification. */
|
|
50
|
-
resultConsumed?: boolean;
|
|
51
|
-
/** Files locked by this agent. */
|
|
52
|
-
lockedFiles: Set<string>;
|
|
53
|
-
}
|
|
54
|
-
/** File lock entry. */
|
|
55
|
-
export interface FileLockEntry {
|
|
56
|
-
agentId: string;
|
|
57
|
-
filePath: string;
|
|
58
|
-
promise: Promise<void>;
|
|
59
|
-
release: () => void;
|
|
60
|
-
}
|
|
61
|
-
/** Extension config. */
|
|
62
|
-
export interface SubagentsConfig {
|
|
63
|
-
maxConcurrent: number;
|
|
64
|
-
enabled: boolean;
|
|
65
|
-
types: Record<string, {
|
|
66
|
-
enabled?: boolean;
|
|
67
|
-
}>;
|
|
68
|
-
}
|
|
69
|
-
/** Agent activity for widget display. */
|
|
70
|
-
export interface AgentActivity {
|
|
71
|
-
activeTools: Map<string, string>;
|
|
72
|
-
toolUses: number;
|
|
73
|
-
turnCount: number;
|
|
74
|
-
maxTurns?: number;
|
|
75
|
-
tokens: string;
|
|
76
|
-
responseText: string;
|
|
77
|
-
session?: AgentSession;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,iDAAiD;AACjD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,iCAAiC;AACjC,eAAO,MAAM,aAAa,8BAA+B,CAAC;AAE1D,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC3C;AAED,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kCAAkC;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,iCAAiC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,CAAU,CAAC"}
|
package/dist/widget.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @pi-unipi/subagents — Live widget
|
|
3
|
-
*
|
|
4
|
-
* Shows running agents above the editor.
|
|
5
|
-
* Uses setWidget with tui.requestRender() for updates.
|
|
6
|
-
*/
|
|
7
|
-
import type { AgentManager } from "./agent-manager.js";
|
|
8
|
-
import type { AgentActivity } from "./types.js";
|
|
9
|
-
export declare class AgentWidget {
|
|
10
|
-
private manager;
|
|
11
|
-
private activity;
|
|
12
|
-
private spinnerFrame;
|
|
13
|
-
private timer?;
|
|
14
|
-
private uiCtx?;
|
|
15
|
-
private tui?;
|
|
16
|
-
private widgetRegistered;
|
|
17
|
-
constructor(manager: AgentManager, activity: Map<string, AgentActivity>);
|
|
18
|
-
setUICtx(ctx: any): void;
|
|
19
|
-
ensureTimer(): void;
|
|
20
|
-
markFinished(_id: string): void;
|
|
21
|
-
update(): void;
|
|
22
|
-
private triggerRender;
|
|
23
|
-
private renderWidget;
|
|
24
|
-
dispose(): void;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=widget.d.ts.map
|
package/dist/widget.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8BhD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAM;IACpB,OAAO,CAAC,GAAG,CAAC,CAAM;IAClB,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAKvE,QAAQ,CAAC,GAAG,EAAE,GAAG;IAQjB,WAAW;IAQX,YAAY,CAAC,GAAG,EAAE,MAAM;IAWxB,MAAM;IAIN,OAAO,CAAC,aAAa;IAwCrB,OAAO,CAAC,YAAY;IA0DpB,OAAO;CAWR"}
|