type RejectContent = { content: { type: "text"; text: string; }[]; isError: true; }; export type ToolAccount = { accountId: string; } | { reject: RejectContent; }; /** * Build the per-tool account resolver. `accountId` / `houseScope` are the boot * constants; `isValid` is injected (from `enumerateValidAccountIds(accountsDir)` * in production, a stub in tests). Returns a closure the tool handlers call with * their optional `targetAccountId`. * * Contract: * - null boot `accountId` → refuse (no-account guard, unchanged behaviour). * - no `targetAccountId` → own account, no `[xacct]` line (byte-identical). * - `targetAccountId` set → resolve via the shared 1440 resolver, emit one * `[xacct]` line, and on reject return the MCP error content. * `houseScope=false decision=allow` cannot occur: a non-house session with a * target is denied by the resolver before any allow path. */ export declare function makeResolveToolAccount(deps: { accountId: string | null; houseScope: string | null; isValid: (id: string) => boolean; log?: (line: string) => void; }): (toolName: string, targetAccountId?: string | null) => ToolAccount; export {}; //# sourceMappingURL=index-testable.d.ts.map