@earendil-works/pi-coding-agent 0.79.9 → 0.80.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.
Files changed (118) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +3 -2
  3. package/dist/bun/register-bedrock.d.ts.map +1 -1
  4. package/dist/bun/register-bedrock.js +1 -1
  5. package/dist/bun/register-bedrock.js.map +1 -1
  6. package/dist/cli/args.d.ts.map +1 -1
  7. package/dist/cli/args.js +1 -1
  8. package/dist/cli/args.js.map +1 -1
  9. package/dist/cli/session-picker.d.ts +2 -1
  10. package/dist/cli/session-picker.d.ts.map +1 -1
  11. package/dist/cli/session-picker.js +5 -4
  12. package/dist/cli/session-picker.js.map +1 -1
  13. package/dist/cli/startup-ui.d.ts +4 -1
  14. package/dist/cli/startup-ui.d.ts.map +1 -1
  15. package/dist/cli/startup-ui.js +63 -12
  16. package/dist/cli/startup-ui.js.map +1 -1
  17. package/dist/config.d.ts +6 -2
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +21 -13
  20. package/dist/config.js.map +1 -1
  21. package/dist/core/agent-session.d.ts +4 -2
  22. package/dist/core/agent-session.d.ts.map +1 -1
  23. package/dist/core/agent-session.js +18 -7
  24. package/dist/core/agent-session.js.map +1 -1
  25. package/dist/core/auth-storage.d.ts +6 -12
  26. package/dist/core/auth-storage.d.ts.map +1 -1
  27. package/dist/core/auth-storage.js +4 -20
  28. package/dist/core/auth-storage.js.map +1 -1
  29. package/dist/core/compaction/branch-summarization.d.ts +1 -1
  30. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  31. package/dist/core/compaction/branch-summarization.js +1 -1
  32. package/dist/core/compaction/branch-summarization.js.map +1 -1
  33. package/dist/core/compaction/compaction.d.ts +2 -2
  34. package/dist/core/compaction/compaction.d.ts.map +1 -1
  35. package/dist/core/compaction/compaction.js +7 -4
  36. package/dist/core/compaction/compaction.js.map +1 -1
  37. package/dist/core/extensions/loader.d.ts.map +1 -1
  38. package/dist/core/extensions/loader.js +16 -6
  39. package/dist/core/extensions/loader.js.map +1 -1
  40. package/dist/core/extensions/types.d.ts +8 -0
  41. package/dist/core/extensions/types.d.ts.map +1 -1
  42. package/dist/core/extensions/types.js.map +1 -1
  43. package/dist/core/keybindings.d.ts +1 -1
  44. package/dist/core/model-registry.d.ts +1 -1
  45. package/dist/core/model-registry.d.ts.map +1 -1
  46. package/dist/core/model-registry.js +4 -6
  47. package/dist/core/model-registry.js.map +1 -1
  48. package/dist/core/provider-attribution.d.ts +2 -2
  49. package/dist/core/provider-attribution.d.ts.map +1 -1
  50. package/dist/core/provider-attribution.js.map +1 -1
  51. package/dist/core/provider-display-names.d.ts.map +1 -1
  52. package/dist/core/provider-display-names.js +1 -1
  53. package/dist/core/provider-display-names.js.map +1 -1
  54. package/dist/core/sdk.d.ts +1 -1
  55. package/dist/core/sdk.d.ts.map +1 -1
  56. package/dist/core/sdk.js +1 -1
  57. package/dist/core/sdk.js.map +1 -1
  58. package/dist/core/session-manager.d.ts.map +1 -1
  59. package/dist/core/session-manager.js +2 -1
  60. package/dist/core/session-manager.js.map +1 -1
  61. package/dist/core/settings-manager.d.ts +1 -1
  62. package/dist/core/settings-manager.d.ts.map +1 -1
  63. package/dist/core/settings-manager.js +2 -2
  64. package/dist/core/settings-manager.js.map +1 -1
  65. package/dist/core/tools/find.d.ts.map +1 -1
  66. package/dist/core/tools/find.js +19 -11
  67. package/dist/core/tools/find.js.map +1 -1
  68. package/dist/main.d.ts.map +1 -1
  69. package/dist/main.js +5 -2
  70. package/dist/main.js.map +1 -1
  71. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  72. package/dist/modes/interactive/components/session-selector.js +14 -3
  73. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  74. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  75. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  76. package/dist/modes/interactive/interactive-mode.js +36 -26
  77. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  78. package/dist/modes/interactive/theme/theme-controller.d.ts +0 -1
  79. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  80. package/dist/modes/interactive/theme/theme-controller.js +2 -13
  81. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  82. package/dist/modes/interactive/theme/theme.d.ts +10 -0
  83. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  84. package/dist/modes/interactive/theme/theme.js +11 -0
  85. package/dist/modes/interactive/theme/theme.js.map +1 -1
  86. package/dist/package-manager-cli.d.ts.map +1 -1
  87. package/dist/package-manager-cli.js +29 -16
  88. package/dist/package-manager-cli.js.map +1 -1
  89. package/docs/compaction.md +3 -1
  90. package/docs/extensions.md +6 -1
  91. package/docs/keybindings.md +1 -1
  92. package/docs/models.md +4 -2
  93. package/docs/providers.md +1 -1
  94. package/docs/terminal-setup.md +1 -7
  95. package/docs/tui.md +3 -3
  96. package/docs/usage.md +3 -1
  97. package/examples/extensions/custom-compaction.ts +1 -1
  98. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  99. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  100. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  101. package/examples/extensions/custom-provider-gitlab-duo/index.ts +9 -5
  102. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  103. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  104. package/examples/extensions/gondolin/package-lock.json +2 -2
  105. package/examples/extensions/gondolin/package.json +1 -1
  106. package/examples/extensions/handoff.ts +1 -1
  107. package/examples/extensions/plan-mode/README.md +3 -2
  108. package/examples/extensions/plan-mode/index.ts +87 -37
  109. package/examples/extensions/qna.ts +1 -1
  110. package/examples/extensions/sandbox/package-lock.json +2 -2
  111. package/examples/extensions/sandbox/package.json +1 -1
  112. package/examples/extensions/summarize.ts +1 -1
  113. package/examples/extensions/with-deps/package-lock.json +2 -2
  114. package/examples/extensions/with-deps/package.json +1 -1
  115. package/examples/sdk/02-custom-model.ts +1 -1
  116. package/examples/sdk/12-full-control.ts +1 -1
  117. package/npm-shrinkwrap.json +12 -12
  118. package/package.json +4 -4
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
16
  import { basename, dirname } from "node:path";
