@codex-infinity/pi-infinity 0.64.2 → 0.65.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 (90) hide show
  1. package/CHANGELOG.md +57 -34
  2. package/README.md +5 -3
  3. package/dist/cli/args.d.ts +7 -4
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +37 -15
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/core/agent-session-runtime.d.ts +51 -102
  8. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  9. package/dist/core/agent-session-runtime.js +103 -138
  10. package/dist/core/agent-session-runtime.js.map +1 -1
  11. package/dist/core/agent-session-services.d.ts +86 -0
  12. package/dist/core/agent-session-services.d.ts.map +1 -0
  13. package/dist/core/agent-session-services.js +116 -0
  14. package/dist/core/agent-session-services.js.map +1 -0
  15. package/dist/core/agent-session.d.ts.map +1 -1
  16. package/dist/core/agent-session.js +1 -1
  17. package/dist/core/agent-session.js.map +1 -1
  18. package/dist/core/extensions/index.d.ts +2 -2
  19. package/dist/core/extensions/index.d.ts.map +1 -1
  20. package/dist/core/extensions/index.js +1 -1
  21. package/dist/core/extensions/index.js.map +1 -1
  22. package/dist/core/extensions/types.d.ts +10 -13
  23. package/dist/core/extensions/types.d.ts.map +1 -1
  24. package/dist/core/extensions/types.js +10 -0
  25. package/dist/core/extensions/types.js.map +1 -1
  26. package/dist/core/index.d.ts +3 -2
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js +3 -2
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/keybindings.d.ts +4 -1
  31. package/dist/core/keybindings.d.ts.map +1 -1
  32. package/dist/core/keybindings.js +3 -14
  33. package/dist/core/keybindings.js.map +1 -1
  34. package/dist/core/package-manager.d.ts +20 -0
  35. package/dist/core/package-manager.d.ts.map +1 -1
  36. package/dist/core/package-manager.js +32 -0
  37. package/dist/core/package-manager.js.map +1 -1
  38. package/dist/core/resource-loader.d.ts.map +1 -1
  39. package/dist/core/resource-loader.js +21 -0
  40. package/dist/core/resource-loader.js.map +1 -1
  41. package/dist/core/sdk.d.ts +1 -1
  42. package/dist/core/sdk.d.ts.map +1 -1
  43. package/dist/core/sdk.js +1 -1
  44. package/dist/core/sdk.js.map +1 -1
  45. package/dist/core/settings-manager.d.ts +1 -1
  46. package/dist/core/settings-manager.d.ts.map +1 -1
  47. package/dist/core/settings-manager.js +2 -1
  48. package/dist/core/settings-manager.js.map +1 -1
  49. package/dist/index.d.ts +2 -2
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +3 -3
  52. package/dist/index.js.map +1 -1
  53. package/dist/main.d.ts.map +1 -1
  54. package/dist/main.js +202 -456
  55. package/dist/main.js.map +1 -1
  56. package/dist/migrations.d.ts.map +1 -1
  57. package/dist/migrations.js +20 -0
  58. package/dist/migrations.js.map +1 -1
  59. package/dist/modes/interactive/interactive-mode.d.ts +3 -2
  60. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  61. package/dist/modes/interactive/interactive-mode.js +56 -29
  62. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  63. package/dist/modes/print-mode.d.ts +2 -2
  64. package/dist/modes/print-mode.d.ts.map +1 -1
  65. package/dist/modes/print-mode.js +4 -0
  66. package/dist/modes/print-mode.js.map +1 -1
  67. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  68. package/dist/modes/rpc/rpc-client.js +1 -0
  69. package/dist/modes/rpc/rpc-client.js.map +1 -1
  70. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  71. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  72. package/dist/modes/rpc/rpc-mode.js +23 -15
  73. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  74. package/dist/package-manager-cli.d.ts +4 -0
  75. package/dist/package-manager-cli.d.ts.map +1 -0
  76. package/dist/package-manager-cli.js +234 -0
  77. package/dist/package-manager-cli.js.map +1 -0
  78. package/docs/extensions.md +34 -26
  79. package/docs/sdk.md +109 -46
  80. package/docs/settings.md +1 -1
  81. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  82. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  83. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  84. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  85. package/examples/extensions/hello.ts +18 -17
  86. package/examples/extensions/with-deps/package-lock.json +2 -2
  87. package/examples/extensions/with-deps/package.json +1 -1
  88. package/examples/sdk/13-session-runtime.ts +30 -12
  89. package/examples/sdk/README.md +2 -0
  90. package/package.json +4 -4
@@ -48,7 +48,7 @@ import { ToolExecutionComponent } from "./components/tool-execution.js";
48
48
  import { TreeSelectorComponent } from "./components/tree-selector.js";
49
49
  import { UserMessageComponent } from "./components/user-message.js";
50
50
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
51
- import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, initTheme, onThemeChange, setRegisteredThemes, setTheme, setThemeInstance, Theme, theme, } from "./theme/theme.js";
51
+ import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, initTheme, onThemeChange, setRegisteredThemes, setTheme, setThemeInstance, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
52
52
  function isExpandable(obj) {
53
53
  return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
54
54
  }
@@ -880,23 +880,33 @@ export class InteractiveMode {
880
880
  this.loadingAnimation = undefined;
881
881
  }
