UNPKG

@deep-assistant/agent

Version:

A minimal, public domain AI CLI agent compatible with OpenCode's JSON interface. Bun-only runtime.

73 lines (57 loc) 1.94 kB
import z from "zod" import { randomBytes } from "crypto" export namespace Identifier { const prefixes = { session: "ses", message: "msg", permission: "per", user: "usr", part: "prt", } as const export function schema(prefix: keyof typeof prefixes) { return z.string().startsWith(prefixes[prefix]) } const LENGTH = 26 // State for monotonic ID generation let lastTimestamp = 0 let counter = 0 export function ascending(prefix: keyof typeof prefixes, given?: string) { return generateID(prefix, false, given) } export function descending(prefix: keyof typeof prefixes, given?: string) { return generateID(prefix, true, given) } function generateID(prefix: keyof typeof prefixes, descending: boolean, given?: string): string { if (!given) { return create(prefix, descending) } if (!given.startsWith(prefixes[prefix])) { throw new Error(`ID ${given} does not start with ${prefixes[prefix]}`) } return given } function randomBase62(length: number): string { const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" let result = "" const bytes = randomBytes(length) for (let i = 0; i < length; i++) { result += chars[bytes[i] % 62] } return result } export function create(prefix: keyof typeof prefixes, descending: boolean, timestamp?: number): string { const currentTimestamp = timestamp ?? Date.now() if (currentTimestamp !== lastTimestamp) { lastTimestamp = currentTimestamp counter = 0 } counter++ let now = BigInt(currentTimestamp) * BigInt(0x1000) + BigInt(counter) now = descending ? ~now : now const timeBytes = Buffer.alloc(6) for (let i = 0; i < 6; i++) { timeBytes[i] = Number((now >> BigInt(40 - 8 * i)) & BigInt(0xff)) } return prefixes[prefix] + "_" + timeBytes.toString("hex") + randomBase62(LENGTH - 12) } }