@vaclav-synacek/pi-coding-agent-termux 0.50.7-1 → 0.51.1-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 (168) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +2 -0
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/session-picker.d.ts.map +1 -1
  6. package/dist/cli/session-picker.js +3 -1
  7. package/dist/cli/session-picker.js.map +1 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +9 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/core/agent-session.d.ts +5 -1
  12. package/dist/core/agent-session.d.ts.map +1 -1
  13. package/dist/core/agent-session.js +76 -15
  14. package/dist/core/agent-session.js.map +1 -1
  15. package/dist/core/extensions/index.d.ts +3 -3
  16. package/dist/core/extensions/index.d.ts.map +1 -1
  17. package/dist/core/extensions/index.js +1 -1
  18. package/dist/core/extensions/index.js.map +1 -1
  19. package/dist/core/extensions/runner.d.ts +19 -1
  20. package/dist/core/extensions/runner.d.ts.map +1 -1
  21. package/dist/core/extensions/runner.js +42 -0
  22. package/dist/core/extensions/runner.js.map +1 -1
  23. package/dist/core/extensions/types.d.ts +88 -6
  24. package/dist/core/extensions/types.d.ts.map +1 -1
  25. package/dist/core/extensions/types.js +4 -1
  26. package/dist/core/extensions/types.js.map +1 -1
  27. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  28. package/dist/core/extensions/wrapper.js +1 -1
  29. package/dist/core/extensions/wrapper.js.map +1 -1
  30. package/dist/core/keybindings.d.ts +1 -1
  31. package/dist/core/keybindings.d.ts.map +1 -1
  32. package/dist/core/keybindings.js +8 -0
  33. package/dist/core/keybindings.js.map +1 -1
  34. package/dist/core/model-registry.d.ts.map +1 -1
  35. package/dist/core/model-registry.js +27 -18
  36. package/dist/core/model-registry.js.map +1 -1
  37. package/dist/core/package-manager.d.ts.map +1 -1
  38. package/dist/core/package-manager.js +11 -9
  39. package/dist/core/package-manager.js.map +1 -1
  40. package/dist/core/resource-loader.d.ts +24 -0
  41. package/dist/core/resource-loader.d.ts.map +1 -1
  42. package/dist/core/resource-loader.js +88 -19
  43. package/dist/core/resource-loader.js.map +1 -1
  44. package/dist/core/sdk.d.ts.map +1 -1
  45. package/dist/core/sdk.js +1 -0
  46. package/dist/core/sdk.js.map +1 -1
  47. package/dist/core/session-manager.d.ts +2 -0
  48. package/dist/core/session-manager.d.ts.map +1 -1
  49. package/dist/core/session-manager.js +2 -0
  50. package/dist/core/session-manager.js.map +1 -1
  51. package/dist/core/settings-manager.d.ts +5 -0
  52. package/dist/core/settings-manager.d.ts.map +1 -1
  53. package/dist/core/settings-manager.js +16 -0
  54. package/dist/core/settings-manager.js.map +1 -1
  55. package/dist/core/skills.d.ts.map +1 -1
  56. package/dist/core/skills.js +1 -0
  57. package/dist/core/skills.js.map +1 -1
  58. package/dist/core/tools/bash.d.ts +11 -0
  59. package/dist/core/tools/bash.d.ts.map +1 -1
  60. package/dist/core/tools/bash.js +18 -3
  61. package/dist/core/tools/bash.js.map +1 -1
  62. package/dist/core/tools/edit.d.ts +2 -0
  63. package/dist/core/tools/edit.d.ts.map +1 -1
  64. package/dist/core/tools/edit.js.map +1 -1
  65. package/dist/core/tools/find.d.ts +2 -0
  66. package/dist/core/tools/find.d.ts.map +1 -1
  67. package/dist/core/tools/find.js.map +1 -1
  68. package/dist/core/tools/grep.d.ts +2 -0
  69. package/dist/core/tools/grep.d.ts.map +1 -1
  70. package/dist/core/tools/grep.js.map +1 -1
  71. package/dist/core/tools/index.d.ts +7 -7
  72. package/dist/core/tools/index.d.ts.map +1 -1
  73. package/dist/core/tools/index.js +5 -5
  74. package/dist/core/tools/index.js.map +1 -1
  75. package/dist/core/tools/ls.d.ts +2 -0
  76. package/dist/core/tools/ls.d.ts.map +1 -1
  77. package/dist/core/tools/ls.js.map +1 -1
  78. package/dist/core/tools/read.d.ts +2 -0
  79. package/dist/core/tools/read.d.ts.map +1 -1
  80. package/dist/core/tools/read.js.map +1 -1
  81. package/dist/core/tools/write.d.ts +2 -0
  82. package/dist/core/tools/write.d.ts.map +1 -1
  83. package/dist/core/tools/write.js.map +1 -1
  84. package/dist/index.d.ts +3 -3
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +1 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  89. package/dist/modes/interactive/components/custom-message.js +0 -7
  90. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  91. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  92. package/dist/modes/interactive/components/daxnuts.js +1 -1
  93. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  94. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  95. package/dist/modes/interactive/components/scoped-models-selector.js +4 -1
  96. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  97. package/dist/modes/interactive/components/session-selector-search.d.ts +4 -2
  98. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/session-selector-search.js +13 -4
  100. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  101. package/dist/modes/interactive/components/session-selector.d.ts +12 -2
  102. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/session-selector.js +188 -57
  104. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  105. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  106. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  107. package/dist/modes/interactive/components/settings-selector.js +12 -0
  108. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  109. package/dist/modes/interactive/components/tree-selector.d.ts +6 -0
  110. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  111. package/dist/modes/interactive/components/tree-selector.js +43 -16
  112. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  113. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  114. package/dist/modes/interactive/interactive-mode.js +24 -15
  115. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  116. package/dist/modes/print-mode.d.ts.map +1 -1
  117. package/dist/modes/print-mode.js +4 -0
  118. package/dist/modes/print-mode.js.map +1 -1
  119. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  120. package/dist/modes/rpc/rpc-mode.js +4 -0
  121. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  122. package/dist/utils/clipboard-image.d.ts.map +1 -1
  123. package/dist/utils/clipboard-image.js +52 -10
  124. package/dist/utils/clipboard-image.js.map +1 -1
  125. package/dist/utils/clipboard-native.d.ts +7 -0
  126. package/dist/utils/clipboard-native.d.ts.map +1 -0
  127. package/dist/utils/clipboard-native.js +14 -0
  128. package/dist/utils/clipboard-native.js.map +1 -0
  129. package/dist/utils/tools-manager.d.ts.map +1 -1
  130. package/dist/utils/tools-manager.js +14 -0
  131. package/dist/utils/tools-manager.js.map +1 -1
  132. package/docs/custom-provider.md +2 -1
  133. package/docs/extensions.md +57 -9
  134. package/docs/keybindings.md +9 -0
  135. package/docs/models.md +43 -14
  136. package/docs/rpc.md +188 -1
  137. package/docs/settings.md +5 -1
  138. package/docs/termux.md +127 -0
  139. package/examples/extensions/README.md +9 -0
  140. package/examples/extensions/antigravity-image-gen.ts +1 -1
  141. package/examples/extensions/bash-spawn-hook.ts +30 -0
  142. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  143. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  144. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  145. package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  146. package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  147. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  148. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  149. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  150. package/examples/extensions/dynamic-resources/index.ts +15 -0
  151. package/examples/extensions/hello.ts +1 -1
  152. package/examples/extensions/question.ts +1 -1
  153. package/examples/extensions/questionnaire.ts +1 -1
  154. package/examples/extensions/rpc-demo.ts +124 -0
  155. package/examples/extensions/sandbox/index.ts +1 -1
  156. package/examples/extensions/shutdown-command.ts +2 -2
  157. package/examples/extensions/ssh.ts +4 -4
  158. package/examples/extensions/subagent/index.ts +1 -1
  159. package/examples/extensions/titlebar-spinner.ts +58 -0
  160. package/examples/extensions/todo.ts +1 -1
  161. package/examples/extensions/tool-override.ts +1 -1
  162. package/examples/extensions/truncated-tool.ts +1 -1
  163. package/examples/extensions/with-deps/package-lock.json +2 -2
  164. package/examples/extensions/with-deps/package.json +1 -1
  165. package/examples/rpc-extension-ui.ts +632 -0
  166. package/examples/sdk/06-extensions.ts +1 -1
  167. package/examples/sdk/12-full-control.ts +1 -0
  168. package/package.json +6 -5
