@averyyy/pi-coding-agent 0.86.1-piclient.1 → 0.87.0-piclient.1
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 +40 -0
- package/README.md +36 -0
- package/dist/bundle/chunks/{chunk-K53F3E6X.js → chunk-3OMQWEMP.js} +44 -38
- package/dist/bundle/chunks/chunk-CJ5EZ24X.js +2 -0
- package/dist/bundle/chunks/devin-runtime.js +7 -2
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/{openai-completions-CYGM3XXP.js → openai-completions-XHML6MTL.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-TAAJ5574.js → virtual-modules-N7I2ZIFC.js} +1 -1
- package/dist/bundle/cli-runtime.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +28 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +482 -145
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/cache-warmer.d.ts +1 -0
- package/dist/core/cache-warmer.d.ts.map +1 -1
- package/dist/core/cache-warmer.js +15 -1
- package/dist/core/cache-warmer.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +146 -48
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/crash-log.d.ts +5 -0
- package/dist/core/crash-log.d.ts.map +1 -1
- package/dist/core/crash-log.js +68 -0
- package/dist/core/crash-log.js.map +1 -1
- package/dist/core/export-html/template.js +6 -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 +16 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +110 -5
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +77 -6
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-config.d.ts +52 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +16 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +6 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +61 -35
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-composer.d.ts +1 -0
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +19 -0
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +36 -9
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +97 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/tools/read.d.ts +4 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +5 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -3
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/bug-report.d.ts.map +1 -1
- package/dist/modes/interactive/bug-report.js +4 -0
- package/dist/modes/interactive/bug-report.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +7 -0
- package/dist/modes/interactive/components/tree-selector.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 +64 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +3 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js +4 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/docs/compaction.md +23 -4
- package/docs/extensions.md +70 -6
- package/docs/models.md +29 -1
- package/docs/sdk.md +13 -2
- package/docs/session-format.md +15 -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/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/plugins/pi-example-plugin/src/session.ts +3 -2
- package/package.json +8 -8
- package/dist/bundle/chunks/chunk-WF5BMKD5.js +0 -2
|
@@ -16,12 +16,12 @@ import { parseSkillBlock } from "../../core/agent-session.js";
|
|
|
16
16
|
import { SessionImportFileNotFoundError } from "../../core/agent-session-runtime.js";
|
|
17
17
|
import { CACHE_TTL_MS, collectCacheMisses, computeCacheWaste, detectCacheMiss, } from "../../core/cache-stats.js";
|
|
18
18
|
import { formatCacheWarmingStatus, formatCacheWarmingUsage } from "../../core/cache-warmer.js";
|
|
19
|
-
import { recordCrash, takeUnnotifiedCrash } from "../../core/crash-log.js";
|
|
19
|
+
import { findExtensionStackMatches, recordCrash, takeUnnotifiedCrash } from "../../core/crash-log.js";
|
|
20
20
|
import { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from "../../core/defaults.js";
|
|
21
21
|
import { FooterDataProvider } from "../../core/footer-data-provider.js";
|
|
22
22
|
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
23
23
|
import { KeybindingsManager } from "../../core/keybindings.js";
|
|
24
|
-
import { createCompactionSummaryMessage } from "../../core/messages.js";
|
|
24
|
+
import { createCompactionSummaryMessage, createCustomMessage } from "../../core/messages.js";
|
|
25
25
|
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScopeFromModels, } from "../../core/model-resolver.js";
|
|
26
26
|
import { CredentialSynchronizationError } from "../../core/model-runtime.js";
|
|
27
27
|
import { DefaultPackageManager } from "../../core/package-manager.js";
|
|
@@ -122,6 +122,22 @@ function isDeadTerminalError(error) {
|
|
|
122
122
|
const code = error.code;
|
|
123
123
|
return code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code);
|
|
124
124
|
}
|
|
125
|
+
export function formatCrashExtensionHint(extensionMatches) {
|
|
126
|
+
const matches = Array.isArray(extensionMatches)
|
|
127
|
+
? extensionMatches.filter((match) => typeof match === "string" && match.length > 0)
|
|
128
|
+
: [];
|
|
129
|
+
if (matches.length === 0)
|
|
130
|
+
return undefined;
|
|
131
|
+
const quoted = matches.map((match) => `\`${match}\``);
|
|
132
|
+
const labels = quoted.length === 1
|
|
133
|
+
? quoted[0]
|
|
134
|
+
: quoted.length === 2
|
|
135
|
+
? quoted.join(" and ")
|
|
136
|
+
: `${quoted.slice(0, -1).join(", ")}, and ${quoted[quoted.length - 1]}`;
|
|
137
|
+
const noun = matches.length === 1 ? "extension" : "extensions";
|
|
138
|
+
const pronoun = matches.length === 1 ? "it" : "them";
|
|
139
|
+
return `A stack frame came from loaded ${noun} ${labels}, which may be involved. Try disabling ${pronoun} with \`${APP_NAME} config\`, or run \`${APP_NAME} -ne\` to confirm.`;
|
|
140
|
+
}
|
|
125
141
|
const ANTHROPIC_SUBSCRIPTION_AUTH_WARNING = "Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage. Disable this warning in /settings.";
|
|
126
142
|
function isAnthropicSubscriptionAuthKey(apiKey) {
|
|
127
143
|
return typeof apiKey === "string" && apiKey.startsWith("sk-ant-oat");
|
|
@@ -244,6 +260,7 @@ export class InteractiveMode {
|
|
|
244
260
|
managedToolStatusStarted = false;
|
|
245
261
|
// Streaming message tracking
|
|
246
262
|
streamingComponent = undefined;
|
|
263
|
+
entriesRenderedByBoundaryCompaction = new Set();
|
|
247
264
|
streamingMessage = undefined;
|
|
248
265
|
// Tool execution tracking: toolCallId -> component
|
|
249
266
|
pendingTools = new Map();
|
|
@@ -1562,6 +1579,10 @@ export class InteractiveMode {
|
|
|
1562
1579
|
async handleFatalRuntimeError(prefix, error) {
|
|
1563
1580
|
const message = error instanceof Error ? error.message : String(error);
|
|
1564
1581
|
this.showError(`${prefix}: ${message}`);
|
|
1582
|
+
const extensionHint = this.getCrashExtensionHint(error);
|
|
1583
|
+
if (extensionHint) {
|
|
1584
|
+
this.chatContainer.addChild(new Text(theme.fg("warning", extensionHint), this.outputPad, 0));
|
|
1585
|
+
}
|
|
1565
1586
|
if (this.recordCrash("fatal_error", error)) {
|
|
1566
1587
|
this.chatContainer.addChild(new Text(theme.fg("muted", this.crashReportInstructions()), this.outputPad, 0));
|
|
1567
1588
|
}
|
|
@@ -1569,6 +1590,14 @@ export class InteractiveMode {
|
|
|
1569
1590
|
this.stop("transcript");
|
|
1570
1591
|
process.exit(1);
|
|
1571
1592
|
}
|
|
1593
|
+
getCrashExtensionHint(error) {
|
|
1594
|
+
try {
|
|
1595
|
+
return formatCrashExtensionHint(findExtensionStackMatches(error instanceof Error ? error.stack : undefined, this.session.resourceLoader.getExtensions().extensions));
|
|
1596
|
+
}
|
|
1597
|
+
catch {
|
|
1598
|
+
return undefined;
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1572
1601
|
/** Persist a crash so the next start can point the user at `/bug`. Returns false when nothing was written. */
|
|
1573
1602
|
recordCrash(kind, error) {
|
|
1574
1603
|
try {
|
|
@@ -2821,6 +2850,8 @@ export class InteractiveMode {
|
|
|
2821
2850
|
this.ui.requestRender();
|
|
2822
2851
|
break;
|
|
2823
2852
|
case "entry_appended":
|
|
2853
|
+
if (this.entriesRenderedByBoundaryCompaction.delete(event.entry.id))
|
|
2854
|
+
break;
|
|
2824
2855
|
if (event.entry.type === "custom") {
|
|
2825
2856
|
this.addCustomEntryToChat(event.entry);
|
|
2826
2857
|
this.ui.requestRender();
|
|
@@ -2829,6 +2860,34 @@ export class InteractiveMode {
|
|
|
2829
2860
|
this.addCacheWarmingUsage(event.entry);
|
|
2830
2861
|
this.ui.requestRender();
|
|
2831
2862
|
}
|
|
2863
|
+
else if (event.entry.type === "custom_message" && event.entry.display) {
|
|
2864
|
+
this.addMessageToChat(createCustomMessage(event.entry.customType, event.entry.content, event.entry.display, event.entry.details, event.entry.timestamp));
|
|
2865
|
+
this.ui.requestRender();
|
|
2866
|
+
}
|
|
2867
|
+
else if (event.entry.type === "compaction") {
|
|
2868
|
+
const entries = this.sessionManager.buildContextEntries();
|
|
2869
|
+
if (entries[0]?.id !== event.entry.id)
|
|
2870
|
+
break;
|
|
2871
|
+
this.chatContainer.clear();
|
|
2872
|
+
const branch = this.sessionManager.getBranch();
|
|
2873
|
+
const compactionIndex = branch.findIndex((entry) => entry.id === event.entry.id);
|
|
2874
|
+
const entriesAfterCompaction = new Set(branch.slice(compactionIndex + 1).map((entry) => entry.id));
|
|
2875
|
+
const retainedEntries = entries.slice(1);
|
|
2876
|
+
this.renderSessionEntries(retainedEntries.filter((entry) => !entriesAfterCompaction.has(entry.id)));
|
|
2877
|
+
this.addMessageToChat(createCompactionSummaryMessage(event.entry.summary, event.entry.tokensBefore, event.entry.timestamp));
|
|
2878
|
+
if (event.entry.usage) {
|
|
2879
|
+
this.addCompactionCostNotice({
|
|
2880
|
+
type: "compaction_cost",
|
|
2881
|
+
kind: "compaction",
|
|
2882
|
+
usage: event.entry.usage,
|
|
2883
|
+
});
|
|
2884
|
+
}
|
|
2885
|
+
this.renderSessionEntries(retainedEntries.filter((entry) => entriesAfterCompaction.has(entry.id)));
|
|
2886
|
+
for (const entryId of entriesAfterCompaction)
|
|
2887
|
+
this.entriesRenderedByBoundaryCompaction.add(entryId);
|
|
2888
|
+
this.footer.invalidate();
|
|
2889
|
+
this.ui.requestRender();
|
|
2890
|
+
}
|
|
2832
2891
|
break;
|
|
2833
2892
|
case "session_info_changed":
|
|
2834
2893
|
this.updateTerminalTitle();
|
|
@@ -3576,6 +3635,9 @@ export class InteractiveMode {
|
|
|
3576
3635
|
catch { }
|
|
3577
3636
|
console.error(`${APP_NAME} exiting due to uncaughtException:`);
|
|
3578
3637
|
console.error(error);
|
|
3638
|
+
const extensionHint = this.getCrashExtensionHint(error);
|
|
3639
|
+
if (extensionHint)
|
|
3640
|
+
console.error(`\n${extensionHint}`);
|
|
3579
3641
|
if (this.recordCrash("uncaught_exception", error)) {
|
|
3580
3642
|
console.error(`\n${this.crashReportInstructions()}`);
|
|
3581
3643
|
}
|