17
- import { clampThinkingLevel, cleanupSessionResources, getSupportedThinkingLevels, isContextOverflow, modelsAreEqual, resetApiProviders, streamSimple, } from "@earendil-works/pi-ai";
17
+ import { clampThinkingLevel, cleanupSessionResources, getSupportedThinkingLevels, isContextOverflow, modelsAreEqual, resetApiProviders, streamSimple, } from "@earendil-works/pi-ai/compat";
18
18
  import { getThemeByName, theme } from "../modes/interactive/theme/theme.js";
19
19
  import { stripFrontmatter } from "../utils/frontmatter.js";
20
20
  import { resolvePath } from "../utils/paths.js";
@@ -1300,6 +1300,8 @@ export class AgentSession {
1300
1300
  preparation,
1301
1301
  branchEntries: pathEntries,
1302
1302
  customInstructions,
1303
+ reason: "manual",
1304
+ willRetry: false,
1303
1305
  signal: this._compactionAbortController.signal,
1304
1306
  }));
1305
1307
  if (result?.cancel) {
@@ -1344,6 +1346,8 @@ export class AgentSession {
1344
1346
  type: "session_compact",
1345
1347
  compactionEntry: savedCompactionEntry,
1346
1348
  fromExtension,
1349
+ reason: "manual",
1350
+ willRetry: false,
1347
1351
  });
1348
1352
  }
1349
1353
  const compactionResult = {
@@ -1455,10 +1459,12 @@ export class AgentSession {
1455
1459
  return await this._runAutoCompaction("overflow", willRetry);
1456
1460
  }
1457
1461
  // Case 2: Threshold - context is getting large
1458
- // For error messages (no usage data), estimate from last successful response.
1459
- // This ensures sessions that hit persistent API errors (e.g. 529) can still compact.
1462
+ // For error messages or all-zero usage messages, estimate from the last valid response.
1463
+ // This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage
1464
+ // responses can still compact and do not reset context accounting.
1460
1465
  let contextTokens;
1461
- if (assistantMessage.stopReason === "error") {
1466
+ const directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;
1467
+ if (assistantMessage.stopReason === "error" || directContextTokens === 0) {
1462
1468
  const messages = this.agent.state.messages;
1463
1469
  const estimate = estimateContextTokens(messages);
1464
1470
  if (estimate.lastUsageIndex === null)
@@ -1475,7 +1481,7 @@ export class AgentSession {
1475
1481
  contextTokens = estimate.tokens;
1476
1482
  }
1477
1483
  else {
1478
- contextTokens = calculateContextTokens(assistantMessage.usage);
1484
+ contextTokens = directContextTokens;
1479
1485
  }
1480
1486
  if (shouldCompact(contextTokens, contextWindow, settings)) {
1481
1487
  return await this._runAutoCompaction("threshold", false);
@@ -1523,6 +1529,8 @@ export class AgentSession {
1523
1529
  preparation,
1524
1530
  branchEntries: pathEntries,
1525
1531
  customInstructions: undefined,
1532
+ reason,
1533
+ willRetry,
1526
1534
  signal: this._autoCompactionAbortController.signal,
1527
1535
  }));
1528
1536
  if (extensionResult?.cancel) {
@@ -1581,6 +1589,8 @@ export class AgentSession {
1581
1589
  type: "session_compact",
1582
1590
  compactionEntry: savedCompactionEntry,
1583
1591
  fromExtension,
1592
+ reason,
1593
+ willRetry,
1584
1594
  });
1585
1595
  }
1586
1596
  const result = {
@@ -1935,7 +1945,7 @@ export class AgentSession {
1935
1945
  includeAllExtensionTools: options.includeAllExtensionTools,
1936
1946
  });
1937
1947
  }
1938
- async reload() {
1948
+ async reload(options) {
1939
1949
  const previousFlagValues = this._extensionRunner.getFlagValues();
1940
1950
  await emitSessionShutdownEvent(this._extensionRunner, { type: "session_shutdown", reason: "reload" });
1941
1951
  await this.settingsManager.reload();
@@ -1952,6 +1962,7 @@ export class AgentSession {
1952
1962
  this._extensionShutdownHandler ||
1953
1963
  this._extensionErrorListener;
1954
1964
  if (hasBindings) {
1965
+ await options?.beforeSessionStart?.();
1955
1966
  await this._extensionRunner.emit({ type: "session_start", reason: "reload" });
1956
1967
  await this.extendResourcesFromExtensions("reload");
1957
1968
  }
@@ -2415,8 +2426,8 @@ export class AgentSession {
2415
2426
  const contextTokens = calculateContextTokens(assistant.usage);
2416
2427
  if (contextTokens > 0) {
2417
2428
  hasPostCompactionUsage = true;
2429
+ break;
2418
2430
  }
2419
- break;
2420
2431
  }
2421
2432
  }
2422
2433
  }