@earendil-works/pi-coding-agent 0.80.10 → 0.81.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 +60 -0
- package/README.md +6 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +13 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +22 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +75 -56
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +7 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +8 -11
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +19 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +63 -26
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +6 -17
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +13 -2
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +31 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +16 -2
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +17 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +2 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +7 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +41 -18
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +1 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +4 -4
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +26 -7
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +6 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +9 -4
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +99 -23
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +3 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +302 -0
- package/dist/extensions/llama/client.js.map +1 -0
- package/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/llama/huggingface.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface.js +141 -0
- package/dist/extensions/llama/huggingface.js.map +1 -0
- package/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/llama/index.d.ts.map +1 -0
- package/dist/extensions/llama/index.js +208 -0
- package/dist/extensions/llama/index.js.map +1 -0
- package/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/llama/provider.d.ts.map +1 -0
- package/dist/extensions/llama/provider.js +102 -0
- package/dist/extensions/llama/provider.js.map +1 -0
- package/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/llama/ui.d.ts.map +1 -0
- package/dist/extensions/llama/ui.js +416 -0
- package/dist/extensions/llama/ui.js.map +1 -0
- 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 +10 -4
- 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 +24 -23
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +48 -26
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +4 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +4 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +11 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/docs/compaction.md +8 -3
- package/docs/custom-provider.md +28 -0
- package/docs/extensions.md +51 -9
- package/docs/index.md +1 -0
- package/docs/json.md +5 -1
- package/docs/llama-cpp.md +99 -0
- package/docs/prompt-templates.md +1 -0
- package/docs/providers.md +11 -0
- package/docs/rpc.md +81 -2
- package/docs/sdk.md +3 -0
- package/docs/session-format.md +17 -3
- package/docs/tui.md +41 -26
- package/docs/usage.md +2 -1
- package/examples/extensions/README.md +1 -1
- package/examples/extensions/custom-compaction.ts +1 -0
- 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/npm-shrinkwrap.json +16 -31
- package/package.json +4 -4
|
@@ -24,6 +24,7 @@ import { SessionManager, sessionEntryToContextMessages } from "../../core/sessio
|
|
|
24
24
|
import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
|
|
25
25
|
import { isInstallTelemetryEnabled } from "../../core/telemetry.js";
|
|
26
26
|
import { hasTrustRequiringProjectResources, ProjectTrustStore } from "../../core/trust-manager.js";
|
|
27
|
+
import { getUsageCostBreakdown } from "../../core/usage-totals.js";
|
|
27
28
|
import { getChangelogPath, getNewEntries, normalizeChangelogLinks, parseChangelog } from "../../utils/changelog.js";
|
|
28
29
|
import { copyToClipboard, readClipboardText } from "../../utils/clipboard.js";
|
|
29
30
|
import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
|
|
@@ -579,6 +580,12 @@ export class InteractiveMode {
|
|
|
579
580
|
*/
|
|
580
581
|
async run() {
|
|
581
582
|
await this.init();
|
|
583
|
+
if (!process.env.PI_OFFLINE) {
|
|
584
|
+
void this.session.modelRuntime
|
|
585
|
+
.refresh()
|
|
586
|
+
.then(() => this.updateAvailableProviderCount())
|
|
587
|
+
.catch(() => { });
|
|
588
|
+
}
|
|
582
589
|
// Start version check asynchronously
|
|
583
590
|
checkForNewPiVersion(this.version).then((newRelease) => {
|
|
584
591
|
if (newRelease) {
|
|
@@ -1062,7 +1069,10 @@ export class InteractiveMode {
|
|
|
1062
1069
|
const promptsResult = this.session.resourceLoader.getPrompts();
|
|
1063
1070
|
const themesResult = this.session.resourceLoader.getThemes();
|
|
1064
1071
|
const extensions = options?.extensions ??
|
|
1065
|
-
this.session.resourceLoader
|
|
1072
|
+
this.session.resourceLoader
|
|
1073
|
+
.getExtensions()
|
|
1074
|
+
.extensions.filter((extension) => !extension.hidden)
|
|
1075
|
+
.map((extension) => ({
|
|
1066
1076
|
path: extension.path,
|
|
1067
1077
|
sourceInfo: extension.sourceInfo,
|
|
1068
1078
|
}));
|
|
@@ -2511,6 +2521,28 @@ export class InteractiveMode {
|
|
|
2511
2521
|
this.ui.requestRender();
|
|
2512
2522
|
break;
|
|
2513
2523
|
}
|
|
2524
|
+
case "summarization_retry_scheduled": {
|
|
2525
|
+
this.showError(event.errorMessage);
|
|
2526
|
+
this.showStatusIndicator(new RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs));
|
|
2527
|
+
this.ui.requestRender();
|
|
2528
|
+
break;
|
|
2529
|
+
}
|
|
2530
|
+
case "summarization_retry_attempt_start": {
|
|
2531
|
+
this.clearStatusIndicator("retry");
|
|
2532
|
+
if (event.source === "branchSummary") {
|
|
2533
|
+
this.showStatusIndicator(new BranchSummaryStatusIndicator(this.ui));
|
|
2534
|
+
}
|
|
2535
|
+
else {
|
|
2536
|
+
this.showStatusIndicator(new CompactionStatusIndicator(this.ui, event.reason));
|
|
2537
|
+
}
|
|
2538
|
+
this.ui.requestRender();
|
|
2539
|
+
break;
|
|
2540
|
+
}
|
|
2541
|
+
case "summarization_retry_finished": {
|
|
2542
|
+
this.clearStatusIndicator("retry");
|
|
2543
|
+
this.ui.requestRender();
|
|
2544
|
+
break;
|
|
2545
|
+
}
|
|
2514
2546
|
}
|
|
2515
2547
|
}
|
|
2516
2548
|
/** Extract text content from a user message */
|
|
@@ -3321,8 +3353,10 @@ export class InteractiveMode {
|
|
|
3321
3353
|
for (const message of preCommands) {
|
|
3322
3354
|
await this.session.prompt(message.text);
|
|
3323
3355
|
}
|
|
3324
|
-
//
|
|
3325
|
-
const promptPromise = this.session
|
|
3356
|
+
// Start a prompt when idle, or queue it into a run still finishing compaction.
|
|
3357
|
+
const promptPromise = this.session
|
|
3358
|
+
.prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })
|
|
3359
|
+
.catch((error) => {
|
|
3326
3360
|
restoreQueue(error);
|
|
3327
3361
|
});
|
|
3328
3362
|
// Queue remaining messages
|
|
@@ -3587,10 +3621,12 @@ export class InteractiveMode {
|
|
|
3587
3621
|
return [];
|
|
3588
3622
|
}
|
|
3589
3623
|
}
|
|
3590
|
-
/** Update the footer's available provider count from current
|
|
3591
|
-
|
|
3592
|
-
const models =
|
|
3593
|
-
|
|
3624
|
+
/** Update the footer's available provider count from the current snapshot without refreshing catalogs. */
|
|
3625
|
+
updateAvailableProviderCount() {
|
|
3626
|
+
const models = this.session.scopedModels.length > 0
|
|
3627
|
+
? this.session.scopedModels.map((scoped) => scoped.model)
|
|
3628
|
+
: this.session.modelRuntime.getAvailableSnapshot();
|
|
3629
|
+
const uniqueProviders = new Set(models.map((model) => model.provider));
|
|
3594
3630
|
this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);
|
|
3595
3631
|
}
|
|
3596
3632
|
async maybeWarnAboutAnthropicSubscriptionAuth(model = this.session.model) {
|
|
@@ -4678,23 +4714,9 @@ export class InteractiveMode {
|
|
|
4678
4714
|
const entries = this.sessionManager.getEntries();
|
|
4679
4715
|
const cacheWaste = computeCacheWaste(entries, this.session.modelRuntime);
|
|
4680
4716
|
// Cost/token totals per provider/model actually used (e.g. OpenRouter `auto`
|
|
4681
|
-
// resolves to a concrete responseModel)
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
if (entry.type !== "message" || entry.message.role !== "assistant")
|
|
4685
|
-
continue;
|
|
4686
|
-
const message = entry.message;
|
|
4687
|
-
const usage = message.usage;
|
|
4688
|
-
const key = `${message.provider}/${message.responseModel ?? message.model}`;
|
|
4689
|
-
let bucket = perModelMap.get(key);
|
|
4690
|
-
if (!bucket) {
|
|
4691
|
-
bucket = { key, cost: 0, tokens: 0 };
|
|
4692
|
-
perModelMap.set(key, bucket);
|
|
4693
|
-
}
|
|
4694
|
-
bucket.cost += usage.cost.total;
|
|
4695
|
-
bucket.tokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
|
|
4696
|
-
}
|
|
4697
|
-
const perModel = Array.from(perModelMap.values()).sort((a, b) => b.cost - a.cost);
|
|
4717
|
+
// resolves to a concrete responseModel). Usage without model attribution is
|
|
4718
|
+
// grouped separately so the breakdown reconciles with the session total.
|
|
4719
|
+
const usageBreakdown = getUsageCostBreakdown(entries);
|
|
4698
4720
|
let info = `${theme.bold("Session Info")}\n\n`;
|
|
4699
4721
|
if (sessionName) {
|
|
4700
4722
|
info += `${theme.fg("dim", "Name:")} ${sessionName}\n`;
|
|
@@ -4725,8 +4747,8 @@ export class InteractiveMode {
|
|
|
4725
4747
|
if (stats.cost > 0 || cacheWaste.missedTokens > 0) {
|
|
4726
4748
|
info += `\n${theme.bold("Cost")}\n`;
|
|
4727
4749
|
info += `${theme.fg("dim", "Total:")} $${stats.cost.toFixed(3)}`;
|
|
4728
|
-
if (
|
|
4729
|
-
for (const entry of
|
|
4750
|
+
if (usageBreakdown.length > 1) {
|
|
4751
|
+
for (const entry of usageBreakdown) {
|
|
4730
4752
|
info += `\n ${theme.fg("dim", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${theme.fg("dim", `(${formatTokens(entry.tokens)} tokens)`)}`;
|
|
4731
4753
|
}
|
|
4732
4754
|
}
|