@@ -138,6 +138,7 @@ export class InteractiveMode {
138
138
  this.session = session;
139
139
  this.version = VERSION;
140
140
  this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
141
+ this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
141
142
  this.headerContainer = new Container();
142
143
  this.chatContainer = new Container();
143
144
  this.pendingMessagesContainer = new Container();
@@ -660,6 +661,7 @@ export class InteractiveMode {
660
661
  const sectionHeader = (name, color = "mdHeading") => theme.fg(color, `[${name}]`);
661
662
  const contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles;
662
663
  if (contextFiles.length > 0) {
664
+ this.chatContainer.addChild(new Spacer(1));
663
665
  const contextList = contextFiles.map((f) => theme.fg("dim", ` ${this.formatDisplayPath(f.path)}`)).join("\n");
664
666
  this.chatContainer.addChild(new Text(`${sectionHeader("Context")}\n${contextList}`, 0, 0));
665
667
  this.chatContainer.addChild(new Spacer(1));
@@ -804,12 +806,16 @@ export class InteractiveMode {
804
806
  }
805
807
  this.chatContainer.clear();
806
808
  this.renderInitialMessages();
807
- if (result.editorText) {
809
+ if (result.editorText && !this.editor.getText().trim()) {
808
810
  this.editor.setText(result.editorText);
809
811
  }
810
812
  this.showStatus("Navigated to selected point");
811
813
  return { cancelled: false };
812
814
  },
815
+ switchSession: async (sessionPath) => {
816
+ await this.handleResumeSession(sessionPath);
817
+ return { cancelled: false };
818
+ },
813
819
  },
814
820
  shutdownHandler: () => {
815
821
  this.shutdownRequested = true;
@@ -818,6 +824,8 @@ export class InteractiveMode {
818
824
  this.showExtensionError(error.extensionPath, error.error, error.stack);
819
825
  },
820
826
  });
827
+ setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
828
+ this.rebuildAutocomplete();
821
829
  const extensionRunner = this.session.extensionRunner;
822
830
  if (!extensionRunner) {
823
831
  this.showLoadedResources({ extensionPaths: [], force: false });
@@ -1428,6 +1436,9 @@ export class InteractiveMode {
1428
1436
  this.defaultEditor.onAction("externalEditor", () => this.openExternalEditor());
1429
1437
  this.defaultEditor.onAction("followUp", () => this.handleFollowUp());
1430
1438
  this.defaultEditor.onAction("dequeue", () => this.handleDequeue());
1439
+ this.defaultEditor.onAction("newSession", () => this.handleClearCommand());
1440
+ this.defaultEditor.onAction("tree", () => this.showTreeSelector());
1441
+ this.defaultEditor.onAction("fork", () => this.showUserMessageSelector());
1431
1442
  this.defaultEditor.onChange = (text) => {
1432
1443
  const wasBashMode = this.isBashMode;
1433
1444
  this.isBashMode = text.trimStart().startsWith("!");
@@ -2499,6 +2510,7 @@ export class InteractiveMode {
2499
2510
  editorPaddingX: this.settingsManager.getEditorPaddingX(),
2500
2511
  autocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),
2501
2512
  quietStartup: this.settingsManager.getQuietStartup(),
2513
+ clearOnShrink: this.settingsManager.getClearOnShrink(),
2502
2514
  }, {
2503
2515
  onAutoCompactChange: (enabled) => {
2504
2516
  this.session.setAutoCompactionEnabled(enabled);
@@ -2586,6 +2598,10 @@ export class InteractiveMode {
2586
2598
  this.editor.setAutocompleteMaxVisible(maxVisible);
2587
2599
  }
2588
2600
  },
2601
+ onClearOnShrinkChange: (enabled) => {
2602
+ this.settingsManager.setClearOnShrink(enabled);
2603
+ this.ui.setClearOnShrink(enabled);
2604
+ },
2589
2605
  onCancel: () => {
2590
2606
  done();
2591
2607
  this.ui.requestRender();
@@ -2729,6 +2745,8 @@ export class InteractiveMode {
2729
2745
  // All enabled or none enabled = no filter
2730
2746
  this.session.setScopedModels([]);
2731
2747
  }
2748
+ await this.updateAvailableProviderCount();
2749
+ this.ui.requestRender();
2732
2750
  };
2733
2751
  this.showSelector((done) => {
2734
2752
  const selector = new ScopedModelsSelectorComponent({
@@ -2817,24 +2835,14 @@ export class InteractiveMode {
2817
2835
  showTreeSelector(initialSelectedId) {
2818
2836
  const tree = this.sessionManager.getTree();
2819
2837
  const realLeafId = this.sessionManager.getLeafId();
2820
- // Find the visible leaf for display (skip metadata entries like labels)
2821
- let visibleLeafId = realLeafId;
2822
- while (visibleLeafId) {
2823
- const entry = this.sessionManager.getEntry(visibleLeafId);
2824
- if (!entry)
2825
- break;
2826
- if (entry.type !== "label" && entry.type !== "custom")
2827
- break;
2828
- visibleLeafId = entry.parentId ?? null;
2829
- }
2830
2838
  if (tree.length === 0) {
2831
2839
  this.showStatus("No entries in session");
2832
2840
  return;
2833
2841
  }
2834
2842
  this.showSelector((done) => {
2835
- const selector = new TreeSelectorComponent(tree, visibleLeafId, this.ui.terminal.rows, async (entryId) => {
2836
- // Selecting the visible leaf is a no-op (already there)
2837
- if (entryId === visibleLeafId) {
2843
+ const selector = new TreeSelectorComponent(tree, realLeafId, this.ui.terminal.rows, async (entryId) => {
2844
+ // Selecting the current leaf is a no-op (already there)
2845
+ if (entryId === realLeafId) {
2838
2846
  done();
2839
2847
  this.showStatus("Already at this point");
2840
2848
  return;
@@ -2896,7 +2904,7 @@ export class InteractiveMode {
2896
2904
  // Update UI
2897
2905
  this.chatContainer.clear();
2898
2906
  this.renderInitialMessages();
2899
- if (result.editorText) {
2907
+ if (result.editorText && !this.editor.getText().trim()) {
2900
2908
  this.editor.setText(result.editorText);
2901
2909
  }
2902
2910
  this.showStatus("Navigated to selected point");
@@ -2940,6 +2948,7 @@ export class InteractiveMode {
2940
2948
  mgr.appendSessionInfo(next);
2941
2949
  },
2942
2950
  showRenameHint: true,
2951
+ keybindings: this.keybindings,
2943
2952
  }, this.sessionManager.getSessionFile());
2944
2953
  return { component: selector, focus: selector };
2945
2954
  });