@earendil-works/pi-coding-agent 0.86.1 → 0.87.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 (114) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +36 -0
  3. package/dist/bundle/chunks/{chunk-CMRUVXTE.js → chunk-4DKZACXI.js} +38 -32
  4. package/dist/bundle/chunks/chunk-GV2E3GBU.js +2 -0
  5. package/dist/bundle/chunks/github-copilot.js +1 -1
  6. package/dist/bundle/chunks/{openai-completions-CYGM3XXP.js → openai-completions-XHML6MTL.js} +1 -1
  7. package/dist/bundle/chunks/{virtual-modules-MGTKWDID.js → virtual-modules-BNWPZYDH.js} +1 -1
  8. package/dist/bundle/cli-runtime.js +1 -1
  9. package/dist/bundle/index.js +1 -1
  10. package/dist/bundle/rpc-entry.js +1 -1
  11. package/dist/cli/file-processor.d.ts +1 -1
  12. package/dist/cli/file-processor.d.ts.map +1 -1
  13. package/dist/cli/file-processor.js.map +1 -1
  14. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  15. package/dist/core/agent-session-runtime.js +1 -1
  16. package/dist/core/agent-session-runtime.js.map +1 -1
  17. package/dist/core/agent-session.d.ts +27 -3
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +389 -119
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/cache-warmer.d.ts +1 -0
  22. package/dist/core/cache-warmer.d.ts.map +1 -1
  23. package/dist/core/cache-warmer.js +15 -1
  24. package/dist/core/cache-warmer.js.map +1 -1
  25. package/dist/core/compaction/compaction.d.ts +3 -1
  26. package/dist/core/compaction/compaction.d.ts.map +1 -1
  27. package/dist/core/compaction/compaction.js +146 -48
  28. package/dist/core/compaction/compaction.js.map +1 -1
  29. package/dist/core/crash-log.d.ts +5 -0
  30. package/dist/core/crash-log.d.ts.map +1 -1
  31. package/dist/core/crash-log.js +68 -0
  32. package/dist/core/crash-log.js.map +1 -1
  33. package/dist/core/export-html/template.js +6 -1
  34. package/dist/core/extensions/index.d.ts +1 -1
  35. package/dist/core/extensions/index.d.ts.map +1 -1
  36. package/dist/core/extensions/index.js.map +1 -1
  37. package/dist/core/extensions/runner.d.ts +16 -3
  38. package/dist/core/extensions/runner.d.ts.map +1 -1
  39. package/dist/core/extensions/runner.js +110 -5
  40. package/dist/core/extensions/runner.js.map +1 -1
  41. package/dist/core/extensions/types.d.ts +77 -6
  42. package/dist/core/extensions/types.d.ts.map +1 -1
  43. package/dist/core/extensions/types.js.map +1 -1
  44. package/dist/core/index.d.ts +1 -1
  45. package/dist/core/index.d.ts.map +1 -1
  46. package/dist/core/index.js.map +1 -1
  47. package/dist/core/model-config.d.ts +52 -0
  48. package/dist/core/model-config.d.ts.map +1 -1
  49. package/dist/core/model-config.js +16 -0
  50. package/dist/core/model-config.js.map +1 -1
  51. package/dist/core/prompt-templates.d.ts +6 -1
  52. package/dist/core/prompt-templates.d.ts.map +1 -1
  53. package/dist/core/prompt-templates.js +61 -35
  54. package/dist/core/prompt-templates.js.map +1 -1
  55. package/dist/core/provider-composer.d.ts +1 -0
  56. package/dist/core/provider-composer.d.ts.map +1 -1
  57. package/dist/core/provider-composer.js +19 -0
  58. package/dist/core/provider-composer.js.map +1 -1
  59. package/dist/core/resource-loader.d.ts.map +1 -1
  60. package/dist/core/resource-loader.js +6 -2
  61. package/dist/core/resource-loader.js.map +1 -1
  62. package/dist/core/sdk.d.ts.map +1 -1
  63. package/dist/core/sdk.js +3 -4
  64. package/dist/core/sdk.js.map +1 -1
  65. package/dist/core/session-manager.d.ts +36 -9
  66. package/dist/core/session-manager.d.ts.map +1 -1
  67. package/dist/core/session-manager.js +97 -7
  68. package/dist/core/session-manager.js.map +1 -1
  69. package/dist/core/tools/read.d.ts +4 -1
  70. package/dist/core/tools/read.d.ts.map +1 -1
  71. package/dist/core/tools/read.js +5 -1
  72. package/dist/core/tools/read.js.map +1 -1
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/main.d.ts.map +1 -1
  78. package/dist/main.js +4 -3
  79. package/dist/main.js.map +1 -1
  80. package/dist/modes/interactive/bug-report.d.ts.map +1 -1
  81. package/dist/modes/interactive/bug-report.js +4 -0
  82. package/dist/modes/interactive/bug-report.js.map +1 -1
  83. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  84. package/dist/modes/interactive/components/tree-selector.js +7 -0
  85. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  86. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  87. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  88. package/dist/modes/interactive/interactive-mode.js +64 -2
  89. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  90. package/dist/utils/mime.d.ts.map +1 -1
  91. package/dist/utils/mime.js +1 -1
  92. package/dist/utils/mime.js.map +1 -1
  93. package/dist/utils/tool-result-images.d.ts +3 -1
  94. package/dist/utils/tool-result-images.d.ts.map +1 -1
  95. package/dist/utils/tool-result-images.js +4 -1
  96. package/dist/utils/tool-result-images.js.map +1 -1
  97. package/docs/compaction.md +23 -4
  98. package/docs/extensions.md +70 -6
  99. package/docs/models.md +29 -1
  100. package/docs/sdk.md +13 -2
  101. package/docs/session-format.md +15 -2
  102. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  103. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  104. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  105. package/examples/extensions/gondolin/package-lock.json +2 -2
  106. package/examples/extensions/gondolin/package.json +1 -1
  107. package/examples/extensions/sandbox/package-lock.json +2 -2
  108. package/examples/extensions/sandbox/package.json +1 -1
  109. package/examples/extensions/with-deps/package-lock.json +2 -2
  110. package/examples/extensions/with-deps/package.json +1 -1
  111. package/examples/plugins/pi-example-plugin/src/session.ts +3 -2
  112. package/npm-shrinkwrap.json +20 -20
  113. package/package.json +8 -8
  114. package/dist/bundle/chunks/chunk-HTEQD2HM.js +0 -2
