@earendil-works/pi-coding-agent 0.75.5 → 0.77.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 (119) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +4 -0
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +15 -0
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +15 -2
  9. package/dist/config.js.map +1 -1
  10. package/dist/core/agent-session-services.d.ts +1 -0
  11. package/dist/core/agent-session-services.d.ts.map +1 -1
  12. package/dist/core/agent-session-services.js +1 -0
  13. package/dist/core/agent-session-services.js.map +1 -1
  14. package/dist/core/agent-session.d.ts +5 -1
  15. package/dist/core/agent-session.d.ts.map +1 -1
  16. package/dist/core/agent-session.js +28 -4
  17. package/dist/core/agent-session.js.map +1 -1
  18. package/dist/core/compaction/compaction.d.ts.map +1 -1
  19. package/dist/core/compaction/compaction.js +18 -24
  20. package/dist/core/compaction/compaction.js.map +1 -1
  21. package/dist/core/extensions/runner.d.ts +1 -1
  22. package/dist/core/extensions/runner.d.ts.map +1 -1
  23. package/dist/core/extensions/runner.js +8 -2
  24. package/dist/core/extensions/runner.js.map +1 -1
  25. package/dist/core/extensions/types.d.ts +7 -5
  26. package/dist/core/extensions/types.d.ts.map +1 -1
  27. package/dist/core/extensions/types.js.map +1 -1
  28. package/dist/core/model-registry.d.ts.map +1 -1
  29. package/dist/core/model-registry.js +65 -13
  30. package/dist/core/model-registry.js.map +1 -1
  31. package/dist/core/model-resolver.d.ts.map +1 -1
  32. package/dist/core/model-resolver.js +1 -1
  33. package/dist/core/model-resolver.js.map +1 -1
  34. package/dist/core/output-guard.d.ts +1 -0
  35. package/dist/core/output-guard.d.ts.map +1 -1
  36. package/dist/core/output-guard.js +52 -22
  37. package/dist/core/output-guard.js.map +1 -1
  38. package/dist/core/package-manager.d.ts.map +1 -1
  39. package/dist/core/package-manager.js +16 -4
  40. package/dist/core/package-manager.js.map +1 -1
  41. package/dist/core/resolve-config-value.d.ts +9 -1
  42. package/dist/core/resolve-config-value.d.ts.map +1 -1
  43. package/dist/core/resolve-config-value.js +134 -11
  44. package/dist/core/resolve-config-value.js.map +1 -1
  45. package/dist/core/sdk.d.ts +2 -0
  46. package/dist/core/sdk.d.ts.map +1 -1
  47. package/dist/core/sdk.js +10 -6
  48. package/dist/core/sdk.js.map +1 -1
  49. package/dist/core/session-manager.d.ts +6 -7
  50. package/dist/core/session-manager.d.ts.map +1 -1
  51. package/dist/core/session-manager.js +75 -28
  52. package/dist/core/session-manager.js.map +1 -1
  53. package/dist/core/settings-manager.d.ts +2 -0
  54. package/dist/core/settings-manager.d.ts.map +1 -1
  55. package/dist/core/settings-manager.js +14 -9
  56. package/dist/core/settings-manager.js.map +1 -1
  57. package/dist/core/system-prompt.d.ts.map +1 -1
  58. package/dist/core/system-prompt.js +0 -3
  59. package/dist/core/system-prompt.js.map +1 -1
  60. package/dist/main.d.ts.map +1 -1
  61. package/dist/main.js +61 -16
  62. package/dist/main.js.map +1 -1
  63. package/dist/migrations.d.ts.map +1 -1
  64. package/dist/migrations.js +118 -1
  65. package/dist/migrations.js.map +1 -1
  66. package/dist/modes/interactive/components/login-dialog.d.ts +1 -3
  67. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  68. package/dist/modes/interactive/components/login-dialog.js +2 -4
  69. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  70. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  71. package/dist/modes/interactive/components/user-message.js +1 -1
  72. package/dist/modes/interactive/components/user-message.js.map +1 -1
  73. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  74. package/dist/modes/interactive/interactive-mode.js +25 -6
  75. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  76. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  77. package/dist/modes/interactive/theme/theme.js +10 -0
  78. package/dist/modes/interactive/theme/theme.js.map +1 -1
  79. package/dist/modes/rpc/rpc-client.d.ts +3 -0
  80. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  81. package/dist/modes/rpc/rpc-client.js +64 -7
  82. package/dist/modes/rpc/rpc-client.js.map +1 -1
  83. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  84. package/dist/modes/rpc/rpc-mode.js +18 -4
  85. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  86. package/dist/modes/rpc/rpc-types.d.ts +1 -0
  87. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  88. package/dist/modes/rpc/rpc-types.js.map +1 -1
  89. package/dist/utils/deprecation.d.ts +4 -0
  90. package/dist/utils/deprecation.d.ts.map +1 -0
  91. package/dist/utils/deprecation.js +13 -0
  92. package/dist/utils/deprecation.js.map +1 -0
  93. package/dist/utils/json.d.ts +3 -0
  94. package/dist/utils/json.d.ts.map +1 -0
  95. package/dist/utils/json.js +7 -0
  96. package/dist/utils/json.js.map +1 -0
  97. package/docs/custom-provider.md +13 -10
  98. package/docs/development.md +1 -1
  99. package/docs/extensions.md +12 -6
  100. package/docs/models.md +25 -12
  101. package/docs/providers.md +13 -5
  102. package/docs/sdk.md +6 -0
  103. package/docs/settings.md +6 -2
  104. package/docs/terminal-setup.md +6 -0
  105. package/docs/usage.md +4 -0
  106. package/examples/extensions/README.md +1 -0
  107. package/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  108. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  109. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  110. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  111. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  112. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  113. package/examples/extensions/input-transform-streaming.ts +39 -0
  114. package/examples/extensions/sandbox/package-lock.json +2 -2
  115. package/examples/extensions/sandbox/package.json +1 -1
  116. package/examples/extensions/with-deps/package-lock.json +2 -2
  117. package/examples/extensions/with-deps/package.json +1 -1
  118. package/npm-shrinkwrap.json +71 -56
  119. package/package.json +6 -6
