@codex-infinity/pi-infinity 0.63.3 → 0.64.2

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 (112) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +7 -3
  3. package/dist/core/agent-session-runtime.d.ts +134 -0
  4. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  5. package/dist/core/agent-session-runtime.js +262 -0
  6. package/dist/core/agent-session-runtime.js.map +1 -0
  7. package/dist/core/agent-session.d.ts +10 -42
  8. package/dist/core/agent-session.d.ts.map +1 -1
  9. package/dist/core/agent-session.js +56 -236
  10. package/dist/core/agent-session.js.map +1 -1
  11. package/dist/core/export-html/tool-renderer.d.ts +2 -0
  12. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  13. package/dist/core/export-html/tool-renderer.js +2 -2
  14. package/dist/core/export-html/tool-renderer.js.map +1 -1
  15. package/dist/core/extensions/index.d.ts +1 -1
  16. package/dist/core/extensions/index.d.ts.map +1 -1
  17. package/dist/core/extensions/index.js.map +1 -1
  18. package/dist/core/extensions/runner.d.ts.map +1 -1
  19. package/dist/core/extensions/runner.js +1 -0
  20. package/dist/core/extensions/runner.js.map +1 -1
  21. package/dist/core/extensions/types.d.ts +11 -16
  22. package/dist/core/extensions/types.d.ts.map +1 -1
  23. package/dist/core/extensions/types.js.map +1 -1
  24. package/dist/core/footer-data-provider.d.ts +5 -1
  25. package/dist/core/footer-data-provider.d.ts.map +1 -1
  26. package/dist/core/footer-data-provider.js +69 -8
  27. package/dist/core/footer-data-provider.js.map +1 -1
  28. package/dist/core/index.d.ts +2 -1
  29. package/dist/core/index.d.ts.map +1 -1
  30. package/dist/core/index.js +1 -0
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/core/keybindings.d.ts +10 -0
  33. package/dist/core/keybindings.d.ts.map +1 -1
  34. package/dist/core/keybindings.js +10 -0
  35. package/dist/core/keybindings.js.map +1 -1
  36. package/dist/core/model-registry.d.ts +3 -1
  37. package/dist/core/model-registry.d.ts.map +1 -1
  38. package/dist/core/model-registry.js +7 -1
  39. package/dist/core/model-registry.js.map +1 -1
  40. package/dist/core/sdk.d.ts +5 -2
  41. package/dist/core/sdk.d.ts.map +1 -1
  42. package/dist/core/sdk.js +5 -2
  43. package/dist/core/sdk.js.map +1 -1
  44. package/dist/core/session-manager.d.ts +3 -0
  45. package/dist/core/session-manager.d.ts.map +1 -1
  46. package/dist/core/session-manager.js +13 -6
  47. package/dist/core/session-manager.js.map +1 -1
  48. package/dist/core/tools/edit.d.ts.map +1 -1
  49. package/dist/core/tools/edit.js +15 -4
  50. package/dist/core/tools/edit.js.map +1 -1
  51. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  52. package/dist/core/tools/tool-definition-wrapper.js +2 -0
  53. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  54. package/dist/index.d.ts +2 -2
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +2 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/main.d.ts.map +1 -1
  59. package/dist/main.js +42 -10
  60. package/dist/main.js.map +1 -1
  61. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  62. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  63. package/dist/modes/interactive/components/assistant-message.js +13 -3
  64. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  65. package/dist/modes/interactive/components/footer.d.ts +1 -0
  66. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  67. package/dist/modes/interactive/components/footer.js +4 -1
  68. package/dist/modes/interactive/components/footer.js.map +1 -1
  69. package/dist/modes/interactive/components/tree-selector.d.ts +4 -2
  70. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  71. package/dist/modes/interactive/components/tree-selector.js +48 -15
  72. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  73. package/dist/modes/interactive/interactive-mode.d.ts +11 -4
  74. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  75. package/dist/modes/interactive/interactive-mode.js +112 -89
  76. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  77. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  78. package/dist/modes/interactive/theme/theme.js +6 -11
  79. package/dist/modes/interactive/theme/theme.js.map +1 -1
  80. package/dist/modes/print-mode.d.ts +2 -2
  81. package/dist/modes/print-mode.d.ts.map +1 -1
  82. package/dist/modes/print-mode.js +37 -36
  83. package/dist/modes/print-mode.js.map +1 -1
  84. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  85. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  86. package/dist/modes/rpc/rpc-mode.js +72 -49
  87. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  88. package/docs/extensions.md +104 -19
  89. package/docs/json.md +5 -2
  90. package/docs/keybindings.md +2 -0
  91. package/docs/rpc.md +21 -7
  92. package/docs/sdk.md +168 -75
  93. package/docs/tree.md +6 -3
  94. package/examples/extensions/README.md +1 -0
  95. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  96. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  97. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  98. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  99. package/examples/extensions/hidden-thinking-label.ts +53 -0
  100. package/examples/extensions/rpc-demo.ts +3 -9
  101. package/examples/extensions/status-line.ts +0 -8
  102. package/examples/extensions/todo.ts +0 -2
  103. package/examples/extensions/tools.ts +0 -5
  104. package/examples/extensions/widget-placement.ts +4 -12
  105. package/examples/extensions/with-deps/package-lock.json +2 -2
  106. package/examples/extensions/with-deps/package.json +1 -1
  107. package/examples/sdk/02-custom-model.ts +1 -1
  108. package/examples/sdk/09-api-keys-and-oauth.ts +3 -3
  109. package/examples/sdk/12-full-control.ts +1 -1
  110. package/examples/sdk/13-session-runtime.ts +49 -0
  111. package/examples/sdk/README.md +5 -4
  112. package/package.json +4 -4