@@ -8,7 +8,7 @@
8
8
  * - Interact with the user via UI primitives
9
9
  */
10
10
  import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel, ToolExecutionMode } from "@earendil-works/pi-agent-core";
11
- import type { Api, AssistantMessageEvent, AssistantMessageEventStream, ConstrainedSamplingConfig, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, Provider, ProviderHeaders, RefreshModelsContext, SimpleStreamOptions, TextContent, ToolResultMessage, TranscriptContext, Usage } from "@earendil-works/pi-ai";
11
+ import type { Api, AssistantMessageEvent, AssistantMessageEventStream, ConstrainedSamplingConfig, ImageContent, Message, Model, OAuthCredentials, OAuthLoginCallbacks, Provider, ProviderHeaders, RefreshModelsContext, SimpleStreamOptions, TextContent, ToolResultMessage, TranscriptContext, Usage } from "@earendil-works/pi-ai";
12
12
  import type { AutocompleteItem, AutocompleteProvider, Component, EditorComponent, EditorTheme, KeyId, OverlayHandle, OverlayOptions, TUI } from "@earendil-works/pi-tui";
13
13
  import type { Static, TSchema } from "typebox";
14
14
  import type { Theme } from "../../modes/interactive/theme/theme.ts";
@@ -22,7 +22,7 @@ import type { KeybindingsManager } from "../keybindings.ts";
22
22
  import type { CustomMessage } from "../messages.ts";
23
23
  import type { ModelRegistry } from "../model-registry.ts";
24
24
  import type { ScopedModel } from "../model-resolver.ts";
