import type { AgentToolResult, ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent"; import type { ContextAgentBinding, ContextAgentIdentity } from "./context-management/agent-identity.js"; import type { NoteSnapshotData } from "./context-management/local-notes.js"; import type { SerializedNotesResponse } from "./context-management/external-notes-protocol.js"; export type { NoteSnapshotData } from "./context-management/local-notes.js"; export type { ContextAgentBinding, ContextAgentIdentity } from "./context-management/agent-identity.js"; export type { CodexAgentRelationship } from "./context-management/agent-relationship.js"; export type { ContextFamilyBindingOptions } from "./context-management/binding-startup.js"; export interface SharedContextRequest { sessionId: string; agentName: string; namespace: "history" | "notes"; params: Record; /** Direct Remote sensitive fields remain encrypted in peer transit. */ encryptedArguments?: boolean; } export type SharedContextResult = AgentToolResult<{ codexHistoryNotes: Record; externalNotesResponses?: SerializedNotesResponse[]; }>; export type ContextRouter = ((ctx: ExtensionContext, request: SharedContextRequest, signal?: AbortSignal) => Promise) & { requiresRemoteScope?(ctx: ExtensionContext): boolean; }; /** Remote checkpoints retain an authenticated address, never decrypted note contents. */ export interface RemoteNoteReference { protocol: 1; storage: "remote"; timestamp: number; identity: ContextAgentIdentity; baseUrl: string; } export type AttachmentNotesData = NoteSnapshotData | RemoteNoteReference; export interface ContextSharingService { protocol: 1; canCreateChild(ctx: ExtensionContext): boolean; /** Establish immutable linkage in an idle native thread, independently of history and notes sharing. */ bindRelationship?(ctx: ExtensionContext, relationship: unknown): import("./context-management/agent-relationship.js").CodexAgentRelationship; /** Effective cache routing identity, independent of notes sharing and native execution state. */ cacheAffinityId?(ctx: ExtensionContext): string; describe(ctx: ExtensionContext): ContextAgentIdentity | undefined; verify(ctx: ExtensionContext): Promise; createChild(ctx: ExtensionContext, options: { name: string; routing?: unknown; }): Promise<{ binding: ContextAgentBinding; adopt(): Promise; }>; bind(ctx: ExtensionContext, binding: unknown, options?: import("./context-management/binding-startup.js").ContextFamilyBindingOptions): Promise; /** Inspect an idle standalone owner for alias attachment without rebinding its identity. */ inspectAttachment?(ctx: ExtensionContext, standalone?: boolean): Promise | ContextAgentIdentity; /** Keep native IDs while pinning storage and Remote account/backend for live aliases. */ retainAttachmentIdentity?(ctx: ExtensionContext): ContextAgentIdentity; exportAttachmentNotes?(ctx: ExtensionContext): Promise | AttachmentNotesData; validateAttachmentNotes?(snapshot: unknown, identity: ContextAgentIdentity): void; verifyAttachmentAccess?(ctx: ExtensionContext, snapshot: unknown): Promise; executeRemoteAttachment?(ctx: ExtensionContext, reference: unknown, request: SharedContextRequest, signal?: AbortSignal): Promise; /** Parse only the verified owner's persisted active note branch. */ parseAttachmentNotes?(entries: unknown, identity: ContextAgentIdentity): NoteSnapshotData; readAttachmentNotes?(snapshot: unknown, params: Record): SharedContextResult; execute(ctx: ExtensionContext, request: SharedContextRequest, signal?: AbortSignal): Promise; registerRouter(router: ContextRouter): () => void; } export declare const CONTEXT_SHARING_AVAILABLE = "pi-codex:context-sharing:available"; export declare const CONTEXT_SHARING_REQUEST = "pi-codex:context-sharing:request"; /** Optional, load-order-independent integration. No provider or tool schema changes. */ export declare function connectCodexContextSharing(pi: ExtensionAPI): { readonly service: ContextSharingService | undefined; dispose(): void; };