@@ -16,14 +16,14 @@ import type { Agent, AgentEvent, AgentMessage, AgentState, AgentTool, ThinkingLe
16
16
  import type { ImageContent, Model, TextContent } from "@mariozechner/pi-ai";
17
17
  import { type BashResult } from "./bash-executor.js";
18
18
  import { type CompactionResult } from "./compaction/index.js";
19
- import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
19
+ import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type SessionStartEvent, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
20
20
  import type { CustomMessage } from "./messages.js";
21
21
  import type { ModelRegistry } from "./model-registry.js";
22
22
  import { type PromptTemplate } from "./prompt-templates.js";
23
23
  import type { ResourceLoader } from "./resource-loader.js";
24
24
  import type { BranchSummaryEntry, SessionManager } from "./session-manager.js";
25
25
  import type { SettingsManager } from "./settings-manager.js";
26
- import type { BashOperations } from "./tools/bash.js";
26
+ import { type BashOperations } from "./tools/bash.js";
27
27
  /** Parsed skill block from a user message */
28
28
  export interface ParsedSkillBlock {
29
29
  name: string;
@@ -38,6 +38,10 @@ export interface ParsedSkillBlock {
38
38
  export declare function parseSkillBlock(text: string): ParsedSkillBlock | null;
39
39
  /** Session-specific events that extend the core AgentEvent */
40
40
  export type AgentSessionEvent = AgentEvent | {
41
+ type: "queue_update";
42
+ steering: readonly string[];
43
+ followUp: readonly string[];
44
+ } | {
41
45
  type: "compaction_start";
42
46
  reason: "manual" | "threshold" | "overflow";
43
47
  } | {
@@ -94,6 +98,8 @@ export interface AgentSessionConfig {
94
98
  autoNextSteps?: boolean;
95
99
  /** Automatically ideate and work on new ideas after completing tasks */
96
100
  autoNextIdea?: boolean;
101
+ /** Session start event metadata emitted when extensions bind to this runtime. */
102
+ sessionStartEvent?: SessionStartEvent;
97
103
  }
98
104
  export interface ExtensionBindings {
99
105
  uiContext?: ExtensionUIContext;
@@ -173,6 +179,7 @@ export declare class AgentSession {
173
179
  private _extensionRunnerRef?;
174
180
  private _initialActiveToolNames?;
175
181
  private _baseToolsOverride?;
182
+ private _sessionStartEvent;
176
183
  private _extensionUIContext?;
177
184
  private _extensionCommandContextActions?;
178
185
  private _extensionShutdownHandler?;
@@ -199,6 +206,7 @@ export declare class AgentSession {
199
206
  private _installAgentToolHooks;
200
207
  /** Emit an event to all listeners */
201
208
  private _emit;
209
+ private _emitQueueUpdate;
202
210
  private _lastAssistantMessage;
203
211
  /** Internal handler for agent events - shared by subscribe and reconnect */
204
212
  private _handleAgentEvent;
@@ -378,18 +386,6 @@ export declare class AgentSession {
378
386
  * Abort current operation and wait for agent to become idle.
379
387
  */
380
388
  abort(): Promise<void>;
381
- /**
382
- * Start a new session, optionally with initial messages and parent tracking.
383
- * Clears all messages and starts a new session.
384
- * Listeners are preserved and will continue receiving events.
385
- * @param options.parentSession - Optional parent session path for tracking
386
- * @param options.setup - Optional callback to initialize session (e.g., append messages)
387
- * @returns true if completed, false if cancelled by extension
388
- */
389
- newSession(options?: {
390
- parentSession?: string;
391
- setup?: (sessionManager: SessionManager) => Promise<void>;
392
- }): Promise<boolean>;
393
389
  private _emitModelSelect;
394
390
  /**
395
391
  * Set model directly.
@@ -404,7 +400,6 @@ export declare class AgentSession {
404
400
  * @returns The new model info, or undefined if only one model available
405
401
  */
406
402
  cycleModel(direction?: "forward" | "backward"): Promise<ModelCycleResult | undefined>;
407
- private _getScopedModelsWithAuth;
408
403
  private _cycleScopedModel;
409
404
  private _cycleAvailableModel;
410
405
  /**
@@ -530,30 +525,10 @@ export declare class AgentSession {
530
525
  * Called after agent turn completes to maintain proper message ordering.
531
526
  */
532
527
  private _flushPendingBashMessages;
533
- /**
534
- * Switch to a different session file.
535
- * Aborts current operation, loads messages, restores model/thinking.
536
- * Listeners are preserved and will continue receiving events.
537
- * @returns true if switch completed, false if cancelled by extension
538
- */
539
- switchSession(sessionPath: string): Promise<boolean>;
540
528
  /**
541
529
  * Set a display name for the current session.
542
530
  */
543
531
  setSessionName(name: string): void;
544
- /**
545
- * Create a fork from a specific entry.
546
- * Emits before_fork/fork session events to extensions.
547
- *
548
- * @param entryId ID of the entry to fork from
549
- * @returns Object with:
550
- * - selectedText: The text of the selected user message (for editor pre-fill)
551
- * - cancelled: True if an extension cancelled the fork
552
- */
553
- fork(entryId: string): Promise<{
554
- selectedText: string;
555
- cancelled: boolean;
556
- }>;
557
532
  /**
558
533
  * Navigate to a different node in the session tree.
559
534
  * Unlike fork() which creates a new session file, this stays in the same file.
@@ -602,13 +577,6 @@ export declare class AgentSession {
602
577
  * @returns The resolved output file path.
603
578
  */
604
579
  exportToJsonl(outputPath?: string): string;
605
- /**
606
- * Import a JSONL session file.
607
- * Copies the file into the session directory and switches to it (like /resume).
608
- * @param inputPath Path to the JSONL file to import.
609
- * @returns true if the session was switched successfully.
610
- */
611
- importFromJsonl(inputPath: string): Promise<boolean>;
612
580
  /**
613
581
  * Get text content of last assistant message.
614
582
  * Useful for /copy command.