25
- import type { BranchSummaryEntry, CompactionEntry, CustomEntry, ReadonlySessionManager, SessionEntry, SessionManager } from "../session-manager.ts";
25
+ import type { BranchSummaryEntry, CompactionEntry, ContextEditEntry, CustomEntry, ProjectedSessionEntry, ReadonlySessionManager, SessionEntry, SessionManager } from "../session-manager.ts";
26
26
  import type { SlashCommandInfo } from "../slash-commands.ts";
27
27
  import type { SourceInfo } from "../source-info.ts";
28
28
  import type { BuildSystemPromptOptions, NormalizedBuildSystemPromptOptions } from "../system-prompt.ts";
@@ -511,11 +511,26 @@ export interface SessionTreeEvent {
511
511
  fromExtension?: boolean;
512
512
  }
513
513
  export type SessionEvent = SessionStartEvent | SessionInfoChangedEvent | SessionBeforeSwitchEvent | SessionBeforeForkEvent | SessionBeforeCompactEvent | SessionCompactEvent | SessionCompactFailedEvent | SessionShutdownEvent | SessionBeforeTreeEvent | SessionTreeEvent;
514
- /** Fired before each LLM call. Can modify messages. */
514
+ /**
515
+ * Fired before each LLM call. Can modify messages.
516
+ *
517
+ * `messages` holds the conversation without system messages. The prompt and tool state
518
+ * belong to Pi: it restores them after the handler returns, so a handler cannot drop
519
+ * them and does not need to preserve them.
520
+ */
515
521
  export interface ContextEvent {
516
522
  type: "context";
517
523
  messages: AgentMessage[];
518
524
  }
525
+ /**
526
+ * Fired before each LLM call, after every `context` handler has run and Pi has restored
527
+ * the prompt and tool state. `messages` is the full transcript including system messages,
528
+ * and the result is sent as returned: the handler owns the prompt and tool declarations.
529
+ */
530
+ export interface ContextWithSystemEvent {
531
+ type: "context_with_system";
532
+ messages: AgentMessage[];
533
+ }
519
534
  /** Fired before a provider request is sent. Can replace the payload. */
