@earendil-works/pi-coding-agent 0.80.9 → 0.81.0

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.
Files changed (141) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +6 -3
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +2 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-session-services.d.ts.map +1 -1
  7. package/dist/core/agent-session-services.js +13 -0
  8. package/dist/core/agent-session-services.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +0 -3
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +45 -56
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/compaction/branch-summarization.d.ts +2 -1
  14. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  15. package/dist/core/compaction/branch-summarization.js +3 -4
  16. package/dist/core/compaction/branch-summarization.js.map +1 -1
  17. package/dist/core/compaction/compaction.d.ts +7 -0
  18. package/dist/core/compaction/compaction.d.ts.map +1 -1
  19. package/dist/core/compaction/compaction.js +47 -14
  20. package/dist/core/compaction/compaction.js.map +1 -1
  21. package/dist/core/compaction/utils.d.ts +1 -1
  22. package/dist/core/compaction/utils.d.ts.map +1 -1
  23. package/dist/core/compaction/utils.js +6 -17
  24. package/dist/core/compaction/utils.js.map +1 -1
  25. package/dist/core/extensions/loader.d.ts.map +1 -1
  26. package/dist/core/extensions/loader.js +13 -2
  27. package/dist/core/extensions/loader.js.map +1 -1
  28. package/dist/core/extensions/runner.d.ts +2 -1
  29. package/dist/core/extensions/runner.d.ts.map +1 -1
  30. package/dist/core/extensions/runner.js +31 -0
  31. package/dist/core/extensions/runner.js.map +1 -1
  32. package/dist/core/extensions/types.d.ts +16 -2
  33. package/dist/core/extensions/types.d.ts.map +1 -1
  34. package/dist/core/extensions/types.js.map +1 -1
  35. package/dist/core/model-registry.d.ts +5 -1
  36. package/dist/core/model-registry.d.ts.map +1 -1
  37. package/dist/core/model-registry.js +17 -2
  38. package/dist/core/model-registry.js.map +1 -1
  39. package/dist/core/model-resolver.d.ts.map +1 -1
  40. package/dist/core/model-resolver.js +2 -0
  41. package/dist/core/model-resolver.js.map +1 -1
  42. package/dist/core/model-runtime.d.ts +7 -2
  43. package/dist/core/model-runtime.d.ts.map +1 -1
  44. package/dist/core/model-runtime.js +41 -18
  45. package/dist/core/model-runtime.js.map +1 -1
  46. package/dist/core/prompt-templates.d.ts +1 -0
  47. package/dist/core/prompt-templates.d.ts.map +1 -1
  48. package/dist/core/prompt-templates.js +4 -4
  49. package/dist/core/prompt-templates.js.map +1 -1
  50. package/dist/core/remote-catalog-provider.d.ts +1 -1
  51. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  52. package/dist/core/remote-catalog-provider.js +26 -7
  53. package/dist/core/remote-catalog-provider.js.map +1 -1
  54. package/dist/core/resource-loader.d.ts.map +1 -1
  55. package/dist/core/resource-loader.js +1 -0
  56. package/dist/core/resource-loader.js.map +1 -1
  57. package/dist/core/sdk.d.ts.map +1 -1
  58. package/dist/core/sdk.js +1 -1
  59. package/dist/core/sdk.js.map +1 -1
  60. package/dist/core/session-manager.d.ts +9 -4
  61. package/dist/core/session-manager.d.ts.map +1 -1
  62. package/dist/core/session-manager.js +99 -23
  63. package/dist/core/session-manager.js.map +1 -1
  64. package/dist/core/tools/read.d.ts.map +1 -1
  65. package/dist/core/tools/read.js +1 -1
  66. package/dist/core/tools/read.js.map +1 -1
  67. package/dist/core/usage-totals.d.ts +19 -0
  68. package/dist/core/usage-totals.d.ts.map +1 -0
  69. package/dist/core/usage-totals.js +52 -0
  70. package/dist/core/usage-totals.js.map +1 -0
  71. package/dist/extensions/index.d.ts +3 -0
  72. package/dist/extensions/index.d.ts.map +1 -0
  73. package/dist/extensions/index.js +3 -0
  74. package/dist/extensions/index.js.map +1 -0
  75. package/dist/extensions/llama/client.d.ts +61 -0
  76. package/dist/extensions/llama/client.d.ts.map +1 -0
  77. package/dist/extensions/llama/client.js +302 -0
  78. package/dist/extensions/llama/client.js.map +1 -0
  79. package/dist/extensions/llama/huggingface.d.ts +23 -0
  80. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  81. package/dist/extensions/llama/huggingface.js +141 -0
  82. package/dist/extensions/llama/huggingface.js.map +1 -0
  83. package/dist/extensions/llama/index.d.ts +3 -0
  84. package/dist/extensions/llama/index.d.ts.map +1 -0
  85. package/dist/extensions/llama/index.js +208 -0
  86. package/dist/extensions/llama/index.js.map +1 -0
  87. package/dist/extensions/llama/provider.d.ts +10 -0
  88. package/dist/extensions/llama/provider.d.ts.map +1 -0
  89. package/dist/extensions/llama/provider.js +102 -0
  90. package/dist/extensions/llama/provider.js.map +1 -0
  91. package/dist/extensions/llama/ui.d.ts +42 -0
  92. package/dist/extensions/llama/ui.d.ts.map +1 -0
  93. package/dist/extensions/llama/ui.js +416 -0
  94. package/dist/extensions/llama/ui.js.map +1 -0
  95. package/dist/index.d.ts +2 -2
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +1 -1
  98. package/dist/index.js.map +1 -1
  99. package/dist/main.d.ts.map +1 -1
  100. package/dist/main.js +9 -4
  101. package/dist/main.js.map +1 -1
  102. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/footer.js +24 -23
  104. package/dist/modes/interactive/components/footer.js.map +1 -1
  105. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  106. package/dist/modes/interactive/interactive-mode.js +14 -22
  107. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  108. package/dist/modes/rpc/rpc-client.d.ts +4 -0
  109. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  110. package/dist/modes/rpc/rpc-client.js +7 -0
  111. package/dist/modes/rpc/rpc-client.js.map +1 -1
  112. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  113. package/dist/modes/rpc/rpc-mode.js +4 -0
  114. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  115. package/dist/modes/rpc/rpc-types.d.ts +11 -0
  116. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  117. package/dist/modes/rpc/rpc-types.js.map +1 -1
  118. package/docs/compaction.md +8 -3
  119. package/docs/custom-provider.md +28 -0
  120. package/docs/extensions.md +51 -9
  121. package/docs/index.md +1 -0
  122. package/docs/llama-cpp.md +99 -0
  123. package/docs/prompt-templates.md +1 -0
  124. package/docs/providers.md +11 -0
  125. package/docs/rpc.md +48 -2
  126. package/docs/session-format.md +17 -3
  127. package/docs/tui.md +41 -26
  128. package/docs/usage.md +2 -1
  129. package/examples/extensions/README.md +1 -1
  130. package/examples/extensions/custom-compaction.ts +1 -0
  131. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  132. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  133. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  134. package/examples/extensions/gondolin/package-lock.json +2 -2
  135. package/examples/extensions/gondolin/package.json +1 -1
  136. package/examples/extensions/sandbox/package-lock.json +2 -2
  137. package/examples/extensions/sandbox/package.json +1 -1
  138. package/examples/extensions/with-deps/package-lock.json +2 -2
  139. package/examples/extensions/with-deps/package.json +1 -1
  140. package/npm-shrinkwrap.json +16 -31
  141. 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";
