UNPKG

@adonis-agora/agent

Version:

Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.

139 lines • 5.79 kB
import type { LucidClientLike, LucidRawRunner } from '../stores/lucid.js'; /** * What one owner (a person/account of this app) holds at one Company: the Company's issuer and * domain, the scope granted, and the sealed client state (User ID, DPoP key, Account Token, Session * Tokens). `status`: `pending` while signing in, `active` with an Account Token, `revoked` after a * disconnect (either side). */ export interface PoppyConnectionRecord { owner: string; issuer: string; domain: string; organization: string; scope: string; status: 'pending' | 'active' | 'revoked'; /** Sealed `CompanyState` of the poppy-client (see `Sealer`). */ state: string; createdAt: number; updatedAt: number; } /** A sign-in started by the `connect` tool, completed on this app's connect page. */ export interface PoppyPendingConnect { /** Unguessable (128 bits): the connect page's URL is a bearer link. */ id: string; owner: string; domain: string; issuer: string; organization: string; scope: string; /** The actor the turn ran as, to decide the parked call on completion. */ actor: { id: string; roles?: string[]; tenantRef?: string; } | null; threadId: string | null; runId: string | null; toolCallId: string | null; /** Sealed per-method state (PKCE verifier, mediated sign-in id). Never the credentials. */ flow: string | null; status: 'open' | 'connected' | 'failed'; expiresAt: number; createdAt: number; } export interface PoppyConnectionStore { listConnections(owner: string): Promise<PoppyConnectionRecord[]>; getConnection(owner: string, issuer: string): Promise<PoppyConnectionRecord | null>; saveConnection(record: PoppyConnectionRecord): Promise<void>; deleteConnection(owner: string, issuer: string): Promise<void>; createPending(record: PoppyPendingConnect): Promise<void>; getPending(id: string): Promise<PoppyPendingConnect | null>; updatePending(id: string, patch: Partial<Pick<PoppyPendingConnect, 'flow' | 'status'>>): Promise<void>; } export declare class InMemoryPoppyConnectionStore implements PoppyConnectionStore { #private; listConnections(owner: string): Promise<{ owner: string; issuer: string; domain: string; organization: string; scope: string; status: 'pending' | 'active' | 'revoked'; /** Sealed `CompanyState` of the poppy-client (see `Sealer`). */ state: string; createdAt: number; updatedAt: number; }[]>; getConnection(owner: string, issuer: string): Promise<{ owner: string; issuer: string; domain: string; organization: string; scope: string; status: 'pending' | 'active' | 'revoked'; /** Sealed `CompanyState` of the poppy-client (see `Sealer`). */ state: string; createdAt: number; updatedAt: number; } | null>; saveConnection(record: PoppyConnectionRecord): Promise<void>; deleteConnection(owner: string, issuer: string): Promise<void>; createPending(record: PoppyPendingConnect): Promise<void>; getPending(id: string): Promise<PoppyPendingConnect | null>; updatePending(id: string, patch: Partial<Pick<PoppyPendingConnect, 'flow' | 'status'>>): Promise<void>; } export declare const POPPY_CONNECTION_TABLES: { readonly connections: 'agent_poppy_connection'; readonly pending: 'agent_poppy_connect'; }; export declare function poppyConnectionTableStatements(): string[]; export declare function ensurePoppyConnectionTables(db: LucidRawRunner): Promise<void>; /** {@link PoppyConnectionStore} over Lucid (SQLite / Postgres / MySQL); tables created on first use. */ export declare class LucidPoppyConnectionStore implements PoppyConnectionStore { #private; private readonly db; constructor(db: LucidClientLike & LucidRawRunner, options?: { autoCreateTables?: boolean; }); ready(): Promise<void>; listConnections(owner: string): Promise<PoppyConnectionRecord[]>; getConnection(owner: string, issuer: string): Promise<PoppyConnectionRecord | null>; saveConnection(record: PoppyConnectionRecord): Promise<void>; deleteConnection(owner: string, issuer: string): Promise<void>; createPending(record: PoppyPendingConnect): Promise<void>; getPending(id: string): Promise<{ id: string; owner: string; domain: string; issuer: string; organization: string; scope: string; actor: { id: string; roles?: string[]; tenantRef?: string; } | null; threadId: string | null; runId: string | null; toolCallId: string | null; flow: string | null; status: PoppyPendingConnect['status']; expiresAt: number; createdAt: number; } | null>; updatePending(id: string, patch: Partial<Pick<PoppyPendingConnect, 'flow' | 'status'>>): Promise<void>; } /** The slice of a Redis client {@link redisPoppyConnectionStore} uses (ioredis has it). */ export interface PoppyConnectionRedisClient { get(key: string): Promise<string | null>; set(key: string, value: string, ...args: (string | number)[]): Promise<unknown>; del(...keys: string[]): Promise<unknown>; sadd(key: string, ...members: string[]): Promise<unknown>; srem(key: string, ...members: string[]): Promise<unknown>; smembers(key: string): Promise<string[]>; } /** {@link PoppyConnectionStore} over Redis: JSON values, an index set per owner. */ export declare function redisPoppyConnectionStore(redis: PoppyConnectionRedisClient, options?: { prefix?: string; }): PoppyConnectionStore; //# sourceMappingURL=store.d.ts.map