@mariozechner/pi-coding-agent 0.57.0 → 0.57.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 (46) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/README.md +1 -1
  3. package/dist/core/export-html/index.d.ts +5 -2
  4. package/dist/core/export-html/index.d.ts.map +1 -1
  5. package/dist/core/export-html/index.js +4 -3
  6. package/dist/core/export-html/index.js.map +1 -1
  7. package/dist/core/export-html/template.js +11 -14
  8. package/dist/core/export-html/tool-renderer.d.ts +5 -2
  9. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  10. package/dist/core/export-html/tool-renderer.js +12 -5
  11. package/dist/core/export-html/tool-renderer.js.map +1 -1
  12. package/dist/core/extensions/index.d.ts +1 -1
  13. package/dist/core/extensions/index.d.ts.map +1 -1
  14. package/dist/core/extensions/index.js.map +1 -1
  15. package/dist/core/extensions/types.d.ts +13 -1
  16. package/dist/core/extensions/types.d.ts.map +1 -1
  17. package/dist/core/extensions/types.js.map +1 -1
  18. package/dist/core/resource-loader.d.ts.map +1 -1
  19. package/dist/core/resource-loader.js +1 -1
  20. package/dist/core/resource-loader.js.map +1 -1
  21. package/dist/main.d.ts.map +1 -1
  22. package/dist/main.js +41 -11
  23. package/dist/main.js.map +1 -1
  24. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  25. package/dist/modes/interactive/components/extension-editor.js +1 -0
  26. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  27. package/dist/modes/interactive/components/tree-selector.d.ts +17 -0
  28. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  29. package/dist/modes/interactive/components/tree-selector.js +111 -6
  30. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  31. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  32. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  33. package/dist/modes/interactive/interactive-mode.js +45 -0
  34. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  35. package/docs/extensions.md +25 -2
  36. package/docs/keybindings.md +9 -1
  37. package/docs/terminal-setup.md +18 -1
  38. package/docs/tmux.md +30 -8
  39. package/docs/tree.md +9 -0
  40. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  41. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  42. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  43. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  44. package/examples/extensions/with-deps/package-lock.json +2 -2
  45. package/examples/extensions/with-deps/package.json +1 -1
  46. package/package.json +4 -4
@@ -360,6 +360,12 @@ export class InteractiveMode {
360
360
  this.showNewVersionNotification(newVersion);
361
361
  }
362
362
  });
363
+ // Check tmux keyboard setup asynchronously
364
+ this.checkTmuxKeyboardSetup().then((warning) => {
365
+ if (warning) {
366
+ this.showWarning(warning);
367
+ }
368
+ });
363
369
  // Show startup warnings
364
370
  const { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;
365
371
  if (migratedProviders && migratedProviders.length > 0) {
@@ -428,6 +434,44 @@ export class InteractiveMode {
428
434
  return undefined;
429
435
  }
430
436
  }
437
+ async checkTmuxKeyboardSetup() {
438
+ if (!process.env.TMUX)
439
+ return undefined;
440
+ const runTmuxShow = (option) => {
441
+ return new Promise((resolve) => {
442
+ const proc = spawn("tmux", ["show", "-gv", option], {
443
+ stdio: ["ignore", "pipe", "ignore"],
444
+ });
445
+ let stdout = "";
446
+ const timer = setTimeout(() => {
447
+ proc.kill();
448
+ resolve(undefined);
449
+ }, 2000);
450
+ proc.stdout?.on("data", (data) => {
451
+ stdout += data.toString();
452
+ });
453
+ proc.on("error", () => {
454
+ clearTimeout(timer);
455
+ resolve(undefined);
456
+ });
457
+ proc.on("close", (code) => {
458
+ clearTimeout(timer);
459
+ resolve(code === 0 ? stdout.trim() : undefined);
460
+ });
461
+ });
462
+ };
463
+ const [extendedKeys, extendedKeysFormat] = await Promise.all([
464
+ runTmuxShow("extended-keys"),
465
+ runTmuxShow("extended-keys-format"),
466
+ ]);
467
+ if (extendedKeys !== "on" && extendedKeys !== "always") {
468
+ return "tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.";
469
+ }
470
+ if (extendedKeysFormat === "xterm") {
471
+ return "tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.";
472
+ }
473
+ return undefined;
474
+ }
431
475
  /**
432
476
  * Get changelog entries to display on startup.
433
477
  * Only shows new entries since last seen version, skips for resumed sessions.
@@ -2302,6 +2346,7 @@ export class InteractiveMode {
2302
2346
  // Spawn editor synchronously with inherited stdio for interactive editing
2303
2347
  const result = spawnSync(editor, [...editorArgs, tmpFile], {
2304
2348
  stdio: "inherit",
2349
+ shell: process.platform === "win32",
2305
2350
  });
2306
2351
  // On successful exit (status 0), replace editor content
2307
2352
  if (result.status === 0) {