@earendil-works/pi-coding-agent 0.81.1 → 0.82.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 (100) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +13 -0
  3. package/dist/cli/config-selector.d.ts.map +1 -1
  4. package/dist/cli/config-selector.js +1 -1
  5. package/dist/cli/config-selector.js.map +1 -1
  6. package/dist/cli/startup-ui.d.ts.map +1 -1
  7. package/dist/cli/startup-ui.js +1 -1
  8. package/dist/cli/startup-ui.js.map +1 -1
  9. package/dist/core/agent-session.d.ts +11 -0
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +5 -1
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/compaction/compaction.d.ts.map +1 -1
  14. package/dist/core/compaction/compaction.js +11 -3
  15. package/dist/core/compaction/compaction.js.map +1 -1
  16. package/dist/core/extensions/runner.d.ts.map +1 -1
  17. package/dist/core/extensions/runner.js +4 -0
  18. package/dist/core/extensions/runner.js.map +1 -1
  19. package/dist/core/extensions/types.d.ts +5 -1
  20. package/dist/core/extensions/types.d.ts.map +1 -1
  21. package/dist/core/extensions/types.js.map +1 -1
  22. package/dist/core/model-config.d.ts +30 -0
  23. package/dist/core/model-config.d.ts.map +1 -1
  24. package/dist/core/model-config.js +6 -0
  25. package/dist/core/model-config.js.map +1 -1
  26. package/dist/core/model-registry.d.ts.map +1 -1
  27. package/dist/core/model-registry.js +2 -2
  28. package/dist/core/model-registry.js.map +1 -1
  29. package/dist/core/model-resolver.d.ts.map +1 -1
  30. package/dist/core/model-resolver.js +7 -0
  31. package/dist/core/model-resolver.js.map +1 -1
  32. package/dist/core/model-runtime.d.ts +0 -1
  33. package/dist/core/model-runtime.d.ts.map +1 -1
  34. package/dist/core/model-runtime.js +3 -5
  35. package/dist/core/model-runtime.js.map +1 -1
  36. package/dist/core/remote-catalog-provider.d.ts +1 -1
  37. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  38. package/dist/core/remote-catalog-provider.js +5 -10
  39. package/dist/core/remote-catalog-provider.js.map +1 -1
  40. package/dist/core/settings-manager.d.ts +1 -1
  41. package/dist/core/settings-manager.d.ts.map +1 -1
  42. package/dist/core/settings-manager.js.map +1 -1
  43. package/dist/core/system-prompt.d.ts.map +1 -1
  44. package/dist/core/system-prompt.js +1 -1
  45. package/dist/core/system-prompt.js.map +1 -1
  46. package/dist/core/tools/bash.d.ts +2 -0
  47. package/dist/core/tools/bash.d.ts.map +1 -1
  48. package/dist/core/tools/bash.js +34 -5
  49. package/dist/core/tools/bash.js.map +1 -1
  50. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  51. package/dist/core/tools/tool-definition-wrapper.js +3 -1
  52. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  53. package/dist/extensions/llama/provider.d.ts.map +1 -1
  54. package/dist/extensions/llama/provider.js +1 -2
  55. package/dist/extensions/llama/provider.js.map +1 -1
  56. package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
  57. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  58. package/dist/modes/interactive/components/extension-editor.js +16 -46
  59. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  60. package/dist/modes/interactive/external-editor.d.ts +12 -0
  61. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  62. package/dist/modes/interactive/external-editor.js +37 -0
  63. package/dist/modes/interactive/external-editor.js.map +1 -0
  64. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  65. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  66. package/dist/modes/interactive/interactive-mode.js +24 -42
  67. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  68. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  69. package/dist/modes/rpc/rpc-mode.js +1 -0
  70. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  71. package/dist/utils/clipboard.d.ts.map +1 -1
  72. package/dist/utils/clipboard.js +19 -8
  73. package/dist/utils/clipboard.js.map +1 -1
  74. package/dist/utils/version-check.d.ts.map +1 -1
  75. package/dist/utils/version-check.js +3 -1
  76. package/dist/utils/version-check.js.map +1 -1
  77. package/docs/compaction.md +1 -1
  78. package/docs/custom-provider.md +5 -2
  79. package/docs/environment-variables.md +88 -0
  80. package/docs/extensions.md +11 -3
  81. package/docs/index.md +1 -0
  82. package/docs/models.md +6 -2
  83. package/docs/providers.md +8 -1
  84. package/docs/rpc.md +23 -6
  85. package/docs/settings.md +1 -1
  86. package/docs/usage.md +0 -13
  87. package/examples/extensions/custom-compaction.ts +3 -0
  88. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  89. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  90. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  91. package/examples/extensions/gondolin/package-lock.json +2 -2
  92. package/examples/extensions/gondolin/package.json +1 -1
  93. package/examples/extensions/handoff.ts +9 -1
  94. package/examples/extensions/sandbox/package-lock.json +2 -2
  95. package/examples/extensions/sandbox/package.json +1 -1
  96. package/examples/extensions/summarize.ts +3 -0
  97. package/examples/extensions/with-deps/package-lock.json +2 -2
  98. package/examples/extensions/with-deps/package.json +1 -1
  99. package/npm-shrinkwrap.json +16 -15
  100. package/package.json +5 -4
