@friendlyrobot/discord-pi-agent 0.14.1 → 0.16.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @friendlyrobot/discord-pi-agent
2
2
 
3
- Reusable Discord gateway bridge for persistent pi agent sessions — DM and forum channels.
3
+ Reusable Discord gateway for persistent pi agent sessions — DM and forum channels.
4
4
 
5
5
  ## What it does
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { type AgentSession } from "@earendil-works/pi-coding-agent";
2
2
  import type { Model } from "@earendil-works/pi-ai";
3
- import type { AgentStatus, ResolvedDiscordPiBridgeConfig, ThinkingLevel } from "./types";
3
+ import type { AgentStatus, ResolvedDiscordGatewayConfig, ThinkingLevel } from "./types";
4
4
  export declare class AgentService {
5
5
  private readonly config;
6
6
  private readonly authStorage;
@@ -8,7 +8,7 @@ export declare class AgentService {
8
8
  private readonly settingsManager;
9
9
  private readonly resourceLoader;
10
10
  private session;
11
- constructor(config: ResolvedDiscordPiBridgeConfig);
11
+ constructor(config: ResolvedDiscordGatewayConfig);
12
12
  initialize(): Promise<void>;
13
13
  getSession(): AgentSession | null;
14
14
  getAgentDir(): string;
@@ -12,4 +12,4 @@ export type CommandContext = {
12
12
  promptQueue: PromptQueue;
13
13
  session?: AgentSession;
14
14
  };
15
- export declare function handleCommand(input: string, ctx: CommandContext): Promise<CommandResult>;
15
+ export declare function executeCommand(input: string, context: CommandContext): Promise<CommandResult>;
@@ -0,0 +1 @@
1
+ export {};
package/dist/config.d.ts CHANGED
@@ -1,10 +1,3 @@
1
- import type { DiscordGatewayConfig, DiscordPiBridgeConfig, ResolvedDiscordGatewayConfig, ResolvedDiscordPiBridgeConfig } from "./types";
2
- export declare function resolveConfig(config: DiscordPiBridgeConfig): ResolvedDiscordPiBridgeConfig;
3
- export declare function loadDiscordPiBridgeConfigFromEnv(overrides?: Partial<DiscordPiBridgeConfig>): ResolvedDiscordPiBridgeConfig;
4
- /**
5
- * Load gateway config from env vars + overrides.
6
- * Preserves gateway-specific fields (forum channels, etc.) that
7
- * loadDiscordPiBridgeConfigFromEnv would drop.
8
- */
1
+ import type { DiscordGatewayConfig, ResolvedDiscordGatewayConfig } from "./types";
2
+ export declare function resolveConfig(config: DiscordGatewayConfig): ResolvedDiscordGatewayConfig;
9
3
  export declare function loadDiscordGatewayConfigFromEnv(overrides?: Partial<DiscordGatewayConfig>): ResolvedDiscordGatewayConfig;
10
- export declare function resolveGatewayConfig(config: DiscordGatewayConfig): ResolvedDiscordGatewayConfig;
@@ -0,0 +1,19 @@
1
+ import type { Message } from "discord.js";
2
+ export type TextAttachmentContent = {
3
+ filename: string;
4
+ content: string;
5
+ };
6
+ export type MediaAttachmentContent = {
7
+ filename: string;
8
+ data: string;
9
+ mimeType: string;
10
+ };
11
+ export declare function isSupportedTextAttachment(attachment: {
12
+ name: string | null;
13
+ }): boolean;
14
+ export declare function isSupportedMediaAttachment(attachment: {
15
+ name: string | null;
16
+ contentType: string | null;
17
+ }): boolean;
18
+ export declare function readTextAttachments(message: Message): Promise<TextAttachmentContent[]>;
19
+ export declare function readMediaAttachments(message: Message): Promise<MediaAttachmentContent[]>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { type Message } from "discord.js";
2
+ import type { GatewayAuthConfig } from "./discord-gateway-client";
3
+ export declare function getAuthorDisplayName(message: Message): string;
4
+ /**
5
+ * Determine the session scope from an incoming message.
6
+ * Returns null for unsupported channel types (silently ignored).
7
+ */
8
+ export declare function resolveMessageScope(message: Message): string | null;
9
+ export declare function isAuthorizedMessage(message: Message, scope: string, authConfig: GatewayAuthConfig): boolean;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,11 +1,11 @@
1
1
  import { Client } from "discord.js";
2
2
  import type { AgentService } from "./agent-service";
3
3
  import type { SessionRegistry } from "./session-registry";
4
- import type { ResolvedDiscordPiBridgeConfig } from "./types";
4
+ import type { ResolvedDiscordGatewayConfig } from "./types";
5
5
  export type GatewayAuthConfig = {
6
6
  discordAllowedUserId: string;
7
7
  discordAllowedForumChannelIds: string[];
8
8
  discordAllowedUserIds: string[];
9
9
  startupMessage: string | false;
10
10
  };
11
- export declare function startGatewayClient(config: ResolvedDiscordPiBridgeConfig, agentService: AgentService, sessionRegistry: SessionRegistry, authConfig: GatewayAuthConfig): Promise<Client>;
11
+ export declare function startGatewayClient(config: ResolvedDiscordGatewayConfig, agentService: AgentService, sessionRegistry: SessionRegistry, authConfig: GatewayAuthConfig): Promise<Client>;
@@ -0,0 +1,17 @@
1
+ import type { ImageContent, Model } from "@earendil-works/pi-ai";
2
+ import type { AgentService } from "./agent-service";
3
+ import type { MediaAttachmentContent } from "./discord-attachments";
4
+ import type { ResolvedDiscordGatewayConfig } from "./types";
5
+ export type ResolvedPromptMedia = {
6
+ content: string;
7
+ images: ImageContent[];
8
+ };
9
+ /**
10
+ * Parse a "provider/modelId" string, handling model IDs that contain slashes.
11
+ */
12
+ export declare function parseProviderModelId(value: string): {
13
+ provider: string;
14
+ modelId: string;
15
+ } | null;
16
+ export declare function getMediaAttachmentLabel(filename: string, mimeType: string): string;
17
+ export declare function resolveMediaAttachmentsForPrompt(mediaAttachments: MediaAttachmentContent[], content: string, currentModel: Model<any> | undefined, config: ResolvedDiscordGatewayConfig, agentService: AgentService): Promise<ResolvedPromptMedia>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { Message } from "discord.js";
2
+ import type { AgentService } from "./agent-service";
3
+ import type { SessionRegistry } from "./session-registry";
4
+ import type { ResolvedDiscordGatewayConfig } from "./types";
5
+ import type { GatewayAuthConfig } from "./discord-gateway-client";
6
+ export declare function handleDiscordMessage(message: Message, config: ResolvedDiscordGatewayConfig, agentService: AgentService, sessionRegistry: SessionRegistry, authConfig: GatewayAuthConfig): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import type { Message } from "discord.js";
2
+ export declare function addWorkingReaction(message: Message): Promise<void>;
3
+ export declare function removeWorkingReaction(message: Message): Promise<void>;
4
+ export declare function sendReply(message: Message, text: string): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import type { SendableChannels } from "discord.js";
2
+ export declare function sendTypingSafe(channel: SendableChannels, channelKey: string): Promise<void>;
3
+ export declare function startTypingForChannel(channel: SendableChannels, channelKey: string): void;
4
+ export declare function stopTypingForChannel(channelKey: string): void;
@@ -8,4 +8,4 @@ import type { AgentService } from "./agent-service";
8
8
  * Creates a temporary in-memory session, sends the media, extracts the
9
9
  * assistant's text reply, then disposes the session.
10
10
  */
11
- export declare function describeImage(agentService: AgentService, imageData: string, mimeType: string, userText: string, visionModel: Model<any>): Promise<string>;
11
+ export declare function describeMediaAttachment(agentService: AgentService, imageData: string, mimeType: string, userText: string, visionModel: Model<any>): Promise<string>;
package/dist/index.d.ts CHANGED
@@ -1,13 +1,9 @@
1
- import type { DiscordGateway, DiscordGatewayConfig, DiscordPiBridge, DiscordPiBridgeConfig } from "./types";
1
+ import type { DiscordGateway, DiscordGatewayConfig } from "./types";
2
2
  export { buildDiscordMessageContextPrompt, formatDiscordPromptTime, type DiscordMessageContextPromptOptions, type DiscordPromptScope, type DiscordPromptTimeFormatOptions, } from "./prompt-context";
3
- export { loadDiscordPiBridgeConfigFromEnv, loadDiscordGatewayConfigFromEnv, resolveConfig, } from "./config";
4
- export type { AgentStatus, DiscordGateway, DiscordGatewayConfig, DiscordPiBridge, DiscordPiBridgeConfig, PromptTransform, ResolvedDiscordPiBridgeConfig, } from "./types";
3
+ export { loadDiscordGatewayConfigFromEnv, resolveConfig } from "./config";
4
+ export type { AgentStatus, DiscordGateway, DiscordGatewayConfig, PromptTransform, ResolvedDiscordGatewayConfig, } from "./types";
5
5
  /**
6
6
  * Start the unified Discord gateway. Supports DM and forum thread sessions
7
7
  * out of the box. Set discordAllowedForumChannelIds to enable forum support.
8
8
  */
9
9
  export declare function startDiscordGateway(config: DiscordGatewayConfig): Promise<DiscordGateway>;
10
- /**
11
- * Legacy DM-only entry point. Now a thin wrapper over startDiscordGateway.
12
- */
13
- export declare function startDiscordPiBridge(config: DiscordPiBridgeConfig): Promise<DiscordPiBridge>;