@oh-my-pi/pi-coding-agent 14.5.9 → 14.5.11

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 (37) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/package.json +7 -15
  3. package/scripts/build-binary.ts +1 -1
  4. package/src/cli/update-cli.ts +25 -1
  5. package/src/config/model-registry.ts +21 -19
  6. package/src/config/settings-schema.ts +11 -16
  7. package/src/discovery/claude-plugins.ts +28 -3
  8. package/src/edit/modes/atom.ts +50 -19
  9. package/src/edit/modes/hashline.ts +171 -110
  10. package/src/export/html/template.generated.ts +1 -1
  11. package/src/export/html/template.js +14 -2
  12. package/src/extensibility/extensions/runner.ts +34 -1
  13. package/src/extensibility/extensions/types.ts +8 -0
  14. package/src/internal-urls/docs-index.generated.ts +54 -54
  15. package/src/lsp/client.ts +27 -35
  16. package/src/memories/index.ts +5 -0
  17. package/src/modes/components/settings-defs.ts +1 -1
  18. package/src/modes/controllers/selector-controller.ts +2 -2
  19. package/src/modes/controllers/todo-command-controller.ts +22 -74
  20. package/src/modes/interactive-mode.ts +36 -9
  21. package/src/modes/theme/theme.ts +10 -1
  22. package/src/modes/types.ts +1 -3
  23. package/src/modes/utils/ui-helpers.ts +19 -6
  24. package/src/prompts/system/auto-continue.md +1 -0
  25. package/src/prompts/system/eager-todo.md +1 -1
  26. package/src/prompts/tools/github.md +3 -3
  27. package/src/prompts/tools/todo-write.md +19 -19
  28. package/src/sdk.ts +13 -2
  29. package/src/session/agent-session.ts +196 -96
  30. package/src/session/session-manager.ts +19 -2
  31. package/src/tools/bash.ts +9 -4
  32. package/src/tools/gh.ts +267 -119
  33. package/src/tools/todo-write.ts +157 -195
  34. package/src/utils/git.ts +61 -2
  35. package/src/web/search/providers/searxng.ts +71 -13
  36. package/examples/custom-tools/todo/index.ts +0 -211
  37. package/examples/extensions/todo.ts +0 -295
@@ -2,13 +2,14 @@
2
2
  * Extension runner - executes extensions and manages their lifecycle.
3
3
  */
4
4
  import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
5
- import type { ImageContent, Model } from "@oh-my-pi/pi-ai";
5
+ import type { ImageContent, Model, ProviderResponseMetadata } from "@oh-my-pi/pi-ai";
6
6
  import type { KeyId } from "@oh-my-pi/pi-tui";
7
7
  import { logger } from "@oh-my-pi/pi-utils";
8
8
  import type { ModelRegistry } from "../../config/model-registry";
9
9
  import { type Theme, theme } from "../../modes/theme/theme";
10
10
  import type { SessionManager } from "../../session/session-manager";
11
11
  import type {
12
+ AfterProviderResponseEvent,
12
13
  BeforeAgentStartEvent,
13
14
  BeforeAgentStartEventResult,
14
15
  BeforeProviderRequestEvent,
@@ -70,6 +71,7 @@ type RunnerEmitEvent = Exclude<
70
71
  | UserBashEvent
71
72
  | ContextEvent
72
73
  | BeforeProviderRequestEvent
74
+ | AfterProviderResponseEvent
73
75
  | BeforeAgentStartEvent
74
76
  | ResourcesDiscoverEvent
75
77
  | InputEvent
@@ -759,6 +761,37 @@ export class ExtensionRunner {
759
761
  return currentPayload;
760
762
  }
761
763
 
764
+ async emitAfterProviderResponse(response: ProviderResponseMetadata, _model?: Model): Promise<void> {
765
+ const ctx = this.createContext();
766
+
767
+ for (const ext of this.extensions) {
768
+ const handlers = ext.handlers.get("after_provider_response");
769
+ if (!handlers || handlers.length === 0) continue;
770
+
771
+ for (const handler of handlers) {
772
+ try {
773
+ const event: AfterProviderResponseEvent = {
774
+ type: "after_provider_response",
775
+ status: response.status,
776
+ headers: response.headers,
777
+ requestId: response.requestId,
778
+ metadata: response.metadata,
779
+ };
780
+ await handler(event, ctx);
781
+ } catch (err) {
782
+ const message = err instanceof Error ? err.message : String(err);
783
+ const stack = err instanceof Error ? err.stack : undefined;
784
+ this.emitError({
785
+ extensionPath: ext.path,
786
+ event: "after_provider_response",
787
+ error: message,
788
+ stack,
789
+ });
790
+ }
791
+ }
792
+ }
793
+ }
794
+
762
795
  async emitBeforeAgentStart(
763
796
  prompt: string,
764
797
  images: ImageContent[] | undefined,
@@ -17,6 +17,7 @@ import type {
17
17
  Model,
18
18
  OAuthCredentials,
19
19
  OAuthLoginCallbacks,
20
+ ProviderResponseMetadata,
20
21
  SimpleStreamOptions,
21
22
  TextContent,
22
23
  ToolResultMessage,
@@ -482,6 +483,11 @@ export interface BeforeProviderRequestEvent {
482
483
  payload: unknown;
483
484
  }
484
485
 
486
+ /** Fired after a provider response is received, before its stream body is consumed. */
487
+ export interface AfterProviderResponseEvent extends ProviderResponseMetadata {
488
+ type: "after_provider_response";
489
+ }
490
+
485
491
  /** Fired after user submits prompt but before agent loop. */
486
492
  export interface BeforeAgentStartEvent {
487
493
  type: "before_agent_start";
@@ -801,6 +807,7 @@ export type ExtensionEvent =
801
807
  | SessionEvent
802
808
  | ContextEvent
803
809
  | BeforeProviderRequestEvent
810
+ | AfterProviderResponseEvent
804
811
  | BeforeAgentStartEvent
805
812
  | AgentStartEvent
806
813
  | AgentEndEvent
@@ -981,6 +988,7 @@ export interface ExtensionAPI {
981
988
  event: "before_provider_request",
982
989
  handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>,
983
990
  ): void;
991
+ on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
984
992
  on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
985
993
  on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
986
994
  on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;