@@ -0,0 +1,37 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ export async function editInExternalEditor(options) {
6
+ const directory = mkdtempSync(join(tmpdir(), "pi-editor-"));
7
+ const filePath = join(directory, "prompt.md");
8
+ try {
9
+ writeFileSync(filePath, options.content, "utf-8");
10
+ const [editor, ...editorArgs] = options.command.split(" ");
11
+ process.stdout.write(`Launching external editor: ${options.command}\nPi will resume when the editor exits.\n`);
12
+ // Do not use spawnSync here. On Windows, synchronous child_process calls can keep
13
+ // Node/libuv's console input read active after the parent pauses stdin, racing
14
+ // vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
15
+ const exitCode = await new Promise((resolve) => {
16
+ const child = spawn(editor, [...editorArgs, filePath], {
17
+ stdio: "inherit",
18
+ shell: process.platform === "win32",
19
+ });
20
+ child.on("error", () => resolve(null));
21
+ child.on("close", (code) => resolve(code));
22
+ });
23
+ if (exitCode !== 0) {
24
+ return { status: "failed" };
25
+ }
26
+ return { status: "complete", content: readFileSync(filePath, "utf-8").replace(/\n$/, "") };
27
+ }
28
+ finally {
29
+ try {
30
+ rmSync(directory, { recursive: true, force: true });
31
+ }
32
+ catch {
33
+ // Cleanup is best effort.
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=external-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA8B,EAAiC;IACzG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC;QACJ,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,OAAO,2CAA2C,CAAC,CAAC;QAE/G,kFAAkF;QAClF,+EAA+E;QAC/E,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACtD,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACnC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,CAC3C,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACR,0BAA0B;QAC3B,CAAC;IACF,CAAC;AAAA,CACD","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ExternalEditorOptions {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nexport async function editInExternalEditor(options: ExternalEditorOptions): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), \"pi-editor-\"));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, options.content, \"utf-8\");\n\t\tconst [editor, ...editorArgs] = options.command.split(\" \");\n\t\tprocess.stdout.write(`Launching external editor: ${options.command}\\nPi will resume when the editor exits.\\n`);\n\n\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t// Node/libuv's console input read active after the parent pauses stdin, racing\n\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst child = spawn(editor, [...editorArgs, filePath], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) {\n\t\t\treturn { status: \"failed\" };\n\t\t}\n\n\t\treturn { status: \"complete\", content: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\") };\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
@@ -304,7 +304,7 @@ export declare class InteractiveMode {
304
304
  private toggleToolOutputExpansion;
305
305
  private setToolsExpanded;
306
306
  private toggleThinkingBlockVisibility;
307
- private openExternalEditor;
307
+ private handleOpenExternalEditor;
308
308
  clearEditor(): void;
309
309
  showError(errorMessage: string): void;
310
310
  showWarning(warningMessage: string): void;