520
535
  export interface BeforeProviderRequestEvent {
521
536
  type: "before_provider_request";
@@ -557,6 +572,54 @@ export interface AgentEndEvent {
557
572
  type: "agent_end";
558
573
  messages: AgentMessage[];
559
574
  }
575
+ export type AgentActivityOutcome = "completed" | "aborted" | "error";
576
+ export interface CustomEntryDraft {
577
+ type: "custom";
578
+ customType: string;
579
+ data?: unknown;
580
+ }
581
+ export interface CustomMessageEntryDraft {
582
+ type: "custom_message";
583
+ customType: string;
584
+ content: string | (TextContent | ImageContent)[];
585
+ display: boolean;
586
+ details?: unknown;
587
+ }
588
+ export interface ContextEditEntryDraft {
589
+ type: "context_edit";
590
+ targetId: string;
591
+ replacement: ContextEditEntry["replacement"];
592
+ }
593
+ export interface CompactionEntryDraft {
594
+ type: "compaction";
595
+ summary: string;
596
+ /** Null creates a self-retaining compaction that keeps no preceding entries. */
597
+ firstKeptEntryId: string | null;
598
+ details?: unknown;
599
+ usage?: Usage;
600
+ }
601
+ export type SessionBoundaryDraft = CustomEntryDraft | CustomMessageEntryDraft | ContextEditEntryDraft | CompactionEntryDraft;
602
+ export interface BoundaryContextPreview {
603
+ contextEntries: ProjectedSessionEntry[];
604
+ contextMessages: AgentMessage[];
605
+ llmMessages: Message[];
606
+ pendingMessages: AgentMessage[];
607
+ canContinue: boolean;
608
+ }
609
+ export interface BoundaryState {
610
+ entries: SessionBoundaryDraft[];
611
+ continue: boolean;
612
+ context: BoundaryContextPreview;
613
+ outcome: AgentActivityOutcome;
614
+ }
615
+ export interface BoundaryResult {
616
+ entries?: SessionBoundaryDraft[];
617
+ continue?: boolean;
618
+ }
619
+ /** Fired before final settlement. May append entries and ensure one next provider request. */
620
+ export interface AgentBeforeSettleEvent extends BoundaryState {
621
+ type: "agent_before_settle";
622
+ }
560
623
  /** Fired after an agent run has fully settled and no automatic retry, compaction, or queued continuation will run. */
561
624
  export interface AgentSettledEvent {
562
625
  type: "agent_settled";
@@ -583,11 +646,13 @@ export interface TurnStartEvent {
583
646
  timestamp: number;
584
647
  }
585
648
  /** Fired at the end of each turn */
586
- export interface TurnEndEvent {
649
+ export interface TurnEndEvent extends BoundaryState {
587
650
  type: "turn_end";
588
651
  turnIndex: number;
589
652
  message: AgentMessage;
590
653
  toolResults: ToolResultMessage[];
654
+ messageEntryId: string;
655
+ toolResultEntryIds: string[];
591
656
  }
592
657
  /** Fired when a message starts (user, assistant, or toolResult) */
593
658
  export interface MessageStartEvent {
@@ -811,10 +876,12 @@ export declare function isToolCallEventType<TName extends string, TInput extends
811
876
  input: TInput;
812
877
  };
813
878
  /** Union of all event types */
814
- export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | CacheWarmingDecisionEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
879
+ export type ExtensionEvent = ProjectTrustEvent | ResourcesDiscoverEvent | SessionEvent | ContextEvent | ContextWithSystemEvent | CacheWarmingDecisionEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | AgentBeforeSettleEvent | AgentSettledEvent | UIPromptStartEvent | UIPromptEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
815
880
  export interface ContextEventResult {
816
881
  messages?: AgentMessage[];
817
882
  }
883
+ export type TurnEndEventResult = BoundaryResult;
884
+ export type AgentBeforeSettleEventResult = BoundaryResult;
818
885
  export type BeforeProviderRequestEventResult = unknown;
819
886
  export type { CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult } from "../cache-warmer.ts";
820
887
  export interface ToolCallEventResult {
@@ -922,6 +989,7 @@ export interface ExtensionAPI {
922
989
  on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): () => void;
923
990
  on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): () => void;
924
991
  on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): () => void;
992
+ on(event: "context_with_system", handler: ExtensionHandler<ContextWithSystemEvent, ContextEventResult>): () => void;
925
993
  on(event: "cache_warming_decision", handler: ExtensionHandler<CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult>): () => void;
926
994
  on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): () => void;
927
995
  on(event: "before_provider_headers", handler: ExtensionHandler<BeforeProviderHeadersEvent>): () => void;
@@ -929,11 +997,12 @@ export interface ExtensionAPI {
929
997
  on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): () => void;
930
998
  on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): () => void;
931
999
  on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): () => void;
1000
+ on(event: "agent_before_settle", handler: ExtensionHandler<AgentBeforeSettleEvent, AgentBeforeSettleEventResult>): () => void;
932
1001
  on(event: "agent_settled", handler: ExtensionHandler<AgentSettledEvent>): () => void;
933
1002
  on(event: "ui_prompt_start", handler: ExtensionHandler<UIPromptStartEvent>): () => void;
934
1003
  on(event: "ui_prompt_end", handler: ExtensionHandler<UIPromptEndEvent>): () => void;
935
1004
  on(event: "turn_start", handler: ExtensionHandler<TurnStartEvent>): () => void;
936
- on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): () => void;
1005
+ on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent, TurnEndEventResult>): () => void;
937
1006
  on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): () => void;
938
1007
  on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): () => void;
939
1008
  on(event: "message_end", handler: ExtensionHandler<MessageEndEvent, MessageEndEventResult>): () => void;
@@ -1152,6 +1221,8 @@ export interface ProviderModelConfig {
1152
1221
  thinkingLevelMap?: Model<Api>["thinkingLevelMap"];
1153
1222
  /** Supported input types. */
1154
1223
  input: ("text" | "image")[];
1224
+ /** Provider input limits and cache-safe image preprocessing metadata. */
1225
+ inputLimits?: Model<Api>["inputLimits"];
1155
1226
  /** Per-million-token cost rates and optional request-wide input pricing tiers. */
1156
1227
  cost: Model<Api>["cost"];
1157
1228
  /** Best-effort prompt cache lifetime in seconds per retention tier. Unset disables cache warming. */