UNPKG

@phren/cli

Version:

Knowledge layer for AI agents - CLI, MCP server, and data layer

89 lines (88 loc) • 3.4 kB
import type { ComputerResources } from "../bridge/resources.js"; import type { AccountUsage, UsageWindow } from "../bridge/usage.js"; import type { Json } from "../bridge/protocol.js"; /** * The memory-free computers surface: every read goes to the local Hook's * socket (`GET /v1/resources?peers=1`, `GET /v1/usage?peers=1`), which answers * for itself and asks each linked computer over its pinned SSH pipe. Nothing * here opens, needs or reports a Phren store, findings or tasks, and nothing * writes: `phren computers`, `phren usage` and `phren computers mcp` share it. */ export interface ComputerReport { name: string; /** This computer, the one whose Hook answered. */ local: boolean; online: boolean; resources?: ComputerResources; error?: string; } /** Every harness the Hook reads usage for, in the order people look for them. */ export declare const USAGE_SOURCES: readonly ["claude", "codex", "copilot", "opencode", "opencode-go", "openrouter"]; export declare const HARNESS_NAMES: Record<string, string>; export interface HarnessUsage { source: string; harness: string; windows: Array<UsageWindow & { resetsIn?: string; }>; spend?: AccountUsage["spend"]; credits?: AccountUsage["credits"]; updatedAt?: string; /** What the harness said, or why it gave nothing. Never a guess. */ message?: string; } export interface UsageReport { computers: Array<{ name: string; local: boolean; harnesses?: HarnessUsage[]; error?: string; }>; /** Across computers: account limits from the freshest report, local spend summed. */ combined: HarnessUsage[]; } type Request = (route: string) => Promise<Json>; export declare function readComputers(options?: { peers?: boolean; request?: Request; localFallback?: () => Promise<ComputerResources>; }): Promise<{ computers: ComputerReport[]; hookError?: string; peerError?: string; }>; export declare function findComputer(computers: ComputerReport[], name: string | undefined): ComputerReport | undefined; export type PlatformChoice = "mac" | "linux" | "any"; /** * The least-loaded online computer: stressed ones last, then by overall * pressure, then load per core, then free disk. Each candidate carries why. */ export declare function pickComputer(computers: ComputerReport[], platform?: PlatformChoice, exclude?: string[]): { pick?: ComputerReport; reason: string; ranked: Array<{ name: string; score: number; level: string; why: string; }>; }; export declare function describe(r: ComputerResources): string; export declare function resetsIn(resetsAt: string | undefined, now?: number): string | undefined; /** "1,250 credits, in use" or "unlimited credits". */ export declare function creditsText(credits: NonNullable<AccountUsage["credits"]>): string; /** * Account limits are the same account seen from each computer, so the * freshest report with windows stands. OpenCode's cost ledger is per * computer, so its spend adds up; OpenRouter's is one key, reported once. */ export declare function combineUsage(perComputer: HarnessUsage[][]): HarnessUsage[]; export declare function readUsage(options?: { peers?: boolean; request?: Request; now?: number; }): Promise<UsageReport & { hookError?: string; peerError?: string; }>; export {};