882
882
  this.statusContainer.clear();
883
- const result = await this.runtimeHost.newSession(options);
884
- if (!result.cancelled) {
885
- await this.handleRuntimeSessionChange();
886
- this.renderCurrentSessionState();
887
- this.ui.requestRender();
883
+ try {
884
+ const result = await this.runtimeHost.newSession(options);
885
+ if (!result.cancelled) {
886
+ await this.handleRuntimeSessionChange();
887
+ this.renderCurrentSessionState();
888
+ this.ui.requestRender();
889
+ }
890
+ return result;
891
+ }
892
+ catch (error) {
893
+ return this.handleFatalRuntimeError("Failed to create session", error);
888
894
  }
889
- return result;
890
895
  },
891
896
  fork: async (entryId) => {
892
- const result = await this.runtimeHost.fork(entryId);
893
- if (!result.cancelled) {
894
- await this.handleRuntimeSessionChange();
895
- this.renderCurrentSessionState();
896
- this.editor.setText(result.selectedText ?? "");
897
- this.showStatus("Forked to new session");
897
+ try {
898
+ const result = await this.runtimeHost.fork(entryId);
899
+ if (!result.cancelled) {
900
+ await this.handleRuntimeSessionChange();
901
+ this.renderCurrentSessionState();
902
+ this.editor.setText(result.selectedText ?? "");
903
+ this.showStatus("Forked to new session");
904
+ }
905
+ return { cancelled: result.cancelled };
906
+ }
907
+ catch (error) {
908
+ return this.handleFatalRuntimeError("Failed to fork session", error);
898
909
  }
899
- return { cancelled: result.cancelled };
900
910
  },
901
911
  navigateTree: async (targetId, options) => {
902
912
  const result = await this.session.navigateTree(targetId, {
@@ -971,6 +981,13 @@ export class InteractiveMode {
971
981
  this.updateEditorBorderColor();
972
982
  this.updateTerminalTitle();
973
983
  }
984
+ async handleFatalRuntimeError(prefix, error) {
985
+ const message = error instanceof Error ? error.message : String(error);
986
+ this.showError(`${prefix}: ${message}`);
987
+ stopThemeWatcher();
988
+ this.stop();
989
+ process.exit(1);
990
+ }
974
991
  renderCurrentSessionState() {
975
992
  this.chatContainer.clear();
976
993
  this.pendingMessagesContainer.clear();
@@ -3170,13 +3187,18 @@ export class InteractiveMode {
3170
3187
  this.loadingAnimation = undefined;
3171
3188
  }
3172
3189
  this.statusContainer.clear();
3173
- const result = await this.runtimeHost.switchSession(sessionPath);
3174
- if (result.cancelled) {
3175
- return;
3190
+ try {
3191
+ const result = await this.runtimeHost.switchSession(sessionPath);
3192
+ if (result.cancelled) {
3193
+ return;
3194
+ }
3195
+ await this.handleRuntimeSessionChange();
3196
+ this.renderCurrentSessionState();
3197
+ this.showStatus("Resumed session");
3198
+ }
3199
+ catch (error) {
3200
+ await this.handleFatalRuntimeError("Failed to resume session", error);
3176
3201
  }
3177
- await this.handleRuntimeSessionChange();
3178
- this.renderCurrentSessionState();
3179
- this.showStatus("Resumed session");
3180
3202
  }
3181
3203
  async showOAuthSelector(mode) {
3182
3204
  if (mode === "logout") {
@@ -3409,7 +3431,7 @@ export class InteractiveMode {
3409
3431
  this.showStatus(`Session imported from: ${inputPath}`);
3410
3432
  }
3411
3433
  catch (error) {
3412
- this.showError(`Failed to import session: ${error instanceof Error ? error.message : "Unknown error"}`);
3434
+ await this.handleFatalRuntimeError("Failed to import session", error);
3413
3435
  }
3414
3436
  }
3415
3437
  async handleShareCommand() {
@@ -3724,15 +3746,20 @@ export class InteractiveMode {
3724
3746
  this.loadingAnimation = undefined;
3725
3747
  }
3726
3748
  this.statusContainer.clear();
3727
- const result = await this.runtimeHost.newSession();
3728
- if (result.cancelled) {
3729
- return;
3749
+ try {
3750
+ const result = await this.runtimeHost.newSession();
3751
+ if (result.cancelled) {
3752
+ return;
3753
+ }
3754
+ await this.handleRuntimeSessionChange();
3755
+ this.renderCurrentSessionState();
3756
+ this.chatContainer.addChild(new Spacer(1));
3757
+ this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ New session started")}`, 1, 1));
3758
+ this.ui.requestRender();
3759
+ }
3760
+ catch (error) {
3761
+ await this.handleFatalRuntimeError("Failed to create session", error);
3730
3762
  }
3731
- await this.handleRuntimeSessionChange();
3732
- this.renderCurrentSessionState();
3733
- this.chatContainer.addChild(new Spacer(1));
3734
- this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ New session started")}`, 1, 1));
3735
- this.ui.requestRender();
3736
3763
  }
3737
3764
  handleDebugCommand() {
3738
3765
  const width = this.ui.terminal.columns;