UNPKG

@adonis-agora/agent

Version:

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

48 lines • 1.83 kB
const KIND_CODES = { approval: 'a', elicitation: 'e', proposal: 'p' }; const PREFIX = 'agora_'; export function encodeInterruptId(address) { const compact = [ KIND_CODES[address.kind], address.parked, address.stream, address.toolCallId, address.position, ]; if (address.kind === 'proposal') compact.push(address.proposalId, address.threadId); return PREFIX + Buffer.from(JSON.stringify(compact), 'utf8').toString('base64url'); } /** The address an id names, or `null` for an id this producer did not mint. */ export function decodeInterruptId(id) { if (typeof id !== 'string' || !id.startsWith(PREFIX)) return null; try { const parsed = JSON.parse(Buffer.from(id.slice(PREFIX.length), 'base64url').toString('utf8')); if (!Array.isArray(parsed)) return null; const [kind, parked, stream, toolCallId, position, proposalId, threadId] = parsed; if (parsed.length !== (kind === 'p' ? 7 : 5) || (kind === 'p' && (typeof proposalId !== 'string' || typeof threadId !== 'string')) || (kind !== 'a' && kind !== 'e' && kind !== 'p') || typeof parked !== 'string' || typeof stream !== 'string' || typeof toolCallId !== 'string' || typeof position !== 'number' || !Number.isSafeInteger(position) || position < 0) { return null; } return { kind: kind === 'a' ? 'approval' : kind === 'e' ? 'elicitation' : 'proposal', parked, stream, toolCallId, position, ...(kind === 'p' ? { proposalId: proposalId, threadId: threadId } : {}), }; } catch { return null; } } //# sourceMappingURL=interrupt-id.js.map