@mariozechner/pi-coding-agent 0.52.8 → 0.52.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 +66 -0
- package/README.md +20 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +13 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts +3 -6
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +82 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.css +59 -0
- package/dist/core/export-html/template.js +21 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +5 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +63 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/model-resolver.d.ts +29 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +94 -4
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +1 -2
- package/dist/core/package-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +35 -14
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +9 -16
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +25 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +3 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +7 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/utils/git.d.ts +5 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +14 -3
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +12 -6
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +9 -0
- package/docs/extensions.md +102 -2
- package/docs/packages.md +5 -7
- package/docs/providers.md +24 -19
- package/docs/rpc.md +8 -2
- package/examples/extensions/README.md +1 -0
- package/examples/extensions/custom-compaction.ts +2 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/subagent/index.ts +2 -1
- package/examples/extensions/trigger-compact.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
|
@@ -26,6 +26,7 @@ import { exportSessionToHtml } from "./export-html/index.js";
|
|
|
26
26
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
27
27
|
import { ExtensionRunner, wrapRegisteredTools, wrapToolsWithExtensions, } from "./extensions/index.js";
|
|
28
28
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
29
|
+
import { getLatestCompactionEntry } from "./session-manager.js";
|
|
29
30
|
import { BUILTIN_SLASH_COMMANDS } from "./slash-commands.js";
|
|
30
31
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
31
32
|
import { createAllTools } from "./tools/index.js";
|
|
@@ -264,6 +265,57 @@ export class AgentSession {
|
|
|
264
265
|
await this._extensionRunner.emit(extensionEvent);
|
|
265
266
|
this._turnIndex++;
|
|
266
267
|
}
|
|
268
|
+
else if (event.type === "message_start") {
|
|
269
|
+
const extensionEvent = {
|
|
270
|
+
type: "message_start",
|
|
271
|
+
message: event.message,
|
|
272
|
+
};
|
|
273
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
274
|
+
}
|
|
275
|
+
else if (event.type === "message_update") {
|
|
276
|
+
const extensionEvent = {
|
|
277
|
+
type: "message_update",
|
|
278
|
+
message: event.message,
|
|
279
|
+
assistantMessageEvent: event.assistantMessageEvent,
|
|
280
|
+
};
|
|
281
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
282
|
+
}
|
|
283
|
+
else if (event.type === "message_end") {
|
|
284
|
+
const extensionEvent = {
|
|
285
|
+
type: "message_end",
|
|
286
|
+
message: event.message,
|
|
287
|
+
};
|
|
288
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
289
|
+
}
|
|
290
|
+
else if (event.type === "tool_execution_start") {
|
|
291
|
+
const extensionEvent = {
|
|
292
|
+
type: "tool_execution_start",
|
|
293
|
+
toolCallId: event.toolCallId,
|
|
294
|
+
toolName: event.toolName,
|
|
295
|
+
args: event.args,
|
|
296
|
+
};
|
|
297
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
298
|
+
}
|
|
299
|
+
else if (event.type === "tool_execution_update") {
|
|
300
|
+
const extensionEvent = {
|
|
301
|
+
type: "tool_execution_update",
|
|
302
|
+
toolCallId: event.toolCallId,
|
|
303
|
+
toolName: event.toolName,
|
|
304
|
+
args: event.args,
|
|
305
|
+
partialResult: event.partialResult,
|
|
306
|
+
};
|
|
307
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
308
|
+
}
|
|
309
|
+
else if (event.type === "tool_execution_end") {
|
|
310
|
+
const extensionEvent = {
|
|
311
|
+
type: "tool_execution_end",
|
|
312
|
+
toolCallId: event.toolCallId,
|
|
313
|
+
toolName: event.toolName,
|
|
314
|
+
result: event.result,
|
|
315
|
+
isError: event.isError,
|
|
316
|
+
};
|
|
317
|
+
await this._extensionRunner.emit(extensionEvent);
|
|
318
|
+
}
|
|
267
319
|
}
|
|
268
320
|
/**
|
|
269
321
|
* Subscribe to agent events.
|
|
@@ -343,12 +395,13 @@ export class AgentSession {
|
|
|
343
395
|
return this.agent.state.tools.map((t) => t.name);
|
|
344
396
|
}
|
|
345
397
|
/**
|
|
346
|
-
* Get all configured tools with name and
|
|
398
|
+
* Get all configured tools with name, description, and parameter schema.
|
|
347
399
|
*/
|
|
348
400
|
getAllTools() {
|
|
349
401
|
return Array.from(this._toolRegistry.values()).map((t) => ({
|
|
350
402
|
name: t.name,
|
|
351
403
|
description: t.description,
|
|
404
|
+
parameters: t.parameters,
|
|
352
405
|
}));
|
|
353
406
|
}
|
|
354
407
|
/**
|
|
@@ -1189,8 +1242,8 @@ export class AgentSession {
|
|
|
1189
1242
|
// The error shouldn't trigger another compaction since we already compacted.
|
|
1190
1243
|
// Example: opus fails → switch to codex → compact → switch back to opus → opus error
|
|
1191
1244
|
// is still in context but shouldn't trigger compaction again.
|
|
1192
|
-
const compactionEntry = this.sessionManager.getBranch()
|
|
1193
|
-
const errorIsFromBeforeCompaction = compactionEntry && assistantMessage.timestamp < new Date(compactionEntry.timestamp).getTime();
|
|
1245
|
+
const compactionEntry = getLatestCompactionEntry(this.sessionManager.getBranch());
|
|
1246
|
+
const errorIsFromBeforeCompaction = compactionEntry !== null && assistantMessage.timestamp < new Date(compactionEntry.timestamp).getTime();
|
|
1194
1247
|
// Case 1: Overflow - LLM returned context overflow error
|
|
1195
1248
|
if (sameModel && !errorIsFromBeforeCompaction && isContextOverflow(assistantMessage, contextWindow)) {
|
|
1196
1249
|
// Remove the error message from agent state (it IS saved to session for history,
|
|
@@ -2185,15 +2238,38 @@ export class AgentSession {
|
|
|
2185
2238
|
const contextWindow = model.contextWindow ?? 0;
|
|
2186
2239
|
if (contextWindow <= 0)
|
|
2187
2240
|
return undefined;
|
|
2241
|
+
// After compaction, the last assistant usage reflects pre-compaction context size.
|
|
2242
|
+
// We can only trust usage from an assistant that responded after the latest compaction.
|
|
2243
|
+
// If no such assistant exists, context token count is unknown until the next LLM response.
|
|
2244
|
+
const branchEntries = this.sessionManager.getBranch();
|
|
2245
|
+
const latestCompaction = getLatestCompactionEntry(branchEntries);
|
|
2246
|
+
if (latestCompaction) {
|
|
2247
|
+
// Check if there's a valid assistant usage after the compaction boundary
|
|
2248
|
+
const compactionIndex = branchEntries.lastIndexOf(latestCompaction);
|
|
2249
|
+
let hasPostCompactionUsage = false;
|
|
2250
|
+
for (let i = branchEntries.length - 1; i > compactionIndex; i--) {
|
|
2251
|
+
const entry = branchEntries[i];
|
|
2252
|
+
if (entry.type === "message" && entry.message.role === "assistant") {
|
|
2253
|
+
const assistant = entry.message;
|
|
2254
|
+
if (assistant.stopReason !== "aborted" && assistant.stopReason !== "error") {
|
|
2255
|
+
const contextTokens = calculateContextTokens(assistant.usage);
|
|
2256
|
+
if (contextTokens > 0) {
|
|
2257
|
+
hasPostCompactionUsage = true;
|
|
2258
|
+
}
|
|
2259
|
+
break;
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
if (!hasPostCompactionUsage) {
|
|
2264
|
+
return { tokens: null, contextWindow, percent: null };
|
|
2265
|
+
}
|
|
2266
|
+
}
|
|
2188
2267
|
const estimate = estimateContextTokens(this.messages);
|
|
2189
2268
|
const percent = (estimate.tokens / contextWindow) * 100;
|
|
2190
2269
|
return {
|
|
2191
2270
|
tokens: estimate.tokens,
|
|
2192
2271
|
contextWindow,
|
|
2193
2272
|
percent,
|
|
2194
|
-
usageTokens: estimate.usageTokens,
|
|
2195
|
-
trailingTokens: estimate.trailingTokens,
|
|
2196
|
-
lastUsageIndex: estimate.lastUsageIndex,
|
|
2197
2273
|
};
|
|
2198
2274
|
}
|
|
2199
2275
|
/**
|