@@ -2643,11 +2643,27 @@ export class InteractiveMode {
2643
2643
  * repaint the final frame while the process is exiting.
2644
2644
  */
2645
2645
  isShuttingDown = false;
2646
- async shutdown() {
2646
+ async shutdown(options) {
2647
2647
  if (this.isShuttingDown)
2648
2648
  return;
2649
2649
  this.isShuttingDown = true;
2650
2650
  this.unregisterSignalHandlers();
2651
+ if (options?.fromSignal) {
2652
+ // Signal-triggered shutdown (SIGTERM/SIGHUP). Emit extension cleanup
2653
+ // (session_shutdown) BEFORE touching the terminal. Extension teardown
2654
+ // such as removing sockets does not write to the tty, so it must not be
2655
+ // skipped if a later terminal-restore write fails on a dead or stalled
2656
+ // terminal. If the terminal is gone, the restore writes below emit EIO,
2657
+ // which the stdout/stderr error handler turns into emergencyTerminalExit;
2658
+ // the render loop is already idle, so this cannot hot-spin (see #4144).
2659
+ await this.runtimeHost.dispose();
2660
+ await this.ui.terminal.drainInput(1000);
2661
+ this.stop();
2662
+ process.exit(0);
2663
+ }
2664
+ // Interactive quit (Ctrl+D, Ctrl+C, /quit, extension shutdown()). Stop the
2665
+ // TUI before emitting shutdown events so extension UI cleanup cannot repaint
2666
+ // the final frame while the process is exiting.
2651
2667
  // Drain any in-flight Kitty key release events before stopping.
2652
2668
  // This prevents escape sequences from leaking to the parent shell over slow SSH.
2653
2669
  await this.ui.terminal.drainInput(1000);
@@ -2711,11 +2727,12 @@ export class InteractiveMode {
2711
2727
  }
2712
2728
  for (const signal of signals) {
2713
2729
  const handler = () => {
2714
- if (signal === "SIGHUP") {
2715
- this.emergencyTerminalExit();
2716
- }
2730
+ // SIGHUP no longer hard-exits: graceful shutdown emits session_shutdown
2731
+ // first, then attempts terminal restore. A genuinely dead terminal
2732
+ // surfaces as an EIO on the restore writes, which the stdout/stderr
2733
+ // error handler converts into emergencyTerminalExit (see #4144, #5080).
2717
2734
  killTrackedDetachedChildren();
2718
- void this.shutdown();
2735
+ void this.shutdown({ fromSignal: true });
2719
2736
  };
2720
2737
  process.prependListener(signal, handler);
2721
2738
  this.signalCleanupHandlers.push(() => process.off(signal, handler));
@@ -3642,7 +3659,9 @@ export class InteractiveMode {
3642
3659
  }
3643
3660
  showSessionSelector() {
3644
3661
  this.showSelector((done) => {
3645
- const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress), SessionManager.listAll, async (sessionPath) => {
3662
+ const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress), (onProgress) => this.sessionManager.usesDefaultSessionDir()
3663
+ ? SessionManager.listAll(onProgress)
3664
+ : SessionManager.listAll(this.sessionManager.getSessionDir(), onProgress), async (sessionPath) => {
3646
3665
  done();
3647
3666
  await this.handleResumeSession(sessionPath);
3648
3667
  }, () => {