@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
JavaScript
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