@@ -1062,7 +1063,10 @@ export class InteractiveMode {
1062
1063
  const promptsResult = this.session.resourceLoader.getPrompts();
1063
1064
  const themesResult = this.session.resourceLoader.getThemes();
1064
1065
  const extensions = options?.extensions ??
1065
- this.session.resourceLoader.getExtensions().extensions.map((extension) => ({
1066
+ this.session.resourceLoader
1067
+ .getExtensions()
1068
+ .extensions.filter((extension) => !extension.hidden)
1069
+ .map((extension) => ({
1066
1070
  path: extension.path,
1067
1071
  sourceInfo: extension.sourceInfo,
1068
1072
  }));
@@ -3321,8 +3325,10 @@ export class InteractiveMode {
3321
3325
  for (const message of preCommands) {
3322
3326
  await this.session.prompt(message.text);
3323
3327
  }
3324
- // Send first prompt (starts streaming)
3325
- const promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {
3328
+ // Start a prompt when idle, or queue it into a run still finishing compaction.
3329
+ const promptPromise = this.session
3330
+ .prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })
3331
+ .catch((error) => {
3326
3332
  restoreQueue(error);
3327
3333
  });
3328
3334
  // Queue remaining messages
@@ -4678,23 +4684,9 @@ export class InteractiveMode {
4678
4684
  const entries = this.sessionManager.getEntries();
4679
4685
  const cacheWaste = computeCacheWaste(entries, this.session.modelRuntime);
4680
4686
  // Cost/token totals per provider/model actually used (e.g. OpenRouter `auto`
4681
- // resolves to a concrete responseModel), sorted by cost descending.
4682
- const perModelMap = new Map();
4683
- for (const entry of entries) {
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);
4687
+ // resolves to a concrete responseModel). Usage without model attribution is
4688
+ // grouped separately so the breakdown reconciles with the session total.
4689
+ const usageBreakdown = getUsageCostBreakdown(entries);
4698
4690
  let info = `${theme.bold("Session Info")}\n\n`;
4699
4691
  if (sessionName) {
4700
4692
  info += `${theme.fg("dim", "Name:")} ${sessionName}\n`;
@@ -4725,8 +4717,8 @@ export class InteractiveMode {
4725
4717
  if (stats.cost > 0 || cacheWaste.missedTokens > 0) {
4726
4718
  info += `\n${theme.bold("Cost")}\n`;
4727
4719
  info += `${theme.fg("dim", "Total:")} $${stats.cost.toFixed(3)}`;
4728
- if (perModel.length > 1) {
4729
- for (const entry of perModel) {
4720
+ if (usageBreakdown.length > 1) {
4721
+ for (const entry of usageBreakdown) {
4730
4722
  info += `\n ${theme.fg("dim", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${theme.fg("dim", `(${formatTokens(entry.tokens)} tokens)`)}`;
4731
4723
  }
4732
4724
  }